<?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>130019</bug_id>
          
          <creation_ts>2014-03-10 06:07:24 -0700</creation_ts>
          <short_desc>Web Inspector: Consider updating to CodeMirror 4.0</short_desc>
          <delta_ts>2014-04-14 21:32:16 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Timothy Hatcher">timothy</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>988876</commentid>
    <comment_count>0</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-03-10 06:07:24 -0700</bug_when>
    <thetext>CodeMirror 4.0 is about to be released. We should give it a try by testing and maybe updating to the release candidate.

The major new features in 4.0 are: 
 - Multiple selections (ctrl-click, alt-drag, and API functions to 
work with them) 
 - Selection undo/redo (ctrl-u to undo selection and alt-u to redo 
selection in the default keymap) 
 - A set of Sublime Text keybindings (see [4]) 
 - All modules are wrapped in AMD and CommonJS module loader shims, so 
that they play well with module loaders. When neither is present, the 
old style (global CodeMirror variable) is used. 
 - A new character measuring subsystem that is faster (especially on 
long lines) and more robust (no more problematic corner cases in 
wrapped text). 

The last point is the most interesting to me and should fix some long standing issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988877</commentid>
    <comment_count>1</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-03-10 06:07:37 -0700</bug_when>
    <thetext>https://groups.google.com/forum/#!topic/codemirror/0kbRVUsM_xo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998887</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-04-08 16:43:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/16559681&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998889</commentid>
    <comment_count>3</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-04-08 16:44:01 -0700</bug_when>
    <thetext>CodeMirror 4 has been released. We should do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000680</commentid>
    <comment_count>4</comment_count>
      <attachid>229328</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-04-14 17:32:52 -0700</bug_when>
    <thetext>Created attachment 229328
[PATCH] Proposed Fix: Update to CodeMirror 4.0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000693</commentid>
    <comment_count>5</comment_count>
      <attachid>229328</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-04-14 18:12:49 -0700</bug_when>
    <thetext>Comment on attachment 229328
[PATCH] Proposed Fix: Update to CodeMirror 4.0.

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

Looking good. Some minor issues. Also need to rebase so the patch can apply on TOT to land.

&gt; Source/WebInspectorUI/ChangeLog:219
&gt;          * Localizations/en.lproj/localizedStrings.js:
&gt;          * UserInterface/Models/DOMNode.js:
&gt;          * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
&gt; -        * UserInterface/Views/Main.css:
&gt; +        * UserInterface/Views/Main.css:
&gt;  
&gt;  2014-03-28  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
&gt;  

You should revert the edits to the old parts of the ChangeLog.

&gt; Source/WebInspectorUI/Scripts/update-codemirror-resources.rb:-46
&gt; -  mode/less/less.js

Need to remove less.js from Main.html. Not removing it from there will break the Production build. You should also test to make sure combining the resources like Production builds do still works. Especially jsmin.py still works on the new codemirror.js. Define COMBINE_INSPECTOR_RESOURCES=YES while building to trigger this. Or hack copy-user-interface-resources.pl to always do it.

&gt; Source/WebInspectorUI/UserInterface/Views/ResourceDetailsSidebarPanel.js:383
&gt; -
&gt; +

This whole file can be reverted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000708</commentid>
    <comment_count>6</comment_count>
      <attachid>229337</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-04-14 19:17:04 -0700</bug_when>
    <thetext>Created attachment 229337
[PATCH] Proposed Fix: Update to CodeMirror 4.0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000709</commentid>
    <comment_count>7</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-04-14 19:19:13 -0700</bug_when>
    <thetext>The production build seems to combine the assets correctly with the new CodeMirror.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000737</commentid>
    <comment_count>8</comment_count>
      <attachid>229337</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-14 21:32:13 -0700</bug_when>
    <thetext>Comment on attachment 229337
[PATCH] Proposed Fix: Update to CodeMirror 4.0.

Clearing flags on attachment: 229337

Committed r167294: &lt;http://trac.webkit.org/changeset/167294&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000738</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-14 21:32:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229328</attachid>
            <date>2014-04-14 17:32:52 -0700</date>
            <delta_ts>2014-04-14 19:17:04 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix: Update to CodeMirror 4.0.</desc>
            <filename>codemirror4.diff</filename>
            <type>text/plain</type>
            <size>908772</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGRkNjRlNDQuLmQxN2Y1MzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE0LTA0LTE0ICBKb25vIFdlbGxzICA8
am9ub3dlbGxzQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGVkIHRvIENvZGVNaXJyb3IgNC4w
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMDE5
CisKKyAgICAgICAgVGhlIENvZGVNaXJyb3IgNC4wIGxpYnJhcnkgYWRkcyBtdWx0aXBsZSBzZWxl
Y3Rpb25zIGFuZCB0aGUgYWJpbGl0eSB0bworICAgICAgICB1bmRvL3JlZG8gc2VsZWN0aW9ucy4g
U2VsZWN0aW9ucyBhcmUgbWFkZSBieSBob2xkaW5nIHRoZSBDb21tYW5kIChDbWQpIGtleQorICAg
ICAgICBhbmQgY2xpY2tpbmcgaW50byBhbiBlZGl0b3IsIG9yIGJ5IGhvbGRpbmcgT3B0aW9uIChB
bHQpIGFuZCBtYWtpbmcgYSBibG9jaworICAgICAgICBzZWxlY3Rpb24gZm9sbG93ZWQgYnkgZW50
ZXJpbmcgYSBjaGFyYWN0ZXIgb3IgbW92aW5nIHRoZSBjdXJzb3IuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS1jb2RlbWly
cm9yLXJlc291cmNlcy5yYjoKKyAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS1wcmV0dHktcHJpbnRl
ci5yYjoKKyAgICAgICAgVXBkYXRlZCBzY3JpcHRzIHRvIHJlZmxlY3QgdXBkYXRlZCBsb2NhdGlv
bnMgZm9yIENvZGVNaXJyb3IgZmlsZXMuCisgICAgICAgIE5vIGxvbmdlciBjb3BpZXMgTEVTUyBt
b2RlIGZpbGUgYXMgdGhpcyBoYXMgYmVlbiBpbnRlZ3JhdGVkIGludG8gQ1NTIG1vZGUKKyAgICAg
ICAgaW4gQ29kZU1pcnJvciA0LjAuCisKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9j
b2RlbWlycm9yLmNzczoKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9y
LmpzOgorICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qczoKKyAgICAgICAgKiBU
b29scy9QcmV0dHlQcmludGluZy9qYXZhc2NyaXB0LmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9qdXJlLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9zZWJyYWNrZXRzLmpzOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzczoKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qczoKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzOgorICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb21tZW50LmpzOgorICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jc3MuanM6CisgICAgICAg
ICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2h0bWxtaXhlZC5qczoKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qczoKKyAg
ICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbGl2ZXNjcmlwdC5qczoK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0
cy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivb3Zlcmxh
eS5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvcGxhY2Vo
b2xkZXIuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3J1
bm1vZGUuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3Nh
c3MuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NlYXJj
aGN1cnNvci5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Iv
c3FsLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci94bWwu
anM6CisgICAgICAgIFVwZGF0ZWQgdG8gQ29kZU1pcnJvciA0LjAuCisKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzczoKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnBy
b3RvdHlwZS4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0
RWRpdG9yLnByb3RvdHlwZS5fY3JlYXRlQ29sb3JTd2F0Y2hlcyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVKdW1w
VG9TeW1ib2xUcmFja2luZ01vZGUpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU3lu
dGF4SGlnaGxpZ2h0aW5nRGVmYXVsdFRoZW1lLmNzczoKKyAgICAgICAgVXBkYXRlZCBzdHlsZXMg
dG8gbWF0Y2ggQ29kZU1pcnJvciBjaGFuZ2VzLiBVcGRhdGVkIENTU1N0eWxlRGVjbGFyYXRpb25U
ZXh0RWRpdG9yLmpzCisgICAgICAgIHRvIG1hdGNoIENvZGVNaXJyb3IgQVBJIHVwZGF0ZXMgKGRv
Yy5yZW1vdmVMaW5lKCkgaGFzIGJlZW4gcmVtb3ZlZCwgc28KKyAgICAgICAgcmVwbGFjZVJhbmdl
KCkgaXMgdXNlZCBpbnN0ZWFkKS4gQWxzbyB0aGUgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXIgaXMg
bm93IGVuYWJsZWQgaW4gdGhlCisgICAgICAgIENTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9y
IGFuZCBTb3VyY2VDb2RlVGV4dEVkaXRvciB3aGVuIHRoZSBPcHRpb24gKEFsdCkga2V5CisgICAg
ICAgIGlzIHByZXNzZWQgaW5zdGVhZCBvZiB0aGUgQ29tbWFuZCAoQ21kKSBrZXkgc28gYXMgbm90
IHRvIGNvbmZsaWN0IHdpdGggbXVsdGlwbGUKKyAgICAgICAgY3Vyc29yIHBsYWNlbWVudCBpbiB0
aGUgQ29kZU1pcnJvciB1cGRhdGUuCisKIDIwMTQtMDQtMDUgIEJyaWFuIEouIEJ1cmcgIDxidXJn
QGNzLndhc2hpbmd0b24uZWR1PgoKICAgICAgICAgRW5hYmxlIFdFQl9SRVBMQVkgZm9yIFBMQVRG
T1JNKE1BQykKQEAgLTE1OCw3ICsyMTMsNyBAQAogICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4u
bHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKICAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVs
cy9ET01Ob2RlLmpzOgogICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvRE9NTm9kZURldGFp
bHNTaWRlYmFyUGFuZWwuanM6Ci0gICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9NYWluLmNz
czoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL01haW4uY3NzOgoKIDIwMTQtMDMtMjgg
IEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KCkBAIC03MTAsNyArNzY1LDcg
QEAKCiAgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9EYXRhR3JpZC5qczoKICAgICAgICAg
KFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQpOgotICAgICAgICBB
ZGQgbWlzc2luZyBzZW1pY29sb24uCisgICAgICAgIEFkZCBtaXNzaW5nIHNlbWljb2xvbi4KCiAy
MDE0LTAzLTEyICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgoKQEAgLTE5MDEsNyArMTk1
Niw3IEBACiAgICAgICAgIG9mIGxpbmVhciBncmFkaWVudHMsIHdlIHBhcnNlIGFsbCB2YWx1ZXMs
IHNhdmUgZm9yIGxlbmd0aHMsIGFuZCBpbiB0aGUgY2FzZSBvZiByYWRpYWwgZ3JhZGllbnRzLCB3
ZSBwcmVzZXJ2ZSB0aGUKICAgICAgICAgc2l6aW5nIGluZm9ybWF0aW9uIGFzIGEgc3RyaW5nIGFu
ZCBwYXJzZSBvbmx5IHRoZSBncmFkaWVudCBzdG9wcyBhcyB0aGUgc2l6aW5nIGluZm9ybWF0aW9u
IGlzIG9ubHkgdXNlZnVsIHRvIHNob3cKICAgICAgICAgaW4gYW4gZWRpdG9yIGlmIGF0dGFjaGVk
IHRvIGFuIGVsZW1lbnQgd2l0aCBtZXRyaWNzLgotCisKICAgICAgICAgU2luY2UgaW5zdGFuY2Vz
IG9mIEdyYWRpZW50IGFyZSB1c2VkIGFzIHRoZSAudmFsdWUgcHJvcGVydHkgb2YgQ29kZU1pcnJv
ckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIsIHdlIGltcGxlbWVudAogICAgICAgICB0aGUgcmVx
dWlyZWQgLmNvcHkoKSBhbmQgLnRvU3RyaW5nKCkgbWV0aG9kcy4gVGhlIC50b1N0cmluZygpIGlt
cGxlbWVudGF0aW9ucyBhcmUgYXdhcmUgb2YgZGVmYXVsdCB2YWx1ZXMgZm9yIGFuZ2xlcwogICAg
ICAgICBhbmQgY29sb3Igc3RvcCBvZmZzZXRzIGFuZCBvbmx5IHByaW50IHRob3NlIGFzIG5lY2Vz
c2FyeSBhbmQgdXNlIHNob3J0aGFuZHMgd2hlbiBwb3NzaWJsZS4KQEAgLTIwNDcsNyArMjEwMiw3
IEBACiAgICAgICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIu
anM6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvZGVN
aXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVyLmpzLgogICAgICAgICBOZXcgY2xhc3MgbWVhbnQg
dG8gYmUgc3ViY2xhc3NlZCBieSBhbnkgZnV0dXJlIGVkaXRpbmcgY29udHJvbGxlciwgYW5kIGFs
cmVhZHkgc3ViY2xhc3NlZCBieQogICAgICAgICBDb2RlTWlycm9yQ29sb3JFZGl0aW5nQ29udHJv
bGxlci4gVGhpcyBjbGFzcyBleHBvc2VzIHNldmVyYWwgaG9va3MgZm9yIHN1YmNsYXNzZXMgdG8g
Y3VzdG9taXplIGl0cyBiZWhhdmlvcjoKLQorCiAgICAgICAgIC5pbml0aWFsVmFsdWU6IGEgdmFs
dWUgd2UgY2FuIHJldmVydCB0byBpZiB0aGUgZWRpdGluZyBpcyBjYW5jZWxlZAogICAgICAgICAu
Y3NzQ2xhc3NOYW1lOiBhIENTUyBjbGFzcyBuYW1lIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBl
ZGl0aW5nIGNvbnRyb2xsZXIncyBjb250YWluZXIKICAgICAgICAgLnBvcG92ZXJQcmVmZXJyZWRF
ZGdlczogYSBsaXN0IG9mIHByZWZlcnJlZEVkZ2VzIGFzIHBhc3NlZCB0byBQb3BvdmVyLnByb3Rv
dHlwZS5wcmVzZW50KCkgd2l0aCBhIHNlbnNpYmxlIGRlZmF1bHQKQEAgLTIwNTYsMTEgKzIxMTEs
MTEgQEAKICAgICAgICAgLnBvcG92ZXJEaWRQcmVzZW50OiBjYWxsZWQgYXMgdGhlIHBvcG92ZXIg
anVzdCB3YXMgcHJlc2VudGVkLCB0eXBpY2FsbHkgb3ZlcnJpZGRlbiB3aGVuIGNvbnRlbnQgbmVl
ZHMgdG8gdHVuZWQgb25seSBhZnRlcgogICAgICAgICBiZWluZyBhZGRlZCB0byB0aGUgRE9NIGFu
ZCBzZXR0aW5nIG9mIHRoZSBuZWNlc3NhcnkgbWFjaGluZXJ5IHRvIHVwZGF0ZSB0aGUgc2VyaWFs
aXplZCB2YWx1ZSBpbiB0aGUgZWRpdG9yIGJhc2VkIG9uIGludGVyYWN0aW9uCiAgICAgICAgIHdp
dGhpbiB0aGUgcG9wb3ZlciB3aXRob3V0IGNoYW5naW5nIHRoZSBzZXJpYWxpemVkIHZhbHVlIHVw
b24gc2hvd2luZyB0aGUgcG9wb3ZlciB0aGUgdmVyeSBmaXJzdCB0aW1lLgotCisKICAgICAgICAg
QWRkaXRpb25hbGx5LCB0aGUgLnZhbHVlIHByb3BlcnR5IG11c3QgYmUgYW4gb2JqZWN0IHN1cHBv
cnRpbmcgLnRvU3RyaW5nKCkgYW5kIC5jb3B5KCkgbWV0aG9kLgoKICAgICAgICAgRmluYWxseSwg
dGhlIC5lZGl0aW5nQ29udHJvbGxlckRpZFN0YXJ0RWRpdGluZygpIGFuZCAuZWRpdGluZ0NvbnRy
b2xsZXJEaWRGaW5pc2hFZGl0aW5nKCkgZGVsZWdhdGUgbWV0aG9kcyBhcmUgZmlyZWQKLSAgICAg
ICAgYXMgZWRpdGluZyBiZWdpbnMgYW5kIGZpbmlzaGVzLgorICAgICAgICBhcyBlZGl0aW5nIGJl
Z2lucyBhbmQgZmluaXNoZXMuCgogICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0
aW5nQ29udHJvbGxlcik6CiAgICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckVkaXRpbmdD
b250cm9sbGVyLnByb3RvdHlwZS5nZXQgbWFya2VyKToKQEAgLTIxMDUsNyArMjE2MCw3IEBACiAg
ICAgICAgICogVXNlckludGVyZmFjZS9Ib3Zlck1lbnUuanM6CiAgICAgICAgIFdlIHJlbW92ZSB0
aGUgYXNzdW1wdGlvbiB0aGF0IGEgSG92ZXJNZW51IGlzIG9ubHkgdXNlZCB0byBkcmF3IGEgc2lu
Z2xlIHJvdW5kZWQgcmVjdCBiYXNlZCBvbiBhIHNpbXBsZQogICAgICAgICBSZWN0IGFuZCBpbnN0
ZWFkIHN1cHBvcnQgcHJlc2VudGF0aW9uIGJhc2VkIG9uIGFuIGFycmF5IG9mIFJlY3RzIHdoZXJl
IHdlIGVpdGhlcjoKLQorCiAgICAgICAgIC0gZHJhdyBhIHNpbmdsZSByb3VuZGVkIHJlY3Rhbmds
ZSBpZiB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIFJlY3QgcHJvdmlkZWQKICAgICAgICAgLSBkcmF3
IHR3byBkaXNjb25uZWN0ZWQgb3Blbi1lbmRlZCByZWN0cyBpZiB3ZSdyZSBwcm92aWRlZCB3aXRo
IHR3byBub24tb3ZlcmxhcHBpbmcgUmVjdHMKICAgICAgICAgLSBkcmF3IGEgcG9seWdvbiBzdXJy
b3VuZGluZyBhbGwgcHJvdmlkZWQgUmVjdHMgaW4gYWxsIG90aGVyIGNhc2VzCkBAIC0yNDAyLDcg
KzI0NTcsNyBAQAoKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgoKLSAgICAg
ICAgQWRkIGEgUnVudGltZU1hbmFnZXIgZXZlbnQgdGhhdCB0aGUgc2NvcGUgY2hhaW4gZGV0YWls
cyBzaWRlYmFyIGNhbgorICAgICAgICBBZGQgYSBSdW50aW1lTWFuYWdlciBldmVudCB0aGF0IHRo
ZSBzY29wZSBjaGFpbiBkZXRhaWxzIHNpZGViYXIgY2FuCiAgICAgICAgIGxpc3RlbiB0byB0byB0
cmlnZ2VyIHJlZnJlc2guCgogICAgICAgICBUZXN0aW5nIG9uIHRoaXMgaXMgYmxvY2tlZCBieSBo
dHRwOi8vd2Via2l0Lm9yZy9iLzEyODcyNApAQCAtNDA0MSw3ICs0MDk2LDcgQEAKCiAgICAgICAg
ICogVXNlckludGVyZmFjZS9EZWJ1Z2dlclNpZGViYXJQYW5lbC5qczoKICAgICAgICAgKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlclNpZGViYXJQYW5lbC5wcm90b3R5cGUucmVzdG9yZVN0YXRlRnJvbUNv
b2tpZSk6Ci0gICAgICAgIERyaXZlLWJ5IGZpeCB0byBwYXNzIGFsb25nIHJlbGF4ZWRNYXRjaERl
bGF5IHRvIHRoZSBzdXBlcmNsYXNzLgorICAgICAgICBEcml2ZS1ieSBmaXggdG8gcGFzcyBhbG9u
ZyByZWxheGVkTWF0Y2hEZWxheSB0byB0aGUgc3VwZXJjbGFzcy4KCiAgICAgICAgICogVXNlcklu
dGVyZmFjZS9NYWluLmpzOgogICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CkBAIC01MjM5
LDcgKzUyOTQsNyBAQAogICAgICAgICBTdG9wIHVzaW5nIF9fbWFya2VkQ29sb3IgdG8gaWRlbnRp
ZnkgYSBjb2xvciBtYXJrZXIgYW5kIGluc3RlYWQgdXNlIHRoZSB0eXBlIG9uIHRoZSBtYXRjaGlu
ZwogICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dE1hcmtlci4gQWRkaXRpb25hbGx5LCBjcmVhdGUg
YSBXZWJJbnNwZWN0b3IuVGV4dE1hcmtlciB3aXRoIHR5cGUKICAgICAgICAgV2ViSW5zcGVjdG9y
LlRleHRNYXJrZXIuVHlwZS5Db2xvciBpbiBjcmVhdGVDb2xvck1hcmtlcnMoKS4KLQorCiAgICAg
ICAgICogVXNlckludGVyZmFjZS9Db2RlTWlycm9yQ29sb3JFZGl0aW5nQ29udHJvbGxlci5qczoK
ICAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29sb3JFZGl0aW5nQ29udHJvbGxlcik6
CiAgICAgICAgIFVzZSBhIFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UgdG8gdHJhY2sgdGhlIGVkaXRl
ZCByYW5nZSBhbmQgb2J0YWluIGl0IGRpcmVjdGx5IGZyb20gdGhlCkBAIC01NTk4LDcgKzU2NTMs
NyBAQAogICAgICAgICB0byByZXRyaWV2ZSBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHN0
cnVjdHVyZToKICAgICAgICAgewogICAgICAgICAgICAgICJyZWdpb25GbG93IjogPFJlZmVyZW5j
ZSB0byB0aGUgQ29udGVudEZsb3cgb2JqZWN0IHJlZmVyZW5jZWQgYnkgdGhlIC13ZWJraXQtZmxv
dy1mcm9tIHByb3BlcnR5IG9mIHRoZSBub2RlPiwKLSAgICAgICAgICAgICAiY29udGVudEZsb3ci
OiA8UmVmZXJlbmNlIHRvIHRoZSBDb250ZW50RmxvdyBvYmplY3QgcmVmZXJlbmNlZCBieSB0aGUg
LXdlYmtpdC1mbG93LWludG8gcHJvcGVydHkgb2YKKyAgICAgICAgICAgICAiY29udGVudEZsb3ci
OiA8UmVmZXJlbmNlIHRvIHRoZSBDb250ZW50RmxvdyBvYmplY3QgcmVmZXJlbmNlZCBieSB0aGUg
LXdlYmtpdC1mbG93LWludG8gcHJvcGVydHkgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhlIG5vZGUgb3IgYSBwYXJlbnQgb2YgdGhlIG5vZGU+LAogICAgICAgICAgICAgICJyZWdp
b25zIjogWyBsaXN0IG9mIERPTU5vZGVzIHJlcHJlc2VudGluZyB0aGUgcmVnaW9ucyBjb250YWlu
ZXJzIG9mIHRoZSBub2RlLiBUaGUgbm9kZSBpcyBzcGxpdCBhY3Jvc3MgYWxsIHRoZXNlIHJlZ2lv
bnMuIF0KICAgICAgICAgfQpAQCAtNjAyNCw3ICs2MDc5LDcgQEAKCiAgICAgICAgIEF1dG9tYXRp
Y2FsbHkgZGlzcGF0Y2ggYSBjb250ZXh0bWVudSBldmVudCBpbiBjYXNlIFdlYkluc3BlY3Rvci5D
b250ZXh0TWVudS5wcm90b3R5cGUuc2hvdygpCiAgICAgICAgIGlzIGNhbGxlZCBvdXRzaWRlIG9m
IGEgY29udGV4dG1lbnUgZXZlbnQgaGFuZGxlciBhbmQgd291bGQgdGhlcmVmb3JlIG5vdCBzaG93
IHRoZSBleHBlY3RlZAotICAgICAgICBjb250ZXh0IG1lbnUgKGV4Y2VwdCBpbiB0aGUgUmVtb3Rl
IFdlYiBJbnNwZWN0b3Igd2hlcmUgdGhpcyBhbHJlYWR5IHdvcmtzKS4KKyAgICAgICAgY29udGV4
dCBtZW51IChleGNlcHQgaW4gdGhlIFJlbW90ZSBXZWIgSW5zcGVjdG9yIHdoZXJlIHRoaXMgYWxy
ZWFkeSB3b3JrcykuCgogICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udGV4dE1lbnUuanM6CiAg
ICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUucHJvdG90eXBlLnNob3cpOgpAQCAtNjI3
Nyw3ICs2MzMyLDcgQEAKICAgICAgICAgdGhlIGFycm93IHdpdGhpbiB0aGUgY2VudGVyIG9mIHRo
ZSBhdHRhY2htZW50IGVkZ2UsIHdlIGdldCBpbiBzaXR1YXRpb25zIHdoZXJlIHdlIG1heQogICAg
ICAgICBzaHJpbmsgdGhlIHBvcG92ZXIgaW5zdGVhZCBvZiBzaGlmdGluZyBpdCB0byBmaXQgd2l0
aGluIHRoZSBjb250YWluZXIgZnJhbWUuIFdlIG5vdyBmaXJzdAogICAgICAgICBzaGlmdCB0aGUg
cHJlZmVycmVkIGZyYW1lIGJlZm9yZSBnZXR0aW5nIGl0cyBpbnRlcnNlY3Rpb24gd2l0aCB0aGUg
Y29udGFpbmVyIGZyYW1lIHRvCi0gICAgICAgIGF2b2lkIHN1Y2ggc2l0dWF0aW9ucy4KKyAgICAg
ICAgYXZvaWQgc3VjaCBzaXR1YXRpb25zLgoKICAgICAgICAgKiBVc2VySW50ZXJmYWNlL1BvcG92
ZXIuanM6CiAgICAgICAgIChXZWJJbnNwZWN0b3IuUG9wb3Zlci5wcm90b3R5cGUuX2Jlc3RNZXRy
aWNzRm9yRWRnZSk6CkBAIC02NDQ2LDcgKzY1MDEsNyBAQAoKIDIwMTMtMTEtMDYgIFRpbW90aHkg
SGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgoKLSAgICAgICAgRml4IHRoZSBkaXNwbGF5IG9m
IHF1ZXJ5IHBhcmFtZXRlcnMgd2hlbiB0aGUgdmFsdWUgaXMgbWlzc2luZy4KKyAgICAgICAgRml4
IHRoZSBkaXNwbGF5IG9mIHF1ZXJ5IHBhcmFtZXRlcnMgd2hlbiB0aGUgdmFsdWUgaXMgbWlzc2lu
Zy4KCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM5
MjAKCkBAIC02NjczLDcgKzY3MjgsNyBAQAoKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBI
YXRjaGVyLgoKLSAgICAgICAgTW92ZWQgc29tZSBnbG9iYWwgZnVuY3Rpb25zIG91dCBvZiBNYWlu
LmpzLCBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgaW4gdGhlCisgICAgICAgIE1vdmVkIHNvbWUg
Z2xvYmFsIGZ1bmN0aW9ucyBvdXQgb2YgTWFpbi5qcywgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2Vk
IGluIHRoZQogICAgICAgICBsYXlvdXQgdGVzdHMgd2l0aG91dCBpbmNsdWRpbmcgTWFpbi5qcy4K
CiAgICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6IFJlZmVyZW5jZWQgdGhlIG5ldyBK
UyBmaWxlcy4KQEAgLTcwNzUsNyArNzEzMCw3IEBACiAgICAgICAgIENTU1N0eWxlRGVjbGFyYXRp
b25UZXh0RWRpdG9yIHdoZW4gdGhlIENtZCBrZXkgaXMgcHJlc3NlZCBhbmQgaW4gdGhlIFNvdXJj
ZUNvZGVUZXh0RWRpdG9yCiAgICAgICAgIHdoZW4gZWl0aGVyIHRoZSBDbWQga2V5IGlzIHByZXNz
ZWQgKE5vblN5bWJvbFRva2VucyBtb2RlKSBvciB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBwYXVzZWQK
ICAgICAgICAgKEphdmFTY3JpcHRFeHByZXNzaW9uIG1vZGUpLgotCisKICAgICAgICAgVGhlIHRv
a2VuVHJhY2tpbmdDb250cm9sbGVyIGlzIG5vdyBzbWFydGVyIGFib3V0IGhvdyBpdCB0cmFja3Mg
bW91c2UgZXZlbnRzIHdoZW4gaXQncyBlbmFibGVkLAogICAgICAgICB0cmFja2luZyAibW91c2Vl
bnRlciIgYW5kICJtb3VzZWxlYXZlIiBldmVudHMgdG8gZW5hYmxlIHRyYWNraW5nIGFsbG93aW5n
IGltbWVkaWF0ZSBkZXRlY3Rpb24gb2YKICAgICAgICAgdG9rZW5zIGJlaW5nIGhvdmVyZWQgb3Ig
bm8gbG9uZ2VyIGJlaW5nIGhvdmVyZWQgZXZlbiB3aXRoIHF1aWNrIG1vdXNlIG1vdmVtZW50cy4g
QWRkaXRpb2FubGx5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMv
dXBkYXRlLWNvZGVtaXJyb3ItcmVzb3VyY2VzLnJiIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Nj
cmlwdHMvdXBkYXRlLWNvZGVtaXJyb3ItcmVzb3VyY2VzLnJiCmluZGV4IDYwODYwMzAuLmU3NWI5
ZGIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL3VwZGF0ZS1jb2Rl
bWlycm9yLXJlc291cmNlcy5yYgorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy91
cGRhdGUtY29kZW1pcnJvci1yZXNvdXJjZXMucmIKQEAgLTQzLDcgKzQzLDYgQEAgQ09ERV9NSVJS
T1JfRklMRVNfVE9fQ09QWSA9ICV3KAogICBtb2RlL2Nzcy9jc3MuanMKICAgbW9kZS9odG1sbWl4
ZWQvaHRtbG1peGVkLmpzCiAgIG1vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzCi0gIG1vZGUv
bGVzcy9sZXNzLmpzCiAgIG1vZGUvbGl2ZXNjcmlwdC9saXZlc2NyaXB0LmpzCiAgIG1vZGUvc2Fz
cy9zYXNzLmpzCiAgIG1vZGUvc3FsL3NxbC5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1NjcmlwdHMvdXBkYXRlLXByZXR0eS1wcmludGVyLnJiIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1NjcmlwdHMvdXBkYXRlLXByZXR0eS1wcmludGVyLnJiCmluZGV4IGQwOTFlMGQuLmZi
NzYyNDEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL3VwZGF0ZS1w
cmV0dHktcHJpbnRlci5yYgorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy91cGRh
dGUtcHJldHR5LXByaW50ZXIucmIKQEAgLTIzLDIxICsyMywyMSBAQCBlbmQKCiAjIENvcHkgdGhl
IGZvcm1hdHRlciBhbmQgQ29kZU1pcnJvciBmaWxlcyBmcm9tIFVzZXJJbnRlcmZhY2UgdG8gVG9v
bHMuCiBVU0VSX0lOVEVSRkFDRV9UT19UT09MU19NQVAgPSB7Ci0gICJVc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzIiAgICA9PiAiVG9vbHMvUHJldHR5UHJp
bnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMiLAorICAiVXNlckludGVyZmFjZS9WaWV3cy9D
b2RlTWlycm9yRm9ybWF0dGVycy5qcyIgICAgICAgICAgPT4gIlRvb2xzL1ByZXR0eVByaW50aW5n
L0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzIiwKICAgIlVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
Rm9ybWF0dGVyLmpzIiAgICAgICAgICAgICAgID0+ICJUb29scy9QcmV0dHlQcmludGluZy9Gb3Jt
YXR0ZXIuanMiLAogICAiVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJDb250ZW50
QnVpbGRlci5qcyIgPT4gIlRvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWls
ZGVyLmpzIiwKCi0gICJVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJv
ci5jc3MiID0+ICJUb29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmNzcyIsCi0gICJVc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qcyIgID0+ICJUb29scy9Q
cmV0dHlQcmludGluZy9jb2RlbWlycm9yLmpzIiwKLSAgIlVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
Q29kZU1pcnJvci9qYXZhc2NyaXB0LmpzIiAgPT4gIlRvb2xzL1ByZXR0eVByaW50aW5nL2phdmFz
Y3JpcHQuanMiLAotICAiVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qcyIg
ICAgICAgICA9PiAiVG9vbHMvUHJldHR5UHJpbnRpbmcvY3NzLmpzIiwKKyAgIlVzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzcyIgICAgID0+ICJUb29scy9QcmV0
dHlQcmludGluZy9jb2RlbWlycm9yLmNzcyIsCisgICJVc2VySW50ZXJmYWNlL0V4dGVybmFsL0Nv
ZGVNaXJyb3IvY29kZW1pcnJvci5qcyIgICAgICA9PiAiVG9vbHMvUHJldHR5UHJpbnRpbmcvY29k
ZW1pcnJvci5qcyIsCisgICJVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNj
cmlwdC5qcyIgICAgICA9PiAiVG9vbHMvUHJldHR5UHJpbnRpbmcvamF2YXNjcmlwdC5qcyIsCisg
ICJVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzIiAgICAgICAgICAgICA9
PiAiVG9vbHMvUHJldHR5UHJpbnRpbmcvY3NzLmpzIiwKIH0KCiAjIENvcHkgb25seSB0aGUgZm9y
bWF0dGVyIGZpbGVzIGZyb20gVG9vbHMgdG8gVXNlckludGVyZmFjZS4KIFRPT0xTX1RPX1VTRVJf
SU5URVJGQUNFX01BUCA9IHsKLSAgIlRvb2xzL1ByZXR0eVByaW50aW5nL0NvZGVNaXJyb3JGb3Jt
YXR0ZXJzLmpzIiAgICA9PiAiVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yRm9y
bWF0dGVycy5qcyIsCi0gICJUb29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXIuanMiICAgICAg
ICAgICAgICAgPT4gIlVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyLmpzIiwKLSAg
IlRvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzIiA9PiAiVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcyIKKyAgIlRv
b2xzL1ByZXR0eVByaW50aW5nL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzIiAgICAgICAgID0+ICJV
c2VySW50ZXJmYWNlL1ZpZXdzL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzIiwKKyAgIlRvb2xzL1By
ZXR0eVByaW50aW5nL0Zvcm1hdHRlci5qcyIgICAgICAgICAgICAgICAgICAgID0+ICJVc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlci5qcyIsCisgICJUb29scy9QcmV0dHlQcmludGlu
Zy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcyIgICAgICA9PiAiVXNlckludGVyZmFjZS9Db250
cm9sbGVycy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcyIKIH0KCiB3ZWJfaW5zcGVjdG9yX3Bh
dGggPSBGaWxlLmV4cGFuZF9wYXRoIEZpbGUuam9pbihGaWxlLmRpcm5hbWUoX19GSUxFX18pLCAi
Li4iKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50
aW5nL2NvZGVtaXJyb3IuY3NzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVBy
aW50aW5nL2NvZGVtaXJyb3IuY3NzCmluZGV4IDIzZWFmNzQuLjA5OGEzMTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmNz
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1p
cnJvci5jc3MKQEAgLTM2LDEzICszNiwxNCBAQAogICBtaW4td2lkdGg6IDIwcHg7CiAgIHRleHQt
YWxpZ246IHJpZ2h0OwogICBjb2xvcjogIzk5OTsKKyAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50
LWJveDsKKyAgYm94LXNpemluZzogY29udGVudC1ib3g7CiB9CgogLyogQ1VSU09SICovCgogLkNv
ZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xp
ZCBibGFjazsKLSAgei1pbmRleDogMzsKIH0KIC8qIFNob3duIHdoZW4gbW92aW5nIGluIGJpLWRp
cmVjdGlvbmFsIHRleHQgKi8KIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1
cnNvciB7CkBAIC01MiwyNCArNTMsMjkgQEAKICAgd2lkdGg6IGF1dG87CiAgIGJvcmRlcjogMDsK
ICAgYmFja2dyb3VuZDogIzdlNzsKLSAgei1pbmRleDogMTsKIH0KIC8qIENhbiBzdHlsZSBjdXJz
b3IgZGlmZmVyZW50IGluIG92ZXJ3cml0ZSAobm9uLWluc2VydCkgbW9kZSAqLwotLkNvZGVNaXJy
b3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHt9CitkaXYuQ29k
ZU1pcnJvci1vdmVyd3JpdGUgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHt9CgogLmNtLXRhYiB7IGRp
c3BsYXk6IGlubGluZS1ibG9jazsgfQoKKy5Db2RlTWlycm9yLXJ1bGVyIHsKKyAgYm9yZGVyLWxl
ZnQ6IDFweCBzb2xpZCAjY2NjOworICBwb3NpdGlvbjogYWJzb2x1dGU7Cit9CisKIC8qIERFRkFV
TFQgVEhFTUUgKi8KCiAuY20tcy1kZWZhdWx0IC5jbS1rZXl3b3JkIHtjb2xvcjogIzcwODt9CiAu
Y20tcy1kZWZhdWx0IC5jbS1hdG9tIHtjb2xvcjogIzIxOTt9CiAuY20tcy1kZWZhdWx0IC5jbS1u
dW1iZXIge2NvbG9yOiAjMTY0O30KIC5jbS1zLWRlZmF1bHQgLmNtLWRlZiB7Y29sb3I6ICMwMGY7
fQotLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUge2NvbG9yOiBibGFjazt9CisuY20tcy1kZWZh
dWx0IC5jbS12YXJpYWJsZSwKKy5jbS1zLWRlZmF1bHQgLmNtLXB1bmN0dWF0aW9uLAorLmNtLXMt
ZGVmYXVsdCAuY20tcHJvcGVydHksCisuY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7fQogLmNt
LXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7Y29sb3I6ICMwNWE7fQogLmNtLXMtZGVmYXVsdCAu
Y20tdmFyaWFibGUtMyB7Y29sb3I6ICMwODU7fQotLmNtLXMtZGVmYXVsdCAuY20tcHJvcGVydHkg
e2NvbG9yOiBibGFjazt9Ci0uY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7Y29sb3I6IGJsYWNr
O30KIC5jbS1zLWRlZmF1bHQgLmNtLWNvbW1lbnQge2NvbG9yOiAjYTUwO30KIC5jbS1zLWRlZmF1
bHQgLmNtLXN0cmluZyB7Y29sb3I6ICNhMTE7fQogLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nLTIg
e2NvbG9yOiAjZjUwO30KQEAgLTExNCw3ICsxMjAsNyBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNv
ZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiAgIC8qIDMwcHggaXMg
dGhlIG1hZ2ljIG1hcmdpbiB1c2VkIHRvIGhpZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJh
cnMgKi8KICAgLyogU2VlIG92ZXJmbG93OiBoaWRkZW4gaW4gLkNvZGVNaXJyb3IgKi8KICAgbWFy
Z2luLWJvdHRvbTogLTMwcHg7IG1hcmdpbi1yaWdodDogLTMwcHg7Ci0gIHBhZGRpbmctYm90dG9t
OiAzMHB4OyBwYWRkaW5nLXJpZ2h0OiAzMHB4OworICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAg
aGVpZ2h0OiAxMDAlOwogICBvdXRsaW5lOiBub25lOyAvKiBQcmV2ZW50IGRyYWdnaW5nIGZyb20g
aGlnaGxpZ2h0aW5nIHRoZSBlbGVtZW50ICovCiAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKQEAgLTEy
Myw2ICsxMjksOSBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdi
cmFja2V0IHtjb2xvcjogI2YyMjt9CiB9CiAuQ29kZU1pcnJvci1zaXplciB7CiAgIHBvc2l0aW9u
OiByZWxhdGl2ZTsKKyAgYm9yZGVyLXJpZ2h0OiAzMHB4IHNvbGlkIHRyYW5zcGFyZW50OworICAt
bW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OworICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsK
IH0KCiAvKiBUaGUgZmFrZSwgdmlzaWJsZSBzY3JvbGxiYXJzLiBVc2VkIHRvIGZvcmNlIHJlZHJh
dyBkdXJpbmcgc2Nyb2xsaW5nCkBAIC0xOTcsMTYgKzIwNiw3IEBAIGRpdi5Db2RlTWlycm9yIHNw
YW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KICAgd2hpdGUt
c3BhY2U6IHByZS13cmFwOwogICB3b3JkLWJyZWFrOiBub3JtYWw7CiB9Ci0uQ29kZU1pcnJvci1j
b2RlIHByZSB7Ci0gIGJvcmRlci1yaWdodDogMzBweCBzb2xpZCB0cmFuc3BhcmVudDsKLSAgd2lk
dGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7Ci0gIHdpZHRoOiAtbW96LWZpdC1jb250ZW50OwotICB3
aWR0aDogZml0LWNvbnRlbnQ7Ci19Ci0uQ29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLWNvZGUg
cHJlIHsKLSAgYm9yZGVyLXJpZ2h0OiBub25lOwotICB3aWR0aDogYXV0bzsKLX0KKwogLkNvZGVN
aXJyb3ItbGluZWJhY2tncm91bmQgewogICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgIGxlZnQ6IDA7
IHJpZ2h0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDsKQEAgLTIzNiwxNiArMjM2LDIyIEBAIGRpdi5D
b2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIy
O30KCiAuQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICBwb3NpdGlvbjogYWJz
b2x1dGU7Ci0gIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICB3
aWR0aDogMDsKIH0KLS5Db2RlTWlycm9yLWZvY3VzZWQgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsK
KworZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7CisgIHZpc2liaWxpdHk6IGhpZGRlbjsKKyAgcG9z
aXRpb246IHJlbGF0aXZlOworICB6LWluZGV4OiAxOworfQorLkNvZGVNaXJyb3ItZm9jdXNlZCBk
aXYuQ29kZU1pcnJvci1jdXJzb3JzIHsKICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKIH0KCiAuQ29k
ZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0KIC5Db2RlTWlycm9yLWZv
Y3VzZWQgLkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9CisuQ29k
ZU1pcnJvci1jcm9zc2hhaXIgeyBjdXJzb3I6IGNyb3NzaGFpcjsgfQoKIC5jbS1zZWFyY2hpbmcg
ewogICBiYWNrZ3JvdW5kOiAjZmZhOwpAQCAtMjU1LDkgKzI2MSwxMiBAQCBkaXYuQ29kZU1pcnJv
ciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiAvKiBJ
RTcgaGFjayB0byBwcmV2ZW50IGl0IGZyb20gcmV0dXJuaW5nIGZ1bm55IG9mZnNldFRvcHMgb24g
dGhlIHNwYW5zICovCiAuQ29kZU1pcnJvciBzcGFuIHsgKnZlcnRpY2FsLWFsaWduOiB0ZXh0LWJv
dHRvbTsgfQoKKy8qIFVzZWQgdG8gZm9yY2UgYSBib3JkZXIgbW9kZWwgZm9yIGEgbm9kZSAqLwor
LmNtLWZvcmNlLWJvcmRlciB7IHBhZGRpbmctcmlnaHQ6IC4xcHg7IH0KKwogQG1lZGlhIHByaW50
IHsKICAgLyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KLSAgLkNvZGVNaXJyb3Ig
ZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKKyAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vy
c29ycyB7CiAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmpzCmlu
ZGV4IDQ2MzczYmYuLjFhNzBjZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9U
b29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmpzCkBAIC0xLDIzICsxLDM2IEBA
Ci0vLyBDb2RlTWlycm9yIGlzIHRoZSBvbmx5IGdsb2JhbCB2YXIgd2UgY2xhaW0KLXdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgeworLy8gVGhpcyBpcyBDb2RlTWlycm9yIChodHRwOi8v
Y29kZW1pcnJvci5uZXQpLCBhIGNvZGUgZWRpdG9yCisvLyBpbXBsZW1lbnRlZCBpbiBKYXZhU2Ny
aXB0IG9uIHRvcCBvZiB0aGUgYnJvd3NlcidzIERPTS4KKy8vCisvLyBZb3UgY2FuIGZpbmQgc29t
ZSB0ZWNobmljYWwgYmFja2dyb3VuZCBmb3Igc29tZSBvZiB0aGUgY29kZSBiZWxvdworLy8gYXQg
aHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9ibG9nLyNjbS1pbnRlcm5hbHMgLgorCisoZnVuY3Rp
b24obW9kKSB7CisgIGlmICh0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9k
dWxlID09ICJvYmplY3QiKSAvLyBDb21tb25KUworICAgIG1vZHVsZS5leHBvcnRzID0gbW9kKCk7
CisgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAv
LyBBTUQKKyAgICByZXR1cm4gZGVmaW5lKFtdLCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dz
ZXIgZW52CisgICAgdGhpcy5Db2RlTWlycm9yID0gbW9kKCk7Cit9KShmdW5jdGlvbigpIHsKICAg
InVzZSBzdHJpY3QiOwoKICAgLy8gQlJPV1NFUiBTTklGRklORwoKLSAgLy8gQ3J1ZGUsIGJ1dCBu
ZWNlc3NhcnkgdG8gaGFuZGxlIGEgbnVtYmVyIG9mIGhhcmQtdG8tZmVhdHVyZS1kZXRlY3QKLSAg
Ly8gYnVncyBhbmQgYmVoYXZpb3IgZGlmZmVyZW5jZXMuCisgIC8vIEtsdWRnZXMgZm9yIGJ1Z3Mg
YW5kIGJlaGF2aW9yIGRpZmZlcmVuY2VzIHRoYXQgY2FuJ3QgYmUgZmVhdHVyZQorICAvLyBkZXRl
Y3RlZCBhcmUgZW5hYmxlZCBiYXNlZCBvbiB1c2VyQWdlbnQgZXRjIHNuaWZmaW5nLgorCiAgIHZh
ciBnZWNrbyA9IC9nZWNrb1wvXGQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICAvLyBJ
RTExIGN1cnJlbnRseSBkb2Vzbid0IGNvdW50IGFzICdpZScsIHNpbmNlIGl0IGhhcyBhbG1vc3Qg
bm9uZSBvZgotICAvLyB0aGUgc2FtZSBidWdzIGFzIGVhcmxpZXIgdmVyc2lvbnMuIFVzZSBpZV9n
dDEwIHRvIGhhbmRsZQotICAvLyBpbmNvbXBhdGliaWxpdGllcyBpbiB0aGF0IHZlcnNpb24uCi0g
IHZhciBpZSA9IC9NU0lFIFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgaWVf
bHQ4ID0gaWUgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50LmRv
Y3VtZW50TW9kZSA8IDgpOwotICB2YXIgaWVfbHQ5ID0gaWUgJiYgKGRvY3VtZW50LmRvY3VtZW50
TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDkpOwotICB2YXIgaWVfZ3Qx
MCA9IC9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQp
OworICAvLyBpZV91cHRvTiBtZWFucyBJbnRlcm5ldCBFeHBsb3JlciB2ZXJzaW9uIE4gb3IgbG93
ZXIKKyAgdmFyIGllX3VwdG8xMCA9IC9NU0lFIFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQp
OworICB2YXIgaWVfdXB0bzcgPSBpZV91cHRvMTAgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9
PSBudWxsIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDgpOworICB2YXIgaWVfdXB0bzggPSBp
ZV91cHRvMTAgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50LmRv
Y3VtZW50TW9kZSA8IDkpOworICB2YXIgaWVfdXB0bzkgPSBpZV91cHRvMTAgJiYgKGRvY3VtZW50
LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDEwKTsKKyAg
dmFyIGllXzExdXAgPSAvVHJpZGVudFwvKFs3LTldfFxkezIsfSlcLi8udGVzdChuYXZpZ2F0b3Iu
dXNlckFnZW50KTsKKyAgdmFyIGllID0gaWVfdXB0bzEwIHx8IGllXzExdXA7CiAgIHZhciB3ZWJr
aXQgPSAvV2ViS2l0XC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgIHZhciBxdHdlYmtp
dCA9IHdlYmtpdCAmJiAvUXRcL1xkK1wuXGQrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwog
ICB2YXIgY2hyb21lID0gL0Nocm9tZVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2
YXIgb3BlcmEgPSAvT3BlcmFcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKKyAgdmFyIHBy
ZXN0byA9IC9PcGVyYVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogICB2YXIgc2FmYXJp
ID0gL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpOwogICB2YXIga2h0bWwg
PSAvS0hUTUxcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICAgdmFyIG1hY19nZUxpb24g
PSAvTWFjIE9TIFggMVxkXEQoWzctOV18XGRcZClcRC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50
KTsKQEAgLTMwLDE1MSArNDMsMTgxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICB2YXIgbWFjID0gaW9zIHx8IC9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTsKICAg
dmFyIHdpbmRvd3MgPSAvd2luL2kudGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pOwoKLSAgdmFyIG9w
ZXJhX3ZlcnNpb24gPSBvcGVyYSAmJiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9WZXJzaW9u
XC8oXGQqXC5cZCopLyk7Ci0gIGlmIChvcGVyYV92ZXJzaW9uKSBvcGVyYV92ZXJzaW9uID0gTnVt
YmVyKG9wZXJhX3ZlcnNpb25bMV0pOwotICBpZiAob3BlcmFfdmVyc2lvbiAmJiBvcGVyYV92ZXJz
aW9uID49IDE1KSB7IG9wZXJhID0gZmFsc2U7IHdlYmtpdCA9IHRydWU7IH0KKyAgdmFyIHByZXN0
b192ZXJzaW9uID0gcHJlc3RvICYmIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25c
LyhcZCpcLlxkKikvKTsKKyAgaWYgKHByZXN0b192ZXJzaW9uKSBwcmVzdG9fdmVyc2lvbiA9IE51
bWJlcihwcmVzdG9fdmVyc2lvblsxXSk7CisgIGlmIChwcmVzdG9fdmVyc2lvbiAmJiBwcmVzdG9f
dmVyc2lvbiA+PSAxNSkgeyBwcmVzdG8gPSBmYWxzZTsgd2Via2l0ID0gdHJ1ZTsgfQogICAvLyBT
b21lIGJyb3dzZXJzIHVzZSB0aGUgd3JvbmcgZXZlbnQgcHJvcGVydGllcyB0byBzaWduYWwgY21k
L2N0cmwgb24gT1MgWAotICB2YXIgZmxpcEN0cmxDbWQgPSBtYWMgJiYgKHF0d2Via2l0IHx8IG9w
ZXJhICYmIChvcGVyYV92ZXJzaW9uID09IG51bGwgfHwgb3BlcmFfdmVyc2lvbiA8IDEyLjExKSk7
Ci0gIHZhciBjYXB0dXJlTWlkZGxlQ2xpY2sgPSBnZWNrbyB8fCAoaWUgJiYgIWllX2x0OSk7Cisg
IHZhciBmbGlwQ3RybENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwgcHJlc3RvICYmIChwcmVzdG9f
dmVyc2lvbiA9PSBudWxsIHx8IHByZXN0b192ZXJzaW9uIDwgMTIuMTEpKTsKKyAgdmFyIGNhcHR1
cmVSaWdodENsaWNrID0gZ2Vja28gfHwgKGllICYmICFpZV91cHRvOCk7CgotICAvLyBPcHRpbWl6
ZSBzb21lIGNvZGUgd2hlbiB0aGVzZSBmZWF0dXJlcyBhcmUgbm90IHVzZWQKKyAgLy8gT3B0aW1p
emUgc29tZSBjb2RlIHdoZW4gdGhlc2UgZmVhdHVyZXMgYXJlIG5vdCB1c2VkLgogICB2YXIgc2F3
UmVhZE9ubHlTcGFucyA9IGZhbHNlLCBzYXdDb2xsYXBzZWRTcGFucyA9IGZhbHNlOwoKLSAgLy8g
Q09OU1RSVUNUT1IKKyAgLy8gRURJVE9SIENPTlNUUlVDVE9SCisKKyAgLy8gQSBDb2RlTWlycm9y
IGluc3RhbmNlIHJlcHJlc2VudHMgYW4gZWRpdG9yLiBUaGlzIGlzIHRoZSBvYmplY3QKKyAgLy8g
dGhhdCB1c2VyIGNvZGUgaXMgdXN1YWxseSBkZWFsaW5nIHdpdGguCgogICBmdW5jdGlvbiBDb2Rl
TWlycm9yKHBsYWNlLCBvcHRpb25zKSB7CiAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvZGVN
aXJyb3IpKSByZXR1cm4gbmV3IENvZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpOwoKICAgICB0aGlz
Lm9wdGlvbnMgPSBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAvLyBEZXRlcm1pbmUgZWZm
ZWN0aXZlIG9wdGlvbnMgYmFzZWQgb24gZ2l2ZW4gdmFsdWVzIGFuZCBkZWZhdWx0cy4KLSAgICBm
b3IgKHZhciBvcHQgaW4gZGVmYXVsdHMpIGlmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQp
ICYmIGRlZmF1bHRzLmhhc093blByb3BlcnR5KG9wdCkpCi0gICAgICBvcHRpb25zW29wdF0gPSBk
ZWZhdWx0c1tvcHRdOworICAgIGNvcHlPYmooZGVmYXVsdHMsIG9wdGlvbnMsIGZhbHNlKTsKICAg
ICBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMob3B0aW9ucyk7CgotICAgIHZhciBkb2NTdGFydCA9
IHR5cGVvZiBvcHRpb25zLnZhbHVlID09ICJzdHJpbmciID8gMCA6IG9wdGlvbnMudmFsdWUuZmly
c3Q7Ci0gICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXkgPSBtYWtlRGlzcGxheShwbGFjZSwg
ZG9jU3RhcnQpOworICAgIHZhciBkb2MgPSBvcHRpb25zLnZhbHVlOworICAgIGlmICh0eXBlb2Yg
ZG9jID09ICJzdHJpbmciKSBkb2MgPSBuZXcgRG9jKGRvYywgb3B0aW9ucy5tb2RlKTsKKyAgICB0
aGlzLmRvYyA9IGRvYzsKKworICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5ID0gbmV3IERp
c3BsYXkocGxhY2UsIGRvYyk7CiAgICAgZGlzcGxheS53cmFwcGVyLkNvZGVNaXJyb3IgPSB0aGlz
OwogICAgIHVwZGF0ZUd1dHRlcnModGhpcyk7Ci0gICAgaWYgKG9wdGlvbnMuYXV0b2ZvY3VzICYm
ICFtb2JpbGUpIGZvY3VzSW5wdXQodGhpcyk7Ci0KLSAgICB0aGlzLnN0YXRlID0ge2tleU1hcHM6
IFtdLAotICAgICAgICAgICAgICAgICAgb3ZlcmxheXM6IFtdLAotICAgICAgICAgICAgICAgICAg
bW9kZUdlbjogMCwKLSAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZTogZmFsc2UsIGZvY3VzZWQ6
IGZhbHNlLAotICAgICAgICAgICAgICAgICAgc3VwcHJlc3NFZGl0czogZmFsc2UsIHBhc3RlSW5j
b21pbmc6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdUZXh0OiBmYWxzZSwKLSAg
ICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogbmV3IERlbGF5ZWQoKX07Ci0KICAgICB0aGVtZUNo
YW5nZWQodGhpcyk7CiAgICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKQogICAgICAgdGhpcy5k
aXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci13cmFwIjsKKyAgICBpZiAo
b3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkgZm9jdXNJbnB1dCh0aGlzKTsKCi0gICAgdmFy
IGRvYyA9IG9wdGlvbnMudmFsdWU7Ci0gICAgaWYgKHR5cGVvZiBkb2MgPT0gInN0cmluZyIpIGRv
YyA9IG5ldyBEb2Mob3B0aW9ucy52YWx1ZSwgb3B0aW9ucy5tb2RlKTsKLSAgICBvcGVyYXRpb24o
dGhpcywgYXR0YWNoRG9jKSh0aGlzLCBkb2MpOworICAgIHRoaXMuc3RhdGUgPSB7CisgICAgICBr
ZXlNYXBzOiBbXSwgIC8vIHN0b3JlcyBtYXBzIGFkZGVkIGJ5IGFkZEtleU1hcAorICAgICAgb3Zl
cmxheXM6IFtdLCAvLyBoaWdobGlnaHRpbmcgb3ZlcmxheXMsIGFzIGFkZGVkIGJ5IGFkZE92ZXJs
YXkKKyAgICAgIG1vZGVHZW46IDAsICAgLy8gYnVtcGVkIHdoZW4gbW9kZS9vdmVybGF5IGNoYW5n
ZXMsIHVzZWQgdG8gaW52YWxpZGF0ZSBoaWdobGlnaHRpbmcgaW5mbworICAgICAgb3ZlcndyaXRl
OiBmYWxzZSwgZm9jdXNlZDogZmFsc2UsCisgICAgICBzdXBwcmVzc0VkaXRzOiBmYWxzZSwgLy8g
dXNlZCB0byBkaXNhYmxlIGVkaXRpbmcgZHVyaW5nIGtleSBoYW5kbGVycyB3aGVuIGluIHJlYWRP
bmx5IG1vZGUKKyAgICAgIHBhc3RlSW5jb21pbmc6IGZhbHNlLCBjdXRJbmNvbWluZzogZmFsc2Us
IC8vIGhlbHAgcmVjb2duaXplIHBhc3RlL2N1dCBlZGl0cyBpbiByZWFkSW5wdXQKKyAgICAgIGRy
YWdnaW5nVGV4dDogZmFsc2UsCisgICAgICBoaWdobGlnaHQ6IG5ldyBEZWxheWVkKCkgLy8gc3Rv
cmVzIGhpZ2hsaWdodCB3b3JrZXIgdGltZW91dAorICAgIH07CgogICAgIC8vIE92ZXJyaWRlIG1h
Z2ljIHRleHRhcmVhIGNvbnRlbnQgcmVzdG9yZSB0aGF0IElFIHNvbWV0aW1lcyBkb2VzCiAgICAg
Ly8gb24gb3VyIGhpZGRlbiB0ZXh0YXJlYSBvbiByZWxvYWQKLSAgICBpZiAoaWUpIHNldFRpbWVv
dXQoYmluZChyZXNldElucHV0LCB0aGlzLCB0cnVlKSwgMjApOworICAgIGlmIChpZV91cHRvMTAp
IHNldFRpbWVvdXQoYmluZChyZXNldElucHV0LCB0aGlzLCB0cnVlKSwgMjApOwoKICAgICByZWdp
c3RlckV2ZW50SGFuZGxlcnModGhpcyk7Ci0gICAgLy8gSUUgdGhyb3dzIHVuc3BlY2lmaWVkIGVy
cm9yIGluIGNlcnRhaW4gY2FzZXMsIHdoZW4KLSAgICAvLyB0cnlpbmcgdG8gYWNjZXNzIGFjdGl2
ZUVsZW1lbnQgYmVmb3JlIG9ubG9hZAotICAgIHZhciBoYXNGb2N1czsgdHJ5IHsgaGFzRm9jdXMg
PSAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBkaXNwbGF5LmlucHV0KTsgfSBjYXRjaChlKSB7
IH0KLSAgICBpZiAoaGFzRm9jdXMgfHwgKG9wdGlvbnMuYXV0b2ZvY3VzICYmICFtb2JpbGUpKSBz
ZXRUaW1lb3V0KGJpbmQob25Gb2N1cywgdGhpcyksIDIwKTsKLSAgICBlbHNlIG9uQmx1cih0aGlz
KTsKCi0gICAgb3BlcmF0aW9uKHRoaXMsIGZ1bmN0aW9uKCkgewotICAgICAgZm9yICh2YXIgb3B0
IGluIG9wdGlvbkhhbmRsZXJzKQotICAgICAgICBpZiAob3B0aW9uSGFuZGxlcnMucHJvcGVydHlJ
c0VudW1lcmFibGUob3B0KSkKLSAgICAgICAgICBvcHRpb25IYW5kbGVyc1tvcHRdKHRoaXMsIG9w
dGlvbnNbb3B0XSwgSW5pdCk7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRIb29rcy5s
ZW5ndGg7ICsraSkgaW5pdEhvb2tzW2ldKHRoaXMpOwotICAgIH0pKCk7CisgICAgdmFyIGNtID0g
dGhpczsKKyAgICBydW5Jbk9wKHRoaXMsIGZ1bmN0aW9uKCkgeworICAgICAgY20uY3VyT3AuZm9y
Y2VVcGRhdGUgPSB0cnVlOworICAgICAgYXR0YWNoRG9jKGNtLCBkb2MpOworCisgICAgICBpZiAo
KG9wdGlvbnMuYXV0b2ZvY3VzICYmICFtb2JpbGUpIHx8IGFjdGl2ZUVsdCgpID09IGRpc3BsYXku
aW5wdXQpCisgICAgICAgIHNldFRpbWVvdXQoYmluZChvbkZvY3VzLCBjbSksIDIwKTsKKyAgICAg
IGVsc2UKKyAgICAgICAgb25CbHVyKGNtKTsKKworICAgICAgZm9yICh2YXIgb3B0IGluIG9wdGlv
bkhhbmRsZXJzKSBpZiAob3B0aW9uSGFuZGxlcnMuaGFzT3duUHJvcGVydHkob3B0KSkKKyAgICAg
ICAgb3B0aW9uSGFuZGxlcnNbb3B0XShjbSwgb3B0aW9uc1tvcHRdLCBJbml0KTsKKyAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgaW5pdEhvb2tzLmxlbmd0aDsgKytpKSBpbml0SG9va3NbaV0oY20p
OworICAgIH0pOwogICB9CgogICAvLyBESVNQTEFZIENPTlNUUlVDVE9SCgotICBmdW5jdGlvbiBt
YWtlRGlzcGxheShwbGFjZSwgZG9jU3RhcnQpIHsKLSAgICB2YXIgZCA9IHt9OworICAvLyBUaGUg
ZGlzcGxheSBoYW5kbGVzIHRoZSBET00gaW50ZWdyYXRpb24sIGJvdGggZm9yIGlucHV0IHJlYWRp
bmcKKyAgLy8gYW5kIGNvbnRlbnQgZHJhd2luZy4gSXQgaG9sZHMgcmVmZXJlbmNlcyB0byBET00g
bm9kZXMgYW5kCisgIC8vIGRpc3BsYXktcmVsYXRlZCBzdGF0ZS4KCi0gICAgdmFyIGlucHV0ID0g
ZC5pbnB1dCA9IGVsdCgidGV4dGFyZWEiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRl
OyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbTsgb3V0bGluZTogbm9uZTsgZm9u
dC1zaXplOiA0cHg7Iik7CisgIGZ1bmN0aW9uIERpc3BsYXkocGxhY2UsIGRvYykgeworICAgIHZh
ciBkID0gdGhpczsKKworICAgIC8vIFRoZSBzZW1paGlkZGVuIHRleHRhcmVhIHRoYXQgaXMgZm9j
dXNlZCB3aGVuIHRoZSBlZGl0b3IgaXMKKyAgICAvLyBmb2N1c2VkLCBhbmQgcmVjZWl2ZXMgaW5w
dXQuCisgICAgdmFyIGlucHV0ID0gZC5pbnB1dCA9IGVsdCgidGV4dGFyZWEiLCBudWxsLCBudWxs
LCAicG9zaXRpb246IGFic29sdXRlOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFl
bTsgb3V0bGluZTogbm9uZSIpOworICAgIC8vIFRoZSB0ZXh0YXJlYSBpcyBrZXB0IHBvc2l0aW9u
ZWQgbmVhciB0aGUgY3Vyc29yIHRvIHByZXZlbnQgdGhlCisgICAgLy8gZmFjdCB0aGF0IGl0J2xs
IGJlIHNjcm9sbGVkIGludG8gdmlldyBvbiBpbnB1dCBmcm9tIHNjcm9sbGluZworICAgIC8vIG91
ciBmYWtlIGN1cnNvciBvdXQgb2Ygdmlldy4gT24gd2Via2l0LCB3aGVuIHdyYXA9b2ZmLCBwYXN0
ZSBpcworICAgIC8vIHZlcnkgc2xvdy4gU28gbWFrZSB0aGUgYXJlYSB3aWRlIGluc3RlYWQuCiAg
ICAgaWYgKHdlYmtpdCkgaW5wdXQuc3R5bGUud2lkdGggPSAiMTAwMHB4IjsKICAgICBlbHNlIGlu
cHV0LnNldEF0dHJpYnV0ZSgid3JhcCIsICJvZmYiKTsKLSAgICAvLyBpZiBib3JkZXI6IDA7IC0t
IGlPUyBmYWlscyB0byBvcGVuIGtleWJvYXJkIChpc3N1ZSAjMTI4NykKKyAgICAvLyBJZiBib3Jk
ZXI6IDA7IC0tIGlPUyBmYWlscyB0byBvcGVuIGtleWJvYXJkIChpc3N1ZSAjMTI4NykKICAgICBp
ZiAoaW9zKSBpbnB1dC5zdHlsZS5ib3JkZXIgPSAiMXB4IHNvbGlkIGJsYWNrIjsKICAgICBpbnB1
dC5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0IiwgIm9mZiIpOyBpbnB1dC5zZXRBdHRyaWJ1dGUo
ImF1dG9jYXBpdGFsaXplIiwgIm9mZiIpOyBpbnB1dC5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2si
LCAiZmFsc2UiKTsKCiAgICAgLy8gV3JhcHMgYW5kIGhpZGVzIGlucHV0IHRleHRhcmVhCiAgICAg
ZC5pbnB1dERpdiA9IGVsdCgiZGl2IiwgW2lucHV0XSwgbnVsbCwgIm92ZXJmbG93OiBoaWRkZW47
IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iik7Ci0gICAgLy8g
VGhlIGFjdHVhbCBmYWtlIHNjcm9sbGJhcnMuCi0gICAgZC5zY3JvbGxiYXJIID0gZWx0KCJkaXYi
LCBbZWx0KCJkaXYiLCBudWxsLCBudWxsLCAiaGVpZ2h0OiAxcHgiKV0sICJDb2RlTWlycm9yLWhz
Y3JvbGxiYXIiKTsKLSAgICBkLnNjcm9sbGJhclYgPSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIG51
bGwsIG51bGwsICJ3aWR0aDogMXB4IildLCAiQ29kZU1pcnJvci12c2Nyb2xsYmFyIik7CisgICAg
Ly8gVGhlIGZha2Ugc2Nyb2xsYmFyIGVsZW1lbnRzLgorICAgIGQuc2Nyb2xsYmFySCA9IGVsdCgi
ZGl2IiwgW2VsdCgiZGl2IiwgbnVsbCwgbnVsbCwgImhlaWdodDogMTAwJTsgbWluLWhlaWdodDog
MXB4IildLCAiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIik7CisgICAgZC5zY3JvbGxiYXJWID0gZWx0
KCJkaXYiLCBbZWx0KCJkaXYiLCBudWxsLCBudWxsLCAibWluLXdpZHRoOiAxcHgiKV0sICJDb2Rl
TWlycm9yLXZzY3JvbGxiYXIiKTsKKyAgICAvLyBDb3ZlcnMgYm90dG9tLXJpZ2h0IHNxdWFyZSB3
aGVuIGJvdGggc2Nyb2xsYmFycyBhcmUgcHJlc2VudC4KICAgICBkLnNjcm9sbGJhckZpbGxlciA9
IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpOworICAgIC8v
IENvdmVycyBib3R0b20gb2YgZ3V0dGVyIHdoZW4gY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIg
aXMgb24KKyAgICAvLyBhbmQgaCBzY3JvbGxiYXIgaXMgcHJlc2VudC4KICAgICBkLmd1dHRlckZp
bGxlciA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpOwotICAg
IC8vIERJVnMgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIGFuZCB0aGUgYWN0dWFsIGNvZGUKKyAg
ICAvLyBXaWxsIGNvbnRhaW4gdGhlIGFjdHVhbCBjb2RlLCBwb3NpdGlvbmVkIHRvIGNvdmVyIHRo
ZSB2aWV3cG9ydC4KICAgICBkLmxpbmVEaXYgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9y
LWNvZGUiKTsKKyAgICAvLyBFbGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlc2UgdG8gcmVwcmVzZW50
IHNlbGVjdGlvbiBhbmQgY3Vyc29ycy4KICAgICBkLnNlbGVjdGlvbkRpdiA9IGVsdCgiZGl2Iiwg
bnVsbCwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSIpOwotICAgIC8vIEJs
aW5reSBjdXJzb3IsIGFuZCBlbGVtZW50IHVzZWQgdG8gZW5zdXJlIGN1cnNvciBmaXRzIGF0IHRo
ZSBlbmQgb2YgYSBsaW5lCi0gICAgZC5jdXJzb3IgPSBlbHQoImRpdiIsICJcdTAwYTAiLCAiQ29k
ZU1pcnJvci1jdXJzb3IiKTsKLSAgICAvLyBTZWNvbmRhcnkgY3Vyc29yLCBzaG93biB3aGVuIG9u
IGEgJ2p1bXAnIGluIGJpLWRpcmVjdGlvbmFsIHRleHQKLSAgICBkLm90aGVyQ3Vyc29yID0gZWx0
KCJkaXYiLCAiXHUwMGEwIiwgIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5
Y3Vyc29yIik7Ci0gICAgLy8gVXNlZCB0byBtZWFzdXJlIHRleHQgc2l6ZQorICAgIGQuY3Vyc29y
RGl2ID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1jdXJzb3JzIik7CisgICAgLy8gQSB2
aXNpYmlsaXR5OiBoaWRkZW4gZWxlbWVudCB1c2VkIHRvIGZpbmQgdGhlIHNpemUgb2YgdGhpbmdz
LgogICAgIGQubWVhc3VyZSA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItbWVhc3VyZSIp
OworICAgIC8vIFdoZW4gbGluZXMgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQgYXJlIG1lYXN1cmVk
LCB0aGV5IGFyZSBkcmF3biBpbiB0aGlzLgorICAgIGQubGluZU1lYXN1cmUgPSBlbHQoImRpdiIs
IG51bGwsICJDb2RlTWlycm9yLW1lYXN1cmUiKTsKICAgICAvLyBXcmFwcyBldmVyeXRoaW5nIHRo
YXQgbmVlZHMgdG8gZXhpc3QgaW5zaWRlIHRoZSB2ZXJ0aWNhbGx5LXBhZGRlZCBjb29yZGluYXRl
IHN5c3RlbQotICAgIGQubGluZVNwYWNlID0gZWx0KCJkaXYiLCBbZC5tZWFzdXJlLCBkLnNlbGVj
dGlvbkRpdiwgZC5saW5lRGl2LCBkLmN1cnNvciwgZC5vdGhlckN1cnNvcl0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIp
OwotICAgIC8vIE1vdmVkIGFyb3VuZCBpdHMgcGFyZW50IHRvIGNvdmVyIHZpc2libGUgdmlldwor
ICAgIGQubGluZVNwYWNlID0gZWx0KCJkaXYiLCBbZC5tZWFzdXJlLCBkLmxpbmVNZWFzdXJlLCBk
LnNlbGVjdGlvbkRpdiwgZC5jdXJzb3JEaXYsIGQubGluZURpdl0sCisgICAgICAgICAgICAgICAg
ICAgICAgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpOworICAgIC8v
IE1vdmVkIGFyb3VuZCBpdHMgcGFyZW50IHRvIGNvdmVyIHZpc2libGUgdmlldy4KICAgICBkLm1v
dmVyID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBbZC5saW5lU3BhY2VdLCAiQ29kZU1pcnJvci1s
aW5lcyIpXSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwotICAgIC8vIFNldCB0byB0aGUg
aGVpZ2h0IG9mIHRoZSB0ZXh0LCBjYXVzZXMgc2Nyb2xsaW5nCisgICAgLy8gU2V0IHRvIHRoZSBo
ZWlnaHQgb2YgdGhlIGRvY3VtZW50LCBhbGxvd2luZyBzY3JvbGxpbmcuCiAgICAgZC5zaXplciA9
IGVsdCgiZGl2IiwgW2QubW92ZXJdLCAiQ29kZU1pcnJvci1zaXplciIpOwotICAgIC8vIEQgaXMg
bmVlZGVkIGJlY2F1c2UgYmVoYXZpb3Igb2YgZWx0cyB3aXRoIG92ZXJmbG93OiBhdXRvIGFuZCBw
YWRkaW5nIGlzIGluY29uc2lzdGVudCBhY3Jvc3MgYnJvd3NlcnMKKyAgICAvLyBCZWhhdmlvciBv
ZiBlbHRzIHdpdGggb3ZlcmZsb3c6IGF1dG8gYW5kIHBhZGRpbmcgaXMKKyAgICAvLyBpbmNvbnNp
c3RlbnQgYWNyb3NzIGJyb3dzZXJzLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZQorICAgIC8v
IHNjcm9sbGFibGUgYXJlYSBpcyBiaWcgZW5vdWdoLgogICAgIGQuaGVpZ2h0Rm9yY2VyID0gZWx0
KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBoZWlnaHQ6ICIgKyBzY3Jv
bGxlckN1dE9mZiArICJweDsgd2lkdGg6IDFweDsiKTsKLSAgICAvLyBXaWxsIGNvbnRhaW4gdGhl
IGd1dHRlcnMsIGlmIGFueQorICAgIC8vIFdpbGwgY29udGFpbiB0aGUgZ3V0dGVycywgaWYgYW55
LgogICAgIGQuZ3V0dGVycyA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItZ3V0dGVycyIp
OwogICAgIGQubGluZUd1dHRlciA9IG51bGw7Ci0gICAgLy8gUHJvdmlkZXMgc2Nyb2xsaW5nCisg
ICAgLy8gQWN0dWFsIHNjcm9sbGFibGUgZWxlbWVudC4KICAgICBkLnNjcm9sbGVyID0gZWx0KCJk
aXYiLCBbZC5zaXplciwgZC5oZWlnaHRGb3JjZXIsIGQuZ3V0dGVyc10sICJDb2RlTWlycm9yLXNj
cm9sbCIpOwogICAgIGQuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsICItMSIpOwog
ICAgIC8vIFRoZSBlbGVtZW50IGluIHdoaWNoIHRoZSBlZGl0b3IgbGl2ZXMuCiAgICAgZC53cmFw
cGVyID0gZWx0KCJkaXYiLCBbZC5pbnB1dERpdiwgZC5zY3JvbGxiYXJILCBkLnNjcm9sbGJhclYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zY3JvbGxiYXJGaWxsZXIsIGQuZ3V0dGVy
RmlsbGVyLCBkLnNjcm9sbGVyXSwgIkNvZGVNaXJyb3IiKTsKLSAgICAvLyBXb3JrIGFyb3VuZCBJ
RTcgei1pbmRleCBidWcKLSAgICBpZiAoaWVfbHQ4KSB7IGQuZ3V0dGVycy5zdHlsZS56SW5kZXgg
PSAtMTsgZC5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAwOyB9Ci0gICAgaWYgKHBsYWNl
LmFwcGVuZENoaWxkKSBwbGFjZS5hcHBlbmRDaGlsZChkLndyYXBwZXIpOyBlbHNlIHBsYWNlKGQu
d3JhcHBlcik7CgorICAgIC8vIFdvcmsgYXJvdW5kIElFNyB6LWluZGV4IGJ1ZyAobm90IHBlcmZl
Y3QsIGhlbmNlIElFNyBub3QgcmVhbGx5IGJlaW5nIHN1cHBvcnRlZCkKKyAgICBpZiAoaWVfdXB0
bzcpIHsgZC5ndXR0ZXJzLnN0eWxlLnpJbmRleCA9IC0xOyBkLnNjcm9sbGVyLnN0eWxlLnBhZGRp
bmdSaWdodCA9IDA7IH0KICAgICAvLyBOZWVkZWQgdG8gaGlkZSBiaWcgYmx1ZSBibGlua2luZyBj
dXJzb3Igb24gTW9iaWxlIFNhZmFyaQogICAgIGlmIChpb3MpIGlucHV0LnN0eWxlLndpZHRoID0g
IjBweCI7CiAgICAgaWYgKCF3ZWJraXQpIGQuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gdHJ1ZTsKICAg
ICAvLyBOZWVkZWQgdG8gaGFuZGxlIFRhYiBrZXkgaW4gS0hUTUwKICAgICBpZiAoa2h0bWwpIHsg
ZC5pbnB1dERpdi5zdHlsZS5oZWlnaHQgPSAiMXB4IjsgZC5pbnB1dERpdi5zdHlsZS5wb3NpdGlv
biA9ICJhYnNvbHV0ZSI7IH0KICAgICAvLyBOZWVkIHRvIHNldCBhIG1pbmltdW0gd2lkdGggdG8g
c2VlIHRoZSBzY3JvbGxiYXIgb24gSUU3IChidXQgbXVzdCBub3Qgc2V0IGl0IG9uIElFOCkuCi0g
ICAgZWxzZSBpZiAoaWVfbHQ4KSBkLnNjcm9sbGJhckguc3R5bGUubWluV2lkdGggPSBkLnNjcm9s
bGJhclYuc3R5bGUubWluV2lkdGggPSAiMThweCI7Ci0KLSAgICAvLyBDdXJyZW50IHZpc2libGUg
cmFuZ2UgKG1heSBiZSBiaWdnZXIgdGhhbiB0aGUgdmlldyB3aW5kb3cpLgotICAgIGQudmlld09m
ZnNldCA9IGQubGFzdFNpemVDID0gMDsKLSAgICBkLnNob3dpbmdGcm9tID0gZC5zaG93aW5nVG8g
PSBkb2NTdGFydDsKKyAgICBpZiAoaWVfdXB0bzcpIGQuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWln
aHQgPSBkLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGggPSAiMThweCI7CisKKyAgICBpZiAocGxh
Y2UuYXBwZW5kQ2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKGQud3JhcHBlcik7CisgICAgZWxzZSBw
bGFjZShkLndyYXBwZXIpOworCisgICAgLy8gQ3VycmVudCByZW5kZXJlZCByYW5nZSAobWF5IGJl
IGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuCisgICAgZC52aWV3RnJvbSA9IGQudmlld1Rv
ID0gZG9jLmZpcnN0OworICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSByZW5kZXJlZCBsaW5l
cy4KKyAgICBkLnZpZXcgPSBbXTsKKyAgICAvLyBIb2xkcyBpbmZvIGFib3V0IGEgc2luZ2xlIHJl
bmRlcmVkIGxpbmUgd2hlbiBpdCB3YXMgcmVuZGVyZWQKKyAgICAvLyBmb3IgbWVhc3VyZW1lbnQs
IHdoaWxlIG5vdCBpbiB2aWV3LgorICAgIGQuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7CisgICAg
Ly8gRW1wdHkgc3BhY2UgKGluIHBpeGVscykgYWJvdmUgdGhlIHZpZXcKKyAgICBkLnZpZXdPZmZz
ZXQgPSAwOworICAgIGQubGFzdFNpemVDID0gMDsKKyAgICBkLnVwZGF0ZUxpbmVOdW1iZXJzID0g
bnVsbDsKCiAgICAgLy8gVXNlZCB0byBvbmx5IHJlc2l6ZSB0aGUgbGluZSBudW1iZXIgZ3V0dGVy
IHdoZW4gbmVjZXNzYXJ5ICh3aGVuCiAgICAgLy8gdGhlIGFtb3VudCBvZiBsaW5lcyBjcm9zc2Vz
IGEgYm91bmRhcnkgdGhhdCBtYWtlcyBpdHMgd2lkdGggY2hhbmdlKQogICAgIGQubGluZU51bVdp
ZHRoID0gZC5saW5lTnVtSW5uZXJXaWR0aCA9IGQubGluZU51bUNoYXJzID0gbnVsbDsKICAgICAv
LyBTZWUgcmVhZElucHV0IGFuZCByZXNldElucHV0CiAgICAgZC5wcmV2SW5wdXQgPSAiIjsKLSAg
ICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIGEgbm9uLWhvcml6b250YWwtc2Nyb2xsaW5nIHdpZGdldCBp
cyBhZGRlZC4gQXMKLSAgICAvLyBhbiBvcHRpbWl6YXRpb24sIHdpZGdldCBhbGlnbmluZyBpcyBz
a2lwcGVkIHdoZW4gZCBpcyBmYWxzZS4KKyAgICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIGEgbm9uLWhv
cml6b250YWwtc2Nyb2xsaW5nIGxpbmUgd2lkZ2V0IGlzCisgICAgLy8gYWRkZWQuIEFzIGFuIG9w
dGltaXphdGlvbiwgbGluZSB3aWRnZXQgYWxpZ25pbmcgaXMgc2tpcHBlZCB3aGVuCisgICAgLy8g
dGhpcyBpcyBmYWxzZS4KICAgICBkLmFsaWduV2lkZ2V0cyA9IGZhbHNlOwotICAgIC8vIEZsYWcg
dGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSBjdXJyZW50bHkgZXhwZWN0IGlucHV0IHRvIGFwcGVh
cgotICAgIC8vIChhZnRlciBzb21lIGV2ZW50IGxpa2UgJ2tleXByZXNzJyBvciAnaW5wdXQnKSBh
bmQgYXJlIHBvbGxpbmcKLSAgICAvLyBpbnRlbnNpdmVseS4KKyAgICAvLyBGbGFnIHRoYXQgaW5k
aWNhdGVzIHdoZXRoZXIgd2UgZXhwZWN0IGlucHV0IHRvIGFwcGVhciByZWFsIHNvb24KKyAgICAv
LyBub3cgKGFmdGVyIHNvbWUgZXZlbnQgbGlrZSAna2V5cHJlc3MnIG9yICdpbnB1dCcpIGFuZCBh
cmUKKyAgICAvLyBwb2xsaW5nIGludGVuc2l2ZWx5LgogICAgIGQucG9sbGluZ0Zhc3QgPSBmYWxz
ZTsKICAgICAvLyBTZWxmLXJlc2V0dGluZyB0aW1lb3V0IGZvciB0aGUgcG9sbGVyCiAgICAgZC5w
b2xsID0gbmV3IERlbGF5ZWQoKTsKCi0gICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRl
eHRIZWlnaHQgPSBudWxsOwotICAgIGQubWVhc3VyZUxpbmVDYWNoZSA9IFtdOwotICAgIGQubWVh
c3VyZUxpbmVDYWNoZVBvcyA9IDA7CisgICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRl
eHRIZWlnaHQgPSBkLmNhY2hlZFBhZGRpbmdIID0gbnVsbDsKCiAgICAgLy8gVHJhY2tzIHdoZW4g
cmVzZXRJbnB1dCBoYXMgcHVudGVkIHRvIGp1c3QgcHV0dGluZyBhIHNob3J0Ci0gICAgLy8gc3Ry
aW5nIGluc3RlYWQgb2YgdGhlIChsYXJnZSkgc2VsZWN0aW9uLgorICAgIC8vIHN0cmluZyBpbnRv
IHRoZSB0ZXh0YXJlYSBpbnN0ZWFkIG9mIHRoZSBmdWxsIHNlbGVjdGlvbi4KICAgICBkLmluYWNj
dXJhdGVTZWxlY3Rpb24gPSBmYWxzZTsKCiAgICAgLy8gVHJhY2tzIHRoZSBtYXhpbXVtIGxpbmUg
bGVuZ3RoIHNvIHRoYXQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyCkBAIC0xODYsNyArMjI5LDgg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gVXNlZCBmb3IgbWVh
c3VyaW5nIHdoZWVsIHNjcm9sbGluZyBncmFudWxhcml0eQogICAgIGQud2hlZWxEWCA9IGQud2hl
ZWxEWSA9IGQud2hlZWxTdGFydFggPSBkLndoZWVsU3RhcnRZID0gbnVsbDsKCi0gICAgcmV0dXJu
IGQ7CisgICAgLy8gVHJ1ZSB3aGVuIHNoaWZ0IGlzIGhlbGQgZG93bi4KKyAgICBkLnNoaWZ0ID0g
ZmFsc2U7CiAgIH0KCiAgIC8vIFNUQVRFIFVQREFURVMKQEAgLTE5NSw2ICsyMzksMTAgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CgogICBmdW5jdGlvbiBsb2FkTW9kZShjbSkg
ewogICAgIGNtLmRvYy5tb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNtLm9wdGlvbnMsIGNtLmRv
Yy5tb2RlT3B0aW9uKTsKKyAgICByZXNldE1vZGVTdGF0ZShjbSk7CisgIH0KKworICBmdW5jdGlv
biByZXNldE1vZGVTdGF0ZShjbSkgewogICAgIGNtLmRvYy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsK
ICAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7CiAgICAg
ICBpZiAobGluZS5zdHlsZXMpIGxpbmUuc3R5bGVzID0gbnVsbDsKQEAgLTIwNywxMSArMjU1LDEx
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewoKICAgZnVuY3Rpb24gd3JhcHBp
bmdDaGFuZ2VkKGNtKSB7CiAgICAgaWYgKGNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7Ci0gICAg
ICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci13cmFwIjsKKyAg
ICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3Itd3JhcCIpOwogICAg
ICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9ICIiOwogICAgIH0gZWxzZSB7Ci0g
ICAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS53cmFwcGVyLmNs
YXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci13cmFwIiwgIiIpOwotICAgICAgY29tcHV0ZU1h
eExlbmd0aChjbSk7CisgICAgICBybUNsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJy
b3Itd3JhcCIpOworICAgICAgZmluZE1heExpbmUoY20pOwogICAgIH0KICAgICBlc3RpbWF0ZUxp
bmVIZWlnaHRzKGNtKTsKICAgICByZWdDaGFuZ2UoY20pOwpAQCAtMjE5LDE2ICsyNjcsMjQgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgc2V0VGltZW91dChmdW5jdGlv
bigpe3VwZGF0ZVNjcm9sbGJhcnMoY20pO30sIDEwMCk7CiAgIH0KCisgIC8vIFJldHVybnMgYSBm
dW5jdGlvbiB0aGF0IGVzdGltYXRlcyB0aGUgaGVpZ2h0IG9mIGEgbGluZSwgdG8gdXNlIGFzCisg
IC8vIGZpcnN0IGFwcHJveGltYXRpb24gdW50aWwgdGhlIGxpbmUgYmVjb21lcyB2aXNpYmxlIChh
bmQgaXMgdGh1cworICAvLyBwcm9wZXJseSBtZWFzdXJhYmxlKS4KICAgZnVuY3Rpb24gZXN0aW1h
dGVIZWlnaHQoY20pIHsKICAgICB2YXIgdGggPSB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpLCB3cmFw
cGluZyA9IGNtLm9wdGlvbnMubGluZVdyYXBwaW5nOwogICAgIHZhciBwZXJMaW5lID0gd3JhcHBp
bmcgJiYgTWF0aC5tYXgoNSwgY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCAvIGNoYXJX
aWR0aChjbS5kaXNwbGF5KSAtIDMpOwogICAgIHJldHVybiBmdW5jdGlvbihsaW5lKSB7Ci0gICAg
ICBpZiAobGluZUlzSGlkZGVuKGNtLmRvYywgbGluZSkpCi0gICAgICAgIHJldHVybiAwOwotICAg
ICAgZWxzZSBpZiAod3JhcHBpbmcpCi0gICAgICAgIHJldHVybiAoTWF0aC5jZWlsKGxpbmUudGV4
dC5sZW5ndGggLyBwZXJMaW5lKSB8fCAxKSAqIHRoOworICAgICAgaWYgKGxpbmVJc0hpZGRlbihj
bS5kb2MsIGxpbmUpKSByZXR1cm4gMDsKKworICAgICAgdmFyIHdpZGdldHNIZWlnaHQgPSAwOwor
ICAgICAgaWYgKGxpbmUud2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGxpbmUud2lkZ2V0c1tpXS5oZWlnaHQpIHdpZGdl
dHNIZWlnaHQgKz0gbGluZS53aWRnZXRzW2ldLmhlaWdodDsKKyAgICAgIH0KKworICAgICAgaWYg
KHdyYXBwaW5nKQorICAgICAgICByZXR1cm4gd2lkZ2V0c0hlaWdodCArIChNYXRoLmNlaWwobGlu
ZS50ZXh0Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDEpICogdGg7CiAgICAgICBlbHNlCi0gICAgICAg
IHJldHVybiB0aDsKKyAgICAgICAgcmV0dXJuIHdpZGdldHNIZWlnaHQgKyB0aDsKICAgICB9Owog
ICB9CgpAQCAtMjQ0LDcgKzMwMCw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgIHZhciBtYXAgPSBrZXlNYXBbY20ub3B0aW9ucy5rZXlNYXBdLCBzdHlsZSA9IG1hcC5z
dHlsZTsKICAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS53cmFw
cGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1rZXltYXAtXFMrL2csICIiKSArCiAgICAgICAo
c3R5bGUgPyAiIGNtLWtleW1hcC0iICsgc3R5bGUgOiAiIik7Ci0gICAgY20uc3RhdGUuZGlzYWJs
ZUlucHV0ID0gbWFwLmRpc2FibGVJbnB1dDsKICAgfQoKICAgZnVuY3Rpb24gdGhlbWVDaGFuZ2Vk
KGNtKSB7CkBAIC0yNTksNiArMzE0LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe2FsaWduSG9yaXpvbnRhbGx5KGNtKTt9LCAy
MCk7CiAgIH0KCisgIC8vIFJlYnVpbGQgdGhlIGd1dHRlciBlbGVtZW50cywgZW5zdXJlIHRoZSBt
YXJnaW4gdG8gdGhlIGxlZnQgb2YgdGhlCisgIC8vIGNvZGUgbWF0Y2hlcyB0aGVpciB3aWR0aC4K
ICAgZnVuY3Rpb24gdXBkYXRlR3V0dGVycyhjbSkgewogICAgIHZhciBndXR0ZXJzID0gY20uZGlz
cGxheS5ndXR0ZXJzLCBzcGVjcyA9IGNtLm9wdGlvbnMuZ3V0dGVyczsKICAgICByZW1vdmVDaGls
ZHJlbihndXR0ZXJzKTsKQEAgLTI3MSwzMyArMzI4LDQ0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgICAgfQogICAgIH0KICAgICBndXR0ZXJzLnN0eWxlLmRpc3BsYXkg
PSBpID8gIiIgOiAibm9uZSI7CisgICAgdXBkYXRlR3V0dGVyU3BhY2UoY20pOworICB9CisKKyAg
ZnVuY3Rpb24gdXBkYXRlR3V0dGVyU3BhY2UoY20pIHsKKyAgICB2YXIgd2lkdGggPSBjbS5kaXNw
bGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7CisgICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5tYXJn
aW5MZWZ0ID0gd2lkdGggKyAicHgiOworICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFySC5zdHlsZS5s
ZWZ0ID0gY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IHdpZHRoICsgInB4IiA6IDA7CiAgIH0KCi0g
IGZ1bmN0aW9uIGxpbmVMZW5ndGgoZG9jLCBsaW5lKSB7CisgIC8vIENvbXB1dGUgdGhlIGNoYXJh
Y3RlciBsZW5ndGggb2YgYSBsaW5lLCB0YWtpbmcgaW50byBhY2NvdW50CisgIC8vIGNvbGxhcHNl
ZCByYW5nZXMgKHNlZSBtYXJrVGV4dCkgdGhhdCBtaWdodCBoaWRlIHBhcnRzLCBhbmQgam9pbgor
ICAvLyBvdGhlciBsaW5lcyBvbnRvIGl0LgorICBmdW5jdGlvbiBsaW5lTGVuZ3RoKGxpbmUpIHsK
ICAgICBpZiAobGluZS5oZWlnaHQgPT0gMCkgcmV0dXJuIDA7CiAgICAgdmFyIGxlbiA9IGxpbmUu
dGV4dC5sZW5ndGgsIG1lcmdlZCwgY3VyID0gbGluZTsKICAgICB3aGlsZSAobWVyZ2VkID0gY29s
bGFwc2VkU3BhbkF0U3RhcnQoY3VyKSkgewotICAgICAgdmFyIGZvdW5kID0gbWVyZ2VkLmZpbmQo
KTsKLSAgICAgIGN1ciA9IGdldExpbmUoZG9jLCBmb3VuZC5mcm9tLmxpbmUpOworICAgICAgdmFy
IGZvdW5kID0gbWVyZ2VkLmZpbmQoMCwgdHJ1ZSk7CisgICAgICBjdXIgPSBmb3VuZC5mcm9tLmxp
bmU7CiAgICAgICBsZW4gKz0gZm91bmQuZnJvbS5jaCAtIGZvdW5kLnRvLmNoOwogICAgIH0KICAg
ICBjdXIgPSBsaW5lOwogICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQoY3Vy
KSkgewotICAgICAgdmFyIGZvdW5kID0gbWVyZ2VkLmZpbmQoKTsKKyAgICAgIHZhciBmb3VuZCA9
IG1lcmdlZC5maW5kKDAsIHRydWUpOwogICAgICAgbGVuIC09IGN1ci50ZXh0Lmxlbmd0aCAtIGZv
dW5kLmZyb20uY2g7Ci0gICAgICBjdXIgPSBnZXRMaW5lKGRvYywgZm91bmQudG8ubGluZSk7Cisg
ICAgICBjdXIgPSBmb3VuZC50by5saW5lOwogICAgICAgbGVuICs9IGN1ci50ZXh0Lmxlbmd0aCAt
IGZvdW5kLnRvLmNoOwogICAgIH0KICAgICByZXR1cm4gbGVuOwogICB9CgotICBmdW5jdGlvbiBj
b21wdXRlTWF4TGVuZ3RoKGNtKSB7CisgIC8vIEZpbmQgdGhlIGxvbmdlc3QgbGluZSBpbiB0aGUg
ZG9jdW1lbnQuCisgIGZ1bmN0aW9uIGZpbmRNYXhMaW5lKGNtKSB7CiAgICAgdmFyIGQgPSBjbS5k
aXNwbGF5LCBkb2MgPSBjbS5kb2M7CiAgICAgZC5tYXhMaW5lID0gZ2V0TGluZShkb2MsIGRvYy5m
aXJzdCk7Ci0gICAgZC5tYXhMaW5lTGVuZ3RoID0gbGluZUxlbmd0aChkb2MsIGQubWF4TGluZSk7
CisgICAgZC5tYXhMaW5lTGVuZ3RoID0gbGluZUxlbmd0aChkLm1heExpbmUpOwogICAgIGQubWF4
TGluZUNoYW5nZWQgPSB0cnVlOwogICAgIGRvYy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAg
IHZhciBsZW4gPSBsaW5lTGVuZ3RoKGRvYywgbGluZSk7CisgICAgICB2YXIgbGVuID0gbGluZUxl
bmd0aChsaW5lKTsKICAgICAgIGlmIChsZW4gPiBkLm1heExpbmVMZW5ndGgpIHsKICAgICAgICAg
ZC5tYXhMaW5lTGVuZ3RoID0gbGVuOwogICAgICAgICBkLm1heExpbmUgPSBsaW5lOwpAQCAtMzE5
LDIxICszODcsMzMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CgogICAvLyBT
Q1JPTExCQVJTCgorICAvLyBQcmVwYXJlIERPTSByZWFkcyBuZWVkZWQgdG8gdXBkYXRlIHRoZSBz
Y3JvbGxiYXJzLiBEb25lIGluIG9uZQorICAvLyBzaG90IHRvIG1pbmltaXplIHVwZGF0ZS9tZWFz
dXJlIHJvdW5kdHJpcHMuCisgIGZ1bmN0aW9uIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSB7Cisg
ICAgdmFyIHNjcm9sbCA9IGNtLmRpc3BsYXkuc2Nyb2xsZXI7CisgICAgcmV0dXJuIHsKKyAgICAg
IGNsaWVudEhlaWdodDogc2Nyb2xsLmNsaWVudEhlaWdodCwKKyAgICAgIGJhckhlaWdodDogY20u
ZGlzcGxheS5zY3JvbGxiYXJWLmNsaWVudEhlaWdodCwKKyAgICAgIHNjcm9sbFdpZHRoOiBzY3Jv
bGwuc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoOiBzY3JvbGwuY2xpZW50V2lkdGgsCisgICAgICBi
YXJXaWR0aDogY20uZGlzcGxheS5zY3JvbGxiYXJILmNsaWVudFdpZHRoLAorICAgICAgZG9jSGVp
Z2h0OiBNYXRoLnJvdW5kKGNtLmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVydChjbS5kaXNwbGF5KSkK
KyAgICB9OworICB9CisKICAgLy8gUmUtc3luY2hyb25pemUgdGhlIGZha2Ugc2Nyb2xsYmFycyB3
aXRoIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKLSAgLy8gY29udGVudC4gT3B0aW9uYWxseSBmb3Jj
ZSBhIHNjcm9sbFRvcC4KLSAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsYmFycyhjbSkgewotICAgIHZh
ciBkID0gY20uZGlzcGxheSwgZG9jSGVpZ2h0ID0gY20uZG9jLmhlaWdodDsKLSAgICB2YXIgdG90
YWxIZWlnaHQgPSBkb2NIZWlnaHQgKyBwYWRkaW5nVmVydChkKTsKLSAgICBkLnNpemVyLnN0eWxl
Lm1pbkhlaWdodCA9IGQuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9IHRvdGFsSGVpZ2h0ICsgInB4
IjsKLSAgICBkLmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgodG90YWxIZWlnaHQsIGQu
c2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYpICsgInB4IjsKLSAgICB2YXIg
c2Nyb2xsSGVpZ2h0ID0gTWF0aC5tYXgodG90YWxIZWlnaHQsIGQuc2Nyb2xsZXIuc2Nyb2xsSGVp
Z2h0KTsKLSAgICB2YXIgbmVlZHNIID0gZC5zY3JvbGxlci5zY3JvbGxXaWR0aCA+IChkLnNjcm9s
bGVyLmNsaWVudFdpZHRoICsgMSk7Ci0gICAgdmFyIG5lZWRzViA9IHNjcm9sbEhlaWdodCA+IChk
LnNjcm9sbGVyLmNsaWVudEhlaWdodCArIDEpOworICAvLyBjb250ZW50LgorICBmdW5jdGlvbiB1
cGRhdGVTY3JvbGxiYXJzKGNtLCBtZWFzdXJlKSB7CisgICAgaWYgKCFtZWFzdXJlKSBtZWFzdXJl
ID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOworICAgIHZhciBkID0gY20uZGlzcGxheTsKKyAg
ICB2YXIgc2Nyb2xsSGVpZ2h0ID0gbWVhc3VyZS5kb2NIZWlnaHQgKyBzY3JvbGxlckN1dE9mZjsK
KyAgICB2YXIgbmVlZHNIID0gbWVhc3VyZS5zY3JvbGxXaWR0aCA+IG1lYXN1cmUuY2xpZW50V2lk
dGg7CisgICAgdmFyIG5lZWRzViA9IHNjcm9sbEhlaWdodCA+IG1lYXN1cmUuY2xpZW50SGVpZ2h0
OwogICAgIGlmIChuZWVkc1YpIHsKICAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5ID0g
ImJsb2NrIjsKICAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5ib3R0b20gPSBuZWVkc0ggPyBzY3Jv
bGxiYXJXaWR0aChkLm1lYXN1cmUpICsgInB4IiA6ICIwIjsKKyAgICAgIC8vIEEgYnVnIGluIElF
OCBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBuZWdhdGl2ZSwgc28gZ3VhcmQgaXQuCiAgICAg
ICBkLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQgPQotICAgICAgICAoc2Nyb2xs
SGVpZ2h0IC0gZC5zY3JvbGxlci5jbGllbnRIZWlnaHQgKyBkLnNjcm9sbGJhclYuY2xpZW50SGVp
Z2h0KSArICJweCI7CisgICAgICAgIE1hdGgubWF4KDAsIHNjcm9sbEhlaWdodCAtIG1lYXN1cmUu
Y2xpZW50SGVpZ2h0ICsgKG1lYXN1cmUuYmFySGVpZ2h0IHx8IGQuc2Nyb2xsYmFyVi5jbGllbnRI
ZWlnaHQpKSArICJweCI7CiAgICAgfSBlbHNlIHsKICAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5k
aXNwbGF5ID0gIiI7CiAgICAgICBkLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQg
PSAiMCI7CkBAIC0zNDIsNyArNDIyLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICBkLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICBk
LnNjcm9sbGJhckguc3R5bGUucmlnaHQgPSBuZWVkc1YgPyBzY3JvbGxiYXJXaWR0aChkLm1lYXN1
cmUpICsgInB4IiA6ICIwIjsKICAgICAgIGQuc2Nyb2xsYmFySC5maXJzdENoaWxkLnN0eWxlLndp
ZHRoID0KLSAgICAgICAgKGQuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggLSBkLnNjcm9sbGVyLmNsaWVu
dFdpZHRoICsgZC5zY3JvbGxiYXJILmNsaWVudFdpZHRoKSArICJweCI7CisgICAgICAgIChtZWFz
dXJlLnNjcm9sbFdpZHRoIC0gbWVhc3VyZS5jbGllbnRXaWR0aCArIChtZWFzdXJlLmJhcldpZHRo
IHx8IGQuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCkpICsgInB4IjsKICAgICB9IGVsc2UgewogICAg
ICAgZC5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgIGQuc2Nyb2xsYmFySC5m
aXJzdENoaWxkLnN0eWxlLndpZHRoID0gIjAiOwpAQCAtMzU5LDMzICs0MzksNjEgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CgogICAgIGlmIChtYWNfZ2VMaW9uICYmIHNjcm9s
bGJhcldpZHRoKGQubWVhc3VyZSkgPT09IDApIHsKICAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5t
aW5XaWR0aCA9IGQuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQgPSBtYWNfZ2VNb3VudGFpbkxp
b24gPyAiMThweCIgOiAiMTJweCI7Ci0gICAgICBkLnNjcm9sbGJhclYuc3R5bGUucG9pbnRlckV2
ZW50cyA9IGQuc2Nyb2xsYmFySC5zdHlsZS5wb2ludGVyRXZlbnRzID0gIm5vbmUiOworICAgICAg
dmFyIGJhck1vdXNlRG93biA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKGVfdGFyZ2V0KGUp
ICE9IGQuc2Nyb2xsYmFyViAmJiBlX3RhcmdldChlKSAhPSBkLnNjcm9sbGJhckgpCisgICAgICAg
ICAgb3BlcmF0aW9uKGNtLCBvbk1vdXNlRG93bikoZSk7CisgICAgICB9OworICAgICAgb24oZC5z
Y3JvbGxiYXJWLCAibW91c2Vkb3duIiwgYmFyTW91c2VEb3duKTsKKyAgICAgIG9uKGQuc2Nyb2xs
YmFySCwgIm1vdXNlZG93biIsIGJhck1vdXNlRG93bik7CiAgICAgfQogICB9CgorICAvLyBDb21w
dXRlIHRoZSBsaW5lcyB0aGF0IGFyZSB2aXNpYmxlIGluIGEgZ2l2ZW4gdmlld3BvcnQgKGRlZmF1
bHRzCisgIC8vIHRoZSB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24pLiB2aWV3UG9ydCBtYXkg
Y29udGFpbiB0b3AsCisgIC8vIGhlaWdodCwgYW5kIGVuc3VyZSAoc2VlIG9wLnNjcm9sbFRvUG9z
KSBwcm9wZXJ0aWVzLgogICBmdW5jdGlvbiB2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jLCB2aWV3
UG9ydCkgewotICAgIHZhciB0b3AgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCwgaGVpZ2h0
ID0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKLSAgICBpZiAodHlwZW9mIHZpZXdQb3J0
ID09ICJudW1iZXIiKSB0b3AgPSB2aWV3UG9ydDsKLSAgICBlbHNlIGlmICh2aWV3UG9ydCkge3Rv
cCA9IHZpZXdQb3J0LnRvcDsgaGVpZ2h0ID0gdmlld1BvcnQuYm90dG9tIC0gdmlld1BvcnQudG9w
O30KKyAgICB2YXIgdG9wID0gdmlld1BvcnQgJiYgdmlld1BvcnQudG9wICE9IG51bGwgPyB2aWV3
UG9ydC50b3AgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDsKICAgICB0b3AgPSBNYXRoLmZs
b29yKHRvcCAtIHBhZGRpbmdUb3AoZGlzcGxheSkpOwotICAgIHZhciBib3R0b20gPSBNYXRoLmNl
aWwodG9wICsgaGVpZ2h0KTsKLSAgICByZXR1cm4ge2Zyb206IGxpbmVBdEhlaWdodChkb2MsIHRv
cCksIHRvOiBsaW5lQXRIZWlnaHQoZG9jLCBib3R0b20pfTsKKyAgICB2YXIgYm90dG9tID0gdmll
d1BvcnQgJiYgdmlld1BvcnQuYm90dG9tICE9IG51bGwgPyB2aWV3UG9ydC5ib3R0b20gOiB0b3Ag
KyBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OworCisgICAgdmFyIGZyb20gPSBsaW5lQXRI
ZWlnaHQoZG9jLCB0b3ApLCB0byA9IGxpbmVBdEhlaWdodChkb2MsIGJvdHRvbSk7CisgICAgLy8g
RW5zdXJlIGlzIGEge2Zyb206IHtsaW5lLCBjaH0sIHRvOiB7bGluZSwgY2h9fSBvYmplY3QsIGFu
ZAorICAgIC8vIGZvcmNlcyB0aG9zZSBsaW5lcyBpbnRvIHRoZSB2aWV3cG9ydCAoaWYgcG9zc2li
bGUpLgorICAgIGlmICh2aWV3UG9ydCAmJiB2aWV3UG9ydC5lbnN1cmUpIHsKKyAgICAgIHZhciBl
bnN1cmVGcm9tID0gdmlld1BvcnQuZW5zdXJlLmZyb20ubGluZSwgZW5zdXJlVG8gPSB2aWV3UG9y
dC5lbnN1cmUudG8ubGluZTsKKyAgICAgIGlmIChlbnN1cmVGcm9tIDwgZnJvbSkKKyAgICAgICAg
cmV0dXJuIHtmcm9tOiBlbnN1cmVGcm9tLAorICAgICAgICAgICAgICAgIHRvOiBsaW5lQXRIZWln
aHQoZG9jLCBoZWlnaHRBdExpbmUoZ2V0TGluZShkb2MsIGVuc3VyZUZyb20pKSArIGRpc3BsYXku
d3JhcHBlci5jbGllbnRIZWlnaHQpfTsKKyAgICAgIGlmIChNYXRoLm1pbihlbnN1cmVUbywgZG9j
Lmxhc3RMaW5lKCkpID49IHRvKQorICAgICAgICByZXR1cm4ge2Zyb206IGxpbmVBdEhlaWdodChk
b2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlVG8pKSAtIGRpc3BsYXkud3JhcHBl
ci5jbGllbnRIZWlnaHQpLAorICAgICAgICAgICAgICAgIHRvOiBlbnN1cmVUb307CisgICAgfQor
ICAgIHJldHVybiB7ZnJvbTogZnJvbSwgdG86IHRvfTsKICAgfQoKICAgLy8gTElORSBOVU1CRVJT
CgorICAvLyBSZS1hbGlnbiBsaW5lIG51bWJlcnMgYW5kIGd1dHRlciBtYXJrcyB0byBjb21wZW5z
YXRlIGZvcgorICAvLyBob3Jpem9udGFsIHNjcm9sbGluZy4KICAgZnVuY3Rpb24gYWxpZ25Ib3Jp
em9udGFsbHkoY20pIHsKLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CisgICAgdmFyIGRp
c3BsYXkgPSBjbS5kaXNwbGF5LCB2aWV3ID0gZGlzcGxheS52aWV3OwogICAgIGlmICghZGlzcGxh
eS5hbGlnbldpZGdldHMgJiYgKCFkaXNwbGF5Lmd1dHRlcnMuZmlyc3RDaGlsZCB8fCAhY20ub3B0
aW9ucy5maXhlZEd1dHRlcikpIHJldHVybjsKICAgICB2YXIgY29tcCA9IGNvbXBlbnNhdGVGb3JI
U2Nyb2xsKGRpc3BsYXkpIC0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICsgY20uZG9jLnNj
cm9sbExlZnQ7Ci0gICAgdmFyIGd1dHRlclcgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGgs
IGwgPSBjb21wICsgInB4IjsKLSAgICBmb3IgKHZhciBuID0gZGlzcGxheS5saW5lRGl2LmZpcnN0
Q2hpbGQ7IG47IG4gPSBuLm5leHRTaWJsaW5nKSBpZiAobi5hbGlnbmFibGUpIHsKLSAgICAgIGZv
ciAodmFyIGkgPSAwLCBhID0gbi5hbGlnbmFibGU7IGkgPCBhLmxlbmd0aDsgKytpKSBhW2ldLnN0
eWxlLmxlZnQgPSBsOworICAgIHZhciBndXR0ZXJXID0gZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdp
ZHRoLCBsZWZ0ID0gY29tcCArICJweCI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxl
bmd0aDsgaSsrKSBpZiAoIXZpZXdbaV0uaGlkZGVuKSB7CisgICAgICBpZiAoY20ub3B0aW9ucy5m
aXhlZEd1dHRlciAmJiB2aWV3W2ldLmd1dHRlcikKKyAgICAgICAgdmlld1tpXS5ndXR0ZXIuc3R5
bGUubGVmdCA9IGxlZnQ7CisgICAgICB2YXIgYWxpZ24gPSB2aWV3W2ldLmFsaWduYWJsZTsKKyAg
ICAgIGlmIChhbGlnbikgZm9yICh2YXIgaiA9IDA7IGogPCBhbGlnbi5sZW5ndGg7IGorKykKKyAg
ICAgICAgYWxpZ25bal0uc3R5bGUubGVmdCA9IGxlZnQ7CiAgICAgfQogICAgIGlmIChjbS5vcHRp
b25zLmZpeGVkR3V0dGVyKQogICAgICAgZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQgPSAoY29t
cCArIGd1dHRlclcpICsgInB4IjsKICAgfQoKKyAgLy8gVXNlZCB0byBlbnN1cmUgdGhhdCB0aGUg
bGluZSBudW1iZXIgZ3V0dGVyIGlzIHN0aWxsIHRoZSByaWdodAorICAvLyBzaXplIGZvciB0aGUg
Y3VycmVudCBkb2N1bWVudCBzaXplLiBSZXR1cm5zIHRydWUgd2hlbiBhbiB1cGRhdGUKKyAgLy8g
aXMgbmVlZGVkLgogICBmdW5jdGlvbiBtYXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0aChjbSkgewog
ICAgIGlmICghY20ub3B0aW9ucy5saW5lTnVtYmVycykgcmV0dXJuIGZhbHNlOwogICAgIHZhciBk
b2MgPSBjbS5kb2MsIGxhc3QgPSBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGRvYy5maXJzdCAr
IGRvYy5zaXplIC0gMSksIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwpAQCAtMzk4LDYgKzUwNiw3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZGlzcGxheS5saW5lTnVt
V2lkdGggPSBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoICsgcGFkZGluZzsKICAgICAgIGRpc3Bs
YXkubGluZU51bUNoYXJzID0gZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA/IGxhc3QubGVuZ3Ro
IDogLTE7CiAgICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSBkaXNwbGF5Lmxp
bmVOdW1XaWR0aCArICJweCI7CisgICAgICB1cGRhdGVHdXR0ZXJTcGFjZShjbSk7CiAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDA2LDE5MSArNTE1LDE5
MyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24gbGluZU51
bWJlckZvcihvcHRpb25zLCBpKSB7CiAgICAgcmV0dXJuIFN0cmluZyhvcHRpb25zLmxpbmVOdW1i
ZXJGb3JtYXR0ZXIoaSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVyKSk7CiAgIH0KKworICAvLyBD
b21wdXRlcyBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgKyBkaXNwbGF5Lmd1dHRlcnMub2Zm
c2V0V2lkdGgsCisgIC8vIGJ1dCB1c2luZyBnZXRCb3VuZGluZ0NsaWVudFJlY3QgdG8gZ2V0IGEg
c3ViLXBpeGVsLWFjY3VyYXRlCisgIC8vIHJlc3VsdC4KICAgZnVuY3Rpb24gY29tcGVuc2F0ZUZv
ckhTY3JvbGwoZGlzcGxheSkgewotICAgIHJldHVybiBnZXRSZWN0KGRpc3BsYXkuc2Nyb2xsZXIp
LmxlZnQgLSBnZXRSZWN0KGRpc3BsYXkuc2l6ZXIpLmxlZnQ7CisgICAgcmV0dXJuIGRpc3BsYXku
c2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRpc3BsYXkuc2l6ZXIuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDsKICAgfQoKICAgLy8gRElTUExBWSBEUkFXSU5HCgot
ICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5KGNtLCBjaGFuZ2VzLCB2aWV3UG9ydCwgZm9yY2VkKSB7
Ci0gICAgdmFyIG9sZEZyb20gPSBjbS5kaXNwbGF5LnNob3dpbmdGcm9tLCBvbGRUbyA9IGNtLmRp
c3BsYXkuc2hvd2luZ1RvLCB1cGRhdGVkOworICAvLyBVcGRhdGVzIHRoZSBkaXNwbGF5LCBzZWxl
Y3Rpb24sIGFuZCBzY3JvbGxiYXJzLCB1c2luZyB0aGUKKyAgLy8gaW5mb3JtYXRpb24gaW4gZGlz
cGxheS52aWV3IHRvIGZpbmQgb3V0IHdoaWNoIG5vZGVzIGFyZSBubyBsb25nZXIKKyAgLy8gdXAt
dG8tZGF0ZS4gVHJpZXMgdG8gYmFpbCBvdXQgZWFybHkgd2hlbiBubyBjaGFuZ2VzIGFyZSBuZWVk
ZWQsCisgIC8vIHVubGVzcyBmb3JjZWQgaXMgdHJ1ZS4KKyAgLy8gUmV0dXJucyB0cnVlIGlmIGFu
IGFjdHVhbCB1cGRhdGUgaGFwcGVuZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgZnVuY3Rpb24gdXBk
YXRlRGlzcGxheShjbSwgdmlld1BvcnQsIGZvcmNlZCkgeworICAgIHZhciBvbGRGcm9tID0gY20u
ZGlzcGxheS52aWV3RnJvbSwgb2xkVG8gPSBjbS5kaXNwbGF5LnZpZXdUbywgdXBkYXRlZDsKICAg
ICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcyhjbS5kaXNwbGF5LCBjbS5kb2MsIHZpZXdQb3J0
KTsKICAgICBmb3IgKHZhciBmaXJzdCA9IHRydWU7OyBmaXJzdCA9IGZhbHNlKSB7CiAgICAgICB2
YXIgb2xkV2lkdGggPSBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoOwotICAgICAgaWYg
KCF1cGRhdGVEaXNwbGF5SW5uZXIoY20sIGNoYW5nZXMsIHZpc2libGUsIGZvcmNlZCkpIGJyZWFr
OworICAgICAgaWYgKCF1cGRhdGVEaXNwbGF5SW5uZXIoY20sIHZpc2libGUsIGZvcmNlZCkpIGJy
ZWFrOwogICAgICAgdXBkYXRlZCA9IHRydWU7Ci0gICAgICBjaGFuZ2VzID0gW107CisKKyAgICAg
IC8vIElmIHRoZSBtYXggbGluZSBjaGFuZ2VkIHNpbmNlIGl0IHdhcyBsYXN0IG1lYXN1cmVkLCBt
ZWFzdXJlIGl0LAorICAgICAgLy8gYW5kIGVuc3VyZSB0aGUgZG9jdW1lbnQncyB3aWR0aCBtYXRj
aGVzIGl0LgorICAgICAgaWYgKGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9wdGlv
bnMubGluZVdyYXBwaW5nKQorICAgICAgICBhZGp1c3RDb250ZW50V2lkdGgoY20pOworCisgICAg
ICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsKICAgICAgIHVwZGF0
ZVNlbGVjdGlvbihjbSk7Ci0gICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtKTsKKyAgICAgIHNldERv
Y3VtZW50SGVpZ2h0KGNtLCBiYXJNZWFzdXJlKTsKKyAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20s
IGJhck1lYXN1cmUpOworICAgICAgaWYgKHdlYmtpdCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGlu
ZykKKyAgICAgICAgY2hlY2tGb3JXZWJraXRXaWR0aEJ1ZyhjbSwgYmFyTWVhc3VyZSk7IC8vIChJ
c3N1ZSAjMjQyMCkKICAgICAgIGlmIChmaXJzdCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAm
JiBvbGRXaWR0aCAhPSBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKSB7CiAgICAgICAg
IGZvcmNlZCA9IHRydWU7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogICAgICAgZm9yY2Vk
ID0gZmFsc2U7CgotICAgICAgLy8gQ2xpcCBmb3JjZWQgdmlld3BvcnQgdG8gYWN0dWFsIHNjcm9s
bGFibGUgYXJlYQotICAgICAgaWYgKHZpZXdQb3J0KQotICAgICAgICB2aWV3UG9ydCA9IE1hdGgu
bWluKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gY20uZGlzcGxheS5zY3JvbGxl
ci5jbGllbnRIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZpZXdQ
b3J0ID09ICJudW1iZXIiID8gdmlld1BvcnQgOiB2aWV3UG9ydC50b3ApOworICAgICAgLy8gQ2xp
cCBmb3JjZWQgdmlld3BvcnQgdG8gYWN0dWFsIHNjcm9sbGFibGUgYXJlYS4KKyAgICAgIGlmICh2
aWV3UG9ydCAmJiB2aWV3UG9ydC50b3AgIT0gbnVsbCkKKyAgICAgICAgdmlld1BvcnQgPSB7dG9w
OiBNYXRoLm1pbihiYXJNZWFzdXJlLmRvY0hlaWdodCAtIHNjcm9sbGVyQ3V0T2ZmIC0gYmFyTWVh
c3VyZS5jbGllbnRIZWlnaHQsIHZpZXdQb3J0LnRvcCl9OworICAgICAgLy8gVXBkYXRlZCBsaW5l
IGhlaWdodHMgbWlnaHQgcmVzdWx0IGluIHRoZSBkcmF3biBhcmVhIG5vdAorICAgICAgLy8gYWN0
dWFsbHkgY292ZXJpbmcgdGhlIHZpZXdwb3J0LiBLZWVwIGxvb3BpbmcgdW50aWwgaXQgZG9lcy4K
ICAgICAgIHZpc2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3UG9y
dCk7Ci0gICAgICBpZiAodmlzaWJsZS5mcm9tID49IGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20gJiYg
dmlzaWJsZS50byA8PSBjbS5kaXNwbGF5LnNob3dpbmdUbykKKyAgICAgIGlmICh2aXNpYmxlLmZy
b20gPj0gY20uZGlzcGxheS52aWV3RnJvbSAmJiB2aXNpYmxlLnRvIDw9IGNtLmRpc3BsYXkudmll
d1RvKQogICAgICAgICBicmVhazsKICAgICB9CgorICAgIGNtLmRpc3BsYXkudXBkYXRlTGluZU51
bWJlcnMgPSBudWxsOwogICAgIGlmICh1cGRhdGVkKSB7CiAgICAgICBzaWduYWxMYXRlcihjbSwg
InVwZGF0ZSIsIGNtKTsKLSAgICAgIGlmIChjbS5kaXNwbGF5LnNob3dpbmdGcm9tICE9IG9sZEZy
b20gfHwgY20uZGlzcGxheS5zaG93aW5nVG8gIT0gb2xkVG8pCi0gICAgICAgIHNpZ25hbExhdGVy
KGNtLCAidmlld3BvcnRDaGFuZ2UiLCBjbSwgY20uZGlzcGxheS5zaG93aW5nRnJvbSwgY20uZGlz
cGxheS5zaG93aW5nVG8pOworICAgICAgaWYgKGNtLmRpc3BsYXkudmlld0Zyb20gIT0gb2xkRnJv
bSB8fCBjbS5kaXNwbGF5LnZpZXdUbyAhPSBvbGRUbykKKyAgICAgICAgc2lnbmFsTGF0ZXIoY20s
ICJ2aWV3cG9ydENoYW5nZSIsIGNtLCBjbS5kaXNwbGF5LnZpZXdGcm9tLCBjbS5kaXNwbGF5LnZp
ZXdUbyk7CiAgICAgfQogICAgIHJldHVybiB1cGRhdGVkOwogICB9CgotICAvLyBVc2VzIGEgc2V0
IG9mIGNoYW5nZXMgcGx1cyB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gdG8KLSAgLy8gZGV0
ZXJtaW5lIHdoaWNoIERPTSB1cGRhdGVzIGhhdmUgdG8gYmUgbWFkZSwgYW5kIG1ha2VzIHRoZQot
ICAvLyB1cGRhdGVzLgotICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5SW5uZXIoY20sIGNoYW5nZXMs
IHZpc2libGUsIGZvcmNlZCkgeworICAvLyBEb2VzIHRoZSBhY3R1YWwgdXBkYXRpbmcgb2YgdGhl
IGxpbmUgZGlzcGxheS4gQmFpbHMgb3V0CisgIC8vIChyZXR1cm5pbmcgZmFsc2UpIHdoZW4gdGhl
cmUgaXMgbm90aGluZyB0byBiZSBkb25lIGFuZCBmb3JjZWQgaXMKKyAgLy8gZmFsc2UuCisgIGZ1
bmN0aW9uIHVwZGF0ZURpc3BsYXlJbm5lcihjbSwgdmlzaWJsZSwgZm9yY2VkKSB7CiAgICAgdmFy
IGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7Ci0gICAgaWYgKCFkaXNwbGF5Lndy
YXBwZXIuY2xpZW50V2lkdGgpIHsKLSAgICAgIGRpc3BsYXkuc2hvd2luZ0Zyb20gPSBkaXNwbGF5
LnNob3dpbmdUbyA9IGRvYy5maXJzdDsKLSAgICAgIGRpc3BsYXkudmlld09mZnNldCA9IDA7Cisg
ICAgaWYgKCFkaXNwbGF5LndyYXBwZXIub2Zmc2V0V2lkdGgpIHsKKyAgICAgIHJlc2V0Vmlldyhj
bSk7CiAgICAgICByZXR1cm47CiAgICAgfQoKICAgICAvLyBCYWlsIG91dCBpZiB0aGUgdmlzaWJs
ZSBhcmVhIGlzIGFscmVhZHkgcmVuZGVyZWQgYW5kIG5vdGhpbmcgY2hhbmdlZC4KLSAgICBpZiAo
IWZvcmNlZCAmJiBjaGFuZ2VzLmxlbmd0aCA9PSAwICYmCi0gICAgICAgIHZpc2libGUuZnJvbSA+
IGRpc3BsYXkuc2hvd2luZ0Zyb20gJiYgdmlzaWJsZS50byA8IGRpc3BsYXkuc2hvd2luZ1RvKQor
ICAgIGlmICghZm9yY2VkICYmIHZpc2libGUuZnJvbSA+PSBkaXNwbGF5LnZpZXdGcm9tICYmIHZp
c2libGUudG8gPD0gZGlzcGxheS52aWV3VG8gJiYKKyAgICAgICAgY291bnREaXJ0eVZpZXcoY20p
ID09IDApCiAgICAgICByZXR1cm47CgogICAgIGlmIChtYXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0
aChjbSkpCi0gICAgICBjaGFuZ2VzID0gW3tmcm9tOiBkb2MuZmlyc3QsIHRvOiBkb2MuZmlyc3Qg
KyBkb2Muc2l6ZX1dOwotICAgIHZhciBndXR0ZXJXID0gZGlzcGxheS5zaXplci5zdHlsZS5tYXJn
aW5MZWZ0ID0gZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoICsgInB4IjsKLSAgICBkaXNwbGF5
LnNjcm9sbGJhckguc3R5bGUubGVmdCA9IGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBndXR0ZXJX
IDogIjAiOwotCi0gICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGluZXMgbmVlZCB0aGVp
ciBsaW5lIG51bWJlcnMgdXBkYXRlZAotICAgIHZhciBwb3NpdGlvbnNDaGFuZ2VkRnJvbSA9IElu
ZmluaXR5OwotICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzKQotICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgKytpKQotICAgICAgICBpZiAoY2hhbmdlc1tpXS5k
aWZmICYmIGNoYW5nZXNbaV0uZnJvbSA8IHBvc2l0aW9uc0NoYW5nZWRGcm9tKSB7IHBvc2l0aW9u
c0NoYW5nZWRGcm9tID0gY2hhbmdlc1tpXS5mcm9tOyB9CisgICAgICByZXNldFZpZXcoY20pOwor
ICAgIHZhciBkaW1zID0gZ2V0RGltZW5zaW9ucyhjbSk7CgorICAgIC8vIENvbXB1dGUgYSBzdWl0
YWJsZSBuZXcgdmlld3BvcnQgKGZyb20gJiB0bykKICAgICB2YXIgZW5kID0gZG9jLmZpcnN0ICsg
ZG9jLnNpemU7CiAgICAgdmFyIGZyb20gPSBNYXRoLm1heCh2aXNpYmxlLmZyb20gLSBjbS5vcHRp
b25zLnZpZXdwb3J0TWFyZ2luLCBkb2MuZmlyc3QpOwogICAgIHZhciB0byA9IE1hdGgubWluKGVu
ZCwgdmlzaWJsZS50byArIGNtLm9wdGlvbnMudmlld3BvcnRNYXJnaW4pOwotICAgIGlmIChkaXNw
bGF5LnNob3dpbmdGcm9tIDwgZnJvbSAmJiBmcm9tIC0gZGlzcGxheS5zaG93aW5nRnJvbSA8IDIw
KSBmcm9tID0gTWF0aC5tYXgoZG9jLmZpcnN0LCBkaXNwbGF5LnNob3dpbmdGcm9tKTsKLSAgICBp
ZiAoZGlzcGxheS5zaG93aW5nVG8gPiB0byAmJiBkaXNwbGF5LnNob3dpbmdUbyAtIHRvIDwgMjAp
IHRvID0gTWF0aC5taW4oZW5kLCBkaXNwbGF5LnNob3dpbmdUbyk7CisgICAgaWYgKGRpc3BsYXku
dmlld0Zyb20gPCBmcm9tICYmIGZyb20gLSBkaXNwbGF5LnZpZXdGcm9tIDwgMjApIGZyb20gPSBN
YXRoLm1heChkb2MuZmlyc3QsIGRpc3BsYXkudmlld0Zyb20pOworICAgIGlmIChkaXNwbGF5LnZp
ZXdUbyA+IHRvICYmIGRpc3BsYXkudmlld1RvIC0gdG8gPCAyMCkgdG8gPSBNYXRoLm1pbihlbmQs
IGRpc3BsYXkudmlld1RvKTsKICAgICBpZiAoc2F3Q29sbGFwc2VkU3BhbnMpIHsKLSAgICAgIGZy
b20gPSBsaW5lTm8odmlzdWFsTGluZShkb2MsIGdldExpbmUoZG9jLCBmcm9tKSkpOwotICAgICAg
d2hpbGUgKHRvIDwgZW5kICYmIGxpbmVJc0hpZGRlbihkb2MsIGdldExpbmUoZG9jLCB0bykpKSAr
K3RvOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhIHJhbmdlIG9mIHRoZW9yZXRpY2FsbHkgaW50
YWN0IGxpbmVzLCBhbmQgcHVuY2ggaG9sZXMKLSAgICAvLyBpbiB0aGF0IHVzaW5nIHRoZSBjaGFu
Z2UgaW5mby4KLSAgICB2YXIgaW50YWN0ID0gW3tmcm9tOiBNYXRoLm1heChkaXNwbGF5LnNob3dp
bmdGcm9tLCBkb2MuZmlyc3QpLAotICAgICAgICAgICAgICAgICAgIHRvOiBNYXRoLm1pbihkaXNw
bGF5LnNob3dpbmdUbywgZW5kKX1dOwotICAgIGlmIChpbnRhY3RbMF0uZnJvbSA+PSBpbnRhY3Rb
MF0udG8pIGludGFjdCA9IFtdOwotICAgIGVsc2UgaW50YWN0ID0gY29tcHV0ZUludGFjdChpbnRh
Y3QsIGNoYW5nZXMpOwotICAgIC8vIFdoZW4gbWVyZ2VkIGxpbmVzIGFyZSBwcmVzZW50LCB3ZSBt
aWdodCBoYXZlIHRvIHJlZHVjZSB0aGUKLSAgICAvLyBpbnRhY3QgcmFuZ2VzIGJlY2F1c2UgY2hh
bmdlcyBpbiBjb250aW51ZWQgZnJhZ21lbnRzIG9mIHRoZQotICAgIC8vIGludGFjdCBsaW5lcyBk
byByZXF1aXJlIHRoZSBsaW5lcyB0byBiZSByZWRyYXduLgotICAgIGlmIChzYXdDb2xsYXBzZWRT
cGFucykKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50YWN0Lmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIHZhciByYW5nZSA9IGludGFjdFtpXSwgbWVyZ2VkOwotICAgICAgICB3aGlsZSAobWVy
Z2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGdldExpbmUoZG9jLCByYW5nZS50byAtIDEpKSkgewot
ICAgICAgICAgIHZhciBuZXdUbyA9IG1lcmdlZC5maW5kKCkuZnJvbS5saW5lOwotICAgICAgICAg
IGlmIChuZXdUbyA+IHJhbmdlLmZyb20pIHJhbmdlLnRvID0gbmV3VG87Ci0gICAgICAgICAgZWxz
ZSB7IGludGFjdC5zcGxpY2UoaS0tLCAxKTsgYnJlYWs7IH0KLSAgICAgICAgfQotICAgICAgfQot
Ci0gICAgLy8gQ2xpcCBvZmYgdGhlIHBhcnRzIHRoYXQgd29uJ3QgYmUgdmlzaWJsZQotICAgIHZh
ciBpbnRhY3RMaW5lcyA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRhY3QubGVuZ3Ro
OyArK2kpIHsKLSAgICAgIHZhciByYW5nZSA9IGludGFjdFtpXTsKLSAgICAgIGlmIChyYW5nZS5m
cm9tIDwgZnJvbSkgcmFuZ2UuZnJvbSA9IGZyb207Ci0gICAgICBpZiAocmFuZ2UudG8gPiB0bykg
cmFuZ2UudG8gPSB0bzsKLSAgICAgIGlmIChyYW5nZS5mcm9tID49IHJhbmdlLnRvKSBpbnRhY3Qu
c3BsaWNlKGktLSwgMSk7Ci0gICAgICBlbHNlIGludGFjdExpbmVzICs9IHJhbmdlLnRvIC0gcmFu
Z2UuZnJvbTsKLSAgICB9Ci0gICAgaWYgKCFmb3JjZWQgJiYgaW50YWN0TGluZXMgPT0gdG8gLSBm
cm9tICYmIGZyb20gPT0gZGlzcGxheS5zaG93aW5nRnJvbSAmJiB0byA9PSBkaXNwbGF5LnNob3dp
bmdUbykgewotICAgICAgdXBkYXRlVmlld09mZnNldChjbSk7Ci0gICAgICByZXR1cm47CisgICAg
ICBmcm9tID0gdmlzdWFsTGluZU5vKGNtLmRvYywgZnJvbSk7CisgICAgICB0byA9IHZpc3VhbExp
bmVFbmRObyhjbS5kb2MsIHRvKTsKICAgICB9Ci0gICAgaW50YWN0LnNvcnQoZnVuY3Rpb24oYSwg
Yikge3JldHVybiBhLmZyb20gLSBiLmZyb207fSk7CgotICAgIC8vIEF2b2lkIGNyYXNoaW5nIG9u
IElFJ3MgInVuc3BlY2lmaWVkIGVycm9yIiB3aGVuIGluIGlmcmFtZXMKLSAgICB0cnkgewotICAg
ICAgdmFyIGZvY3VzZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OwotICAgIH0gY2F0Y2goZSkg
e30KLSAgICBpZiAoaW50YWN0TGluZXMgPCAodG8gLSBmcm9tKSAqIC43KSBkaXNwbGF5LmxpbmVE
aXYuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICBwYXRjaERpc3BsYXkoY20sIGZyb20sIHRv
LCBpbnRhY3QsIHBvc2l0aW9uc0NoYW5nZWRGcm9tKTsKLSAgICBkaXNwbGF5LmxpbmVEaXYuc3R5
bGUuZGlzcGxheSA9ICIiOwotICAgIGlmIChmb2N1c2VkICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1l
bnQgIT0gZm9jdXNlZCAmJiBmb2N1c2VkLm9mZnNldEhlaWdodCkgZm9jdXNlZC5mb2N1cygpOwot
Ci0gICAgdmFyIGRpZmZlcmVudCA9IGZyb20gIT0gZGlzcGxheS5zaG93aW5nRnJvbSB8fCB0byAh
PSBkaXNwbGF5LnNob3dpbmdUbyB8fAorICAgIHZhciBkaWZmZXJlbnQgPSBmcm9tICE9IGRpc3Bs
YXkudmlld0Zyb20gfHwgdG8gIT0gZGlzcGxheS52aWV3VG8gfHwKICAgICAgIGRpc3BsYXkubGFz
dFNpemVDICE9IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7Ci0gICAgLy8gVGhpcyBpcyBq
dXN0IGEgYm9ndXMgZm9ybXVsYSB0aGF0IGRldGVjdHMgd2hlbiB0aGUgZWRpdG9yIGlzCi0gICAg
Ly8gcmVzaXplZCBvciB0aGUgZm9udCBzaXplIGNoYW5nZXMuCisgICAgYWRqdXN0VmlldyhjbSwg
ZnJvbSwgdG8pOworCisgICAgZGlzcGxheS52aWV3T2Zmc2V0ID0gaGVpZ2h0QXRMaW5lKGdldExp
bmUoY20uZG9jLCBkaXNwbGF5LnZpZXdGcm9tKSk7CisgICAgLy8gUG9zaXRpb24gdGhlIG1vdmVy
IGRpdiB0byBhbGlnbiB3aXRoIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbgorICAgIGNtLmRp
c3BsYXkubW92ZXIuc3R5bGUudG9wID0gZGlzcGxheS52aWV3T2Zmc2V0ICsgInB4IjsKKworICAg
IHZhciB0b1VwZGF0ZSA9IGNvdW50RGlydHlWaWV3KGNtKTsKKyAgICBpZiAoIWRpZmZlcmVudCAm
JiB0b1VwZGF0ZSA9PSAwICYmICFmb3JjZWQpIHJldHVybjsKKworICAgIC8vIEZvciBiaWcgY2hh
bmdlcywgd2UgaGlkZSB0aGUgZW5jbG9zaW5nIGVsZW1lbnQgZHVyaW5nIHRoZQorICAgIC8vIHVw
ZGF0ZSwgc2luY2UgdGhhdCBzcGVlZHMgdXAgdGhlIG9wZXJhdGlvbnMgb24gbW9zdCBicm93c2Vy
cy4KKyAgICB2YXIgZm9jdXNlZCA9IGFjdGl2ZUVsdCgpOworICAgIGlmICh0b1VwZGF0ZSA+IDQp
IGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgIHBhdGNoRGlzcGxh
eShjbSwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycywgZGltcyk7CisgICAgaWYgKHRvVXBkYXRl
ID4gNCkgZGlzcGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAvLyBUaGVyZSBt
aWdodCBoYXZlIGJlZW4gYSB3aWRnZXQgd2l0aCBhIGZvY3VzZWQgZWxlbWVudCB0aGF0IGdvdAor
ICAgIC8vIGhpZGRlbiBvciB1cGRhdGVkLCBpZiBzbyByZS1mb2N1cyBpdC4KKyAgICBpZiAoZm9j
dXNlZCAmJiBhY3RpdmVFbHQoKSAhPSBmb2N1c2VkICYmIGZvY3VzZWQub2Zmc2V0SGVpZ2h0KSBm
b2N1c2VkLmZvY3VzKCk7CisKKyAgICAvLyBQcmV2ZW50IHNlbGVjdGlvbiBhbmQgY3Vyc29ycyBm
cm9tIGludGVyZmVyaW5nIHdpdGggdGhlIHNjcm9sbAorICAgIC8vIHdpZHRoLgorICAgIHJlbW92
ZUNoaWxkcmVuKGRpc3BsYXkuY3Vyc29yRGl2KTsKKyAgICByZW1vdmVDaGlsZHJlbihkaXNwbGF5
LnNlbGVjdGlvbkRpdik7CisKICAgICBpZiAoZGlmZmVyZW50KSB7CiAgICAgICBkaXNwbGF5Lmxh
c3RTaXplQyA9IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAgICBzdGFydFdvcmtl
cihjbSwgNDAwKTsKICAgICB9Ci0gICAgZGlzcGxheS5zaG93aW5nRnJvbSA9IGZyb207IGRpc3Bs
YXkuc2hvd2luZ1RvID0gdG87CgogICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKTsKLSAg
ICB1cGRhdGVWaWV3T2Zmc2V0KGNtKTsKCiAgICAgcmV0dXJuIHRydWU7CiAgIH0KCisgIGZ1bmN0
aW9uIGFkanVzdENvbnRlbnRXaWR0aChjbSkgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxh
eTsKKyAgICB2YXIgd2lkdGggPSBtZWFzdXJlQ2hhcihjbSwgZGlzcGxheS5tYXhMaW5lLCBkaXNw
bGF5Lm1heExpbmUudGV4dC5sZW5ndGgpLmxlZnQ7CisgICAgZGlzcGxheS5tYXhMaW5lQ2hhbmdl
ZCA9IGZhbHNlOworICAgIHZhciBtaW5XaWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoICsgMyk7Cisg
ICAgdmFyIG1heFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExl
ZnQgKyBtaW5XaWR0aCArIHNjcm9sbGVyQ3V0T2ZmIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRX
aWR0aCk7CisgICAgZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoICsgInB4
IjsKKyAgICBpZiAobWF4U2Nyb2xsTGVmdCA8IGNtLmRvYy5zY3JvbGxMZWZ0KQorICAgICAgc2V0
U2Nyb2xsTGVmdChjbSwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0LCBtYXhT
Y3JvbGxMZWZ0KSwgdHJ1ZSk7CisgIH0KKworICBmdW5jdGlvbiBzZXREb2N1bWVudEhlaWdodChj
bSwgbWVhc3VyZSkgeworICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gY20u
ZGlzcGxheS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gbWVhc3VyZS5kb2NIZWlnaHQgKyAicHgi
OworICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heChtZWFzdXJl
LmRvY0hlaWdodCwgbWVhc3VyZS5jbGllbnRIZWlnaHQgLSBzY3JvbGxlckN1dE9mZikgKyAicHgi
OworICB9CisKKworICBmdW5jdGlvbiBjaGVja0ZvcldlYmtpdFdpZHRoQnVnKGNtLCBtZWFzdXJl
KSB7CisgICAgLy8gV29yayBhcm91bmQgV2Via2l0IGJ1ZyB3aGVyZSBpdCBzb21ldGltZXMgcmVz
ZXJ2ZXMgc3BhY2UgZm9yIGEKKyAgICAvLyBub24tZXhpc3RpbmcgcGhhbnRvbSBzY3JvbGxiYXIg
aW4gdGhlIHNjcm9sbGVyIChJc3N1ZSAjMjQyMCkKKyAgICBpZiAoY20uZGlzcGxheS5zaXplci5v
ZmZzZXRXaWR0aCArIGNtLmRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCA8IGNtLmRpc3BsYXku
c2Nyb2xsZXIuY2xpZW50V2lkdGggLSAxKSB7CisgICAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxl
Lm1pbkhlaWdodCA9IGNtLmRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9ICIwcHgiOwor
ICAgICAgY20uZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IG1lYXN1cmUuZG9jSGVpZ2h0
ICsgInB4IjsKKyAgICB9CisgIH0KKworICAvLyBSZWFkIHRoZSBhY3R1YWwgaGVpZ2h0cyBvZiB0
aGUgcmVuZGVyZWQgbGluZXMsIGFuZCB1cGRhdGUgdGhlaXIKKyAgLy8gc3RvcmVkIGhlaWdodHMg
dG8gbWF0Y2guCiAgIGZ1bmN0aW9uIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKSB7CiAgICAg
dmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwogICAgIHZhciBwcmV2Qm90dG9tID0gZGlzcGxheS5s
aW5lRGl2Lm9mZnNldFRvcDsKLSAgICBmb3IgKHZhciBub2RlID0gZGlzcGxheS5saW5lRGl2LmZp
cnN0Q2hpbGQsIGhlaWdodDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIGlmIChub2Rl
LmxpbmVPYmopIHsKLSAgICAgIGlmIChpZV9sdDgpIHsKLSAgICAgICAgdmFyIGJvdCA9IG5vZGUu
b2Zmc2V0VG9wICsgbm9kZS5vZmZzZXRIZWlnaHQ7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBk
aXNwbGF5LnZpZXcubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBjdXIgPSBkaXNwbGF5LnZpZXdb
aV0sIGhlaWdodDsKKyAgICAgIGlmIChjdXIuaGlkZGVuKSBjb250aW51ZTsKKyAgICAgIGlmIChp
ZV91cHRvNykgeworICAgICAgICB2YXIgYm90ID0gY3VyLm5vZGUub2Zmc2V0VG9wICsgY3VyLm5v
ZGUub2Zmc2V0SGVpZ2h0OwogICAgICAgICBoZWlnaHQgPSBib3QgLSBwcmV2Qm90dG9tOwogICAg
ICAgICBwcmV2Qm90dG9tID0gYm90OwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIGJveCA9
IGdldFJlY3Qobm9kZSk7CisgICAgICAgIHZhciBib3ggPSBjdXIubm9kZS5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKTsKICAgICAgICAgaGVpZ2h0ID0gYm94LmJvdHRvbSAtIGJveC50b3A7CiAgICAg
ICB9Ci0gICAgICB2YXIgZGlmZiA9IG5vZGUubGluZU9iai5oZWlnaHQgLSBoZWlnaHQ7CisgICAg
ICB2YXIgZGlmZiA9IGN1ci5saW5lLmhlaWdodCAtIGhlaWdodDsKICAgICAgIGlmIChoZWlnaHQg
PCAyKSBoZWlnaHQgPSB0ZXh0SGVpZ2h0KGRpc3BsYXkpOwogICAgICAgaWYgKGRpZmYgPiAuMDAx
IHx8IGRpZmYgPCAtLjAwMSkgewotICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KG5vZGUubGluZU9i
aiwgaGVpZ2h0KTsKLSAgICAgICAgdmFyIHdpZGdldHMgPSBub2RlLmxpbmVPYmoud2lkZ2V0czsK
LSAgICAgICAgaWYgKHdpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkZ2V0cy5sZW5ndGg7
ICsraSkKLSAgICAgICAgICB3aWRnZXRzW2ldLmhlaWdodCA9IHdpZGdldHNbaV0ubm9kZS5vZmZz
ZXRIZWlnaHQ7CisgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQoY3VyLmxpbmUsIGhlaWdodCk7Cisg
ICAgICAgIHVwZGF0ZVdpZGdldEhlaWdodChjdXIubGluZSk7CisgICAgICAgIGlmIChjdXIucmVz
dCkgZm9yICh2YXIgaiA9IDA7IGogPCBjdXIucmVzdC5sZW5ndGg7IGorKykKKyAgICAgICAgICB1
cGRhdGVXaWRnZXRIZWlnaHQoY3VyLnJlc3Rbal0pOwogICAgICAgfQogICAgIH0KICAgfQoKLSAg
ZnVuY3Rpb24gdXBkYXRlVmlld09mZnNldChjbSkgewotICAgIHZhciBvZmYgPSBjbS5kaXNwbGF5
LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoY20sIGdldExpbmUoY20uZG9jLCBjbS5kaXNwbGF5
LnNob3dpbmdGcm9tKSk7Ci0gICAgLy8gUG9zaXRpb24gdGhlIG1vdmVyIGRpdiB0byBhbGlnbiB3
aXRoIHRoZSBjdXJyZW50IHZpcnR1YWwgc2Nyb2xsIHBvc2l0aW9uCi0gICAgY20uZGlzcGxheS5t
b3Zlci5zdHlsZS50b3AgPSBvZmYgKyAicHgiOwotICB9Ci0KLSAgZnVuY3Rpb24gY29tcHV0ZUlu
dGFjdChpbnRhY3QsIGNoYW5nZXMpIHsKLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoYW5nZXMu
bGVuZ3RoIHx8IDA7IGkgPCBsOyArK2kpIHsKLSAgICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ld
LCBpbnRhY3QyID0gW10sIGRpZmYgPSBjaGFuZ2UuZGlmZiB8fCAwOwotICAgICAgZm9yICh2YXIg
aiA9IDAsIGwyID0gaW50YWN0Lmxlbmd0aDsgaiA8IGwyOyArK2opIHsKLSAgICAgICAgdmFyIHJh
bmdlID0gaW50YWN0W2pdOwotICAgICAgICBpZiAoY2hhbmdlLnRvIDw9IHJhbmdlLmZyb20gJiYg
Y2hhbmdlLmRpZmYpIHsKLSAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206IHJhbmdlLmZyb20g
KyBkaWZmLCB0bzogcmFuZ2UudG8gKyBkaWZmfSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hhbmdl
LnRvIDw9IHJhbmdlLmZyb20gfHwgY2hhbmdlLmZyb20gPj0gcmFuZ2UudG8pIHsKLSAgICAgICAg
ICBpbnRhY3QyLnB1c2gocmFuZ2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChj
aGFuZ2UuZnJvbSA+IHJhbmdlLmZyb20pCi0gICAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206
IHJhbmdlLmZyb20sIHRvOiBjaGFuZ2UuZnJvbX0pOwotICAgICAgICAgIGlmIChjaGFuZ2UudG8g
PCByYW5nZS50bykKLSAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogY2hhbmdlLnRvICsg
ZGlmZiwgdG86IHJhbmdlLnRvICsgZGlmZn0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBp
bnRhY3QgPSBpbnRhY3QyOwotICAgIH0KLSAgICByZXR1cm4gaW50YWN0OworICAvLyBSZWFkIGFu
ZCBzdG9yZSB0aGUgaGVpZ2h0IG9mIGxpbmUgd2lkZ2V0cyBhc3NvY2lhdGVkIHdpdGggdGhlCisg
IC8vIGdpdmVuIGxpbmUuCisgIGZ1bmN0aW9uIHVwZGF0ZVdpZGdldEhlaWdodChsaW5lKSB7Cisg
ICAgaWYgKGxpbmUud2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVu
Z3RoOyArK2kpCisgICAgICBsaW5lLndpZGdldHNbaV0uaGVpZ2h0ID0gbGluZS53aWRnZXRzW2ld
Lm5vZGUub2Zmc2V0SGVpZ2h0OwogICB9CgorICAvLyBEbyBhIGJ1bGstcmVhZCBvZiB0aGUgRE9N
IHBvc2l0aW9ucyBhbmQgc2l6ZXMgbmVlZGVkIHRvIGRyYXcgdGhlCisgIC8vIHZpZXcsIHNvIHRo
YXQgd2UgZG9uJ3QgaW50ZXJsZWF2ZSByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBET00uCiAg
IGZ1bmN0aW9uIGdldERpbWVuc2lvbnMoY20pIHsKICAgICB2YXIgZCA9IGNtLmRpc3BsYXksIGxl
ZnQgPSB7fSwgd2lkdGggPSB7fTsKICAgICBmb3IgKHZhciBuID0gZC5ndXR0ZXJzLmZpcnN0Q2hp
bGQsIGkgPSAwOyBuOyBuID0gbi5uZXh0U2libGluZywgKytpKSB7CkBAIC02MDQsMTU0ICs3MTUs
MjA3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgd3Jh
cHBlcldpZHRoOiBkLndyYXBwZXIuY2xpZW50V2lkdGh9OwogICB9CgotICBmdW5jdGlvbiBwYXRj
aERpc3BsYXkoY20sIGZyb20sIHRvLCBpbnRhY3QsIHVwZGF0ZU51bWJlcnNGcm9tKSB7Ci0gICAg
dmFyIGRpbXMgPSBnZXREaW1lbnNpb25zKGNtKTsKKyAgLy8gU3luYyB0aGUgYWN0dWFsIGRpc3Bs
YXkgRE9NIHN0cnVjdHVyZSB3aXRoIGRpc3BsYXkudmlldywgcmVtb3ZpbmcKKyAgLy8gbm9kZXMg
Zm9yIGxpbmVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB2aWV3LCBhbmQgY3JlYXRpbmcgdGhlIG9u
ZXMKKyAgLy8gdGhhdCBhcmUgbm90IHRoZXJlIHlldCwgYW5kIHVwZGF0aW5nIHRoZSBvbmVzIHRo
YXQgYXJlIG91dCBvZgorICAvLyBkYXRlLgorICBmdW5jdGlvbiBwYXRjaERpc3BsYXkoY20sIHVw
ZGF0ZU51bWJlcnNGcm9tLCBkaW1zKSB7CiAgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBs
aW5lTnVtYmVycyA9IGNtLm9wdGlvbnMubGluZU51bWJlcnM7Ci0gICAgaWYgKCFpbnRhY3QubGVu
Z3RoICYmICghd2Via2l0IHx8ICFjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCkpCi0gICAg
ICByZW1vdmVDaGlsZHJlbihkaXNwbGF5LmxpbmVEaXYpOwogICAgIHZhciBjb250YWluZXIgPSBk
aXNwbGF5LmxpbmVEaXYsIGN1ciA9IGNvbnRhaW5lci5maXJzdENoaWxkOwoKICAgICBmdW5jdGlv
biBybShub2RlKSB7CiAgICAgICB2YXIgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICBp
ZiAod2Via2l0ICYmIG1hYyAmJiBjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCA9PSBub2Rl
KSB7CisgICAgICAvLyBXb3JrcyBhcm91bmQgYSB0aHJvdy1zY3JvbGwgYnVnIGluIE9TIFggV2Vi
a2l0CisgICAgICBpZiAod2Via2l0ICYmIG1hYyAmJiBjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRh
cmdldCA9PSBub2RlKQogICAgICAgICBub2RlLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAg
ICAgIG5vZGUubGluZU9iaiA9IG51bGw7Ci0gICAgICB9IGVsc2UgeworICAgICAgZWxzZQogICAg
ICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7Ci0gICAgICB9CiAgICAgICBy
ZXR1cm4gbmV4dDsKICAgICB9CgotICAgIHZhciBuZXh0SW50YWN0ID0gaW50YWN0LnNoaWZ0KCks
IGxpbmVOID0gZnJvbTsKLSAgICBjbS5kb2MuaXRlcihmcm9tLCB0bywgZnVuY3Rpb24obGluZSkg
ewotICAgICAgaWYgKG5leHRJbnRhY3QgJiYgbmV4dEludGFjdC50byA9PSBsaW5lTikgbmV4dElu
dGFjdCA9IGludGFjdC5zaGlmdCgpOwotICAgICAgaWYgKGxpbmVJc0hpZGRlbihjbS5kb2MsIGxp
bmUpKSB7Ci0gICAgICAgIGlmIChsaW5lLmhlaWdodCAhPSAwKSB1cGRhdGVMaW5lSGVpZ2h0KGxp
bmUsIDApOwotICAgICAgICBpZiAobGluZS53aWRnZXRzICYmIGN1ciAmJiBjdXIucHJldmlvdXNT
aWJsaW5nKSBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgIHZhciB3ID0gbGluZS53aWRnZXRzW2ldOwotICAgICAgICAgIGlmICh3LnNob3dJ
ZkhpZGRlbikgewotICAgICAgICAgICAgdmFyIHByZXYgPSBjdXIucHJldmlvdXNTaWJsaW5nOwot
ICAgICAgICAgICAgaWYgKC9wcmUvaS50ZXN0KHByZXYubm9kZU5hbWUpKSB7Ci0gICAgICAgICAg
ICAgIHZhciB3cmFwID0gZWx0KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZl
Iik7Ci0gICAgICAgICAgICAgIHByZXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod3JhcCwgcHJl
dik7Ci0gICAgICAgICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQocHJldik7Ci0gICAgICAgICAgICAg
IHByZXYgPSB3cmFwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHdub2RlID0gcHJl
di5hcHBlbmRDaGlsZChlbHQoImRpdiIsIFt3Lm5vZGVdLCAiQ29kZU1pcnJvci1saW5ld2lkZ2V0
IikpOwotICAgICAgICAgICAgaWYgKCF3LmhhbmRsZU1vdXNlRXZlbnRzKSB3bm9kZS5pZ25vcmVF
dmVudHMgPSB0cnVlOwotICAgICAgICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHcsIHdub2RlLCBw
cmV2LCBkaW1zKTsKLSAgICAgICAgICB9CisgICAgdmFyIHZpZXcgPSBkaXNwbGF5LnZpZXcsIGxp
bmVOID0gZGlzcGxheS52aWV3RnJvbTsKKyAgICAvLyBMb29wIG92ZXIgdGhlIGVsZW1lbnRzIGlu
IHRoZSB2aWV3LCBzeW5jaW5nIGN1ciAodGhlIERPTSBub2RlcworICAgIC8vIGluIGRpc3BsYXku
bGluZURpdikgd2l0aCB0aGUgdmlldyBhcyB3ZSBnby4KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHZpZXcubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07CisgICAg
ICBpZiAobGluZVZpZXcuaGlkZGVuKSB7CisgICAgICB9IGVsc2UgaWYgKCFsaW5lVmlldy5ub2Rl
KSB7IC8vIE5vdCBkcmF3biB5ZXQKKyAgICAgICAgdmFyIG5vZGUgPSBidWlsZExpbmVFbGVtZW50
KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpOworICAgICAgICBjb250YWluZXIuaW5zZXJ0QmVm
b3JlKG5vZGUsIGN1cik7CisgICAgICB9IGVsc2UgeyAvLyBBbHJlYWR5IGRyYXduCisgICAgICAg
IHdoaWxlIChjdXIgIT0gbGluZVZpZXcubm9kZSkgY3VyID0gcm0oY3VyKTsKKyAgICAgICAgdmFy
IHVwZGF0ZU51bWJlciA9IGxpbmVOdW1iZXJzICYmIHVwZGF0ZU51bWJlcnNGcm9tICE9IG51bGwg
JiYKKyAgICAgICAgICB1cGRhdGVOdW1iZXJzRnJvbSA8PSBsaW5lTiAmJiBsaW5lVmlldy5saW5l
TnVtYmVyOworICAgICAgICBpZiAobGluZVZpZXcuY2hhbmdlcykgeworICAgICAgICAgIGlmIChp
bmRleE9mKGxpbmVWaWV3LmNoYW5nZXMsICJndXR0ZXIiKSA+IC0xKSB1cGRhdGVOdW1iZXIgPSBm
YWxzZTsKKyAgICAgICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgbGluZVZpZXcsIGxpbmVO
LCBkaW1zKTsKICAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChuZXh0SW50YWN0ICYmIG5leHRJ
bnRhY3QuZnJvbSA8PSBsaW5lTiAmJiBuZXh0SW50YWN0LnRvID4gbGluZU4pIHsKLSAgICAgICAg
Ly8gVGhpcyBsaW5lIGlzIGludGFjdC4gU2tpcCB0byB0aGUgYWN0dWFsIG5vZGUuIFVwZGF0ZSBp
dHMKLSAgICAgICAgLy8gbGluZSBudW1iZXIgaWYgbmVlZGVkLgotICAgICAgICB3aGlsZSAoY3Vy
LmxpbmVPYmogIT0gbGluZSkgY3VyID0gcm0oY3VyKTsKLSAgICAgICAgaWYgKGxpbmVOdW1iZXJz
ICYmIHVwZGF0ZU51bWJlcnNGcm9tIDw9IGxpbmVOICYmIGN1ci5saW5lTnVtYmVyKQotICAgICAg
ICAgIHNldFRleHRDb250ZW50KGN1ci5saW5lTnVtYmVyLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlv
bnMsIGxpbmVOKSk7Ci0gICAgICAgIGN1ciA9IGN1ci5uZXh0U2libGluZzsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIEZvciBsaW5lcyB3aXRoIHdpZGdldHMsIG1ha2UgYW4gYXR0ZW1wdCB0
byBmaW5kIGFuZCByZXVzZQotICAgICAgICAvLyB0aGUgZXhpc3RpbmcgZWxlbWVudCwgc28gdGhh
dCB3aWRnZXRzIGFyZW4ndCBuZWVkbGVzc2x5Ci0gICAgICAgIC8vIHJlbW92ZWQgYW5kIHJlLWlu
c2VydGVkIGludG8gdGhlIGRvbQotICAgICAgICBpZiAobGluZS53aWRnZXRzKSBmb3IgKHZhciBq
ID0gMCwgc2VhcmNoID0gY3VyLCByZXVzZTsgc2VhcmNoICYmIGogPCAyMDsgKytqLCBzZWFyY2gg
PSBzZWFyY2gubmV4dFNpYmxpbmcpCi0gICAgICAgICAgaWYgKHNlYXJjaC5saW5lT2JqID09IGxp
bmUgJiYgL2Rpdi9pLnRlc3Qoc2VhcmNoLm5vZGVOYW1lKSkgeyByZXVzZSA9IHNlYXJjaDsgYnJl
YWs7IH0KLSAgICAgICAgLy8gVGhpcyBsaW5lIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4KLSAgICAg
ICAgdmFyIGxpbmVOb2RlID0gYnVpbGRMaW5lRWxlbWVudChjbSwgbGluZSwgbGluZU4sIGRpbXMs
IHJldXNlKTsKLSAgICAgICAgaWYgKGxpbmVOb2RlICE9IHJldXNlKSB7Ci0gICAgICAgICAgY29u
dGFpbmVyLmluc2VydEJlZm9yZShsaW5lTm9kZSwgY3VyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICB3aGlsZSAoY3VyICE9IHJldXNlKSBjdXIgPSBybShjdXIpOwotICAgICAgICAgIGN1
ciA9IGN1ci5uZXh0U2libGluZzsKKyAgICAgICAgaWYgKHVwZGF0ZU51bWJlcikgeworICAgICAg
ICAgIHJlbW92ZUNoaWxkcmVuKGxpbmVWaWV3LmxpbmVOdW1iZXIpOworICAgICAgICAgIGxpbmVW
aWV3LmxpbmVOdW1iZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZU51
bWJlckZvcihjbS5vcHRpb25zLCBsaW5lTikpKTsKICAgICAgICAgfQotCi0gICAgICAgIGxpbmVO
b2RlLmxpbmVPYmogPSBsaW5lOworICAgICAgICBjdXIgPSBsaW5lVmlldy5ub2RlLm5leHRTaWJs
aW5nOwogICAgICAgfQotICAgICAgKytsaW5lTjsKLSAgICB9KTsKKyAgICAgIGxpbmVOICs9IGxp
bmVWaWV3LnNpemU7CisgICAgfQogICAgIHdoaWxlIChjdXIpIGN1ciA9IHJtKGN1cik7CiAgIH0K
Ci0gIGZ1bmN0aW9uIGJ1aWxkTGluZUVsZW1lbnQoY20sIGxpbmUsIGxpbmVObywgZGltcywgcmV1
c2UpIHsKLSAgICB2YXIgYnVpbHQgPSBidWlsZExpbmVDb250ZW50KGNtLCBsaW5lKSwgbGluZUVs
ZW1lbnQgPSBidWlsdC5wcmU7Ci0gICAgdmFyIG1hcmtlcnMgPSBsaW5lLmd1dHRlck1hcmtlcnMs
IGRpc3BsYXkgPSBjbS5kaXNwbGF5LCB3cmFwOwotCi0gICAgdmFyIGJnQ2xhc3MgPSBidWlsdC5i
Z0NsYXNzID8gYnVpbHQuYmdDbGFzcyArICIgIiArIChsaW5lLmJnQ2xhc3MgfHwgIiIpIDogbGlu
ZS5iZ0NsYXNzOwotICAgIGlmICghY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiAhbWFya2VycyAm
JiAhYmdDbGFzcyAmJiAhbGluZS53cmFwQ2xhc3MgJiYgIWxpbmUud2lkZ2V0cykKLSAgICAgIHJl
dHVybiBsaW5lRWxlbWVudDsKKyAgLy8gV2hlbiBhbiBhc3BlY3Qgb2YgYSBsaW5lIGNoYW5nZXMs
IGEgc3RyaW5nIGlzIGFkZGVkIHRvCisgIC8vIGxpbmVWaWV3LmNoYW5nZXMuIFRoaXMgdXBkYXRl
cyB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgbGluZSdzCisgIC8vIERPTSBzdHJ1Y3R1cmUuCisg
IGZ1bmN0aW9uIHVwZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMp
IHsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmVWaWV3LmNoYW5nZXMubGVuZ3RoOyBqKysp
IHsKKyAgICAgIHZhciB0eXBlID0gbGluZVZpZXcuY2hhbmdlc1tqXTsKKyAgICAgIGlmICh0eXBl
ID09ICJ0ZXh0IikgdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KTsKKyAgICAgIGVsc2UgaWYg
KHR5cGUgPT0gImd1dHRlciIpIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwg
ZGltcyk7CisgICAgICBlbHNlIGlmICh0eXBlID09ICJjbGFzcyIpIHVwZGF0ZUxpbmVDbGFzc2Vz
KGxpbmVWaWV3KTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIndpZGdldCIpIHVwZGF0ZUxpbmVX
aWRnZXRzKGxpbmVWaWV3LCBkaW1zKTsKKyAgICB9CisgICAgbGluZVZpZXcuY2hhbmdlcyA9IG51
bGw7CisgIH0KCi0gICAgLy8gTGluZXMgd2l0aCBndXR0ZXIgZWxlbWVudHMsIHdpZGdldHMgb3Ig
YSBiYWNrZ3JvdW5kIGNsYXNzIG5lZWQKLSAgICAvLyB0byBiZSB3cmFwcGVkIGFnYWluLCBhbmQg
aGF2ZSB0aGUgZXh0cmEgZWxlbWVudHMgYWRkZWQgdG8gdGhlCi0gICAgLy8gd3JhcHBlciBkaXYK
KyAgLy8gTGluZXMgd2l0aCBndXR0ZXIgZWxlbWVudHMsIHdpZGdldHMgb3IgYSBiYWNrZ3JvdW5k
IGNsYXNzIG5lZWQgdG8KKyAgLy8gYmUgd3JhcHBlZCwgYW5kIGhhdmUgdGhlIGV4dHJhIGVsZW1l
bnRzIGFkZGVkIHRvIHRoZSB3cmFwcGVyIGRpdgorICBmdW5jdGlvbiBlbnN1cmVMaW5lV3JhcHBl
ZChsaW5lVmlldykgeworICAgIGlmIChsaW5lVmlldy5ub2RlID09IGxpbmVWaWV3LnRleHQpIHsK
KyAgICAgIGxpbmVWaWV3Lm5vZGUgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjog
cmVsYXRpdmUiKTsKKyAgICAgIGlmIChsaW5lVmlldy50ZXh0LnBhcmVudE5vZGUpCisgICAgICAg
IGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobGluZVZpZXcubm9kZSwgbGlu
ZVZpZXcudGV4dCk7CisgICAgICBsaW5lVmlldy5ub2RlLmFwcGVuZENoaWxkKGxpbmVWaWV3LnRl
eHQpOworICAgICAgaWYgKGllX3VwdG83KSBsaW5lVmlldy5ub2RlLnN0eWxlLnpJbmRleCA9IDI7
CisgICAgfQorICAgIHJldHVybiBsaW5lVmlldy5ub2RlOworICB9CgotICAgIGlmIChyZXVzZSkg
ewotICAgICAgcmV1c2UuYWxpZ25hYmxlID0gbnVsbDsKLSAgICAgIHZhciBpc09rID0gdHJ1ZSwg
d2lkZ2V0c1NlZW4gPSAwLCBpbnNlcnRCZWZvcmUgPSBudWxsOwotICAgICAgZm9yICh2YXIgbiA9
IHJldXNlLmZpcnN0Q2hpbGQsIG5leHQ7IG47IG4gPSBuZXh0KSB7Ci0gICAgICAgIG5leHQgPSBu
Lm5leHRTaWJsaW5nOwotICAgICAgICBpZiAoIS9cYkNvZGVNaXJyb3ItbGluZXdpZGdldFxiLy50
ZXN0KG4uY2xhc3NOYW1lKSkgewotICAgICAgICAgIHJldXNlLnJlbW92ZUNoaWxkKG4pOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgd2lkZ2V0ID0gbGluZS53aWRnZXRzW2ld
OwotICAgICAgICAgICAgaWYgKHdpZGdldC5ub2RlID09IG4uZmlyc3RDaGlsZCkgewotICAgICAg
ICAgICAgICBpZiAoIXdpZGdldC5hYm92ZSAmJiAhaW5zZXJ0QmVmb3JlKSBpbnNlcnRCZWZvcmUg
PSBuOwotICAgICAgICAgICAgICBwb3NpdGlvbkxpbmVXaWRnZXQod2lkZ2V0LCBuLCByZXVzZSwg
ZGltcyk7Ci0gICAgICAgICAgICAgICsrd2lkZ2V0c1NlZW47Ci0gICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaSA9PSBsaW5lLndp
ZGdldHMubGVuZ3RoKSB7IGlzT2sgPSBmYWxzZTsgYnJlYWs7IH0KLSAgICAgICAgfQotICAgICAg
fQotICAgICAgcmV1c2UuaW5zZXJ0QmVmb3JlKGxpbmVFbGVtZW50LCBpbnNlcnRCZWZvcmUpOwot
ICAgICAgaWYgKGlzT2sgJiYgd2lkZ2V0c1NlZW4gPT0gbGluZS53aWRnZXRzLmxlbmd0aCkgewot
ICAgICAgICB3cmFwID0gcmV1c2U7Ci0gICAgICAgIHJldXNlLmNsYXNzTmFtZSA9IGxpbmUud3Jh
cENsYXNzIHx8ICIiOwotICAgICAgfQorICBmdW5jdGlvbiB1cGRhdGVMaW5lQmFja2dyb3VuZChs
aW5lVmlldykgeworICAgIHZhciBjbHMgPSBsaW5lVmlldy5iZ0NsYXNzID8gbGluZVZpZXcuYmdD
bGFzcyArICIgIiArIChsaW5lVmlldy5saW5lLmJnQ2xhc3MgfHwgIiIpIDogbGluZVZpZXcubGlu
ZS5iZ0NsYXNzOworICAgIGlmIChjbHMpIGNscyArPSAiIENvZGVNaXJyb3ItbGluZWJhY2tncm91
bmQiOworICAgIGlmIChsaW5lVmlldy5iYWNrZ3JvdW5kKSB7CisgICAgICBpZiAoY2xzKSBsaW5l
Vmlldy5iYWNrZ3JvdW5kLmNsYXNzTmFtZSA9IGNsczsKKyAgICAgIGVsc2UgeyBsaW5lVmlldy5i
YWNrZ3JvdW5kLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGluZVZpZXcuYmFja2dyb3VuZCk7IGxp
bmVWaWV3LmJhY2tncm91bmQgPSBudWxsOyB9CisgICAgfSBlbHNlIGlmIChjbHMpIHsKKyAgICAg
IHZhciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpOworICAgICAgbGluZVZpZXcu
YmFja2dyb3VuZCA9IHdyYXAuaW5zZXJ0QmVmb3JlKGVsdCgiZGl2IiwgbnVsbCwgY2xzKSwgd3Jh
cC5maXJzdENoaWxkKTsKICAgICB9Ci0gICAgaWYgKCF3cmFwKSB7Ci0gICAgICB3cmFwID0gZWx0
KCJkaXYiLCBudWxsLCBsaW5lLndyYXBDbGFzcywgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwotICAg
ICAgd3JhcC5hcHBlbmRDaGlsZChsaW5lRWxlbWVudCk7CisgIH0KKworICAvLyBXcmFwcGVyIGFy
b3VuZCBidWlsZExpbmVDb250ZW50IHdoaWNoIHdpbGwgcmV1c2UgdGhlIHN0cnVjdHVyZQorICAv
LyBpbiBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgd2hlbiBwb3NzaWJsZS4KKyAgZnVuY3Rpb24g
Z2V0TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KSB7CisgICAgdmFyIGV4dCA9IGNtLmRpc3BsYXku
ZXh0ZXJuYWxNZWFzdXJlZDsKKyAgICBpZiAoZXh0ICYmIGV4dC5saW5lID09IGxpbmVWaWV3Lmxp
bmUpIHsKKyAgICAgIGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7CisgICAgICBs
aW5lVmlldy5tZWFzdXJlID0gZXh0Lm1lYXN1cmU7CisgICAgICByZXR1cm4gZXh0LmJ1aWx0Owog
ICAgIH0KLSAgICAvLyBLbHVkZ2UgdG8gbWFrZSBzdXJlIHRoZSBzdHlsZWQgZWxlbWVudCBsaWVz
IGJlaGluZCB0aGUgc2VsZWN0aW9uIChieSB6LWluZGV4KQotICAgIGlmIChiZ0NsYXNzKQotICAg
ICAgd3JhcC5pbnNlcnRCZWZvcmUoZWx0KCJkaXYiLCBudWxsLCBiZ0NsYXNzICsgIiBDb2RlTWly
cm9yLWxpbmViYWNrZ3JvdW5kIiksIHdyYXAuZmlyc3RDaGlsZCk7CisgICAgcmV0dXJuIGJ1aWxk
TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KTsKKyAgfQorCisgIC8vIFJlZHJhdyB0aGUgbGluZSdz
IHRleHQuIEludGVyYWN0cyB3aXRoIHRoZSBiYWNrZ3JvdW5kIGFuZCB0ZXh0CisgIC8vIGNsYXNz
ZXMgYmVjYXVzZSB0aGUgbW9kZSBtYXkgb3V0cHV0IHRva2VucyB0aGF0IGluZmx1ZW5jZSB0aGVz
ZQorICAvLyBjbGFzc2VzLgorICBmdW5jdGlvbiB1cGRhdGVMaW5lVGV4dChjbSwgbGluZVZpZXcp
IHsKKyAgICB2YXIgY2xzID0gbGluZVZpZXcudGV4dC5jbGFzc05hbWU7CisgICAgdmFyIGJ1aWx0
ID0gZ2V0TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KTsKKyAgICBpZiAobGluZVZpZXcudGV4dCA9
PSBsaW5lVmlldy5ub2RlKSBsaW5lVmlldy5ub2RlID0gYnVpbHQucHJlOworICAgIGxpbmVWaWV3
LnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYnVpbHQucHJlLCBsaW5lVmlldy50ZXh0KTsK
KyAgICBsaW5lVmlldy50ZXh0ID0gYnVpbHQucHJlOworICAgIGlmIChidWlsdC5iZ0NsYXNzICE9
IGxpbmVWaWV3LmJnQ2xhc3MgfHwgYnVpbHQudGV4dENsYXNzICE9IGxpbmVWaWV3LnRleHRDbGFz
cykgeworICAgICAgbGluZVZpZXcuYmdDbGFzcyA9IGJ1aWx0LmJnQ2xhc3M7CisgICAgICBsaW5l
Vmlldy50ZXh0Q2xhc3MgPSBidWlsdC50ZXh0Q2xhc3M7CisgICAgICB1cGRhdGVMaW5lQ2xhc3Nl
cyhsaW5lVmlldyk7CisgICAgfSBlbHNlIGlmIChjbHMpIHsKKyAgICAgIGxpbmVWaWV3LnRleHQu
Y2xhc3NOYW1lID0gY2xzOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVDbGFz
c2VzKGxpbmVWaWV3KSB7CisgICAgdXBkYXRlTGluZUJhY2tncm91bmQobGluZVZpZXcpOworICAg
IGlmIChsaW5lVmlldy5saW5lLndyYXBDbGFzcykKKyAgICAgIGVuc3VyZUxpbmVXcmFwcGVkKGxp
bmVWaWV3KS5jbGFzc05hbWUgPSBsaW5lVmlldy5saW5lLndyYXBDbGFzczsKKyAgICBlbHNlIGlm
IChsaW5lVmlldy5ub2RlICE9IGxpbmVWaWV3LnRleHQpCisgICAgICBsaW5lVmlldy5ub2RlLmNs
YXNzTmFtZSA9ICIiOworICAgIHZhciB0ZXh0Q2xhc3MgPSBsaW5lVmlldy50ZXh0Q2xhc3MgPyBs
aW5lVmlldy50ZXh0Q2xhc3MgKyAiICIgKyAobGluZVZpZXcubGluZS50ZXh0Q2xhc3MgfHwgIiIp
IDogbGluZVZpZXcubGluZS50ZXh0Q2xhc3M7CisgICAgbGluZVZpZXcudGV4dC5jbGFzc05hbWUg
PSB0ZXh0Q2xhc3MgfHwgIiI7CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVMaW5lR3V0dGVyKGNt
LCBsaW5lVmlldywgbGluZU4sIGRpbXMpIHsKKyAgICBpZiAobGluZVZpZXcuZ3V0dGVyKSB7Cisg
ICAgICBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKGxpbmVWaWV3Lmd1dHRlcik7CisgICAgICBs
aW5lVmlldy5ndXR0ZXIgPSBudWxsOworICAgIH0KKyAgICB2YXIgbWFya2VycyA9IGxpbmVWaWV3
LmxpbmUuZ3V0dGVyTWFya2VyczsKICAgICBpZiAoY20ub3B0aW9ucy5saW5lTnVtYmVycyB8fCBt
YXJrZXJzKSB7Ci0gICAgICB2YXIgZ3V0dGVyV3JhcCA9IHdyYXAuaW5zZXJ0QmVmb3JlKGVsdCgi
ZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogIiArCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY20ub3B0aW9ucy5maXhlZEd1
dHRlciA/IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArICJweCIpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwLmZpcnN0Q2hpbGQp
OwotICAgICAgaWYgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpICh3cmFwLmFsaWduYWJsZSB8fCAo
d3JhcC5hbGlnbmFibGUgPSBbXSkpLnB1c2goZ3V0dGVyV3JhcCk7CisgICAgICB2YXIgd3JhcCA9
IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTsKKyAgICAgIHZhciBndXR0ZXJXcmFwID0gbGlu
ZVZpZXcuZ3V0dGVyID0KKyAgICAgICAgd3JhcC5pbnNlcnRCZWZvcmUoZWx0KCJkaXYiLCBudWxs
LCAiQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciIsICJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6
ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtLm9wdGlvbnMuZml4ZWRHdXR0
ZXIgPyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyAicHgiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZpZXcudGV4dCk7CiAgICAgICBpZiAoY20ub3B0
aW9ucy5saW5lTnVtYmVycyAmJiAoIW1hcmtlcnMgfHwgIW1hcmtlcnNbIkNvZGVNaXJyb3ItbGlu
ZW51bWJlcnMiXSkpCi0gICAgICAgIHdyYXAubGluZU51bWJlciA9IGd1dHRlcldyYXAuYXBwZW5k
Q2hpbGQoCi0gICAgICAgICAgZWx0KCJkaXYiLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxp
bmVObyksCisgICAgICAgIGxpbmVWaWV3LmxpbmVOdW1iZXIgPSBndXR0ZXJXcmFwLmFwcGVuZENo
aWxkKAorICAgICAgICAgIGVsdCgiZGl2IiwgbGluZU51bWJlckZvcihjbS5vcHRpb25zLCBsaW5l
TiksCiAgICAgICAgICAgICAgICJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0
ZXItZWx0IiwKICAgICAgICAgICAgICAgImxlZnQ6ICIgKyBkaW1zLmd1dHRlckxlZnRbIkNvZGVN
aXJyb3ItbGluZW51bWJlcnMiXSArICJweDsgd2lkdGg6ICIKLSAgICAgICAgICAgICAgKyBkaXNw
bGF5LmxpbmVOdW1Jbm5lcldpZHRoICsgInB4IikpOwotICAgICAgaWYgKG1hcmtlcnMpCi0gICAg
ICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsgKytrKSB7
Ci0gICAgICAgICAgdmFyIGlkID0gY20ub3B0aW9ucy5ndXR0ZXJzW2tdLCBmb3VuZCA9IG1hcmtl
cnMuaGFzT3duUHJvcGVydHkoaWQpICYmIG1hcmtlcnNbaWRdOwotICAgICAgICAgIGlmIChmb3Vu
ZCkKLSAgICAgICAgICAgIGd1dHRlcldyYXAuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBbZm91bmRd
LCAiQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwgImxlZnQ6ICIgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGltcy5ndXR0ZXJMZWZ0W2lkXSArICJweDsgd2lkdGg6ICIg
KyBkaW1zLmd1dHRlcldpZHRoW2lkXSArICJweCIpKTsKLSAgICAgICAgfQorICAgICAgICAgICAg
ICArIGNtLmRpc3BsYXkubGluZU51bUlubmVyV2lkdGggKyAicHgiKSk7CisgICAgICBpZiAobWFy
a2VycykgZm9yICh2YXIgayA9IDA7IGsgPCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2sp
IHsKKyAgICAgICAgdmFyIGlkID0gY20ub3B0aW9ucy5ndXR0ZXJzW2tdLCBmb3VuZCA9IG1hcmtl
cnMuaGFzT3duUHJvcGVydHkoaWQpICYmIG1hcmtlcnNbaWRdOworICAgICAgICBpZiAoZm91bmQp
CisgICAgICAgICAgZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZChlbHQoImRpdiIsIFtmb3VuZF0sICJD
b2RlTWlycm9yLWd1dHRlci1lbHQiLCAibGVmdDogIiArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGltcy5ndXR0ZXJMZWZ0W2lkXSArICJweDsgd2lkdGg6ICIgKyBkaW1z
Lmd1dHRlcldpZHRoW2lkXSArICJweCIpKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBmdW5j
dGlvbiB1cGRhdGVMaW5lV2lkZ2V0cyhsaW5lVmlldywgZGltcykgeworICAgIGlmIChsaW5lVmll
dy5hbGlnbmFibGUpIGxpbmVWaWV3LmFsaWduYWJsZSA9IG51bGw7CisgICAgZm9yICh2YXIgbm9k
ZSA9IGxpbmVWaWV3Lm5vZGUuZmlyc3RDaGlsZCwgbmV4dDsgbm9kZTsgbm9kZSA9IG5leHQpIHsK
KyAgICAgIHZhciBuZXh0ID0gbm9kZS5uZXh0U2libGluZzsKKyAgICAgIGlmIChub2RlLmNsYXNz
TmFtZSA9PSAiQ29kZU1pcnJvci1saW5ld2lkZ2V0IikKKyAgICAgICAgbGluZVZpZXcubm9kZS5y
ZW1vdmVDaGlsZChub2RlKTsKICAgICB9Ci0gICAgaWYgKGllX2x0OCkgd3JhcC5zdHlsZS56SW5k
ZXggPSAyOwotICAgIGlmIChsaW5lLndpZGdldHMgJiYgd3JhcCAhPSByZXVzZSkgZm9yICh2YXIg
aSA9IDAsIHdzID0gbGluZS53aWRnZXRzOyBpIDwgd3MubGVuZ3RoOyArK2kpIHsKKyAgICBpbnNl
cnRMaW5lV2lkZ2V0cyhsaW5lVmlldywgZGltcyk7CisgIH0KKworICAvLyBCdWlsZCBhIGxpbmUn
cyBET00gcmVwcmVzZW50YXRpb24gZnJvbSBzY3JhdGNoCisgIGZ1bmN0aW9uIGJ1aWxkTGluZUVs
ZW1lbnQoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykgeworICAgIHZhciBidWlsdCA9IGdldExp
bmVDb250ZW50KGNtLCBsaW5lVmlldyk7CisgICAgbGluZVZpZXcudGV4dCA9IGxpbmVWaWV3Lm5v
ZGUgPSBidWlsdC5wcmU7CisgICAgaWYgKGJ1aWx0LmJnQ2xhc3MpIGxpbmVWaWV3LmJnQ2xhc3Mg
PSBidWlsdC5iZ0NsYXNzOworICAgIGlmIChidWlsdC50ZXh0Q2xhc3MpIGxpbmVWaWV3LnRleHRD
bGFzcyA9IGJ1aWx0LnRleHRDbGFzczsKKworICAgIHVwZGF0ZUxpbmVDbGFzc2VzKGxpbmVWaWV3
KTsKKyAgICB1cGRhdGVMaW5lR3V0dGVyKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpOworICAg
IGluc2VydExpbmVXaWRnZXRzKGxpbmVWaWV3LCBkaW1zKTsKKyAgICByZXR1cm4gbGluZVZpZXcu
bm9kZTsKKyAgfQorCisgIC8vIEEgbGluZVZpZXcgbWF5IGNvbnRhaW4gbXVsdGlwbGUgbG9naWNh
bCBsaW5lcyAod2hlbiBtZXJnZWQgYnkKKyAgLy8gY29sbGFwc2VkIHNwYW5zKS4gVGhlIHdpZGdl
dHMgZm9yIGFsbCBvZiB0aGVtIG5lZWQgdG8gYmUgZHJhd24uCisgIGZ1bmN0aW9uIGluc2VydExp
bmVXaWRnZXRzKGxpbmVWaWV3LCBkaW1zKSB7CisgICAgaW5zZXJ0TGluZVdpZGdldHNGb3IobGlu
ZVZpZXcubGluZSwgbGluZVZpZXcsIGRpbXMsIHRydWUpOworICAgIGlmIChsaW5lVmlldy5yZXN0
KSBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVWaWV3LnJlc3QubGVuZ3RoOyBpKyspCisgICAgICBp
bnNlcnRMaW5lV2lkZ2V0c0ZvcihsaW5lVmlldy5yZXN0W2ldLCBsaW5lVmlldywgZGltcywgZmFs
c2UpOworICB9CisKKyAgZnVuY3Rpb24gaW5zZXJ0TGluZVdpZGdldHNGb3IobGluZSwgbGluZVZp
ZXcsIGRpbXMsIGFsbG93QWJvdmUpIHsKKyAgICBpZiAoIWxpbmUud2lkZ2V0cykgcmV0dXJuOwor
ICAgIHZhciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpOworICAgIGZvciAodmFy
IGkgPSAwLCB3cyA9IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsgKytpKSB7CiAgICAgICB2
YXIgd2lkZ2V0ID0gd3NbaV0sIG5vZGUgPSBlbHQoImRpdiIsIFt3aWRnZXQubm9kZV0sICJDb2Rl
TWlycm9yLWxpbmV3aWRnZXQiKTsKICAgICAgIGlmICghd2lkZ2V0LmhhbmRsZU1vdXNlRXZlbnRz
KSBub2RlLmlnbm9yZUV2ZW50cyA9IHRydWU7Ci0gICAgICBwb3NpdGlvbkxpbmVXaWRnZXQod2lk
Z2V0LCBub2RlLCB3cmFwLCBkaW1zKTsKLSAgICAgIGlmICh3aWRnZXQuYWJvdmUpCi0gICAgICAg
IHdyYXAuaW5zZXJ0QmVmb3JlKG5vZGUsIGNtLm9wdGlvbnMubGluZU51bWJlcnMgJiYgbGluZS5o
ZWlnaHQgIT0gMCA/IGd1dHRlcldyYXAgOiBsaW5lRWxlbWVudCk7CisgICAgICBwb3NpdGlvbkxp
bmVXaWRnZXQod2lkZ2V0LCBub2RlLCBsaW5lVmlldywgZGltcyk7CisgICAgICBpZiAoYWxsb3dB
Ym92ZSAmJiB3aWRnZXQuYWJvdmUpCisgICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKG5vZGUsIGxp
bmVWaWV3Lmd1dHRlciB8fCBsaW5lVmlldy50ZXh0KTsKICAgICAgIGVsc2UKICAgICAgICAgd3Jh
cC5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgIHNpZ25hbExhdGVyKHdpZGdldCwgInJlZHJhdyIp
OwogICAgIH0KLSAgICByZXR1cm4gd3JhcDsKICAgfQoKLSAgZnVuY3Rpb24gcG9zaXRpb25MaW5l
V2lkZ2V0KHdpZGdldCwgbm9kZSwgd3JhcCwgZGltcykgeworICBmdW5jdGlvbiBwb3NpdGlvbkxp
bmVXaWRnZXQod2lkZ2V0LCBub2RlLCBsaW5lVmlldywgZGltcykgewogICAgIGlmICh3aWRnZXQu
bm9IU2Nyb2xsKSB7Ci0gICAgICAod3JhcC5hbGlnbmFibGUgfHwgKHdyYXAuYWxpZ25hYmxlID0g
W10pKS5wdXNoKG5vZGUpOworICAgICAgKGxpbmVWaWV3LmFsaWduYWJsZSB8fCAobGluZVZpZXcu
YWxpZ25hYmxlID0gW10pKS5wdXNoKG5vZGUpOwogICAgICAgdmFyIHdpZHRoID0gZGltcy53cmFw
cGVyV2lkdGg7CiAgICAgICBub2RlLnN0eWxlLmxlZnQgPSBkaW1zLmZpeGVkUG9zICsgInB4IjsK
ICAgICAgIGlmICghd2lkZ2V0LmNvdmVyR3V0dGVyKSB7CkBAIC03NjcsNTcgKzkzMSwzNzAgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CgorICAvLyBQT1NJ
VElPTiBPQkpFQ1QKKworICAvLyBBIFBvcyBpbnN0YW5jZSByZXByZXNlbnRzIGEgcG9zaXRpb24g
d2l0aGluIHRoZSB0ZXh0LgorICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3MgPSBmdW5jdGlvbihs
aW5lLCBjaCkgeworICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQb3MpKSByZXR1cm4gbmV3IFBv
cyhsaW5lLCBjaCk7CisgICAgdGhpcy5saW5lID0gbGluZTsgdGhpcy5jaCA9IGNoOworICB9Owor
CisgIC8vIENvbXBhcmUgdHdvIHBvc2l0aW9ucywgcmV0dXJuIDAgaWYgdGhleSBhcmUgdGhlIHNh
bWUsIGEgbmVnYXRpdmUKKyAgLy8gbnVtYmVyIHdoZW4gYSBpcyBsZXNzLCBhbmQgYSBwb3NpdGl2
ZSBudW1iZXIgb3RoZXJ3aXNlLgorICB2YXIgY21wID0gQ29kZU1pcnJvci5jbXBQb3MgPSBmdW5j
dGlvbihhLCBiKSB7IHJldHVybiBhLmxpbmUgLSBiLmxpbmUgfHwgYS5jaCAtIGIuY2g7IH07CisK
KyAgZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0dXJuIFBvcyh4LmxpbmUsIHguY2gpO30KKyAgZnVu
Y3Rpb24gbWF4UG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBiIDogYTsgfQorICBm
dW5jdGlvbiBtaW5Qb3MoYSwgYikgeyByZXR1cm4gY21wKGEsIGIpIDwgMCA/IGEgOiBiOyB9CisK
ICAgLy8gU0VMRUNUSU9OIC8gQ1VSU09SCgorICAvLyBTZWxlY3Rpb24gb2JqZWN0cyBhcmUgaW1t
dXRhYmxlLiBBIG5ldyBvbmUgaXMgY3JlYXRlZCBldmVyeSB0aW1lCisgIC8vIHRoZSBzZWxlY3Rp
b24gY2hhbmdlcy4gQSBzZWxlY3Rpb24gaXMgb25lIG9yIG1vcmUgbm9uLW92ZXJsYXBwaW5nCisg
IC8vIChhbmQgbm9uLXRvdWNoaW5nKSByYW5nZXMsIHNvcnRlZCwgYW5kIGFuIGludGVnZXIgdGhh
dCBpbmRpY2F0ZXMKKyAgLy8gd2hpY2ggb25lIGlzIHRoZSBwcmltYXJ5IHNlbGVjdGlvbiAodGhl
IG9uZSB0aGF0J3Mgc2Nyb2xsZWQgaW50bworICAvLyB2aWV3LCB0aGF0IGdldEN1cnNvciByZXR1
cm5zLCBldGMpLgorICBmdW5jdGlvbiBTZWxlY3Rpb24ocmFuZ2VzLCBwcmltSW5kZXgpIHsKKyAg
ICB0aGlzLnJhbmdlcyA9IHJhbmdlczsKKyAgICB0aGlzLnByaW1JbmRleCA9IHByaW1JbmRleDsK
KyAgfQorCisgIFNlbGVjdGlvbi5wcm90b3R5cGUgPSB7CisgICAgcHJpbWFyeTogZnVuY3Rpb24o
KSB7IHJldHVybiB0aGlzLnJhbmdlc1t0aGlzLnByaW1JbmRleF07IH0sCisgICAgZXF1YWxzOiBm
dW5jdGlvbihvdGhlcikgeworICAgICAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybiB0cnVlOwor
ICAgICAgaWYgKG90aGVyLnByaW1JbmRleCAhPSB0aGlzLnByaW1JbmRleCB8fCBvdGhlci5yYW5n
ZXMubGVuZ3RoICE9IHRoaXMucmFuZ2VzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOworICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIg
aGVyZSA9IHRoaXMucmFuZ2VzW2ldLCB0aGVyZSA9IG90aGVyLnJhbmdlc1tpXTsKKyAgICAgICAg
aWYgKGNtcChoZXJlLmFuY2hvciwgdGhlcmUuYW5jaG9yKSAhPSAwIHx8IGNtcChoZXJlLmhlYWQs
IHRoZXJlLmhlYWQpICE9IDApIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0
cnVlOworICAgIH0sCisgICAgZGVlcENvcHk6IGZ1bmN0aW9uKCkgeworICAgICAgZm9yICh2YXIg
b3V0ID0gW10sIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspCisgICAgICAgIG91
dFtpXSA9IG5ldyBSYW5nZShjb3B5UG9zKHRoaXMucmFuZ2VzW2ldLmFuY2hvciksIGNvcHlQb3Mo
dGhpcy5yYW5nZXNbaV0uaGVhZCkpOworICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24ob3V0LCB0
aGlzLnByaW1JbmRleCk7CisgICAgfSwKKyAgICBzb21ldGhpbmdTZWxlY3RlZDogZnVuY3Rpb24o
KSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKQor
ICAgICAgICBpZiAoIXRoaXMucmFuZ2VzW2ldLmVtcHR5KCkpIHJldHVybiB0cnVlOworICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0sCisgICAgY29udGFpbnM6IGZ1bmN0aW9uKHBvcywgZW5kKSB7
CisgICAgICBpZiAoIWVuZCkgZW5kID0gcG9zOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLnJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnJhbmdl
c1tpXTsKKyAgICAgICAgaWYgKGNtcChlbmQsIHJhbmdlLmZyb20oKSkgPj0gMCAmJiBjbXAocG9z
LCByYW5nZS50bygpKSA8PSAwKQorICAgICAgICAgIHJldHVybiBpOworICAgICAgfQorICAgICAg
cmV0dXJuIC0xOworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiBSYW5nZShhbmNob3IsIGhlYWQp
IHsKKyAgICB0aGlzLmFuY2hvciA9IGFuY2hvcjsgdGhpcy5oZWFkID0gaGVhZDsKKyAgfQorCisg
IFJhbmdlLnByb3RvdHlwZSA9IHsKKyAgICBmcm9tOiBmdW5jdGlvbigpIHsgcmV0dXJuIG1pblBv
cyh0aGlzLmFuY2hvciwgdGhpcy5oZWFkKTsgfSwKKyAgICB0bzogZnVuY3Rpb24oKSB7IHJldHVy
biBtYXhQb3ModGhpcy5hbmNob3IsIHRoaXMuaGVhZCk7IH0sCisgICAgZW1wdHk6IGZ1bmN0aW9u
KCkgeworICAgICAgcmV0dXJuIHRoaXMuaGVhZC5saW5lID09IHRoaXMuYW5jaG9yLmxpbmUgJiYg
dGhpcy5oZWFkLmNoID09IHRoaXMuYW5jaG9yLmNoOworICAgIH0KKyAgfTsKKworICAvLyBUYWtl
IGFuIHVuc29ydGVkLCBwb3RlbnRpYWxseSBvdmVybGFwcGluZyBzZXQgb2YgcmFuZ2VzLCBhbmQK
KyAgLy8gYnVpbGQgYSBzZWxlY3Rpb24gb3V0IG9mIGl0LiAnQ29uc3VtZXMnIHJhbmdlcyBhcnJh
eSAobW9kaWZ5aW5nCisgIC8vIGl0KS4KKyAgZnVuY3Rpb24gbm9ybWFsaXplU2VsZWN0aW9uKHJh
bmdlcywgcHJpbUluZGV4KSB7CisgICAgdmFyIHByaW0gPSByYW5nZXNbcHJpbUluZGV4XTsKKyAg
ICByYW5nZXMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBjbXAoYS5mcm9tKCksIGIuZnJv
bSgpKTsgfSk7CisgICAgcHJpbUluZGV4ID0gaW5kZXhPZihyYW5nZXMsIHByaW0pOworICAgIGZv
ciAodmFyIGkgPSAxOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgY3VyID0g
cmFuZ2VzW2ldLCBwcmV2ID0gcmFuZ2VzW2kgLSAxXTsKKyAgICAgIGlmIChjbXAocHJldi50bygp
LCBjdXIuZnJvbSgpKSA+PSAwKSB7CisgICAgICAgIHZhciBmcm9tID0gbWluUG9zKHByZXYuZnJv
bSgpLCBjdXIuZnJvbSgpKSwgdG8gPSBtYXhQb3MocHJldi50bygpLCBjdXIudG8oKSk7CisgICAg
ICAgIHZhciBpbnYgPSBwcmV2LmVtcHR5KCkgPyBjdXIuZnJvbSgpID09IGN1ci5oZWFkIDogcHJl
di5mcm9tKCkgPT0gcHJldi5oZWFkOworICAgICAgICBpZiAoaSA8PSBwcmltSW5kZXgpIC0tcHJp
bUluZGV4OworICAgICAgICByYW5nZXMuc3BsaWNlKC0taSwgMiwgbmV3IFJhbmdlKGludiA/IHRv
IDogZnJvbSwgaW52ID8gZnJvbSA6IHRvKSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBu
ZXcgU2VsZWN0aW9uKHJhbmdlcywgcHJpbUluZGV4KTsKKyAgfQorCisgIGZ1bmN0aW9uIHNpbXBs
ZVNlbGVjdGlvbihhbmNob3IsIGhlYWQpIHsKKyAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihbbmV3
IFJhbmdlKGFuY2hvciwgaGVhZCB8fCBhbmNob3IpXSwgMCk7CisgIH0KKworICAvLyBNb3N0IG9m
IHRoZSBleHRlcm5hbCBBUEkgY2xpcHMgZ2l2ZW4gcG9zaXRpb25zIHRvIG1ha2Ugc3VyZSB0aGV5
CisgIC8vIGFjdHVhbGx5IGV4aXN0IHdpdGhpbiB0aGUgZG9jdW1lbnQuCisgIGZ1bmN0aW9uIGNs
aXBMaW5lKGRvYywgbikge3JldHVybiBNYXRoLm1heChkb2MuZmlyc3QsIE1hdGgubWluKG4sIGRv
Yy5maXJzdCArIGRvYy5zaXplIC0gMSkpO30KKyAgZnVuY3Rpb24gY2xpcFBvcyhkb2MsIHBvcykg
eworICAgIGlmIChwb3MubGluZSA8IGRvYy5maXJzdCkgcmV0dXJuIFBvcyhkb2MuZmlyc3QsIDAp
OworICAgIHZhciBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxOworICAgIGlmIChwb3Mu
bGluZSA+IGxhc3QpIHJldHVybiBQb3MobGFzdCwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVu
Z3RoKTsKKyAgICByZXR1cm4gY2xpcFRvTGVuKHBvcywgZ2V0TGluZShkb2MsIHBvcy5saW5lKS50
ZXh0Lmxlbmd0aCk7CisgIH0KKyAgZnVuY3Rpb24gY2xpcFRvTGVuKHBvcywgbGluZWxlbikgewor
ICAgIHZhciBjaCA9IHBvcy5jaDsKKyAgICBpZiAoY2ggPT0gbnVsbCB8fCBjaCA+IGxpbmVsZW4p
IHJldHVybiBQb3MocG9zLmxpbmUsIGxpbmVsZW4pOworICAgIGVsc2UgaWYgKGNoIDwgMCkgcmV0
dXJuIFBvcyhwb3MubGluZSwgMCk7CisgICAgZWxzZSByZXR1cm4gcG9zOworICB9CisgIGZ1bmN0
aW9uIGlzTGluZShkb2MsIGwpIHtyZXR1cm4gbCA+PSBkb2MuZmlyc3QgJiYgbCA8IGRvYy5maXJz
dCArIGRvYy5zaXplO30KKyAgZnVuY3Rpb24gY2xpcFBvc0FycmF5KGRvYywgYXJyYXkpIHsKKyAg
ICBmb3IgKHZhciBvdXQgPSBbXSwgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgb3V0W2ld
ID0gY2xpcFBvcyhkb2MsIGFycmF5W2ldKTsKKyAgICByZXR1cm4gb3V0OworICB9CisKKyAgLy8g
U0VMRUNUSU9OIFVQREFURVMKKworICAvLyBUaGUgJ3Njcm9sbCcgcGFyYW1ldGVyIGdpdmVuIHRv
IG1hbnkgb2YgdGhlc2UgaW5kaWNhdGVkIHdoZXRoZXIKKyAgLy8gdGhlIG5ldyBjdXJzb3IgcG9z
aXRpb24gc2hvdWxkIGJlIHNjcm9sbGVkIGludG8gdmlldyBhZnRlcgorICAvLyBtb2RpZnlpbmcg
dGhlIHNlbGVjdGlvbi4KKworICAvLyBJZiBzaGlmdCBpcyBoZWxkIG9yIHRoZSBleHRlbmQgZmxh
ZyBpcyBzZXQsIGV4dGVuZHMgYSByYW5nZSB0bworICAvLyBpbmNsdWRlIGEgZ2l2ZW4gcG9zaXRp
b24gKGFuZCBvcHRpb25hbGx5IGEgc2Vjb25kIHBvc2l0aW9uKS4KKyAgLy8gT3RoZXJ3aXNlLCBz
aW1wbHkgcmV0dXJucyB0aGUgcmFuZ2UgYmV0d2VlbiB0aGUgZ2l2ZW4gcG9zaXRpb25zLgorICAv
LyBVc2VkIGZvciBjdXJzb3IgbW90aW9uIGFuZCBzdWNoLgorICBmdW5jdGlvbiBleHRlbmRSYW5n
ZShkb2MsIHJhbmdlLCBoZWFkLCBvdGhlcikgeworICAgIGlmIChkb2MuY20gJiYgZG9jLmNtLmRp
c3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCkgeworICAgICAgdmFyIGFuY2hvciA9IHJhbmdlLmFu
Y2hvcjsKKyAgICAgIGlmIChvdGhlcikgeworICAgICAgICB2YXIgcG9zQmVmb3JlID0gY21wKGhl
YWQsIGFuY2hvcikgPCAwOworICAgICAgICBpZiAocG9zQmVmb3JlICE9IChjbXAob3RoZXIsIGFu
Y2hvcikgPCAwKSkgeworICAgICAgICAgIGFuY2hvciA9IGhlYWQ7CisgICAgICAgICAgaGVhZCA9
IG90aGVyOworICAgICAgICB9IGVsc2UgaWYgKHBvc0JlZm9yZSAhPSAoY21wKGhlYWQsIG90aGVy
KSA8IDApKSB7CisgICAgICAgICAgaGVhZCA9IG90aGVyOworICAgICAgICB9CisgICAgICB9Cisg
ICAgICByZXR1cm4gbmV3IFJhbmdlKGFuY2hvciwgaGVhZCk7CisgICAgfSBlbHNlIHsKKyAgICAg
IHJldHVybiBuZXcgUmFuZ2Uob3RoZXIgfHwgaGVhZCwgaGVhZCk7CisgICAgfQorICB9CisKKyAg
Ly8gRXh0ZW5kIHRoZSBwcmltYXJ5IHNlbGVjdGlvbiByYW5nZSwgZGlzY2FyZCB0aGUgcmVzdC4K
KyAgZnVuY3Rpb24gZXh0ZW5kU2VsZWN0aW9uKGRvYywgaGVhZCwgb3RoZXIsIG9wdGlvbnMpIHsK
KyAgICBzZXRTZWxlY3Rpb24oZG9jLCBuZXcgU2VsZWN0aW9uKFtleHRlbmRSYW5nZShkb2MsIGRv
Yy5zZWwucHJpbWFyeSgpLCBoZWFkLCBvdGhlcildLCAwKSwgb3B0aW9ucyk7CisgIH0KKworICAv
LyBFeHRlbmQgYWxsIHNlbGVjdGlvbnMgKHBvcyBpcyBhbiBhcnJheSBvZiBzZWxlY3Rpb25zIHdp
dGggbGVuZ3RoCisgIC8vIGVxdWFsIHRoZSBudW1iZXIgb2Ygc2VsZWN0aW9ucykKKyAgZnVuY3Rp
b24gZXh0ZW5kU2VsZWN0aW9ucyhkb2MsIGhlYWRzLCBvcHRpb25zKSB7CisgICAgZm9yICh2YXIg
b3V0ID0gW10sIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspCisgICAgICBv
dXRbaV0gPSBleHRlbmRSYW5nZShkb2MsIGRvYy5zZWwucmFuZ2VzW2ldLCBoZWFkc1tpXSwgbnVs
bCk7CisgICAgdmFyIG5ld1NlbCA9IG5vcm1hbGl6ZVNlbGVjdGlvbihvdXQsIGRvYy5zZWwucHJp
bUluZGV4KTsKKyAgICBzZXRTZWxlY3Rpb24oZG9jLCBuZXdTZWwsIG9wdGlvbnMpOworICB9CisK
KyAgLy8gVXBkYXRlcyBhIHNpbmdsZSByYW5nZSBpbiB0aGUgc2VsZWN0aW9uLgorICBmdW5jdGlv
biByZXBsYWNlT25lU2VsZWN0aW9uKGRvYywgaSwgcmFuZ2UsIG9wdGlvbnMpIHsKKyAgICB2YXIg
cmFuZ2VzID0gZG9jLnNlbC5yYW5nZXMuc2xpY2UoMCk7CisgICAgcmFuZ2VzW2ldID0gcmFuZ2U7
CisgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKHJhbmdlcywgZG9jLnNl
bC5wcmltSW5kZXgpLCBvcHRpb25zKTsKKyAgfQorCisgIC8vIFJlc2V0IHRoZSBzZWxlY3Rpb24g
dG8gYSBzaW5nbGUgcmFuZ2UuCisgIGZ1bmN0aW9uIHNldFNpbXBsZVNlbGVjdGlvbihkb2MsIGFu
Y2hvciwgaGVhZCwgb3B0aW9ucykgeworICAgIHNldFNlbGVjdGlvbihkb2MsIHNpbXBsZVNlbGVj
dGlvbihhbmNob3IsIGhlYWQpLCBvcHRpb25zKTsKKyAgfQorCisgIC8vIEdpdmUgYmVmb3JlU2Vs
ZWN0aW9uQ2hhbmdlIGhhbmRsZXJzIGEgY2hhbmdlIHRvIGluZmx1ZW5jZSBhCisgIC8vIHNlbGVj
dGlvbiB1cGRhdGUuCisgIGZ1bmN0aW9uIGZpbHRlclNlbGVjdGlvbkNoYW5nZShkb2MsIHNlbCkg
eworICAgIHZhciBvYmogPSB7CisgICAgICByYW5nZXM6IHNlbC5yYW5nZXMsCisgICAgICB1cGRh
dGU6IGZ1bmN0aW9uKHJhbmdlcykgeworICAgICAgICB0aGlzLnJhbmdlcyA9IFtdOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICB0aGlz
LnJhbmdlc1tpXSA9IG5ldyBSYW5nZShjbGlwUG9zKGRvYywgcmFuZ2VzW2ldLmFuY2hvciksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyhkb2MsIHJhbmdlc1tp
XS5oZWFkKSk7CisgICAgICB9CisgICAgfTsKKyAgICBzaWduYWwoZG9jLCAiYmVmb3JlU2VsZWN0
aW9uQ2hhbmdlIiwgZG9jLCBvYmopOworICAgIGlmIChkb2MuY20pIHNpZ25hbChkb2MuY20sICJi
ZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLCBkb2MuY20sIG9iaik7CisgICAgaWYgKG9iai5yYW5nZXMg
IT0gc2VsLnJhbmdlcykgcmV0dXJuIG5vcm1hbGl6ZVNlbGVjdGlvbihvYmoucmFuZ2VzLCBvYmou
cmFuZ2VzLmxlbmd0aCAtIDEpOworICAgIGVsc2UgcmV0dXJuIHNlbDsKKyAgfQorCisgIGZ1bmN0
aW9uIHNldFNlbGVjdGlvblJlcGxhY2VIaXN0b3J5KGRvYywgc2VsLCBvcHRpb25zKSB7CisgICAg
dmFyIGRvbmUgPSBkb2MuaGlzdG9yeS5kb25lLCBsYXN0ID0gbHN0KGRvbmUpOworICAgIGlmIChs
YXN0ICYmIGxhc3QucmFuZ2VzKSB7CisgICAgICBkb25lW2RvbmUubGVuZ3RoIC0gMV0gPSBzZWw7
CisgICAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpOworICAgIH0gZWxz
ZSB7CisgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBzZWwsIG9wdGlvbnMpOworICAgIH0KKyAgfQor
CisgIC8vIFNldCBhIG5ldyBzZWxlY3Rpb24uCisgIGZ1bmN0aW9uIHNldFNlbGVjdGlvbihkb2Ms
IHNlbCwgb3B0aW9ucykgeworICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3JpZ2luICYmIGRv
Yy5jbSkgZG9jLmNtLmN1ck9wLm9yaWdpbiA9IG9wdGlvbnMub3JpZ2luOworICAgIHNldFNlbGVj
dGlvbk5vVW5kbyhkb2MsIHNlbCwgb3B0aW9ucyk7CisgICAgYWRkU2VsZWN0aW9uVG9IaXN0b3J5
KGRvYywgZG9jLnNlbCwgZG9jLmNtID8gZG9jLmNtLmN1ck9wLmlkIDogTmFOLCBvcHRpb25zKTsK
KyAgfQorCisgIGZ1bmN0aW9uIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbCwgb3B0aW9ucykg
eworICAgIGlmIChoYXNIYW5kbGVyKGRvYywgImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpIHx8IGRv
Yy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpKQorICAg
ICAgc2VsID0gZmlsdGVyU2VsZWN0aW9uQ2hhbmdlKGRvYywgc2VsKTsKKworICAgIHZhciBiaWFz
ID0gY21wKHNlbC5wcmltYXJ5KCkuaGVhZCwgZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCkgPCAwID8g
LTEgOiAxOworICAgIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2tpcEF0b21pY0luU2VsZWN0aW9u
KGRvYywgc2VsLCBiaWFzLCB0cnVlKSk7CisKKyAgICBpZiAoIShvcHRpb25zICYmIG9wdGlvbnMu
c2Nyb2xsID09PSBmYWxzZSkgJiYgZG9jLmNtKQorICAgICAgZW5zdXJlQ3Vyc29yVmlzaWJsZShk
b2MuY20pOworICB9CisKKyAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBzZWwpIHsK
KyAgICBpZiAoc2VsLmVxdWFscyhkb2Muc2VsKSkgcmV0dXJuOworCisgICAgZG9jLnNlbCA9IHNl
bDsKKworICAgIGlmIChkb2MuY20pCisgICAgICBkb2MuY20uY3VyT3AudXBkYXRlSW5wdXQgPSBk
b2MuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9CisgICAgICAgIGRvYy5jbS5jdXJPcC5jdXJz
b3JBY3Rpdml0eSA9IHRydWU7CisgICAgc2lnbmFsTGF0ZXIoZG9jLCAiY3Vyc29yQWN0aXZpdHki
LCBkb2MpOworICB9CisKKyAgLy8gVmVyaWZ5IHRoYXQgdGhlIHNlbGVjdGlvbiBkb2VzIG5vdCBw
YXJ0aWFsbHkgc2VsZWN0IGFueSBhdG9taWMKKyAgLy8gbWFya2VkIHJhbmdlcy4KKyAgZnVuY3Rp
b24gcmVDaGVja1NlbGVjdGlvbihkb2MpIHsKKyAgICBzZXRTZWxlY3Rpb25Jbm5lcihkb2MsIHNr
aXBBdG9taWNJblNlbGVjdGlvbihkb2MsIGRvYy5zZWwsIG51bGwsIGZhbHNlKSwgc2VsX2RvbnRT
Y3JvbGwpOworICB9CisKKyAgLy8gUmV0dXJuIGEgc2VsZWN0aW9uIHRoYXQgZG9lcyBub3QgcGFy
dGlhbGx5IHNlbGVjdCBhbnkgYXRvbWljCisgIC8vIHJhbmdlcy4KKyAgZnVuY3Rpb24gc2tpcEF0
b21pY0luU2VsZWN0aW9uKGRvYywgc2VsLCBiaWFzLCBtYXlDbGVhcikgeworICAgIHZhciBvdXQ7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldOworICAgICAgdmFyIG5ld0FuY2hvciA9IHNraXBB
dG9taWMoZG9jLCByYW5nZS5hbmNob3IsIGJpYXMsIG1heUNsZWFyKTsKKyAgICAgIHZhciBuZXdI
ZWFkID0gc2tpcEF0b21pYyhkb2MsIHJhbmdlLmhlYWQsIGJpYXMsIG1heUNsZWFyKTsKKyAgICAg
IGlmIChvdXQgfHwgbmV3QW5jaG9yICE9IHJhbmdlLmFuY2hvciB8fCBuZXdIZWFkICE9IHJhbmdl
LmhlYWQpIHsKKyAgICAgICAgaWYgKCFvdXQpIG91dCA9IHNlbC5yYW5nZXMuc2xpY2UoMCwgaSk7
CisgICAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShuZXdBbmNob3IsIG5ld0hlYWQpOworICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gb3V0ID8gbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgc2VsLnBy
aW1JbmRleCkgOiBzZWw7CisgIH0KKworICAvLyBFbnN1cmUgYSBnaXZlbiBwb3NpdGlvbiBpcyBu
b3QgaW5zaWRlIGFuIGF0b21pYyByYW5nZS4KKyAgZnVuY3Rpb24gc2tpcEF0b21pYyhkb2MsIHBv
cywgYmlhcywgbWF5Q2xlYXIpIHsKKyAgICB2YXIgZmxpcHBlZCA9IGZhbHNlLCBjdXJQb3MgPSBw
b3M7CisgICAgdmFyIGRpciA9IGJpYXMgfHwgMTsKKyAgICBkb2MuY2FudEVkaXQgPSBmYWxzZTsK
KyAgICBzZWFyY2g6IGZvciAoOzspIHsKKyAgICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGN1
clBvcy5saW5lKTsKKyAgICAgIGlmIChsaW5lLm1hcmtlZFNwYW5zKSB7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGluZS5tYXJrZWRTcGFucy5sZW5ndGg7ICsraSkgeworICAgICAgICAg
IHZhciBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV0sIG0gPSBzcC5tYXJrZXI7CisgICAgICAgICAg
aWYgKChzcC5mcm9tID09IG51bGwgfHwgKG0uaW5jbHVzaXZlTGVmdCA/IHNwLmZyb20gPD0gY3Vy
UG9zLmNoIDogc3AuZnJvbSA8IGN1clBvcy5jaCkpICYmCisgICAgICAgICAgICAgIChzcC50byA9
PSBudWxsIHx8IChtLmluY2x1c2l2ZVJpZ2h0ID8gc3AudG8gPj0gY3VyUG9zLmNoIDogc3AudG8g
PiBjdXJQb3MuY2gpKSkgeworICAgICAgICAgICAgaWYgKG1heUNsZWFyKSB7CisgICAgICAgICAg
ICAgIHNpZ25hbChtLCAiYmVmb3JlQ3Vyc29yRW50ZXIiKTsKKyAgICAgICAgICAgICAgaWYgKG0u
ZXhwbGljaXRseUNsZWFyZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWxpbmUubWFya2VkU3Bh
bnMpIGJyZWFrOworICAgICAgICAgICAgICAgIGVsc2Ugey0taTsgY29udGludWU7fQorICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW0uYXRvbWljKSBjb250
aW51ZTsKKyAgICAgICAgICAgIHZhciBuZXdQb3MgPSBtLmZpbmQoZGlyIDwgMCA/IC0xIDogMSk7
CisgICAgICAgICAgICBpZiAoY21wKG5ld1BvcywgY3VyUG9zKSA9PSAwKSB7CisgICAgICAgICAg
ICAgIG5ld1Bvcy5jaCArPSBkaXI7CisgICAgICAgICAgICAgIGlmIChuZXdQb3MuY2ggPCAwKSB7
CisgICAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5saW5lID4gZG9jLmZpcnN0KSBuZXdQb3MgPSBj
bGlwUG9zKGRvYywgUG9zKG5ld1Bvcy5saW5lIC0gMSkpOworICAgICAgICAgICAgICAgIGVsc2Ug
bmV3UG9zID0gbnVsbDsKKyAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdQb3MuY2ggPiBsaW5l
LnRleHQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5saW5lIDwgZG9jLmZp
cnN0ICsgZG9jLnNpemUgLSAxKSBuZXdQb3MgPSBQb3MobmV3UG9zLmxpbmUgKyAxLCAwKTsKKyAg
ICAgICAgICAgICAgICBlbHNlIG5ld1BvcyA9IG51bGw7CisgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgaWYgKCFuZXdQb3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmxpcHBlZCkgewor
ICAgICAgICAgICAgICAgICAgLy8gRHJpdmVuIGluIGEgY29ybmVyIC0tIG5vIHZhbGlkIGN1cnNv
ciBwb3NpdGlvbiBmb3VuZCBhdCBhbGwKKyAgICAgICAgICAgICAgICAgIC8vIC0tIHRyeSBhZ2Fp
biAqd2l0aCogY2xlYXJpbmcsIGlmIHdlIGRpZG4ndCBhbHJlYWR5CisgICAgICAgICAgICAgICAg
ICBpZiAoIW1heUNsZWFyKSByZXR1cm4gc2tpcEF0b21pYyhkb2MsIHBvcywgYmlhcywgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHR1cm4gb2ZmIGVkaXRpbmcgdW50aWwg
ZnVydGhlciBub3RpY2UsIGFuZCByZXR1cm4gdGhlIHN0YXJ0IG9mIHRoZSBkb2MKKyAgICAgICAg
ICAgICAgICAgIGRvYy5jYW50RWRpdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICByZXR1cm4g
UG9zKGRvYy5maXJzdCwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZs
aXBwZWQgPSB0cnVlOyBuZXdQb3MgPSBwb3M7IGRpciA9IC1kaXI7CisgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1clBvcyA9IG5ld1BvczsKKyAgICAgICAgICAg
IGNvbnRpbnVlIHNlYXJjaDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAg
IHJldHVybiBjdXJQb3M7CisgICAgfQorICB9CisKKyAgLy8gU0VMRUNUSU9OIERSQVdJTkcKKwor
ICAvLyBSZWRyYXcgdGhlIHNlbGVjdGlvbiBhbmQvb3IgY3Vyc29yCiAgIGZ1bmN0aW9uIHVwZGF0
ZVNlbGVjdGlvbihjbSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICB2YXIg
Y29sbGFwc2VkID0gcG9zRXEoY20uZG9jLnNlbC5mcm9tLCBjbS5kb2Muc2VsLnRvKTsKLSAgICBp
ZiAoY29sbGFwc2VkIHx8IGNtLm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3RpbmcpCi0gICAg
ICB1cGRhdGVTZWxlY3Rpb25DdXJzb3IoY20pOwotICAgIGVsc2UKLSAgICAgIGRpc3BsYXkuY3Vy
c29yLnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAi
bm9uZSI7Ci0gICAgaWYgKCFjb2xsYXBzZWQpCi0gICAgICB1cGRhdGVTZWxlY3Rpb25SYW5nZShj
bSk7Ci0gICAgZWxzZQotICAgICAgZGlzcGxheS5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheSA9
ICJub25lIjsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKKyAg
ICB2YXIgY3VyRnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Cisg
ICAgdmFyIHNlbEZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykgewor
ICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV07CisgICAgICB2YXIgY29sbGFwc2Vk
ID0gcmFuZ2UuZW1wdHkoKTsKKyAgICAgIGlmIChjb2xsYXBzZWQgfHwgY20ub3B0aW9ucy5zaG93
Q3Vyc29yV2hlblNlbGVjdGluZykKKyAgICAgICAgZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgcmFu
Z2UsIGN1ckZyYWdtZW50KTsKKyAgICAgIGlmICghY29sbGFwc2VkKQorICAgICAgICBkcmF3U2Vs
ZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBzZWxGcmFnbWVudCk7CisgICAgfQoKICAgICAvLyBNb3Zl
IHRoZSBoaWRkZW4gdGV4dGFyZWEgbmVhciB0aGUgY3Vyc29yIHRvIHByZXZlbnQgc2Nyb2xsaW5n
IGFydGlmYWN0cwogICAgIGlmIChjbS5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3IpIHsKLSAg
ICAgIHZhciBoZWFkUG9zID0gY3Vyc29yQ29vcmRzKGNtLCBjbS5kb2Muc2VsLmhlYWQsICJkaXYi
KTsKLSAgICAgIHZhciB3cmFwT2ZmID0gZ2V0UmVjdChkaXNwbGF5LndyYXBwZXIpLCBsaW5lT2Zm
ID0gZ2V0UmVjdChkaXNwbGF5LmxpbmVEaXYpOwotICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHls
ZS50b3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0
IC0gMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlYWRQb3MudG9wICsgbGluZU9mZi50b3AgLSB3cmFwT2ZmLnRvcCkpICsgInB4IjsK
LSAgICAgIGRpc3BsYXkuaW5wdXREaXYuc3R5bGUubGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWlu
KGRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCAtIDEwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBvcy5sZWZ0ICsgbGluZU9m
Zi5sZWZ0IC0gd3JhcE9mZi5sZWZ0KSkgKyAicHgiOworICAgICAgdmFyIGhlYWRQb3MgPSBjdXJz
b3JDb29yZHMoY20sIGRvYy5zZWwucHJpbWFyeSgpLmhlYWQsICJkaXYiKTsKKyAgICAgIHZhciB3
cmFwT2ZmID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBsaW5lT2Zm
ID0gZGlzcGxheS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgdmFyIHRv
cCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQgLSAx
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLnRvcCArIGxp
bmVPZmYudG9wIC0gd3JhcE9mZi50b3ApKTsKKyAgICAgIHZhciBsZWZ0ID0gTWF0aC5tYXgoMCwg
TWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MubGVmdCArIGxpbmVPZmYubGVmdCAtIHdy
YXBPZmYubGVmdCkpOworICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3AgPSB0b3AgKyAi
cHgiOworICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7CiAg
ICAgfQorCisgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5jdXJzb3JEaXYsIGN1ckZy
YWdtZW50KTsKKyAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LnNlbGVjdGlvbkRpdiwg
c2VsRnJhZ21lbnQpOwogICB9CgotICAvLyBObyBzZWxlY3Rpb24sIHBsYWluIGN1cnNvcgotICBm
dW5jdGlvbiB1cGRhdGVTZWxlY3Rpb25DdXJzb3IoY20pIHsKLSAgICB2YXIgZGlzcGxheSA9IGNt
LmRpc3BsYXksIHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgY20uZG9jLnNlbC5oZWFkLCAiZGl2Iik7
Ci0gICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUubGVmdCA9IHBvcy5sZWZ0ICsgInB4IjsKLSAgICBk
aXNwbGF5LmN1cnNvci5zdHlsZS50b3AgPSBwb3MudG9wICsgInB4IjsKLSAgICBkaXNwbGF5LmN1
cnNvci5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heCgwLCBwb3MuYm90dG9tIC0gcG9zLnRvcCkgKiBj
bS5vcHRpb25zLmN1cnNvckhlaWdodCArICJweCI7Ci0gICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUu
ZGlzcGxheSA9ICIiOworICAvLyBEcmF3cyBhIGN1cnNvciBmb3IgdGhlIGdpdmVuIHJhbmdlCisg
IGZ1bmN0aW9uIGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHJhbmdlLCBvdXRwdXQpIHsKKyAgICB2
YXIgcG9zID0gY3Vyc29yQ29vcmRzKGNtLCByYW5nZS5oZWFkLCAiZGl2Iik7CisKKyAgICB2YXIg
Y3Vyc29yID0gb3V0cHV0LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgIlx1MDBhMCIsICJDb2RlTWly
cm9yLWN1cnNvciIpKTsKKyAgICBjdXJzb3Iuc3R5bGUubGVmdCA9IHBvcy5sZWZ0ICsgInB4IjsK
KyAgICBjdXJzb3Iuc3R5bGUudG9wID0gcG9zLnRvcCArICJweCI7CisgICAgY3Vyc29yLnN0eWxl
LmhlaWdodCA9IE1hdGgubWF4KDAsIHBvcy5ib3R0b20gLSBwb3MudG9wKSAqIGNtLm9wdGlvbnMu
Y3Vyc29ySGVpZ2h0ICsgInB4IjsKCiAgICAgaWYgKHBvcy5vdGhlcikgewotICAgICAgZGlzcGxh
eS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBkaXNwbGF5Lm90aGVyQ3Vy
c29yLnN0eWxlLmxlZnQgPSBwb3Mub3RoZXIubGVmdCArICJweCI7Ci0gICAgICBkaXNwbGF5Lm90
aGVyQ3Vyc29yLnN0eWxlLnRvcCA9IHBvcy5vdGhlci50b3AgKyAicHgiOwotICAgICAgZGlzcGxh
eS5vdGhlckN1cnNvci5zdHlsZS5oZWlnaHQgPSAocG9zLm90aGVyLmJvdHRvbSAtIHBvcy5vdGhl
ci50b3ApICogLjg1ICsgInB4IjsKLSAgICB9IGVsc2UgeyBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0
eWxlLmRpc3BsYXkgPSAibm9uZSI7IH0KKyAgICAgIC8vIFNlY29uZGFyeSBjdXJzb3IsIHNob3du
IHdoZW4gb24gYSAnanVtcCcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dAorICAgICAgdmFyIG90aGVy
Q3Vyc29yID0gb3V0cHV0LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgIlx1MDBhMCIsICJDb2RlTWly
cm9yLWN1cnNvciBDb2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpKTsKKyAgICAgIG90aGVyQ3Vy
c29yLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgIG90aGVyQ3Vyc29yLnN0eWxlLmxlZnQgPSBw
b3Mub3RoZXIubGVmdCArICJweCI7CisgICAgICBvdGhlckN1cnNvci5zdHlsZS50b3AgPSBwb3Mu
b3RoZXIudG9wICsgInB4IjsKKyAgICAgIG90aGVyQ3Vyc29yLnN0eWxlLmhlaWdodCA9IChwb3Mu
b3RoZXIuYm90dG9tIC0gcG9zLm90aGVyLnRvcCkgKiAuODUgKyAicHgiOworICAgIH0KICAgfQoK
LSAgLy8gSGlnaGxpZ2h0IHNlbGVjdGlvbgotICBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb25SYW5n
ZShjbSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jLCBzZWwg
PSBjbS5kb2Muc2VsOworICAvLyBEcmF3cyB0aGUgZ2l2ZW4gcmFuZ2UgYXMgYSBoaWdobGlnaHRl
ZCBzZWxlY3Rpb24KKyAgZnVuY3Rpb24gZHJhd1NlbGVjdGlvblJhbmdlKGNtLCByYW5nZSwgb3V0
cHV0KSB7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7CiAgICAg
dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIHZh
ciBjbGllbnRXaWR0aCA9IGRpc3BsYXkubGluZVNwYWNlLm9mZnNldFdpZHRoLCBwbCA9IHBhZGRp
bmdMZWZ0KGNtLmRpc3BsYXkpOworICAgIHZhciBwYWRkaW5nID0gcGFkZGluZ0goY20uZGlzcGxh
eSksIGxlZnRTaWRlID0gcGFkZGluZy5sZWZ0LCByaWdodFNpZGUgPSBkaXNwbGF5LmxpbmVTcGFj
ZS5vZmZzZXRXaWR0aCAtIHBhZGRpbmcucmlnaHQ7CgogICAgIGZ1bmN0aW9uIGFkZChsZWZ0LCB0
b3AsIHdpZHRoLCBib3R0b20pIHsKICAgICAgIGlmICh0b3AgPCAwKSB0b3AgPSAwOworICAgICAg
dG9wID0gTWF0aC5yb3VuZCh0b3ApOworICAgICAgYm90dG9tID0gTWF0aC5yb3VuZChib3R0b20p
OwogICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJv
ci1zZWxlY3RlZCIsICJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIgKyBsZWZ0ICsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicHg7IHRvcDogIiArIHRvcCArICJweDsgd2lkdGg6
ICIgKyAod2lkdGggPT0gbnVsbCA/IGNsaWVudFdpZHRoIC0gbGVmdCA6IHdpZHRoKSArCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInB4OyB0b3A6ICIgKyB0b3AgKyAicHg7IHdpZHRo
OiAiICsgKHdpZHRoID09IG51bGwgPyByaWdodFNpZGUgLSBsZWZ0IDogd2lkdGgpICsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicHg7IGhlaWdodDogIiArIChib3R0b20gLSB0b3Ap
ICsgInB4IikpOwogICAgIH0KCkBAIC04NDAsNDQgKzEzMTcsNDQgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgbGVmdCA9IGxlZnRQb3MubGVmdDsKICAgICAg
ICAgICByaWdodCA9IHJpZ2h0UG9zLnJpZ2h0OwogICAgICAgICB9Ci0gICAgICAgIGlmIChmcm9t
QXJnID09IG51bGwgJiYgZnJvbSA9PSAwKSBsZWZ0ID0gcGw7CisgICAgICAgIGlmIChmcm9tQXJn
ID09IG51bGwgJiYgZnJvbSA9PSAwKSBsZWZ0ID0gbGVmdFNpZGU7CiAgICAgICAgIGlmIChyaWdo
dFBvcy50b3AgLSBsZWZ0UG9zLnRvcCA+IDMpIHsgLy8gRGlmZmVyZW50IGxpbmVzLCBkcmF3IHRv
cCBwYXJ0CiAgICAgICAgICAgYWRkKGxlZnQsIGxlZnRQb3MudG9wLCBudWxsLCBsZWZ0UG9zLmJv
dHRvbSk7Ci0gICAgICAgICAgbGVmdCA9IHBsOworICAgICAgICAgIGxlZnQgPSBsZWZ0U2lkZTsK
ICAgICAgICAgICBpZiAobGVmdFBvcy5ib3R0b20gPCByaWdodFBvcy50b3ApIGFkZChsZWZ0LCBs
ZWZ0UG9zLmJvdHRvbSwgbnVsbCwgcmlnaHRQb3MudG9wKTsKICAgICAgICAgfQotICAgICAgICBp
ZiAodG9BcmcgPT0gbnVsbCAmJiB0byA9PSBsaW5lTGVuKSByaWdodCA9IGNsaWVudFdpZHRoOwor
ICAgICAgICBpZiAodG9BcmcgPT0gbnVsbCAmJiB0byA9PSBsaW5lTGVuKSByaWdodCA9IHJpZ2h0
U2lkZTsKICAgICAgICAgaWYgKCFzdGFydCB8fCBsZWZ0UG9zLnRvcCA8IHN0YXJ0LnRvcCB8fCBs
ZWZ0UG9zLnRvcCA9PSBzdGFydC50b3AgJiYgbGVmdFBvcy5sZWZ0IDwgc3RhcnQubGVmdCkKICAg
ICAgICAgICBzdGFydCA9IGxlZnRQb3M7CiAgICAgICAgIGlmICghZW5kIHx8IHJpZ2h0UG9zLmJv
dHRvbSA+IGVuZC5ib3R0b20gfHwgcmlnaHRQb3MuYm90dG9tID09IGVuZC5ib3R0b20gJiYgcmln
aHRQb3MucmlnaHQgPiBlbmQucmlnaHQpCiAgICAgICAgICAgZW5kID0gcmlnaHRQb3M7Ci0gICAg
ICAgIGlmIChsZWZ0IDwgcGwgKyAxKSBsZWZ0ID0gcGw7CisgICAgICAgIGlmIChsZWZ0IDwgbGVm
dFNpZGUgKyAxKSBsZWZ0ID0gbGVmdFNpZGU7CiAgICAgICAgIGFkZChsZWZ0LCByaWdodFBvcy50
b3AsIHJpZ2h0IC0gbGVmdCwgcmlnaHRQb3MuYm90dG9tKTsKICAgICAgIH0pOwogICAgICAgcmV0
dXJuIHtzdGFydDogc3RhcnQsIGVuZDogZW5kfTsKICAgICB9CgotICAgIGlmIChzZWwuZnJvbS5s
aW5lID09IHNlbC50by5saW5lKSB7Ci0gICAgICBkcmF3Rm9yTGluZShzZWwuZnJvbS5saW5lLCBz
ZWwuZnJvbS5jaCwgc2VsLnRvLmNoKTsKKyAgICB2YXIgc0Zyb20gPSByYW5nZS5mcm9tKCksIHNU
byA9IHJhbmdlLnRvKCk7CisgICAgaWYgKHNGcm9tLmxpbmUgPT0gc1RvLmxpbmUpIHsKKyAgICAg
IGRyYXdGb3JMaW5lKHNGcm9tLmxpbmUsIHNGcm9tLmNoLCBzVG8uY2gpOwogICAgIH0gZWxzZSB7
Ci0gICAgICB2YXIgZnJvbUxpbmUgPSBnZXRMaW5lKGRvYywgc2VsLmZyb20ubGluZSksIHRvTGlu
ZSA9IGdldExpbmUoZG9jLCBzZWwudG8ubGluZSk7Ci0gICAgICB2YXIgc2luZ2xlVkxpbmUgPSB2
aXN1YWxMaW5lKGRvYywgZnJvbUxpbmUpID09IHZpc3VhbExpbmUoZG9jLCB0b0xpbmUpOwotICAg
ICAgdmFyIGxlZnRFbmQgPSBkcmF3Rm9yTGluZShzZWwuZnJvbS5saW5lLCBzZWwuZnJvbS5jaCwg
c2luZ2xlVkxpbmUgPyBmcm9tTGluZS50ZXh0Lmxlbmd0aCA6IG51bGwpLmVuZDsKLSAgICAgIHZh
ciByaWdodFN0YXJ0ID0gZHJhd0ZvckxpbmUoc2VsLnRvLmxpbmUsIHNpbmdsZVZMaW5lID8gMCA6
IG51bGwsIHNlbC50by5jaCkuc3RhcnQ7CisgICAgICB2YXIgZnJvbUxpbmUgPSBnZXRMaW5lKGRv
Yywgc0Zyb20ubGluZSksIHRvTGluZSA9IGdldExpbmUoZG9jLCBzVG8ubGluZSk7CisgICAgICB2
YXIgc2luZ2xlVkxpbmUgPSB2aXN1YWxMaW5lKGZyb21MaW5lKSA9PSB2aXN1YWxMaW5lKHRvTGlu
ZSk7CisgICAgICB2YXIgbGVmdEVuZCA9IGRyYXdGb3JMaW5lKHNGcm9tLmxpbmUsIHNGcm9tLmNo
LCBzaW5nbGVWTGluZSA/IGZyb21MaW5lLnRleHQubGVuZ3RoICsgMSA6IG51bGwpLmVuZDsKKyAg
ICAgIHZhciByaWdodFN0YXJ0ID0gZHJhd0ZvckxpbmUoc1RvLmxpbmUsIHNpbmdsZVZMaW5lID8g
MCA6IG51bGwsIHNUby5jaCkuc3RhcnQ7CiAgICAgICBpZiAoc2luZ2xlVkxpbmUpIHsKICAgICAg
ICAgaWYgKGxlZnRFbmQudG9wIDwgcmlnaHRTdGFydC50b3AgLSAyKSB7CiAgICAgICAgICAgYWRk
KGxlZnRFbmQucmlnaHQsIGxlZnRFbmQudG9wLCBudWxsLCBsZWZ0RW5kLmJvdHRvbSk7Ci0gICAg
ICAgICAgYWRkKHBsLCByaWdodFN0YXJ0LnRvcCwgcmlnaHRTdGFydC5sZWZ0LCByaWdodFN0YXJ0
LmJvdHRvbSk7CisgICAgICAgICAgYWRkKGxlZnRTaWRlLCByaWdodFN0YXJ0LnRvcCwgcmlnaHRT
dGFydC5sZWZ0LCByaWdodFN0YXJ0LmJvdHRvbSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgYWRkKGxlZnRFbmQucmlnaHQsIGxlZnRFbmQudG9wLCByaWdodFN0YXJ0LmxlZnQgLSBsZWZ0
RW5kLnJpZ2h0LCBsZWZ0RW5kLmJvdHRvbSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGlm
IChsZWZ0RW5kLmJvdHRvbSA8IHJpZ2h0U3RhcnQudG9wKQotICAgICAgICBhZGQocGwsIGxlZnRF
bmQuYm90dG9tLCBudWxsLCByaWdodFN0YXJ0LnRvcCk7CisgICAgICAgIGFkZChsZWZ0U2lkZSwg
bGVmdEVuZC5ib3R0b20sIG51bGwsIHJpZ2h0U3RhcnQudG9wKTsKICAgICB9CgotICAgIHJlbW92
ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkuc2VsZWN0aW9uRGl2LCBmcmFnbWVudCk7Ci0gICAgZGlz
cGxheS5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheSA9ICIiOworICAgIG91dHB1dC5hcHBlbmRD
aGlsZChmcmFnbWVudCk7CiAgIH0KCiAgIC8vIEN1cnNvci1ibGlua2luZwpAQCAtODg2LDM3ICsx
MzYzLDM4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBkaXNw
bGF5ID0gY20uZGlzcGxheTsKICAgICBjbGVhckludGVydmFsKGRpc3BsYXkuYmxpbmtlcik7CiAg
ICAgdmFyIG9uID0gdHJ1ZTsKLSAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0g
ZGlzcGxheS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gIiI7CisgICAgZGlzcGxheS5j
dXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9ICIiOwogICAgIGlmIChjbS5vcHRpb25zLmN1cnNv
ckJsaW5rUmF0ZSA+IDApCiAgICAgICBkaXNwbGF5LmJsaW5rZXIgPSBzZXRJbnRlcnZhbChmdW5j
dGlvbigpIHsKLSAgICAgICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUudmlzaWJpbGl0eSA9IGRpc3Bs
YXkub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eSA9IChvbiA9ICFvbikgPyAiIiA6ICJoaWRk
ZW4iOworICAgICAgICBkaXNwbGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gKG9uID0g
IW9uKSA/ICIiIDogImhpZGRlbiI7CiAgICAgICB9LCBjbS5vcHRpb25zLmN1cnNvckJsaW5rUmF0
ZSk7CiAgIH0KCiAgIC8vIEhJR0hMSUdIVCBXT1JLRVIKCiAgIGZ1bmN0aW9uIHN0YXJ0V29ya2Vy
KGNtLCB0aW1lKSB7Ci0gICAgaWYgKGNtLmRvYy5tb2RlLnN0YXJ0U3RhdGUgJiYgY20uZG9jLmZy
b250aWVyIDwgY20uZGlzcGxheS5zaG93aW5nVG8pCisgICAgaWYgKGNtLmRvYy5tb2RlLnN0YXJ0
U3RhdGUgJiYgY20uZG9jLmZyb250aWVyIDwgY20uZGlzcGxheS52aWV3VG8pCiAgICAgICBjbS5z
dGF0ZS5oaWdobGlnaHQuc2V0KHRpbWUsIGJpbmQoaGlnaGxpZ2h0V29ya2VyLCBjbSkpOwogICB9
CgogICBmdW5jdGlvbiBoaWdobGlnaHRXb3JrZXIoY20pIHsKICAgICB2YXIgZG9jID0gY20uZG9j
OwogICAgIGlmIChkb2MuZnJvbnRpZXIgPCBkb2MuZmlyc3QpIGRvYy5mcm9udGllciA9IGRvYy5m
aXJzdDsKLSAgICBpZiAoZG9jLmZyb250aWVyID49IGNtLmRpc3BsYXkuc2hvd2luZ1RvKSByZXR1
cm47CisgICAgaWYgKGRvYy5mcm9udGllciA+PSBjbS5kaXNwbGF5LnZpZXdUbykgcmV0dXJuOwog
ICAgIHZhciBlbmQgPSArbmV3IERhdGUgKyBjbS5vcHRpb25zLndvcmtUaW1lOwogICAgIHZhciBz
dGF0ZSA9IGNvcHlTdGF0ZShkb2MubW9kZSwgZ2V0U3RhdGVCZWZvcmUoY20sIGRvYy5mcm9udGll
cikpOwotICAgIHZhciBjaGFuZ2VkID0gW10sIHByZXZDaGFuZ2U7Ci0gICAgZG9jLml0ZXIoZG9j
LmZyb250aWVyLCBNYXRoLm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6ZSwgY20uZGlzcGxheS5zaG93
aW5nVG8gKyA1MDApLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAoZG9jLmZyb250aWVyID49
IGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20pIHsgLy8gVmlzaWJsZQorCisgICAgcnVuSW5PcChjbSwg
ZnVuY3Rpb24oKSB7CisgICAgZG9jLml0ZXIoZG9jLmZyb250aWVyLCBNYXRoLm1pbihkb2MuZmly
c3QgKyBkb2Muc2l6ZSwgY20uZGlzcGxheS52aWV3VG8gKyA1MDApLCBmdW5jdGlvbihsaW5lKSB7
CisgICAgICBpZiAoZG9jLmZyb250aWVyID49IGNtLmRpc3BsYXkudmlld0Zyb20pIHsgLy8gVmlz
aWJsZQogICAgICAgICB2YXIgb2xkU3R5bGVzID0gbGluZS5zdHlsZXM7Ci0gICAgICAgIGxpbmUu
c3R5bGVzID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgc3RhdGUsIHRydWUpOworICAgICAgICB2
YXIgaGlnaGxpZ2h0ZWQgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBzdGF0ZSwgdHJ1ZSk7Cisg
ICAgICAgIGxpbmUuc3R5bGVzID0gaGlnaGxpZ2h0ZWQuc3R5bGVzOworICAgICAgICBpZiAoaGln
aGxpZ2h0ZWQuY2xhc3NlcykgbGluZS5zdHlsZUNsYXNzZXMgPSBoaWdobGlnaHRlZC5jbGFzc2Vz
OworICAgICAgICBlbHNlIGlmIChsaW5lLnN0eWxlQ2xhc3NlcykgbGluZS5zdHlsZUNsYXNzZXMg
PSBudWxsOwogICAgICAgICB2YXIgaXNjaGFuZ2UgPSAhb2xkU3R5bGVzIHx8IG9sZFN0eWxlcy5s
ZW5ndGggIT0gbGluZS5zdHlsZXMubGVuZ3RoOwogICAgICAgICBmb3IgKHZhciBpID0gMDsgIWlz
Y2hhbmdlICYmIGkgPCBvbGRTdHlsZXMubGVuZ3RoOyArK2kpIGlzY2hhbmdlID0gb2xkU3R5bGVz
W2ldICE9IGxpbmUuc3R5bGVzW2ldOwotICAgICAgICBpZiAoaXNjaGFuZ2UpIHsKLSAgICAgICAg
ICBpZiAocHJldkNoYW5nZSAmJiBwcmV2Q2hhbmdlLmVuZCA9PSBkb2MuZnJvbnRpZXIpIHByZXZD
aGFuZ2UuZW5kKys7Ci0gICAgICAgICAgZWxzZSBjaGFuZ2VkLnB1c2gocHJldkNoYW5nZSA9IHtz
dGFydDogZG9jLmZyb250aWVyLCBlbmQ6IGRvYy5mcm9udGllciArIDF9KTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAoaXNjaGFuZ2UpIHJlZ0xpbmVDaGFuZ2UoY20sIGRvYy5mcm9udGllciwgInRl
eHQiKTsKICAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0
ZSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0LCBz
dGF0ZSk7CkBAIC05MjgsMTEgKzE0MDYsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICB9CiAgICAgfSk7Ci0gICAgaWYgKGNo
YW5nZWQubGVuZ3RoKQotICAgICAgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbigpIHsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkLmxlbmd0aDsgKytpKQotICAgICAgICAgIHJlZ0No
YW5nZSh0aGlzLCBjaGFuZ2VkW2ldLnN0YXJ0LCBjaGFuZ2VkW2ldLmVuZCk7Ci0gICAgICB9KSgp
OworICAgIH0pOwogICB9CgogICAvLyBGaW5kcyB0aGUgbGluZSB0byBzdGFydCB3aXRoIHdoZW4g
c3RhcnRpbmcgYSBwYXJzZS4gVHJpZXMgdG8KQEAgLTk2NCw3ICsxNDM4LDcgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZWxzZSBzdGF0ZSA9IGNvcHlTdGF0ZShkb2Mu
bW9kZSwgc3RhdGUpOwogICAgIGRvYy5pdGVyKHBvcywgbiwgZnVuY3Rpb24obGluZSkgewogICAg
ICAgcHJvY2Vzc0xpbmUoY20sIGxpbmUudGV4dCwgc3RhdGUpOwotICAgICAgdmFyIHNhdmUgPSBw
b3MgPT0gbiAtIDEgfHwgcG9zICUgNSA9PSAwIHx8IHBvcyA+PSBkaXNwbGF5LnNob3dpbmdGcm9t
ICYmIHBvcyA8IGRpc3BsYXkuc2hvd2luZ1RvOworICAgICAgdmFyIHNhdmUgPSBwb3MgPT0gbiAt
IDEgfHwgcG9zICUgNSA9PSAwIHx8IHBvcyA+PSBkaXNwbGF5LnZpZXdGcm9tICYmIHBvcyA8IGRp
c3BsYXkudmlld1RvOwogICAgICAgbGluZS5zdGF0ZUFmdGVyID0gc2F2ZSA/IGNvcHlTdGF0ZShk
b2MubW9kZSwgc3RhdGUpIDogbnVsbDsKICAgICAgICsrcG9zOwogICAgIH0pOwpAQCAtOTc2LDE4
MyArMTQ1MCwyMjIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CgogICBmdW5j
dGlvbiBwYWRkaW5nVG9wKGRpc3BsYXkpIHtyZXR1cm4gZGlzcGxheS5saW5lU3BhY2Uub2Zmc2V0
VG9wO30KICAgZnVuY3Rpb24gcGFkZGluZ1ZlcnQoZGlzcGxheSkge3JldHVybiBkaXNwbGF5Lm1v
dmVyLm9mZnNldEhlaWdodCAtIGRpc3BsYXkubGluZVNwYWNlLm9mZnNldEhlaWdodDt9Ci0gIGZ1
bmN0aW9uIHBhZGRpbmdMZWZ0KGRpc3BsYXkpIHsKLSAgICB2YXIgZSA9IHJlbW92ZUNoaWxkcmVu
QW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgZWx0KCJwcmUiLCBudWxsLCBudWxsLCAidGV4dC1hbGln
bjogbGVmdCIpKS5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCAieCIpKTsKLSAgICByZXR1cm4gZS5v
ZmZzZXRMZWZ0OwotICB9Ci0KLSAgZnVuY3Rpb24gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGNoLCBk
YXRhLCBiaWFzKSB7Ci0gICAgdmFyIGRpciA9IC0xOwotICAgIGRhdGEgPSBkYXRhIHx8IG1lYXN1
cmVMaW5lKGNtLCBsaW5lKTsKLSAgICBpZiAoZGF0YS5jcnVkZSkgewotICAgICAgdmFyIGxlZnQg
PSBkYXRhLmxlZnQgKyBjaCAqIGRhdGEud2lkdGg7Ci0gICAgICByZXR1cm4ge2xlZnQ6IGxlZnQs
IHJpZ2h0OiBsZWZ0ICsgZGF0YS53aWR0aCwgdG9wOiBkYXRhLnRvcCwgYm90dG9tOiBkYXRhLmJv
dHRvbX07Ci0gICAgfQotCi0gICAgZm9yICh2YXIgcG9zID0gY2g7OyBwb3MgKz0gZGlyKSB7Ci0g
ICAgICB2YXIgciA9IGRhdGFbcG9zXTsKLSAgICAgIGlmIChyKSBicmVhazsKLSAgICAgIGlmIChk
aXIgPCAwICYmIHBvcyA9PSAwKSBkaXIgPSAxOwotICAgIH0KLSAgICBiaWFzID0gcG9zID4gY2gg
PyAibGVmdCIgOiBwb3MgPCBjaCA/ICJyaWdodCIgOiBiaWFzOwotICAgIGlmIChiaWFzID09ICJs
ZWZ0IiAmJiByLmxlZnRTaWRlKSByID0gci5sZWZ0U2lkZTsKLSAgICBlbHNlIGlmIChiaWFzID09
ICJyaWdodCIgJiYgci5yaWdodFNpZGUpIHIgPSByLnJpZ2h0U2lkZTsKLSAgICByZXR1cm4ge2xl
ZnQ6IHBvcyA8IGNoID8gci5yaWdodCA6IHIubGVmdCwKLSAgICAgICAgICAgIHJpZ2h0OiBwb3Mg
PiBjaCA/IHIubGVmdCA6IHIucmlnaHQsCi0gICAgICAgICAgICB0b3A6IHIudG9wLAotICAgICAg
ICAgICAgYm90dG9tOiByLmJvdHRvbX07Ci0gIH0KLQotICBmdW5jdGlvbiBmaW5kQ2FjaGVkTWVh
c3VyZW1lbnQoY20sIGxpbmUpIHsKLSAgICB2YXIgY2FjaGUgPSBjbS5kaXNwbGF5Lm1lYXN1cmVM
aW5lQ2FjaGU7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNoZS5sZW5ndGg7ICsraSkgewot
ICAgICAgdmFyIG1lbW8gPSBjYWNoZVtpXTsKLSAgICAgIGlmIChtZW1vLnRleHQgPT0gbGluZS50
ZXh0ICYmIG1lbW8ubWFya2VkU3BhbnMgPT0gbGluZS5tYXJrZWRTcGFucyAmJgotICAgICAgICAg
IGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggPT0gbWVtby53aWR0aCAmJgotICAgICAg
ICAgIG1lbW8uY2xhc3NlcyA9PSBsaW5lLnRleHRDbGFzcyArICJ8IiArIGxpbmUud3JhcENsYXNz
KQotICAgICAgICByZXR1cm4gbWVtbzsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBjbGVhckNh
Y2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7Ci0gICAgdmFyIGV4aXN0cyA9IGZpbmRDYWNoZWRN
ZWFzdXJlbWVudChjbSwgbGluZSk7Ci0gICAgaWYgKGV4aXN0cykgZXhpc3RzLnRleHQgPSBleGlz
dHMubWVhc3VyZSA9IGV4aXN0cy5tYXJrZWRTcGFucyA9IG51bGw7Ci0gIH0KLQotICBmdW5jdGlv
biBtZWFzdXJlTGluZShjbSwgbGluZSkgewotICAgIC8vIEZpcnN0IGxvb2sgaW4gdGhlIGNhY2hl
Ci0gICAgdmFyIGNhY2hlZCA9IGZpbmRDYWNoZWRNZWFzdXJlbWVudChjbSwgbGluZSk7Ci0gICAg
aWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZC5tZWFzdXJlOwotCi0gICAgLy8gRmFpbGluZyB0aGF0
LCByZWNvbXB1dGUgYW5kIHN0b3JlIHJlc3VsdCBpbiBjYWNoZQotICAgIHZhciBtZWFzdXJlID0g
bWVhc3VyZUxpbmVJbm5lcihjbSwgbGluZSk7Ci0gICAgdmFyIGNhY2hlID0gY20uZGlzcGxheS5t
ZWFzdXJlTGluZUNhY2hlOwotICAgIHZhciBtZW1vID0ge3RleHQ6IGxpbmUudGV4dCwgd2lkdGg6
IGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgsCi0gICAgICAgICAgICAgICAgbWFya2Vk
U3BhbnM6IGxpbmUubWFya2VkU3BhbnMsIG1lYXN1cmU6IG1lYXN1cmUsCi0gICAgICAgICAgICAg
ICAgY2xhc3NlczogbGluZS50ZXh0Q2xhc3MgKyAifCIgKyBsaW5lLndyYXBDbGFzc307Ci0gICAg
aWYgKGNhY2hlLmxlbmd0aCA9PSAxNikgY2FjaGVbKytjbS5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2Fj
aGVQb3MgJSAxNl0gPSBtZW1vOwotICAgIGVsc2UgY2FjaGUucHVzaChtZW1vKTsKLSAgICByZXR1
cm4gbWVhc3VyZTsKLSAgfQotCi0gIGZ1bmN0aW9uIG1lYXN1cmVMaW5lSW5uZXIoY20sIGxpbmUp
IHsKLSAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIGxpbmUudGV4dC5sZW5ndGgg
Pj0gY20ub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pCi0gICAgICByZXR1cm4gY3J1ZGVseU1l
YXN1cmVMaW5lKGNtLCBsaW5lKTsKLQotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgbWVh
c3VyZSA9IGVtcHR5QXJyYXkobGluZS50ZXh0Lmxlbmd0aCk7Ci0gICAgdmFyIHByZSA9IGJ1aWxk
TGluZUNvbnRlbnQoY20sIGxpbmUsIG1lYXN1cmUsIHRydWUpLnByZTsKLQotICAgIC8vIElFIGRv
ZXMgbm90IGNhY2hlIGVsZW1lbnQgcG9zaXRpb25zIG9mIGlubGluZSBlbGVtZW50cyBiZXR3ZWVu
Ci0gICAgLy8gY2FsbHMgdG8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0LiBUaGlzIG1ha2VzIHRoZSBs
b29wIGJlbG93LAotICAgIC8vIHdoaWNoIGdhdGhlcnMgdGhlIHBvc2l0aW9ucyBvZiBhbGwgdGhl
IGNoYXJhY3RlcnMgb24gdGhlIGxpbmUsCi0gICAgLy8gZG8gYW4gYW1vdW50IG9mIGxheW91dCB3
b3JrIHF1YWRyYXRpYyB0byB0aGUgbnVtYmVyIG9mCi0gICAgLy8gY2hhcmFjdGVycy4gV2hlbiBs
aW5lIHdyYXBwaW5nIGlzIG9mZiwgd2UgdHJ5IHRvIGltcHJvdmUgdGhpbmdzCi0gICAgLy8gYnkg
Zmlyc3Qgc3ViZGl2aWRpbmcgdGhlIGxpbmUgaW50byBhIGJ1bmNoIG9mIGlubGluZSBibG9ja3Ms
IHNvCi0gICAgLy8gdGhhdCBJRSBjYW4gcmV1c2UgbW9zdCBvZiB0aGUgbGF5b3V0IGluZm9ybWF0
aW9uIGZyb20gY2FjaGVzCi0gICAgLy8gZm9yIHRob3NlIGJsb2Nrcy4gVGhpcyBkb2VzIGludGVy
ZmVyZSB3aXRoIGxpbmUgd3JhcHBpbmcsIHNvIGl0Ci0gICAgLy8gZG9lc24ndCB3b3JrIHdoZW4g
d3JhcHBpbmcgaXMgb24sIGJ1dCBpbiB0aGF0IGNhc2UgdGhlCi0gICAgLy8gc2l0dWF0aW9uIGlz
IHNsaWdodGx5IGJldHRlciwgc2luY2UgSUUgZG9lcyBjYWNoZSBsaW5lLXdyYXBwaW5nCi0gICAg
Ly8gaW5mb3JtYXRpb24gYW5kIG9ubHkgcmVjb21wdXRlcyBwZXItbGluZS4KLSAgICBpZiAoaWUg
JiYgIWllX2x0OCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgcHJlLmNoaWxkTm9kZXMu
bGVuZ3RoID4gMTAwKSB7Ci0gICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1
bWVudEZyYWdtZW50KCk7Ci0gICAgICB2YXIgY2h1bmsgPSAxMCwgbiA9IHByZS5jaGlsZE5vZGVz
Lmxlbmd0aDsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBjaHVua3MgPSBNYXRoLmNlaWwobiAvIGNo
dW5rKTsgaSA8IGNodW5rczsgKytpKSB7Ci0gICAgICAgIHZhciB3cmFwID0gZWx0KCJkaXYiLCBu
dWxsLCBudWxsLCAiZGlzcGxheTogaW5saW5lLWJsb2NrIik7Ci0gICAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgY2h1bmsgJiYgbjsgKytqKSB7Ci0gICAgICAgICAgd3JhcC5hcHBlbmRDaGlsZChw
cmUuZmlyc3RDaGlsZCk7Ci0gICAgICAgICAgLS1uOworICBmdW5jdGlvbiBwYWRkaW5nSChkaXNw
bGF5KSB7CisgICAgaWYgKGRpc3BsYXkuY2FjaGVkUGFkZGluZ0gpIHJldHVybiBkaXNwbGF5LmNh
Y2hlZFBhZGRpbmdIOworICAgIHZhciBlID0gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5t
ZWFzdXJlLCBlbHQoInByZSIsICJ4IikpOworICAgIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21w
dXRlZFN0eWxlID8gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZSkgOiBlLmN1cnJlbnRTdHlsZTsK
KyAgICByZXR1cm4gZGlzcGxheS5jYWNoZWRQYWRkaW5nSCA9IHtsZWZ0OiBwYXJzZUludChzdHls
ZS5wYWRkaW5nTGVmdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmln
aHQ6IHBhcnNlSW50KHN0eWxlLnBhZGRpbmdSaWdodCl9OworICB9CisKKyAgLy8gRW5zdXJlIHRo
ZSBsaW5lVmlldy53cmFwcGluZy5oZWlnaHRzIGFycmF5IGlzIHBvcHVsYXRlZC4gVGhpcyBpcwor
ICAvLyBhbiBhcnJheSBvZiBib3R0b20gb2Zmc2V0cyBmb3IgdGhlIGxpbmVzIHRoYXQgbWFrZSB1
cCBhIGRyYXduCisgIC8vIGxpbmUuIFdoZW4gbGluZVdyYXBwaW5nIGlzIG9uLCB0aGVyZSBtaWdo
dCBiZSBtb3JlIHRoYW4gb25lCisgIC8vIGhlaWdodC4KKyAgZnVuY3Rpb24gZW5zdXJlTGluZUhl
aWdodHMoY20sIGxpbmVWaWV3LCByZWN0KSB7CisgICAgdmFyIHdyYXBwaW5nID0gY20ub3B0aW9u
cy5saW5lV3JhcHBpbmc7CisgICAgdmFyIGN1cldpZHRoID0gd3JhcHBpbmcgJiYgY20uZGlzcGxh
eS5zY3JvbGxlci5jbGllbnRXaWR0aDsKKyAgICBpZiAoIWxpbmVWaWV3Lm1lYXN1cmUuaGVpZ2h0
cyB8fCB3cmFwcGluZyAmJiBsaW5lVmlldy5tZWFzdXJlLndpZHRoICE9IGN1cldpZHRoKSB7Cisg
ICAgICB2YXIgaGVpZ2h0cyA9IGxpbmVWaWV3Lm1lYXN1cmUuaGVpZ2h0cyA9IFtdOworICAgICAg
aWYgKHdyYXBwaW5nKSB7CisgICAgICAgIGxpbmVWaWV3Lm1lYXN1cmUud2lkdGggPSBjdXJXaWR0
aDsKKyAgICAgICAgdmFyIHJlY3RzID0gbGluZVZpZXcudGV4dC5maXJzdENoaWxkLmdldENsaWVu
dFJlY3RzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoIC0gMTsg
aSsrKSB7CisgICAgICAgICAgdmFyIGN1ciA9IHJlY3RzW2ldLCBuZXh0ID0gcmVjdHNbaSArIDFd
OworICAgICAgICAgIGlmIChNYXRoLmFicyhjdXIuYm90dG9tIC0gbmV4dC5ib3R0b20pID4gMikK
KyAgICAgICAgICAgIGhlaWdodHMucHVzaCgoY3VyLmJvdHRvbSArIG5leHQudG9wKSAvIDIgLSBy
ZWN0LnRvcCk7CiAgICAgICAgIH0KLSAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQod3JhcCk7
CiAgICAgICB9Ci0gICAgICBwcmUuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwotICAgIH0KLQotICAg
IHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgcHJlKTsKLQotICAgIHZhciBv
dXRlciA9IGdldFJlY3QoZGlzcGxheS5saW5lRGl2KTsKLSAgICB2YXIgdnJhbmdlcyA9IFtdLCBk
YXRhID0gZW1wdHlBcnJheShsaW5lLnRleHQubGVuZ3RoKSwgbWF4Qm90ID0gcHJlLm9mZnNldEhl
aWdodDsKLSAgICAvLyBXb3JrIGFyb3VuZCBhbiBJRTcvOCBidWcgd2hlcmUgaXQgd2lsbCBzb21l
dGltZXMgaGF2ZSByYW5kb21seQotICAgIC8vIHJlcGxhY2VkIG91ciBwcmUgd2l0aCBhIGNsb25l
IGF0IHRoaXMgcG9pbnQuCi0gICAgaWYgKGllX2x0OSAmJiBkaXNwbGF5Lm1lYXN1cmUuZmlyc3Qg
IT0gcHJlKQotICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBwcmUp
OworICAgICAgaGVpZ2h0cy5wdXNoKHJlY3QuYm90dG9tIC0gcmVjdC50b3ApOworICAgIH0KKyAg
fQorCisgIC8vIEZpbmQgYSBsaW5lIG1hcCAobWFwcGluZyBjaGFyYWN0ZXIgb2Zmc2V0cyB0byB0
ZXh0IG5vZGVzKSBhbmQgYQorICAvLyBtZWFzdXJlbWVudCBjYWNoZSBmb3IgdGhlIGdpdmVuIGxp
bmUgbnVtYmVyLiAoQSBsaW5lIHZpZXcgbWlnaHQKKyAgLy8gY29udGFpbiBtdWx0aXBsZSBsaW5l
cyB3aGVuIGNvbGxhcHNlZCByYW5nZXMgYXJlIHByZXNlbnQuKQorICBmdW5jdGlvbiBtYXBGcm9t
TGluZVZpZXcobGluZVZpZXcsIGxpbmUsIGxpbmVOKSB7CisgICAgaWYgKGxpbmVWaWV3LmxpbmUg
PT0gbGluZSkKKyAgICAgIHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcCwgY2FjaGU6
IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGV9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZp
ZXcucmVzdC5sZW5ndGg7IGkrKykKKyAgICAgIGlmIChsaW5lVmlldy5yZXN0W2ldID09IGxpbmUp
CisgICAgICAgIHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcHNbaV0sIGNhY2hlOiBs
aW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXX07CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5l
Vmlldy5yZXN0Lmxlbmd0aDsgaSsrKQorICAgICAgaWYgKGxpbmVObyhsaW5lVmlldy5yZXN0W2ld
KSA+IGxpbmVOKQorICAgICAgICByZXR1cm4ge21hcDogbGluZVZpZXcubWVhc3VyZS5tYXBzW2ld
LCBjYWNoZTogbGluZVZpZXcubWVhc3VyZS5jYWNoZXNbaV0sIGJlZm9yZTogdHJ1ZX07CisgIH0K
KworICAvLyBSZW5kZXIgYSBsaW5lIGludG8gdGhlIGhpZGRlbiBub2RlIGRpc3BsYXkuZXh0ZXJu
YWxNZWFzdXJlZC4gVXNlZAorICAvLyB3aGVuIG1lYXN1cmVtZW50IGlzIG5lZWRlZCBmb3IgYSBs
aW5lIHRoYXQncyBub3QgaW4gdGhlIHZpZXdwb3J0LgorICBmdW5jdGlvbiB1cGRhdGVFeHRlcm5h
bE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7CisgICAgbGluZSA9IHZpc3VhbExpbmUobGluZSk7Cisg
ICAgdmFyIGxpbmVOID0gbGluZU5vKGxpbmUpOworICAgIHZhciB2aWV3ID0gY20uZGlzcGxheS5l
eHRlcm5hbE1lYXN1cmVkID0gbmV3IExpbmVWaWV3KGNtLmRvYywgbGluZSwgbGluZU4pOworICAg
IHZpZXcubGluZU4gPSBsaW5lTjsKKyAgICB2YXIgYnVpbHQgPSB2aWV3LmJ1aWx0ID0gYnVpbGRM
aW5lQ29udGVudChjbSwgdmlldyk7CisgICAgdmlldy50ZXh0ID0gYnVpbHQucHJlOworICAgIHJl
bW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRpc3BsYXkubGluZU1lYXN1cmUsIGJ1aWx0LnByZSk7Cisg
ICAgcmV0dXJuIHZpZXc7CisgIH0KKworICAvLyBHZXQgYSB7dG9wLCBib3R0b20sIGxlZnQsIHJp
Z2h0fSBib3ggKGluIGxpbmUtbG9jYWwgY29vcmRpbmF0ZXMpCisgIC8vIGZvciBhIGdpdmVuIGNo
YXJhY3Rlci4KKyAgZnVuY3Rpb24gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGNoLCBiaWFzKSB7Cisg
ICAgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVNZWFzdXJlRm9yTGluZShj
bSwgbGluZSksIGNoLCBiaWFzKTsKKyAgfQorCisgIC8vIEZpbmQgYSBsaW5lIHZpZXcgdGhhdCBj
b3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gbGluZSBudW1iZXIuCisgIGZ1bmN0aW9uIGZpbmRWaWV3
Rm9yTGluZShjbSwgbGluZU4pIHsKKyAgICBpZiAobGluZU4gPj0gY20uZGlzcGxheS52aWV3RnJv
bSAmJiBsaW5lTiA8IGNtLmRpc3BsYXkudmlld1RvKQorICAgICAgcmV0dXJuIGNtLmRpc3BsYXku
dmlld1tmaW5kVmlld0luZGV4KGNtLCBsaW5lTildOworICAgIHZhciBleHQgPSBjbS5kaXNwbGF5
LmV4dGVybmFsTWVhc3VyZWQ7CisgICAgaWYgKGV4dCAmJiBsaW5lTiA+PSBleHQubGluZU4gJiYg
bGluZU4gPCBleHQubGluZU4gKyBleHQuc2l6ZSkKKyAgICAgIHJldHVybiBleHQ7CisgIH0KKwor
ICAvLyBNZWFzdXJlbWVudCBjYW4gYmUgc3BsaXQgaW4gdHdvIHN0ZXBzLCB0aGUgc2V0LXVwIHdv
cmsgdGhhdAorICAvLyBhcHBsaWVzIHRvIHRoZSB3aG9sZSBsaW5lLCBhbmQgdGhlIG1lYXN1cmVt
ZW50IG9mIHRoZSBhY3R1YWwKKyAgLy8gY2hhcmFjdGVyLiBGdW5jdGlvbnMgbGlrZSBjb29yZHND
aGFyLCB0aGF0IG5lZWQgdG8gZG8gYSBsb3Qgb2YKKyAgLy8gbWVhc3VyZW1lbnRzIGluIGEgcm93
LCBjYW4gdGh1cyBlbnN1cmUgdGhhdCB0aGUgc2V0LXVwIHdvcmsgaXMKKyAgLy8gb25seSBkb25l
IG9uY2UuCisgIGZ1bmN0aW9uIHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSkgeworICAg
IHZhciBsaW5lTiA9IGxpbmVObyhsaW5lKTsKKyAgICB2YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGlu
ZShjbSwgbGluZU4pOworICAgIGlmICh2aWV3ICYmICF2aWV3LnRleHQpCisgICAgICB2aWV3ID0g
bnVsbDsKKyAgICBlbHNlIGlmICh2aWV3ICYmIHZpZXcuY2hhbmdlcykKKyAgICAgIHVwZGF0ZUxp
bmVGb3JDaGFuZ2VzKGNtLCB2aWV3LCBsaW5lTiwgZ2V0RGltZW5zaW9ucyhjbSkpOworICAgIGlm
ICghdmlldykKKyAgICAgIHZpZXcgPSB1cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50KGNtLCBsaW5l
KTsKKworICAgIHZhciBpbmZvID0gbWFwRnJvbUxpbmVWaWV3KHZpZXcsIGxpbmUsIGxpbmVOKTsK
KyAgICByZXR1cm4geworICAgICAgbGluZTogbGluZSwgdmlldzogdmlldywgcmVjdDogbnVsbCwK
KyAgICAgIG1hcDogaW5mby5tYXAsIGNhY2hlOiBpbmZvLmNhY2hlLCBiZWZvcmU6IGluZm8uYmVm
b3JlLAorICAgICAgaGFzSGVpZ2h0czogZmFsc2UKKyAgICB9OworICB9CgotICAgIGZ1bmN0aW9u
IG1lYXN1cmVSZWN0KHJlY3QpIHsKLSAgICAgIHZhciB0b3AgPSByZWN0LnRvcCAtIG91dGVyLnRv
cCwgYm90ID0gcmVjdC5ib3R0b20gLSBvdXRlci50b3A7Ci0gICAgICBpZiAoYm90ID4gbWF4Qm90
KSBib3QgPSBtYXhCb3Q7Ci0gICAgICBpZiAodG9wIDwgMCkgdG9wID0gMDsKLSAgICAgIGZvciAo
dmFyIGkgPSB2cmFuZ2VzLmxlbmd0aCAtIDI7IGkgPj0gMDsgaSAtPSAyKSB7Ci0gICAgICAgIHZh
ciBydG9wID0gdnJhbmdlc1tpXSwgcmJvdCA9IHZyYW5nZXNbaSsxXTsKLSAgICAgICAgaWYgKHJ0
b3AgPiBib3QgfHwgcmJvdCA8IHRvcCkgY29udGludWU7Ci0gICAgICAgIGlmIChydG9wIDw9IHRv
cCAmJiByYm90ID49IGJvdCB8fAotICAgICAgICAgICAgdG9wIDw9IHJ0b3AgJiYgYm90ID49IHJi
b3QgfHwKLSAgICAgICAgICAgIE1hdGgubWluKGJvdCwgcmJvdCkgLSBNYXRoLm1heCh0b3AsIHJ0
b3ApID49IChib3QgLSB0b3ApID4+IDEpIHsKLSAgICAgICAgICB2cmFuZ2VzW2ldID0gTWF0aC5t
aW4odG9wLCBydG9wKTsKLSAgICAgICAgICB2cmFuZ2VzW2krMV0gPSBNYXRoLm1heChib3QsIHJi
b3QpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgIC8vIEdpdmVuIGEgcHJlcGFyZWQg
bWVhc3VyZW1lbnQgb2JqZWN0LCBtZWFzdXJlcyB0aGUgcG9zaXRpb24gb2YgYW4KKyAgLy8gYWN0
dWFsIGNoYXJhY3RlciAob3IgZmV0Y2hlcyBpdCBmcm9tIHRoZSBjYWNoZSkuCisgIGZ1bmN0aW9u
IG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkLCBjaCwgYmlhcykgeworICAgIGlmIChw
cmVwYXJlZC5iZWZvcmUpIGNoID0gLTE7CisgICAgdmFyIGtleSA9IGNoICsgKGJpYXMgfHwgIiIp
LCBmb3VuZDsKKyAgICBpZiAocHJlcGFyZWQuY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkgewor
ICAgICAgZm91bmQgPSBwcmVwYXJlZC5jYWNoZVtrZXldOworICAgIH0gZWxzZSB7CisgICAgICBp
ZiAoIXByZXBhcmVkLnJlY3QpCisgICAgICAgIHByZXBhcmVkLnJlY3QgPSBwcmVwYXJlZC52aWV3
LnRleHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICBpZiAoIXByZXBhcmVkLmhhc0hl
aWdodHMpIHsKKyAgICAgICAgZW5zdXJlTGluZUhlaWdodHMoY20sIHByZXBhcmVkLnZpZXcsIHBy
ZXBhcmVkLnJlY3QpOworICAgICAgICBwcmVwYXJlZC5oYXNIZWlnaHRzID0gdHJ1ZTsKICAgICAg
IH0KLSAgICAgIGlmIChpIDwgMCkgeyBpID0gdnJhbmdlcy5sZW5ndGg7IHZyYW5nZXMucHVzaCh0
b3AsIGJvdCk7IH0KLSAgICAgIHJldHVybiB7bGVmdDogcmVjdC5sZWZ0IC0gb3V0ZXIubGVmdCwK
LSAgICAgICAgICAgICAgcmlnaHQ6IHJlY3QucmlnaHQgLSBvdXRlci5sZWZ0LAotICAgICAgICAg
ICAgICB0b3A6IGksIGJvdHRvbTogbnVsbH07Ci0gICAgfQotICAgIGZ1bmN0aW9uIGZpbmlzaFJl
Y3QocmVjdCkgewotICAgICAgcmVjdC5ib3R0b20gPSB2cmFuZ2VzW3JlY3QudG9wKzFdOwotICAg
ICAgcmVjdC50b3AgPSB2cmFuZ2VzW3JlY3QudG9wXTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciBp
ID0gMCwgY3VyOyBpIDwgbWVhc3VyZS5sZW5ndGg7ICsraSkgaWYgKGN1ciA9IG1lYXN1cmVbaV0p
IHsKLSAgICAgIHZhciBub2RlID0gY3VyLCByZWN0ID0gbnVsbDsKLSAgICAgIC8vIEEgd2lkZ2V0
IG1pZ2h0IHdyYXAsIG5lZWRzIHNwZWNpYWwgY2FyZQotICAgICAgaWYgKC9cYkNvZGVNaXJyb3It
d2lkZ2V0XGIvLnRlc3QoY3VyLmNsYXNzTmFtZSkgJiYgY3VyLmdldENsaWVudFJlY3RzKSB7Ci0g
ICAgICAgIGlmIChjdXIuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAxKSBub2RlID0gY3VyLmZpcnN0
Q2hpbGQ7Ci0gICAgICAgIHZhciByZWN0cyA9IG5vZGUuZ2V0Q2xpZW50UmVjdHMoKTsKLSAgICAg
ICAgaWYgKHJlY3RzLmxlbmd0aCA+IDEpIHsKLSAgICAgICAgICByZWN0ID0gZGF0YVtpXSA9IG1l
YXN1cmVSZWN0KHJlY3RzWzBdKTsKLSAgICAgICAgICByZWN0LnJpZ2h0U2lkZSA9IG1lYXN1cmVS
ZWN0KHJlY3RzW3JlY3RzLmxlbmd0aCAtIDFdKTsKLSAgICAgICAgfQorICAgICAgZm91bmQgPSBt
ZWFzdXJlQ2hhcklubmVyKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMpOworICAgICAgaWYgKCFmb3Vu
ZC5ib2d1cykgcHJlcGFyZWQuY2FjaGVba2V5XSA9IGZvdW5kOworICAgIH0KKyAgICByZXR1cm4g
e2xlZnQ6IGZvdW5kLmxlZnQsIHJpZ2h0OiBmb3VuZC5yaWdodCwgdG9wOiBmb3VuZC50b3AsIGJv
dHRvbTogZm91bmQuYm90dG9tfTsKKyAgfQorCisgIHZhciBudWxsUmVjdCA9IHtsZWZ0OiAwLCBy
aWdodDogMCwgdG9wOiAwLCBib3R0b206IDB9OworCisgIGZ1bmN0aW9uIG1lYXN1cmVDaGFySW5u
ZXIoY20sIHByZXBhcmVkLCBjaCwgYmlhcykgeworICAgIHZhciBtYXAgPSBwcmVwYXJlZC5tYXA7
CisKKyAgICB2YXIgbm9kZSwgc3RhcnQsIGVuZCwgY29sbGFwc2U7CisgICAgLy8gRmlyc3QsIHNl
YXJjaCB0aGUgbGluZSBtYXAgZm9yIHRoZSB0ZXh0IG5vZGUgY29ycmVzcG9uZGluZyB0bywKKyAg
ICAvLyBvciBjbG9zZXN0IHRvLCB0aGUgdGFyZ2V0IGNoYXJhY3Rlci4KKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG1hcC5sZW5ndGg7IGkgKz0gMykgeworICAgICAgdmFyIG1TdGFydCA9IG1hcFtp
XSwgbUVuZCA9IG1hcFtpICsgMV07CisgICAgICBpZiAoY2ggPCBtU3RhcnQpIHsKKyAgICAgICAg
c3RhcnQgPSAwOyBlbmQgPSAxOworICAgICAgICBjb2xsYXBzZSA9ICJsZWZ0IjsKKyAgICAgIH0g
ZWxzZSBpZiAoY2ggPCBtRW5kKSB7CisgICAgICAgIHN0YXJ0ID0gY2ggLSBtU3RhcnQ7CisgICAg
ICAgIGVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgIH0gZWxzZSBpZiAoaSA9PSBtYXAubGVuZ3RoIC0g
MyB8fCBjaCA9PSBtRW5kICYmIG1hcFtpICsgM10gPiBjaCkgeworICAgICAgICBlbmQgPSBtRW5k
IC0gbVN0YXJ0OworICAgICAgICBzdGFydCA9IGVuZCAtIDE7CisgICAgICAgIGlmIChjaCA+PSBt
RW5kKSBjb2xsYXBzZSA9ICJyaWdodCI7CisgICAgICB9CisgICAgICBpZiAoc3RhcnQgIT0gbnVs
bCkgeworICAgICAgICBub2RlID0gbWFwW2kgKyAyXTsKKyAgICAgICAgaWYgKG1TdGFydCA9PSBt
RW5kICYmIGJpYXMgPT0gKG5vZGUuaW5zZXJ0TGVmdCA/ICJsZWZ0IiA6ICJyaWdodCIpKQorICAg
ICAgICAgIGNvbGxhcHNlID0gYmlhczsKKyAgICAgICAgaWYgKGJpYXMgPT0gImxlZnQiICYmIHN0
YXJ0ID09IDApCisgICAgICAgICAgd2hpbGUgKGkgJiYgbWFwW2kgLSAyXSA9PSBtYXBbaSAtIDNd
ICYmIG1hcFtpIC0gMV0uaW5zZXJ0TGVmdCkgeworICAgICAgICAgICAgbm9kZSA9IG1hcFsoaSAt
PSAzKSArIDJdOworICAgICAgICAgICAgY29sbGFwc2UgPSAibGVmdCI7CisgICAgICAgICAgfQor
ICAgICAgICBpZiAoYmlhcyA9PSAicmlnaHQiICYmIHN0YXJ0ID09IG1FbmQgLSBtU3RhcnQpCisg
ICAgICAgICAgd2hpbGUgKGkgPCBtYXAubGVuZ3RoIC0gMyAmJiBtYXBbaSArIDNdID09IG1hcFtp
ICsgNF0gJiYgIW1hcFtpICsgNV0uaW5zZXJ0TGVmdCkgeworICAgICAgICAgICAgbm9kZSA9IG1h
cFsoaSArPSAzKSArIDJdOworICAgICAgICAgICAgY29sbGFwc2UgPSAicmlnaHQiOworICAgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBpZiAoIXJlY3QpIHJlY3QgPSBk
YXRhW2ldID0gbWVhc3VyZVJlY3QoZ2V0UmVjdChub2RlKSk7Ci0gICAgICBpZiAoY3VyLm1lYXN1
cmVSaWdodCkgcmVjdC5yaWdodCA9IGdldFJlY3QoY3VyLm1lYXN1cmVSaWdodCkubGVmdDsKLSAg
ICAgIGlmIChjdXIubGVmdFNpZGUpIHJlY3QubGVmdFNpZGUgPSBtZWFzdXJlUmVjdChnZXRSZWN0
KGN1ci5sZWZ0U2lkZSkpOwotICAgIH0KLSAgICByZW1vdmVDaGlsZHJlbihjbS5kaXNwbGF5Lm1l
YXN1cmUpOwotICAgIGZvciAodmFyIGkgPSAwLCBjdXI7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSBp
ZiAoY3VyID0gZGF0YVtpXSkgewotICAgICAgZmluaXNoUmVjdChjdXIpOwotICAgICAgaWYgKGN1
ci5sZWZ0U2lkZSkgZmluaXNoUmVjdChjdXIubGVmdFNpZGUpOwotICAgICAgaWYgKGN1ci5yaWdo
dFNpZGUpIGZpbmlzaFJlY3QoY3VyLnJpZ2h0U2lkZSk7CiAgICAgfQotICAgIHJldHVybiBkYXRh
OwotICB9CgotICBmdW5jdGlvbiBjcnVkZWx5TWVhc3VyZUxpbmUoY20sIGxpbmUpIHsKLSAgICB2
YXIgY29weSA9IG5ldyBMaW5lKGxpbmUudGV4dC5zbGljZSgwLCAxMDApLCBudWxsKTsKLSAgICBp
ZiAobGluZS50ZXh0Q2xhc3MpIGNvcHkudGV4dENsYXNzID0gbGluZS50ZXh0Q2xhc3M7Ci0gICAg
dmFyIG1lYXN1cmUgPSBtZWFzdXJlTGluZUlubmVyKGNtLCBjb3B5KTsKLSAgICB2YXIgbGVmdCA9
IG1lYXN1cmVDaGFyKGNtLCBjb3B5LCAwLCBtZWFzdXJlLCAibGVmdCIpOwotICAgIHZhciByaWdo
dCA9IG1lYXN1cmVDaGFyKGNtLCBjb3B5LCA5OSwgbWVhc3VyZSwgInJpZ2h0Iik7Ci0gICAgcmV0
dXJuIHtjcnVkZTogdHJ1ZSwgdG9wOiBsZWZ0LnRvcCwgbGVmdDogbGVmdC5sZWZ0LCBib3R0b206
IGxlZnQuYm90dG9tLCB3aWR0aDogKHJpZ2h0LnJpZ2h0IC0gbGVmdC5sZWZ0KSAvIDEwMH07Cisg
ICAgdmFyIHJlY3Q7CisgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykgeyAvLyBJZiBpdCBpcyBh
IHRleHQgbm9kZSwgdXNlIGEgcmFuZ2UgdG8gcmV0cmlldmUgdGhlIGNvb3JkaW5hdGVzLgorICAg
ICAgd2hpbGUgKHN0YXJ0ICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hh
ckF0KG1TdGFydCArIHN0YXJ0KSkpIC0tc3RhcnQ7CisgICAgICB3aGlsZSAobVN0YXJ0ICsgZW5k
IDwgbUVuZCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChtU3Rh
cnQgKyBlbmQpKSkgKytlbmQ7CisgICAgICBpZiAoaWVfdXB0bzggJiYgc3RhcnQgPT0gMCAmJiBl
bmQgPT0gbUVuZCAtIG1TdGFydCkgeworICAgICAgICByZWN0ID0gbm9kZS5wYXJlbnROb2RlLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgfSBlbHNlIGlmIChpZSAmJiBjbS5vcHRpb25z
LmxpbmVXcmFwcGluZykgeworICAgICAgICB2YXIgcmVjdHMgPSByYW5nZShub2RlLCBzdGFydCwg
ZW5kKS5nZXRDbGllbnRSZWN0cygpOworICAgICAgICBpZiAocmVjdHMubGVuZ3RoKQorICAgICAg
ICAgIHJlY3QgPSByZWN0c1tiaWFzID09ICJyaWdodCIgPyByZWN0cy5sZW5ndGggLSAxIDogMF07
CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZWN0ID0gbnVsbFJlY3Q7CisgICAgICB9IGVsc2Ug
eworICAgICAgICByZWN0ID0gcmFuZ2Uobm9kZSwgc3RhcnQsIGVuZCkuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7CisgICAgICB9CisgICAgfSBlbHNlIHsgLy8gSWYgaXQgaXMgYSB3aWRnZXQsIHNp
bXBseSBnZXQgdGhlIGJveCBmb3IgdGhlIHdob2xlIHdpZGdldC4KKyAgICAgIGlmIChzdGFydCA+
IDApIGNvbGxhcHNlID0gYmlhcyA9ICJyaWdodCI7CisgICAgICB2YXIgcmVjdHM7CisgICAgICBp
ZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgKHJlY3RzID0gbm9kZS5nZXRDbGllbnRSZWN0
cygpKS5sZW5ndGggPiAxKQorICAgICAgICByZWN0ID0gcmVjdHNbYmlhcyA9PSAicmlnaHQiID8g
cmVjdHMubGVuZ3RoIC0gMSA6IDBdOworICAgICAgZWxzZQorICAgICAgICByZWN0ID0gbm9kZS5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICB9CisgICAgaWYgKGllX3VwdG84ICYmICFzdGFy
dCAmJiAoIXJlY3QgfHwgIXJlY3QubGVmdCAmJiAhcmVjdC5yaWdodCkpIHsKKyAgICAgIHZhciBy
U3BhbiA9IG5vZGUucGFyZW50Tm9kZS5nZXRDbGllbnRSZWN0cygpWzBdOworICAgICAgaWYgKHJT
cGFuKQorICAgICAgICByZWN0ID0ge2xlZnQ6IHJTcGFuLmxlZnQsIHJpZ2h0OiByU3Bhbi5sZWZ0
ICsgY2hhcldpZHRoKGNtLmRpc3BsYXkpLCB0b3A6IHJTcGFuLnRvcCwgYm90dG9tOiByU3Bhbi5i
b3R0b219OworICAgICAgZWxzZQorICAgICAgICByZWN0ID0gbnVsbFJlY3Q7CisgICAgfQorCisg
ICAgdmFyIHRvcCwgYm90ID0gKHJlY3QuYm90dG9tICsgcmVjdC50b3ApIC8gMiAtIHByZXBhcmVk
LnJlY3QudG9wOworICAgIHZhciBoZWlnaHRzID0gcHJlcGFyZWQudmlldy5tZWFzdXJlLmhlaWdo
dHM7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHRzLmxlbmd0aCAtIDE7IGkrKykKKyAg
ICAgIGlmIChib3QgPCBoZWlnaHRzW2ldKSBicmVhazsKKyAgICB0b3AgPSBpID8gaGVpZ2h0c1tp
IC0gMV0gOiAwOyBib3QgPSBoZWlnaHRzW2ldOworICAgIHZhciByZXN1bHQgPSB7bGVmdDogKGNv
bGxhcHNlID09ICJyaWdodCIgPyByZWN0LnJpZ2h0IDogcmVjdC5sZWZ0KSAtIHByZXBhcmVkLnJl
Y3QubGVmdCwKKyAgICAgICAgICAgICAgICAgIHJpZ2h0OiAoY29sbGFwc2UgPT0gImxlZnQiID8g
cmVjdC5sZWZ0IDogcmVjdC5yaWdodCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsCisgICAgICAgICAg
ICAgICAgICB0b3A6IHRvcCwgYm90dG9tOiBib3R9OworICAgIGlmICghcmVjdC5sZWZ0ICYmICFy
ZWN0LnJpZ2h0KSByZXN1bHQuYm9ndXMgPSB0cnVlOworICAgIHJldHVybiByZXN1bHQ7CiAgIH0K
Ci0gIGZ1bmN0aW9uIG1lYXN1cmVMaW5lV2lkdGgoY20sIGxpbmUpIHsKLSAgICB2YXIgaGFzQmFk
U3BhbiA9IGZhbHNlOwotICAgIGlmIChsaW5lLm1hcmtlZFNwYW5zKSBmb3IgKHZhciBpID0gMDsg
aSA8IGxpbmUubWFya2VkU3BhbnM7ICsraSkgewotICAgICAgdmFyIHNwID0gbGluZS5tYXJrZWRT
cGFuc1tpXTsKLSAgICAgIGlmIChzcC5jb2xsYXBzZWQgJiYgKHNwLnRvID09IG51bGwgfHwgc3Au
dG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkpIGhhc0JhZFNwYW4gPSB0cnVlOworICBmdW5jdGlvbiBj
bGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKGxpbmVWaWV3KSB7CisgICAgaWYgKGxpbmVWaWV3
Lm1lYXN1cmUpIHsKKyAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGUgPSB7fTsKKyAgICAgIGxp
bmVWaWV3Lm1lYXN1cmUuaGVpZ2h0cyA9IG51bGw7CisgICAgICBpZiAobGluZVZpZXcucmVzdCkg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKQorICAgICAgICBs
aW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXSA9IHt9OwogICAgIH0KLSAgICB2YXIgY2FjaGVkID0g
IWhhc0JhZFNwYW4gJiYgZmluZENhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKTsKLSAgICBpZiAo
Y2FjaGVkIHx8IGxpbmUudGV4dC5sZW5ndGggPj0gY20ub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zy
b20pCi0gICAgICByZXR1cm4gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGxpbmUudGV4dC5sZW5ndGgs
IGNhY2hlZCAmJiBjYWNoZWQubWVhc3VyZSwgInJpZ2h0IikucmlnaHQ7CisgIH0KCi0gICAgdmFy
IHByZSA9IGJ1aWxkTGluZUNvbnRlbnQoY20sIGxpbmUsIG51bGwsIHRydWUpLnByZTsKLSAgICB2
YXIgZW5kID0gcHJlLmFwcGVuZENoaWxkKHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFz
dXJlKSk7Ci0gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoY20uZGlzcGxheS5tZWFzdXJlLCBwcmUp
OwotICAgIHJldHVybiBnZXRSZWN0KGVuZCkucmlnaHQgLSBnZXRSZWN0KGNtLmRpc3BsYXkubGlu
ZURpdikubGVmdDsKKyAgZnVuY3Rpb24gY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZShjbSkgewor
ICAgIGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlID0gbnVsbDsKKyAgICByZW1vdmVDaGlsZHJl
bihjbS5kaXNwbGF5LmxpbmVNZWFzdXJlKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRp
c3BsYXkudmlldy5sZW5ndGg7IGkrKykKKyAgICAgIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGVG
b3IoY20uZGlzcGxheS52aWV3W2ldKTsKICAgfQoKICAgZnVuY3Rpb24gY2xlYXJDYWNoZXMoY20p
IHsKLSAgICBjbS5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoID0gY20uZGlzcGxheS5t
ZWFzdXJlTGluZUNhY2hlUG9zID0gMDsKLSAgICBjbS5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aCA9
IGNtLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IG51bGw7CisgICAgY2xlYXJMaW5lTWVhc3Vy
ZW1lbnRDYWNoZShjbSk7CisgICAgY20uZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSBjbS5kaXNw
bGF5LmNhY2hlZFRleHRIZWlnaHQgPSBjbS5kaXNwbGF5LmNhY2hlZFBhZGRpbmdIID0gbnVsbDsK
ICAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSBjbS5kaXNwbGF5Lm1heExpbmVDaGFu
Z2VkID0gdHJ1ZTsKICAgICBjbS5kaXNwbGF5LmxpbmVOdW1DaGFycyA9IG51bGw7CiAgIH0KQEAg
LTExNjAsNyArMTY3Myw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBm
dW5jdGlvbiBwYWdlU2Nyb2xsWCgpIHsgcmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldCB8fCAoZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnQ7IH0KICAg
ZnVuY3Rpb24gcGFnZVNjcm9sbFkoKSB7IHJldHVybiB3aW5kb3cucGFnZVlPZmZzZXQgfHwgKGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3A7IH0KCi0g
IC8vIENvbnRleHQgaXMgb25lIG9mICJsaW5lIiwgImRpdiIgKGRpc3BsYXkubGluZURpdiksICJs
b2NhbCIvbnVsbCAoZWRpdG9yKSwgb3IgInBhZ2UiCisgIC8vIENvbnZlcnRzIGEge3RvcCwgYm90
dG9tLCBsZWZ0LCByaWdodH0gYm94IGZyb20gbGluZS1sb2NhbAorICAvLyBjb29yZGluYXRlcyBp
bnRvIGFub3RoZXIgY29vcmRpbmF0ZSBzeXN0ZW0uIENvbnRleHQgbWF5IGJlIG9uZSBvZgorICAv
LyAibGluZSIsICJkaXYiIChkaXNwbGF5LmxpbmVEaXYpLCAibG9jYWwiL251bGwgKGVkaXRvciks
IG9yICJwYWdlIi4KICAgZnVuY3Rpb24gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCByZWN0
LCBjb250ZXh0KSB7CiAgICAgaWYgKGxpbmVPYmoud2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkg
PCBsaW5lT2JqLndpZGdldHMubGVuZ3RoOyArK2kpIGlmIChsaW5lT2JqLndpZGdldHNbaV0uYWJv
dmUpIHsKICAgICAgIHZhciBzaXplID0gd2lkZ2V0SGVpZ2h0KGxpbmVPYmoud2lkZ2V0c1tpXSk7
CkBAIC0xMTY4LDExICsxNjgzLDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgIH0KICAgICBpZiAoY29udGV4dCA9PSAibGluZSIpIHJldHVybiByZWN0OwogICAgIGlm
ICghY29udGV4dCkgY29udGV4dCA9ICJsb2NhbCI7Ci0gICAgdmFyIHlPZmYgPSBoZWlnaHRBdExp
bmUoY20sIGxpbmVPYmopOworICAgIHZhciB5T2ZmID0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopOwog
ICAgIGlmIChjb250ZXh0ID09ICJsb2NhbCIpIHlPZmYgKz0gcGFkZGluZ1RvcChjbS5kaXNwbGF5
KTsKICAgICBlbHNlIHlPZmYgLT0gY20uZGlzcGxheS52aWV3T2Zmc2V0OwogICAgIGlmIChjb250
ZXh0ID09ICJwYWdlIiB8fCBjb250ZXh0ID09ICJ3aW5kb3ciKSB7Ci0gICAgICB2YXIgbE9mZiA9
IGdldFJlY3QoY20uZGlzcGxheS5saW5lU3BhY2UpOworICAgICAgdmFyIGxPZmYgPSBjbS5kaXNw
bGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgIHlPZmYgKz0gbE9m
Zi50b3AgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdlU2Nyb2xsWSgpKTsKICAgICAg
IHZhciB4T2ZmID0gbE9mZi5sZWZ0ICsgKGNvbnRleHQgPT0gIndpbmRvdyIgPyAwIDogcGFnZVNj
cm9sbFgoKSk7CiAgICAgICByZWN0LmxlZnQgKz0geE9mZjsgcmVjdC5yaWdodCArPSB4T2ZmOwpA
QCAtMTE4MSw4ICsxNjk2LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgcmV0dXJuIHJlY3Q7CiAgIH0KCi0gIC8vIENvbnRleHQgbWF5IGJlICJ3aW5kb3ciLCAicGFn
ZSIsICJkaXYiLCBvciAibG9jYWwiL251bGwKLSAgLy8gUmVzdWx0IGlzIGluICJkaXYiIGNvb3Jk
cworICAvLyBDb3ZlcnRzIGEgYm94IGZyb20gImRpdiIgY29vcmRzIHRvIGFub3RoZXIgY29vcmRp
bmF0ZSBzeXN0ZW0uCisgIC8vIENvbnRleHQgbWF5IGJlICJ3aW5kb3ciLCAicGFnZSIsICJkaXYi
LCBvciAibG9jYWwiL251bGwuCiAgIGZ1bmN0aW9uIGZyb21Db29yZFN5c3RlbShjbSwgY29vcmRz
LCBjb250ZXh0KSB7CiAgICAgaWYgKGNvbnRleHQgPT0gImRpdiIpIHJldHVybiBjb29yZHM7CiAg
ICAgdmFyIGxlZnQgPSBjb29yZHMubGVmdCwgdG9wID0gY29vcmRzLnRvcDsKQEAgLTExOTEsMjUg
KzE3MDYsMjggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBsZWZ0
IC09IHBhZ2VTY3JvbGxYKCk7CiAgICAgICB0b3AgLT0gcGFnZVNjcm9sbFkoKTsKICAgICB9IGVs
c2UgaWYgKGNvbnRleHQgPT0gImxvY2FsIiB8fCAhY29udGV4dCkgewotICAgICAgdmFyIGxvY2Fs
Qm94ID0gZ2V0UmVjdChjbS5kaXNwbGF5LnNpemVyKTsKKyAgICAgIHZhciBsb2NhbEJveCA9IGNt
LmRpc3BsYXkuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICBsZWZ0ICs9IGxv
Y2FsQm94LmxlZnQ7CiAgICAgICB0b3AgKz0gbG9jYWxCb3gudG9wOwogICAgIH0KCi0gICAgdmFy
IGxpbmVTcGFjZUJveCA9IGdldFJlY3QoY20uZGlzcGxheS5saW5lU3BhY2UpOworICAgIHZhciBs
aW5lU3BhY2VCb3ggPSBjbS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KTsKICAgICByZXR1cm4ge2xlZnQ6IGxlZnQgLSBsaW5lU3BhY2VCb3gubGVmdCwgdG9wOiB0b3Ag
LSBsaW5lU3BhY2VCb3gudG9wfTsKICAgfQoKICAgZnVuY3Rpb24gY2hhckNvb3JkcyhjbSwgcG9z
LCBjb250ZXh0LCBsaW5lT2JqLCBiaWFzKSB7CiAgICAgaWYgKCFsaW5lT2JqKSBsaW5lT2JqID0g
Z2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTsKLSAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNt
LCBsaW5lT2JqLCBtZWFzdXJlQ2hhcihjbSwgbGluZU9iaiwgcG9zLmNoLCBudWxsLCBiaWFzKSwg
Y29udGV4dCk7CisgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbWVhc3Vy
ZUNoYXIoY20sIGxpbmVPYmosIHBvcy5jaCwgYmlhcyksIGNvbnRleHQpOwogICB9CgotICBmdW5j
dGlvbiBjdXJzb3JDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgbWVhc3VyZW1lbnQp
IHsKKyAgLy8gUmV0dXJucyBhIGJveCBmb3IgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHdoaWNo
IG1heSBoYXZlIGFuCisgIC8vICdvdGhlcicgcHJvcGVydHkgY29udGFpbmluZyB0aGUgcG9zaXRp
b24gb2YgdGhlIHNlY29uZGFyeSBjdXJzb3IKKyAgLy8gb24gYSBiaWRpIGJvdW5kYXJ5LgorICBm
dW5jdGlvbiBjdXJzb3JDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgcHJlcGFyZWRN
ZWFzdXJlKSB7CiAgICAgbGluZU9iaiA9IGxpbmVPYmogfHwgZ2V0TGluZShjbS5kb2MsIHBvcy5s
aW5lKTsKLSAgICBpZiAoIW1lYXN1cmVtZW50KSBtZWFzdXJlbWVudCA9IG1lYXN1cmVMaW5lKGNt
LCBsaW5lT2JqKTsKKyAgICBpZiAoIXByZXBhcmVkTWVhc3VyZSkgcHJlcGFyZWRNZWFzdXJlID0g
cHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTsKICAgICBmdW5jdGlvbiBnZXQoY2gs
IHJpZ2h0KSB7Ci0gICAgICB2YXIgbSA9IG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBjaCwgbWVh
c3VyZW1lbnQsIHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7CisgICAgICB2YXIgbSA9IG1lYXN1
cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2gsIHJpZ2h0ID8gInJpZ2h0IiA6
ICJsZWZ0Iik7CiAgICAgICBpZiAocmlnaHQpIG0ubGVmdCA9IG0ucmlnaHQ7IGVsc2UgbS5yaWdo
dCA9IG0ubGVmdDsKICAgICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG0s
IGNvbnRleHQpOwogICAgIH0KQEAgLTEyMzUsNDMgKzE3NTMsNTkgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIHZhbDsKICAgfQoKKyAgLy8gVXNlZCB0byBj
aGVhcGx5IGVzdGltYXRlIHRoZSBjb29yZGluYXRlcyBmb3IgYSBwb3NpdGlvbi4gVXNlZCBmb3IK
KyAgLy8gaW50ZXJtZWRpYXRlIHNjcm9sbCB1cGRhdGVzLgorICBmdW5jdGlvbiBlc3RpbWF0ZUNv
b3JkcyhjbSwgcG9zKSB7CisgICAgdmFyIGxlZnQgPSAwLCBwb3MgPSBjbGlwUG9zKGNtLmRvYywg
cG9zKTsKKyAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSBsZWZ0ID0gY2hhcldpZHRo
KGNtLmRpc3BsYXkpICogcG9zLmNoOworICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShjbS5kb2Ms
IHBvcy5saW5lKTsKKyAgICB2YXIgdG9wID0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopICsgcGFkZGlu
Z1RvcChjbS5kaXNwbGF5KTsKKyAgICByZXR1cm4ge2xlZnQ6IGxlZnQsIHJpZ2h0OiBsZWZ0LCB0
b3A6IHRvcCwgYm90dG9tOiB0b3AgKyBsaW5lT2JqLmhlaWdodH07CisgIH0KKworICAvLyBQb3Np
dGlvbnMgcmV0dXJuZWQgYnkgY29vcmRzQ2hhciBjb250YWluIHNvbWUgZXh0cmEgaW5mb3JtYXRp
b24uCisgIC8vIHhSZWwgaXMgdGhlIHJlbGF0aXZlIHggcG9zaXRpb24gb2YgdGhlIGlucHV0IGNv
b3JkaW5hdGVzIGNvbXBhcmVkCisgIC8vIHRvIHRoZSBmb3VuZCBwb3NpdGlvbiAoc28geFJlbCA+
IDAgbWVhbnMgdGhlIGNvb3JkaW5hdGVzIGFyZSB0bworICAvLyB0aGUgcmlnaHQgb2YgdGhlIGNo
YXJhY3RlciBwb3NpdGlvbiwgZm9yIGV4YW1wbGUpLiBXaGVuIG91dHNpZGUKKyAgLy8gaXMgdHJ1
ZSwgdGhhdCBtZWFucyB0aGUgY29vcmRpbmF0ZXMgbGllIG91dHNpZGUgdGhlIGxpbmUncworICAv
LyB2ZXJ0aWNhbCByYW5nZS4KICAgZnVuY3Rpb24gUG9zV2l0aEluZm8obGluZSwgY2gsIG91dHNp
ZGUsIHhSZWwpIHsKLSAgICB2YXIgcG9zID0gbmV3IFBvcyhsaW5lLCBjaCk7CisgICAgdmFyIHBv
cyA9IFBvcyhsaW5lLCBjaCk7CiAgICAgcG9zLnhSZWwgPSB4UmVsOwogICAgIGlmIChvdXRzaWRl
KSBwb3Mub3V0c2lkZSA9IHRydWU7CiAgICAgcmV0dXJuIHBvczsKICAgfQoKLSAgLy8gQ29vcmRz
IG11c3QgYmUgbGluZVNwYWNlLWxvY2FsCisgIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBwb3Np
dGlvbiBjbG9zZXN0IHRvIHRoZSBnaXZlbiBjb29yZGluYXRlcy4KKyAgLy8gSW5wdXQgbXVzdCBi
ZSBsaW5lU3BhY2UtbG9jYWwgKCJkaXYiIGNvb3JkaW5hdGUgc3lzdGVtKS4KICAgZnVuY3Rpb24g
Y29vcmRzQ2hhcihjbSwgeCwgeSkgewogICAgIHZhciBkb2MgPSBjbS5kb2M7CiAgICAgeSArPSBj
bS5kaXNwbGF5LnZpZXdPZmZzZXQ7CiAgICAgaWYgKHkgPCAwKSByZXR1cm4gUG9zV2l0aEluZm8o
ZG9jLmZpcnN0LCAwLCB0cnVlLCAtMSk7Ci0gICAgdmFyIGxpbmVObyA9IGxpbmVBdEhlaWdodChk
b2MsIHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxOwotICAgIGlmIChsaW5lTm8g
PiBsYXN0KQorICAgIHZhciBsaW5lTiA9IGxpbmVBdEhlaWdodChkb2MsIHkpLCBsYXN0ID0gZG9j
LmZpcnN0ICsgZG9jLnNpemUgLSAxOworICAgIGlmIChsaW5lTiA+IGxhc3QpCiAgICAgICByZXR1
cm4gUG9zV2l0aEluZm8oZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxLCBnZXRMaW5lKGRvYywgbGFz
dCkudGV4dC5sZW5ndGgsIHRydWUsIDEpOwogICAgIGlmICh4IDwgMCkgeCA9IDA7CgorICAgIHZh
ciBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGxpbmVOKTsKICAgICBmb3IgKDs7KSB7Ci0gICAgICB2
YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lTm8pOwotICAgICAgdmFyIGZvdW5kID0gY29v
cmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8sIHgsIHkpOworICAgICAgdmFyIGZvdW5k
ID0gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTiwgeCwgeSk7CiAgICAgICB2YXIg
bWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmVPYmopOwotICAgICAgdmFyIG1lcmdlZFBv
cyA9IG1lcmdlZCAmJiBtZXJnZWQuZmluZCgpOworICAgICAgdmFyIG1lcmdlZFBvcyA9IG1lcmdl
ZCAmJiBtZXJnZWQuZmluZCgwLCB0cnVlKTsKICAgICAgIGlmIChtZXJnZWQgJiYgKGZvdW5kLmNo
ID4gbWVyZ2VkUG9zLmZyb20uY2ggfHwgZm91bmQuY2ggPT0gbWVyZ2VkUG9zLmZyb20uY2ggJiYg
Zm91bmQueFJlbCA+IDApKQotICAgICAgICBsaW5lTm8gPSBtZXJnZWRQb3MudG8ubGluZTsKKyAg
ICAgICAgbGluZU4gPSBsaW5lTm8obGluZU9iaiA9IG1lcmdlZFBvcy50by5saW5lKTsKICAgICAg
IGVsc2UKICAgICAgICAgcmV0dXJuIGZvdW5kOwogICAgIH0KICAgfQoKICAgZnVuY3Rpb24gY29v
cmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8sIHgsIHkpIHsKLSAgICB2YXIgaW5uZXJP
ZmYgPSB5IC0gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lT2JqKTsKKyAgICB2YXIgaW5uZXJPZmYgPSB5
IC0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopOwogICAgIHZhciB3cm9uZ0xpbmUgPSBmYWxzZSwgYWRq
dXN0ID0gMiAqIGNtLmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aDsKLSAgICB2YXIgbWVhc3Vy
ZW1lbnQgPSBtZWFzdXJlTGluZShjbSwgbGluZU9iaik7CisgICAgdmFyIHByZXBhcmVkTWVhc3Vy
ZSA9IHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZU9iaik7CgogICAgIGZ1bmN0aW9uIGdl
dFgoY2gpIHsKLSAgICAgIHZhciBzcCA9IGN1cnNvckNvb3JkcyhjbSwgUG9zKGxpbmVObywgY2gp
LCAibGluZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU9iaiwgbWVhc3VyZW1l
bnQpOworICAgICAgdmFyIHNwID0gY3Vyc29yQ29vcmRzKGNtLCBQb3MobGluZU5vLCBjaCksICJs
aW5lIiwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlKTsKICAgICAgIHdyb25nTGluZSA9IHRydWU7
CiAgICAgICBpZiAoaW5uZXJPZmYgPiBzcC5ib3R0b20pIHJldHVybiBzcC5sZWZ0IC0gYWRqdXN0
OwogICAgICAgZWxzZSBpZiAoaW5uZXJPZmYgPCBzcC50b3ApIHJldHVybiBzcC5sZWZ0ICsgYWRq
dXN0OwpAQCAtMTI4OSw5ICsxODIzLDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICBpZiAoYmlkaSA/IHRvID09IGZyb20gfHwgdG8gPT0gbW92ZVZpc3VhbGx5KGxp
bmVPYmosIGZyb20sIDEpIDogdG8gLSBmcm9tIDw9IDEpIHsKICAgICAgICAgdmFyIGNoID0geCA8
IGZyb21YIHx8IHggLSBmcm9tWCA8PSB0b1ggLSB4ID8gZnJvbSA6IHRvOwogICAgICAgICB2YXIg
eERpZmYgPSB4IC0gKGNoID09IGZyb20gPyBmcm9tWCA6IHRvWCk7Ci0gICAgICAgIHdoaWxlIChp
c0V4dGVuZGluZ0NoYXIudGVzdChsaW5lT2JqLnRleHQuY2hhckF0KGNoKSkpICsrY2g7CisgICAg
ICAgIHdoaWxlIChpc0V4dGVuZGluZ0NoYXIobGluZU9iai50ZXh0LmNoYXJBdChjaCkpKSArK2No
OwogICAgICAgICB2YXIgcG9zID0gUG9zV2l0aEluZm8obGluZU5vLCBjaCwgY2ggPT0gZnJvbSA/
IGZyb21PdXRzaWRlIDogdG9PdXRzaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eERpZmYgPCAwID8gLTEgOiB4RGlmZiA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhEaWZmIDwgLTEgPyAtMSA6IHhEaWZmID4gMSA/IDEgOiAwKTsKICAgICAgICAgcmV0
dXJuIHBvczsKICAgICAgIH0KICAgICAgIHZhciBzdGVwID0gTWF0aC5jZWlsKGRpc3QgLyAyKSwg
bWlkZGxlID0gZnJvbSArIHN0ZXA7CkBAIC0xMzA2LDYgKzE4NDAsNyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgfQoKICAgdmFyIG1lYXN1cmVUZXh0OworICAvLyBDb21w
dXRlIHRoZSBkZWZhdWx0IHRleHQgaGVpZ2h0LgogICBmdW5jdGlvbiB0ZXh0SGVpZ2h0KGRpc3Bs
YXkpIHsKICAgICBpZiAoZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ICE9IG51bGwpIHJldHVybiBk
aXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7CiAgICAgaWYgKG1lYXN1cmVUZXh0ID09IG51bGwpIHsK
QEAgLTEzMjUsODQgKzE4NjAsODkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgcmV0dXJuIGhlaWdodCB8fCAxOwogICB9CgorICAvLyBDb21wdXRlIHRoZSBkZWZhdWx0
IGNoYXJhY3RlciB3aWR0aC4KICAgZnVuY3Rpb24gY2hhcldpZHRoKGRpc3BsYXkpIHsKICAgICBp
ZiAoZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggIT0gbnVsbCkgcmV0dXJuIGRpc3BsYXkuY2FjaGVk
Q2hhcldpZHRoOwotICAgIHZhciBhbmNob3IgPSBlbHQoInNwYW4iLCAieCIpOworICAgIHZhciBh
bmNob3IgPSBlbHQoInNwYW4iLCAieHh4eHh4eHh4eCIpOwogICAgIHZhciBwcmUgPSBlbHQoInBy
ZSIsIFthbmNob3JdKTsKICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUs
IHByZSk7Ci0gICAgdmFyIHdpZHRoID0gYW5jaG9yLm9mZnNldFdpZHRoOworICAgIHZhciByZWN0
ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCB3aWR0aCA9IChyZWN0LnJpZ2h0IC0g
cmVjdC5sZWZ0KSAvIDEwOwogICAgIGlmICh3aWR0aCA+IDIpIGRpc3BsYXkuY2FjaGVkQ2hhcldp
ZHRoID0gd2lkdGg7CiAgICAgcmV0dXJuIHdpZHRoIHx8IDEwOwogICB9CgogICAvLyBPUEVSQVRJ
T05TCgotICAvLyBPcGVyYXRpb25zIGFyZSB1c2VkIHRvIHdyYXAgY2hhbmdlcyBpbiBzdWNoIGEg
d2F5IHRoYXQgZWFjaAotICAvLyBjaGFuZ2Ugd29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlIGN1cnNv
ciBhbmQgZGlzcGxheSAod2hpY2ggd291bGQKLSAgLy8gYmUgYXdrd2FyZCwgc2xvdywgYW5kIGVy
cm9yLXByb25lKSwgYnV0IGluc3RlYWQgdXBkYXRlcyBhcmUKLSAgLy8gYmF0Y2hlZCBhbmQgdGhl
biBhbGwgY29tYmluZWQgYW5kIGV4ZWN1dGVkIGF0IG9uY2UuCisgIC8vIE9wZXJhdGlvbnMgYXJl
IHVzZWQgdG8gd3JhcCBhIHNlcmllcyBvZiBjaGFuZ2VzIHRvIHRoZSBlZGl0b3IKKyAgLy8gc3Rh
dGUgaW4gc3VjaCBhIHdheSB0aGF0IGVhY2ggY2hhbmdlIHdvbid0IGhhdmUgdG8gdXBkYXRlIHRo
ZQorICAvLyBjdXJzb3IgYW5kIGRpc3BsYXkgKHdoaWNoIHdvdWxkIGJlIGF3a3dhcmQsIHNsb3cs
IGFuZAorICAvLyBlcnJvci1wcm9uZSkuIEluc3RlYWQsIGRpc3BsYXkgdXBkYXRlcyBhcmUgYmF0
Y2hlZCBhbmQgdGhlbiBhbGwKKyAgLy8gY29tYmluZWQgYW5kIGV4ZWN1dGVkIGF0IG9uY2UuCgog
ICB2YXIgbmV4dE9wSWQgPSAwOworICAvLyBTdGFydCBhIG5ldyBvcGVyYXRpb24uCiAgIGZ1bmN0
aW9uIHN0YXJ0T3BlcmF0aW9uKGNtKSB7CiAgICAgY20uY3VyT3AgPSB7Ci0gICAgICAvLyBBbiBh
cnJheSBvZiByYW5nZXMgb2YgbGluZXMgdGhhdCBoYXZlIHRvIGJlIHVwZGF0ZWQuIFNlZQotICAg
ICAgLy8gdXBkYXRlRGlzcGxheS4KLSAgICAgIGNoYW5nZXM6IFtdLAotICAgICAgZm9yY2VVcGRh
dGU6IGZhbHNlLAotICAgICAgdXBkYXRlSW5wdXQ6IG51bGwsCi0gICAgICB1c2VyU2VsQ2hhbmdl
OiBudWxsLAotICAgICAgdGV4dENoYW5nZWQ6IG51bGwsCi0gICAgICBzZWxlY3Rpb25DaGFuZ2Vk
OiBmYWxzZSwKLSAgICAgIGN1cnNvckFjdGl2aXR5OiBmYWxzZSwKLSAgICAgIHVwZGF0ZU1heExp
bmU6IGZhbHNlLAotICAgICAgdXBkYXRlU2Nyb2xsUG9zOiBmYWxzZSwKLSAgICAgIGlkOiArK25l
eHRPcElkCisgICAgICB2aWV3Q2hhbmdlZDogZmFsc2UsICAgICAgLy8gRmxhZyB0aGF0IGluZGlj
YXRlcyB0aGF0IGxpbmVzIG1pZ2h0IG5lZWQgdG8gYmUgcmVkcmF3bgorICAgICAgc3RhcnRIZWln
aHQ6IGNtLmRvYy5oZWlnaHQsIC8vIFVzZWQgdG8gZGV0ZWN0IG5lZWQgdG8gdXBkYXRlIHNjcm9s
bGJhcgorICAgICAgZm9yY2VVcGRhdGU6IGZhbHNlLCAgICAgIC8vIFVzZWQgdG8gZm9yY2UgYSBy
ZWRyYXcKKyAgICAgIHVwZGF0ZUlucHV0OiBudWxsLCAgICAgICAvLyBXaGV0aGVyIHRvIHJlc2V0
IHRoZSBpbnB1dCB0ZXh0YXJlYQorICAgICAgdHlwaW5nOiBmYWxzZSwgICAgICAgICAgIC8vIFdo
ZXRoZXIgdGhpcyByZXNldCBzaG91bGQgYmUgY2FyZWZ1bCB0byBsZWF2ZSBleGlzdGluZyB0ZXh0
IChmb3IgY29tcG9zaXRpbmcpCisgICAgICBjaGFuZ2VPYmpzOiBudWxsLCAgICAgICAgLy8gQWNj
dW11bGF0ZWQgY2hhbmdlcywgZm9yIGZpcmluZyBjaGFuZ2UgZXZlbnRzCisgICAgICBvcmlnaW46
IG51bGwsICAgICAgICAgICAgLy8gU2VsZWN0aW9uJ3Mgb3JpZ2luCisgICAgICBjdXJzb3JBY3Rp
dml0eTogZmFsc2UsICAgLy8gV2hldGhlciB0byBmaXJlIGEgY3Vyc29yQWN0aXZpdHkgZXZlbnQK
KyAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IGZhbHNlLCAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24g
bmVlZHMgdG8gYmUgcmVkcmF3bgorICAgICAgdXBkYXRlTWF4TGluZTogZmFsc2UsICAgIC8vIFNl
dCB3aGVuIHRoZSB3aWRlc3QgbGluZSBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIGFuZXcKKyAgICAg
IHNjcm9sbExlZnQ6IG51bGwsIHNjcm9sbFRvcDogbnVsbCwgLy8gSW50ZXJtZWRpYXRlIHNjcm9s
bCBwb3NpdGlvbiwgbm90IHB1c2hlZCB0byBET00geWV0CisgICAgICBzY3JvbGxUb1BvczogbnVs
bCwgICAgICAgLy8gVXNlZCB0byBzY3JvbGwgdG8gYSBzcGVjaWZpYyBwb3NpdGlvbgorICAgICAg
aWQ6ICsrbmV4dE9wSWQgICAgICAgICAgIC8vIFVuaXF1ZSBJRAogICAgIH07CiAgICAgaWYgKCFk
ZWxheWVkQ2FsbGJhY2tEZXB0aCsrKSBkZWxheWVkQ2FsbGJhY2tzID0gW107CiAgIH0KCisgIC8v
IEZpbmlzaCBhbiBvcGVyYXRpb24sIHVwZGF0aW5nIHRoZSBkaXNwbGF5IGFuZCBzaWduYWxsaW5n
IGRlbGF5ZWQgZXZlbnRzCiAgIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbihjbSkgewogICAgIHZhciBv
cCA9IGNtLmN1ck9wLCBkb2MgPSBjbS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwogICAgIGNt
LmN1ck9wID0gbnVsbDsKCi0gICAgaWYgKG9wLnVwZGF0ZU1heExpbmUpIGNvbXB1dGVNYXhMZW5n
dGgoY20pOwotICAgIGlmIChkaXNwbGF5Lm1heExpbmVDaGFuZ2VkICYmICFjbS5vcHRpb25zLmxp
bmVXcmFwcGluZyAmJiBkaXNwbGF5Lm1heExpbmUpIHsKLSAgICAgIHZhciB3aWR0aCA9IG1lYXN1
cmVMaW5lV2lkdGgoY20sIGRpc3BsYXkubWF4TGluZSk7Ci0gICAgICBkaXNwbGF5LnNpemVyLnN0
eWxlLm1pbldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggKyAzICsgc2Nyb2xsZXJDdXRPZmYpICsg
InB4IjsKLSAgICAgIGRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSBmYWxzZTsKLSAgICAgIHZhciBt
YXhTY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0ICsgZGlz
cGxheS5zaXplci5vZmZzZXRXaWR0aCAtIGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpOwot
ICAgICAgaWYgKG1heFNjcm9sbExlZnQgPCBkb2Muc2Nyb2xsTGVmdCAmJiAhb3AudXBkYXRlU2Ny
b2xsUG9zKQotICAgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihkaXNwbGF5LnNjcm9s
bGVyLnNjcm9sbExlZnQsIG1heFNjcm9sbExlZnQpLCB0cnVlKTsKLSAgICB9Ci0gICAgdmFyIG5l
d1Njcm9sbFBvcywgdXBkYXRlZDsKLSAgICBpZiAob3AudXBkYXRlU2Nyb2xsUG9zKSB7Ci0gICAg
ICBuZXdTY3JvbGxQb3MgPSBvcC51cGRhdGVTY3JvbGxQb3M7Ci0gICAgfSBlbHNlIGlmIChvcC5z
ZWxlY3Rpb25DaGFuZ2VkICYmIGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSB7IC8vIGRv
bid0IHJlc2Nyb2xsIGlmIG5vdCB2aXNpYmxlCi0gICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29v
cmRzKGNtLCBkb2Muc2VsLmhlYWQpOwotICAgICAgbmV3U2Nyb2xsUG9zID0gY2FsY3VsYXRlU2Ny
b2xsUG9zKGNtLCBjb29yZHMubGVmdCwgY29vcmRzLnRvcCwgY29vcmRzLmxlZnQsIGNvb3Jkcy5i
b3R0b20pOwotICAgIH0KLSAgICBpZiAob3AuY2hhbmdlcy5sZW5ndGggfHwgb3AuZm9yY2VVcGRh
dGUgfHwgbmV3U2Nyb2xsUG9zICYmIG5ld1Njcm9sbFBvcy5zY3JvbGxUb3AgIT0gbnVsbCkgewot
ICAgICAgdXBkYXRlZCA9IHVwZGF0ZURpc3BsYXkoY20sIG9wLmNoYW5nZXMsIG5ld1Njcm9sbFBv
cyAmJiBuZXdTY3JvbGxQb3Muc2Nyb2xsVG9wLCBvcC5mb3JjZVVwZGF0ZSk7CisgICAgaWYgKG9w
LnVwZGF0ZU1heExpbmUpIGZpbmRNYXhMaW5lKGNtKTsKKworICAgIC8vIElmIGl0IGxvb2tzIGxp
a2UgYW4gdXBkYXRlIG1pZ2h0IGJlIG5lZWRlZCwgY2FsbCB1cGRhdGVEaXNwbGF5CisgICAgaWYg
KG9wLnZpZXdDaGFuZ2VkIHx8IG9wLmZvcmNlVXBkYXRlIHx8IG9wLnNjcm9sbFRvcCAhPSBudWxs
IHx8CisgICAgICAgIG9wLnNjcm9sbFRvUG9zICYmIChvcC5zY3JvbGxUb1Bvcy5mcm9tLmxpbmUg
PCBkaXNwbGF5LnZpZXdGcm9tIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5zY3Jv
bGxUb1Bvcy50by5saW5lID49IGRpc3BsYXkudmlld1RvKSB8fAorICAgICAgICBkaXNwbGF5Lm1h
eExpbmVDaGFuZ2VkICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7CisgICAgICB2YXIgdXBk
YXRlZCA9IHVwZGF0ZURpc3BsYXkoY20sIHt0b3A6IG9wLnNjcm9sbFRvcCwgZW5zdXJlOiBvcC5z
Y3JvbGxUb1Bvc30sIG9wLmZvcmNlVXBkYXRlKTsKICAgICAgIGlmIChjbS5kaXNwbGF5LnNjcm9s
bGVyLm9mZnNldEhlaWdodCkgY20uZG9jLnNjcm9sbFRvcCA9IGNtLmRpc3BsYXkuc2Nyb2xsZXIu
c2Nyb2xsVG9wOwogICAgIH0KKyAgICAvLyBJZiBubyB1cGRhdGUgd2FzIHJ1biwgYnV0IHRoZSBz
ZWxlY3Rpb24gY2hhbmdlZCwgcmVkcmF3IHRoYXQuCiAgICAgaWYgKCF1cGRhdGVkICYmIG9wLnNl
bGVjdGlvbkNoYW5nZWQpIHVwZGF0ZVNlbGVjdGlvbihjbSk7Ci0gICAgaWYgKG9wLnVwZGF0ZVNj
cm9sbFBvcykgewotICAgICAgdmFyIHRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXku
c2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIG5l
d1Njcm9sbFBvcy5zY3JvbGxUb3ApKTsKLSAgICAgIHZhciBsZWZ0ID0gTWF0aC5tYXgoMCwgTWF0
aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGRpc3BsYXkuc2Nyb2xsZXIuY2xp
ZW50V2lkdGgsIG5ld1Njcm9sbFBvcy5zY3JvbGxMZWZ0KSk7CisgICAgaWYgKCF1cGRhdGVkICYm
IG9wLnN0YXJ0SGVpZ2h0ICE9IGNtLmRvYy5oZWlnaHQpIHVwZGF0ZVNjcm9sbGJhcnMoY20pOwor
CisgICAgLy8gUHJvcGFnYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gdG8gdGhlIGFjdHVhbCBET00g
c2Nyb2xsZXIKKyAgICBpZiAob3Auc2Nyb2xsVG9wICE9IG51bGwgJiYgZGlzcGxheS5zY3JvbGxl
ci5zY3JvbGxUb3AgIT0gb3Auc2Nyb2xsVG9wKSB7CisgICAgICB2YXIgdG9wID0gTWF0aC5tYXgo
MCwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBkaXNwbGF5LnNjcm9s
bGVyLmNsaWVudEhlaWdodCwgb3Auc2Nyb2xsVG9wKSk7CiAgICAgICBkaXNwbGF5LnNjcm9sbGVy
LnNjcm9sbFRvcCA9IGRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSBkb2Muc2Nyb2xsVG9w
ID0gdG9wOworICAgIH0KKyAgICBpZiAob3Auc2Nyb2xsTGVmdCAhPSBudWxsICYmIGRpc3BsYXku
c2Nyb2xsZXIuc2Nyb2xsTGVmdCAhPSBvcC5zY3JvbGxMZWZ0KSB7CisgICAgICB2YXIgbGVmdCA9
IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggLSBkaXNw
bGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLCBvcC5zY3JvbGxMZWZ0KSk7CiAgICAgICBkaXNwbGF5
LnNjcm9sbGVyLnNjcm9sbExlZnQgPSBkaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdCA9IGRv
Yy5zY3JvbGxMZWZ0ID0gbGVmdDsKICAgICAgIGFsaWduSG9yaXpvbnRhbGx5KGNtKTsKLSAgICAg
IGlmIChvcC5zY3JvbGxUb1BvcykKLSAgICAgICAgc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNsaXBQ
b3MoY20uZG9jLCBvcC5zY3JvbGxUb1Bvcy5mcm9tKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xpcFBvcyhjbS5kb2MsIG9wLnNjcm9sbFRvUG9zLnRvKSwgb3Auc2Nyb2xsVG9Qb3MubWFy
Z2luKTsKLSAgICB9IGVsc2UgaWYgKG5ld1Njcm9sbFBvcykgewotICAgICAgc2Nyb2xsQ3Vyc29y
SW50b1ZpZXcoY20pOwogICAgIH0KKyAgICAvLyBJZiB3ZSBuZWVkIHRvIHNjcm9sbCBhIHNwZWNp
ZmljIHBvc2l0aW9uIGludG8gdmlldywgZG8gc28uCisgICAgaWYgKG9wLnNjcm9sbFRvUG9zKSB7
CisgICAgICB2YXIgY29vcmRzID0gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNsaXBQb3MoY20uZG9j
LCBvcC5zY3JvbGxUb1Bvcy5mcm9tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGlwUG9zKGNtLmRvYywgb3Auc2Nyb2xsVG9Qb3MudG8pLCBvcC5zY3JvbGxUb1Bvcy5t
YXJnaW4pOworICAgICAgaWYgKG9wLnNjcm9sbFRvUG9zLmlzQ3Vyc29yICYmIGNtLnN0YXRlLmZv
Y3VzZWQpIG1heWJlU2Nyb2xsV2luZG93KGNtLCBjb29yZHMpOworICAgIH0KKwogICAgIGlmIChv
cC5zZWxlY3Rpb25DaGFuZ2VkKSByZXN0YXJ0QmxpbmsoY20pOwoKICAgICBpZiAoY20uc3RhdGUu
Zm9jdXNlZCAmJiBvcC51cGRhdGVJbnB1dCkKLSAgICAgIHJlc2V0SW5wdXQoY20sIG9wLnVzZXJT
ZWxDaGFuZ2UpOworICAgICAgcmVzZXRJbnB1dChjbSwgb3AudHlwaW5nKTsKCisgICAgLy8gRmly
ZSBldmVudHMgZm9yIG1hcmtlcnMgdGhhdCBhcmUgaGlkZGVuL3VuaWRkZW4gYnkgZWRpdGluZyBv
cgorICAgIC8vIHVuZG9pbmcKICAgICB2YXIgaGlkZGVuID0gb3AubWF5YmVIaWRkZW5NYXJrZXJz
LCB1bmhpZGRlbiA9IG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzOwogICAgIGlmIChoaWRkZW4pIGZv
ciAodmFyIGkgPSAwOyBpIDwgaGlkZGVuLmxlbmd0aDsgKytpKQogICAgICAgaWYgKCFoaWRkZW5b
aV0ubGluZXMubGVuZ3RoKSBzaWduYWwoaGlkZGVuW2ldLCAiaGlkZSIpOwpAQCAtMTQxNCw0NyAr
MTk1NCwyNDIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBkZWxh
eWVkID0gZGVsYXllZENhbGxiYWNrczsKICAgICAgIGRlbGF5ZWRDYWxsYmFja3MgPSBudWxsOwog
ICAgIH0KLSAgICBpZiAob3AudGV4dENoYW5nZWQpCi0gICAgICBzaWduYWwoY20sICJjaGFuZ2Ui
LCBjbSwgb3AudGV4dENoYW5nZWQpOwotICAgIGlmIChvcC5jdXJzb3JBY3Rpdml0eSkgc2lnbmFs
KGNtLCAiY3Vyc29yQWN0aXZpdHkiLCBjbSk7CisgICAgLy8gRmlyZSBjaGFuZ2UgZXZlbnRzLCBh
bmQgZGVsYXllZCBldmVudCBoYW5kbGVycworICAgIGlmIChvcC5jaGFuZ2VPYmpzKSB7CisgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG9wLmNoYW5nZU9ianMubGVuZ3RoOyBpKyspCisgICAgICAg
IHNpZ25hbChjbSwgImNoYW5nZSIsIGNtLCBvcC5jaGFuZ2VPYmpzW2ldKTsKKyAgICAgIHNpZ25h
bChjbSwgImNoYW5nZXMiLCBjbSwgb3AuY2hhbmdlT2Jqcyk7CisgICAgfQorICAgIGlmIChvcC5j
dXJzb3JBY3Rpdml0eSkgc2lnbmFsKGNtLCAiY3Vyc29yQWN0aXZpdHkiLCBjbSwgb3Aub3JpZ2lu
KTsKICAgICBpZiAoZGVsYXllZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxheWVkLmxlbmd0aDsg
KytpKSBkZWxheWVkW2ldKCk7CiAgIH0KCisgIC8vIFJ1biB0aGUgZ2l2ZW4gZnVuY3Rpb24gaW4g
YW4gb3BlcmF0aW9uCisgIGZ1bmN0aW9uIHJ1bkluT3AoY20sIGYpIHsKKyAgICBpZiAoY20uY3Vy
T3ApIHJldHVybiBmKCk7CisgICAgc3RhcnRPcGVyYXRpb24oY20pOworICAgIHRyeSB7IHJldHVy
biBmKCk7IH0KKyAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfQorICB9CiAgIC8vIFdy
YXBzIGEgZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uLiBSZXR1cm5zIHRoZSB3cmFwcGVkIGZ1bmN0
aW9uLgotICBmdW5jdGlvbiBvcGVyYXRpb24oY20xLCBmKSB7CisgIGZ1bmN0aW9uIG9wZXJhdGlv
bihjbSwgZikgewogICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBjbSA9IGNtMSB8
fCB0aGlzLCB3aXRoT3AgPSAhY20uY3VyT3A7Ci0gICAgICBpZiAod2l0aE9wKSBzdGFydE9wZXJh
dGlvbihjbSk7Ci0gICAgICB0cnkgeyB2YXIgcmVzdWx0ID0gZi5hcHBseShjbSwgYXJndW1lbnRz
KTsgfQotICAgICAgZmluYWxseSB7IGlmICh3aXRoT3ApIGVuZE9wZXJhdGlvbihjbSk7IH0KLSAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICBpZiAoY20uY3VyT3ApIHJldHVybiBmLmFwcGx5KGNt
LCBhcmd1bWVudHMpOworICAgICAgc3RhcnRPcGVyYXRpb24oY20pOworICAgICAgdHJ5IHsgcmV0
dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cyk7IH0KKyAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRp
b24oY20pOyB9CiAgICAgfTsKICAgfQotICBmdW5jdGlvbiBkb2NPcGVyYXRpb24oZikgeworICAv
LyBVc2VkIHRvIGFkZCBtZXRob2RzIHRvIGVkaXRvciBhbmQgZG9jIGluc3RhbmNlcywgd3JhcHBp
bmcgdGhlbSBpbgorICAvLyBvcGVyYXRpb25zLgorICBmdW5jdGlvbiBtZXRob2RPcChmKSB7CiAg
ICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHdpdGhPcCA9IHRoaXMuY20gJiYgIXRo
aXMuY20uY3VyT3AsIHJlc3VsdDsKLSAgICAgIGlmICh3aXRoT3ApIHN0YXJ0T3BlcmF0aW9uKHRo
aXMuY20pOwotICAgICAgdHJ5IHsgcmVzdWx0ID0gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9
Ci0gICAgICBmaW5hbGx5IHsgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9uKHRoaXMuY20pOyB9Ci0g
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgaWYgKHRoaXMuY3VyT3ApIHJldHVybiBmLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICBzdGFydE9wZXJhdGlvbih0aGlzKTsKKyAgICAgIHRy
eSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KKyAgICAgIGZpbmFsbHkgeyBl
bmRPcGVyYXRpb24odGhpcyk7IH0KICAgICB9OwogICB9Ci0gIGZ1bmN0aW9uIHJ1bkluT3AoY20s
IGYpIHsKLSAgICB2YXIgd2l0aE9wID0gIWNtLmN1ck9wLCByZXN1bHQ7Ci0gICAgaWYgKHdpdGhP
cCkgc3RhcnRPcGVyYXRpb24oY20pOwotICAgIHRyeSB7IHJlc3VsdCA9IGYoKTsgfQotICAgIGZp
bmFsbHkgeyBpZiAod2l0aE9wKSBlbmRPcGVyYXRpb24oY20pOyB9Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgZnVuY3Rpb24gZG9jTWV0aG9kT3AoZikgeworICAgIHJldHVybiBmdW5jdGlvbigpIHsK
KyAgICAgIHZhciBjbSA9IHRoaXMuY207CisgICAgICBpZiAoIWNtIHx8IGNtLmN1ck9wKSByZXR1
cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgc3RhcnRPcGVyYXRpb24oY20pOwor
ICAgICAgdHJ5IHsgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQorICAgICAgZmlu
YWxseSB7IGVuZE9wZXJhdGlvbihjbSk7IH0KKyAgICB9OworICB9CisKKyAgLy8gVklFVyBUUkFD
S0lORworCisgIC8vIFRoZXNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSB2aXNp
YmxlIChjdXJyZW50bHkgZHJhd24pCisgIC8vIHBhcnQgb2YgdGhlIGRvY3VtZW50LiBBIExpbmVW
aWV3IG1heSBjb3JyZXNwb25kIHRvIG11bHRpcGxlCisgIC8vIGxvZ2ljYWwgbGluZXMsIGlmIHRo
b3NlIGFyZSBjb25uZWN0ZWQgYnkgY29sbGFwc2VkIHJhbmdlcy4KKyAgZnVuY3Rpb24gTGluZVZp
ZXcoZG9jLCBsaW5lLCBsaW5lTikgeworICAgIC8vIFRoZSBzdGFydGluZyBsaW5lCisgICAgdGhp
cy5saW5lID0gbGluZTsKKyAgICAvLyBDb250aW51aW5nIGxpbmVzLCBpZiBhbnkKKyAgICB0aGlz
LnJlc3QgPSB2aXN1YWxMaW5lQ29udGludWVkKGxpbmUpOworICAgIC8vIE51bWJlciBvZiBsb2dp
Y2FsIGxpbmVzIGluIHRoaXMgdmlzdWFsIGxpbmUKKyAgICB0aGlzLnNpemUgPSB0aGlzLnJlc3Qg
PyBsaW5lTm8obHN0KHRoaXMucmVzdCkpIC0gbGluZU4gKyAxIDogMTsKKyAgICB0aGlzLm5vZGUg
PSB0aGlzLnRleHQgPSBudWxsOworICAgIHRoaXMuaGlkZGVuID0gbGluZUlzSGlkZGVuKGRvYywg
bGluZSk7CisgIH0KKworICAvLyBDcmVhdGUgYSByYW5nZSBvZiBMaW5lVmlldyBvYmplY3RzIGZv
ciB0aGUgZ2l2ZW4gbGluZXMuCisgIGZ1bmN0aW9uIGJ1aWxkVmlld0FycmF5KGNtLCBmcm9tLCB0
bykgeworICAgIHZhciBhcnJheSA9IFtdLCBuZXh0UG9zOworICAgIGZvciAodmFyIHBvcyA9IGZy
b207IHBvcyA8IHRvOyBwb3MgPSBuZXh0UG9zKSB7CisgICAgICB2YXIgdmlldyA9IG5ldyBMaW5l
VmlldyhjbS5kb2MsIGdldExpbmUoY20uZG9jLCBwb3MpLCBwb3MpOworICAgICAgbmV4dFBvcyA9
IHBvcyArIHZpZXcuc2l6ZTsKKyAgICAgIGFycmF5LnB1c2godmlldyk7CisgICAgfQorICAgIHJl
dHVybiBhcnJheTsKICAgfQoKKyAgLy8gVXBkYXRlcyB0aGUgZGlzcGxheS52aWV3IGRhdGEgc3Ry
dWN0dXJlIGZvciBhIGdpdmVuIGNoYW5nZSB0byB0aGUKKyAgLy8gZG9jdW1lbnQuIEZyb20gYW5k
IHRvIGFyZSBpbiBwcmUtY2hhbmdlIGNvb3JkaW5hdGVzLiBMZW5kaWZmIGlzCisgIC8vIHRoZSBh
bW91bnQgb2YgbGluZXMgYWRkZWQgb3Igc3VidHJhY3RlZCBieSB0aGUgY2hhbmdlLiBUaGlzIGlz
CisgIC8vIHVzZWQgZm9yIGNoYW5nZXMgdGhhdCBzcGFuIG11bHRpcGxlIGxpbmVzLCBvciBjaGFu
Z2UgdGhlIHdheQorICAvLyBsaW5lcyBhcmUgZGl2aWRlZCBpbnRvIHZpc3VhbCBsaW5lcy4gcmVn
TGluZUNoYW5nZSAoYmVsb3cpCisgIC8vIHJlZ2lzdGVycyBzaW5nbGUtbGluZSBjaGFuZ2VzLgog
ICBmdW5jdGlvbiByZWdDaGFuZ2UoY20sIGZyb20sIHRvLCBsZW5kaWZmKSB7CiAgICAgaWYgKGZy
b20gPT0gbnVsbCkgZnJvbSA9IGNtLmRvYy5maXJzdDsKICAgICBpZiAodG8gPT0gbnVsbCkgdG8g
PSBjbS5kb2MuZmlyc3QgKyBjbS5kb2Muc2l6ZTsKLSAgICBjbS5jdXJPcC5jaGFuZ2VzLnB1c2go
e2Zyb206IGZyb20sIHRvOiB0bywgZGlmZjogbGVuZGlmZn0pOworICAgIGlmICghbGVuZGlmZikg
bGVuZGlmZiA9IDA7CisKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CisgICAgaWYgKGxl
bmRpZmYgJiYgdG8gPCBkaXNwbGF5LnZpZXdUbyAmJgorICAgICAgICAoZGlzcGxheS51cGRhdGVM
aW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPiBmcm9tKSkK
KyAgICAgIGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBmcm9tOworCisgICAgY20uY3VyT3Au
dmlld0NoYW5nZWQgPSB0cnVlOworCisgICAgaWYgKGZyb20gPj0gZGlzcGxheS52aWV3VG8pIHsg
Ly8gQ2hhbmdlIGFmdGVyCisgICAgICBpZiAoc2F3Q29sbGFwc2VkU3BhbnMgJiYgdmlzdWFsTGlu
ZU5vKGNtLmRvYywgZnJvbSkgPCBkaXNwbGF5LnZpZXdUbykKKyAgICAgICAgcmVzZXRWaWV3KGNt
KTsKKyAgICB9IGVsc2UgaWYgKHRvIDw9IGRpc3BsYXkudmlld0Zyb20pIHsgLy8gQ2hhbmdlIGJl
Zm9yZQorICAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zICYmIHZpc3VhbExpbmVFbmRObyhjbS5k
b2MsIHRvICsgbGVuZGlmZikgPiBkaXNwbGF5LnZpZXdGcm9tKSB7CisgICAgICAgIHJlc2V0Vmll
dyhjbSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBkaXNwbGF5LnZpZXdGcm9tICs9IGxlbmRp
ZmY7CisgICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7CisgICAgICB9CisgICAgfSBl
bHNlIGlmIChmcm9tIDw9IGRpc3BsYXkudmlld0Zyb20gJiYgdG8gPj0gZGlzcGxheS52aWV3VG8p
IHsgLy8gRnVsbCBvdmVybGFwCisgICAgICByZXNldFZpZXcoY20pOworICAgIH0gZWxzZSBpZiAo
ZnJvbSA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7IC8vIFRvcCBvdmVybGFwCisgICAgICB2YXIgY3V0
ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7CisgICAgICBpZiAo
Y3V0KSB7CisgICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShjdXQuaW5k
ZXgpOworICAgICAgICBkaXNwbGF5LnZpZXdGcm9tID0gY3V0LmxpbmVOOworICAgICAgICBkaXNw
bGF5LnZpZXdUbyArPSBsZW5kaWZmOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzZXRWaWV3
KGNtKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHRvID49IGRpc3BsYXkudmlld1RvKSB7IC8v
IEJvdHRvbSBvdmVybGFwCisgICAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgZnJv
bSwgZnJvbSwgLTEpOworICAgICAgaWYgKGN1dCkgeworICAgICAgICBkaXNwbGF5LnZpZXcgPSBk
aXNwbGF5LnZpZXcuc2xpY2UoMCwgY3V0LmluZGV4KTsKKyAgICAgICAgZGlzcGxheS52aWV3VG8g
PSBjdXQubGluZU47CisgICAgICB9IGVsc2UgeworICAgICAgICByZXNldFZpZXcoY20pOworICAg
ICAgfQorICAgIH0gZWxzZSB7IC8vIEdhcCBpbiB0aGUgbWlkZGxlCisgICAgICB2YXIgY3V0VG9w
ID0gdmlld0N1dHRpbmdQb2ludChjbSwgZnJvbSwgZnJvbSwgLTEpOworICAgICAgdmFyIGN1dEJv
dCA9IHZpZXdDdXR0aW5nUG9pbnQoY20sIHRvLCB0byArIGxlbmRpZmYsIDEpOworICAgICAgaWYg
KGN1dFRvcCAmJiBjdXRCb3QpIHsKKyAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3
LnNsaWNlKDAsIGN1dFRvcC5pbmRleCkKKyAgICAgICAgICAuY29uY2F0KGJ1aWxkVmlld0FycmF5
KGNtLCBjdXRUb3AubGluZU4sIGN1dEJvdC5saW5lTikpCisgICAgICAgICAgLmNvbmNhdChkaXNw
bGF5LnZpZXcuc2xpY2UoY3V0Qm90LmluZGV4KSk7CisgICAgICAgIGRpc3BsYXkudmlld1RvICs9
IGxlbmRpZmY7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXNldFZpZXcoY20pOworICAgICAg
fQorICAgIH0KKworICAgIHZhciBleHQgPSBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7CisgICAg
aWYgKGV4dCkgeworICAgICAgaWYgKHRvIDwgZXh0LmxpbmVOKQorICAgICAgICBleHQubGluZU4g
Kz0gbGVuZGlmZjsKKyAgICAgIGVsc2UgaWYgKGZyb20gPCBleHQubGluZU4gKyBleHQuc2l6ZSkK
KyAgICAgICAgZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbnVsbDsKKyAgICB9CisgIH0KKwor
ICAvLyBSZWdpc3RlciBhIGNoYW5nZSB0byBhIHNpbmdsZSBsaW5lLiBUeXBlIG11c3QgYmUgb25l
IG9mICJ0ZXh0IiwKKyAgLy8gImd1dHRlciIsICJjbGFzcyIsICJ3aWRnZXQiCisgIGZ1bmN0aW9u
IHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmUsIHR5cGUpIHsKKyAgICBjbS5jdXJPcC52aWV3Q2hhbmdl
ZCA9IHRydWU7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBleHQgPSBjbS5kaXNwbGF5
LmV4dGVybmFsTWVhc3VyZWQ7CisgICAgaWYgKGV4dCAmJiBsaW5lID49IGV4dC5saW5lTiAmJiBs
aW5lIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpCisgICAgICBkaXNwbGF5LmV4dGVybmFsTWVhc3Vy
ZWQgPSBudWxsOworCisgICAgaWYgKGxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8IGxpbmUgPj0g
ZGlzcGxheS52aWV3VG8pIHJldHVybjsKKyAgICB2YXIgbGluZVZpZXcgPSBkaXNwbGF5LnZpZXdb
ZmluZFZpZXdJbmRleChjbSwgbGluZSldOworICAgIGlmIChsaW5lVmlldy5ub2RlID09IG51bGwp
IHJldHVybjsKKyAgICB2YXIgYXJyID0gbGluZVZpZXcuY2hhbmdlcyB8fCAobGluZVZpZXcuY2hh
bmdlcyA9IFtdKTsKKyAgICBpZiAoaW5kZXhPZihhcnIsIHR5cGUpID09IC0xKSBhcnIucHVzaCh0
eXBlKTsKKyAgfQorCisgIC8vIENsZWFyIHRoZSB2aWV3LgorICBmdW5jdGlvbiByZXNldFZpZXco
Y20pIHsKKyAgICBjbS5kaXNwbGF5LnZpZXdGcm9tID0gY20uZGlzcGxheS52aWV3VG8gPSBjbS5k
b2MuZmlyc3Q7CisgICAgY20uZGlzcGxheS52aWV3ID0gW107CisgICAgY20uZGlzcGxheS52aWV3
T2Zmc2V0ID0gMDsKKyAgfQorCisgIC8vIEZpbmQgdGhlIHZpZXcgZWxlbWVudCBjb3JyZXNwb25k
aW5nIHRvIGEgZ2l2ZW4gbGluZS4gUmV0dXJuIG51bGwKKyAgLy8gd2hlbiB0aGUgbGluZSBpc24n
dCB2aXNpYmxlLgorICBmdW5jdGlvbiBmaW5kVmlld0luZGV4KGNtLCBuKSB7CisgICAgaWYgKG4g
Pj0gY20uZGlzcGxheS52aWV3VG8pIHJldHVybiBudWxsOworICAgIG4gLT0gY20uZGlzcGxheS52
aWV3RnJvbTsKKyAgICBpZiAobiA8IDApIHJldHVybiBudWxsOworICAgIHZhciB2aWV3ID0gY20u
ZGlzcGxheS52aWV3OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykg
eworICAgICAgbiAtPSB2aWV3W2ldLnNpemU7CisgICAgICBpZiAobiA8IDApIHJldHVybiBpOwor
ICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHZpZXdDdXR0aW5nUG9pbnQoY20sIG9sZE4sIG5ld04s
IGRpcikgeworICAgIHZhciBpbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIG9sZE4pLCBkaWZmLCB2
aWV3ID0gY20uZGlzcGxheS52aWV3OworICAgIGlmICghc2F3Q29sbGFwc2VkU3BhbnMpIHJldHVy
biB7aW5kZXg6IGluZGV4LCBsaW5lTjogbmV3Tn07CisgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBj
bS5kaXNwbGF5LnZpZXdGcm9tOyBpIDwgaW5kZXg7IGkrKykKKyAgICAgIG4gKz0gdmlld1tpXS5z
aXplOworICAgIGlmIChuICE9IG9sZE4pIHsKKyAgICAgIGlmIChkaXIgPiAwKSB7CisgICAgICAg
IGlmIChpbmRleCA9PSB2aWV3Lmxlbmd0aCAtIDEpIHJldHVybiBudWxsOworICAgICAgICBkaWZm
ID0gKG4gKyB2aWV3W2luZGV4XS5zaXplKSAtIG9sZE47CisgICAgICAgIGluZGV4Kys7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBkaWZmID0gbiAtIG9sZE47CisgICAgICB9CisgICAgICBvbGRO
ICs9IGRpZmY7IG5ld04gKz0gZGlmZjsKKyAgICB9CisgICAgd2hpbGUgKHZpc3VhbExpbmVObyhj
bS5kb2MsIG5ld04pICE9IG5ld04pIHsKKyAgICAgIGlmIChpbmRleCA9PSAoZGlyIDwgMCA/IDAg
OiB2aWV3Lmxlbmd0aCAtIDEpKSByZXR1cm4gbnVsbDsKKyAgICAgIG5ld04gKz0gZGlyICogdmll
d1tpbmRleCAtIChkaXIgPCAwID8gMSA6IDApXS5zaXplOworICAgICAgaW5kZXggKz0gZGlyOwor
ICAgIH0KKyAgICByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059OworICB9CisKKyAg
Ly8gRm9yY2UgdGhlIHZpZXcgdG8gY292ZXIgYSBnaXZlbiByYW5nZSwgYWRkaW5nIGVtcHR5IHZp
ZXcgZWxlbWVudAorICAvLyBvciBjbGlwcGluZyBvZmYgZXhpc3Rpbmcgb25lcyBhcyBuZWVkZWQu
CisgIGZ1bmN0aW9uIGFkanVzdFZpZXcoY20sIGZyb20sIHRvKSB7CisgICAgdmFyIGRpc3BsYXkg
PSBjbS5kaXNwbGF5LCB2aWV3ID0gZGlzcGxheS52aWV3OworICAgIGlmICh2aWV3Lmxlbmd0aCA9
PSAwIHx8IGZyb20gPj0gZGlzcGxheS52aWV3VG8gfHwgdG8gPD0gZGlzcGxheS52aWV3RnJvbSkg
eworICAgICAgZGlzcGxheS52aWV3ID0gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIHRvKTsKKyAg
ICAgIGRpc3BsYXkudmlld0Zyb20gPSBmcm9tOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoZGlz
cGxheS52aWV3RnJvbSA+IGZyb20pCisgICAgICAgIGRpc3BsYXkudmlldyA9IGJ1aWxkVmlld0Fy
cmF5KGNtLCBmcm9tLCBkaXNwbGF5LnZpZXdGcm9tKS5jb25jYXQoZGlzcGxheS52aWV3KTsKKyAg
ICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld0Zyb20gPCBmcm9tKQorICAgICAgICBkaXNwbGF5LnZp
ZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoZmluZFZpZXdJbmRleChjbSwgZnJvbSkpOworICAgICAg
ZGlzcGxheS52aWV3RnJvbSA9IGZyb207CisgICAgICBpZiAoZGlzcGxheS52aWV3VG8gPCB0bykK
KyAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LmNvbmNhdChidWlsZFZpZXdBcnJh
eShjbSwgZGlzcGxheS52aWV3VG8sIHRvKSk7CisgICAgICBlbHNlIGlmIChkaXNwbGF5LnZpZXdU
byA+IHRvKQorICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgZmlu
ZFZpZXdJbmRleChjbSwgdG8pKTsKKyAgICB9CisgICAgZGlzcGxheS52aWV3VG8gPSB0bzsKKyAg
fQorCisgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHZpZXcgd2hvc2UgRE9N
IHJlcHJlc2VudGF0aW9uIGlzCisgIC8vIG91dCBvZiBkYXRlIChvciBub25leGlzdGVudCkuCisg
IGZ1bmN0aW9uIGNvdW50RGlydHlWaWV3KGNtKSB7CisgICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5
LnZpZXcsIGRpcnR5ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBp
KyspIHsKKyAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07CisgICAgICBpZiAoIWxpbmVWaWV3
LmhpZGRlbiAmJiAoIWxpbmVWaWV3Lm5vZGUgfHwgbGluZVZpZXcuY2hhbmdlcykpICsrZGlydHk7
CisgICAgfQorICAgIHJldHVybiBkaXJ0eTsKICAgfQoKICAgLy8gSU5QVVQgSEFORExJTkcKCisg
IC8vIFBvbGwgZm9yIGlucHV0IGNoYW5nZXMsIHVzaW5nIHRoZSBub3JtYWwgcmF0ZSBvZiBwb2xs
aW5nLiBUaGlzCisgIC8vIHJ1bnMgYXMgbG9uZyBhcyB0aGUgZWRpdG9yIGlzIGZvY3VzZWQuCiAg
IGZ1bmN0aW9uIHNsb3dQb2xsKGNtKSB7CiAgICAgaWYgKGNtLmRpc3BsYXkucG9sbGluZ0Zhc3Qp
IHJldHVybjsKICAgICBjbS5kaXNwbGF5LnBvbGwuc2V0KGNtLm9wdGlvbnMucG9sbEludGVydmFs
LCBmdW5jdGlvbigpIHsKQEAgLTE0NjMsNiArMjE5OCw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgIH0pOwogICB9CgorICAvLyBXaGVuIGFuIGV2ZW50IGhhcyBqdXN0
IGNvbWUgaW4gdGhhdCBpcyBsaWtlbHkgdG8gYWRkIG9yIGNoYW5nZQorICAvLyBzb21ldGhpbmcg
aW4gdGhlIGlucHV0IHRleHRhcmVhLCB3ZSBwb2xsIGZhc3RlciwgdG8gZW5zdXJlIHRoYXQKKyAg
Ly8gdGhlIGNoYW5nZSBhcHBlYXJzIG9uIHRoZSBzY3JlZW4gcXVpY2tseS4KICAgZnVuY3Rpb24g
ZmFzdFBvbGwoY20pIHsKICAgICB2YXIgbWlzc2VkID0gZmFsc2U7CiAgICAgY20uZGlzcGxheS5w
b2xsaW5nRmFzdCA9IHRydWU7CkBAIC0xNDc0LDEwMCArMjIxMiwxNDcgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgY20uZGlzcGxheS5wb2xsLnNldCgyMCwgcCk7CiAg
IH0KCi0gIC8vIHByZXZJbnB1dCBpcyBhIGhhY2sgdG8gd29yayB3aXRoIElNRS4gSWYgd2UgcmVz
ZXQgdGhlIHRleHRhcmVhCi0gIC8vIG9uIGV2ZXJ5IGNoYW5nZSwgdGhhdCBicmVha3MgSU1FLiBT
byB3ZSBsb29rIGZvciBjaGFuZ2VzCi0gIC8vIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBjb250
ZW50IGluc3RlYWQuIChNb2Rlcm4gYnJvd3NlcnMgaGF2ZQotICAvLyBldmVudHMgdGhhdCBpbmRp
Y2F0ZSBJTUUgdGFraW5nIHBsYWNlLCBidXQgdGhlc2UgYXJlIG5vdCB3aWRlbHkKLSAgLy8gc3Vw
cG9ydGVkIG9yIGNvbXBhdGlibGUgZW5vdWdoIHlldCB0byByZWx5IG9uLikKKyAgLy8gUmVhZCBp
bnB1dCBmcm9tIHRoZSB0ZXh0YXJlYSwgYW5kIHVwZGF0ZSB0aGUgZG9jdW1lbnQgdG8gbWF0Y2gu
CisgIC8vIFdoZW4gc29tZXRoaW5nIGlzIHNlbGVjdGVkLCBpdCBpcyBwcmVzZW50IGluIHRoZSB0
ZXh0YXJlYSwgYW5kCisgIC8vIHNlbGVjdGVkICh1bmxlc3MgaXQgaXMgaHVnZSwgaW4gd2hpY2gg
Y2FzZSBhIHBsYWNlaG9sZGVyIGlzCisgIC8vIHVzZWQpLiBXaGVuIG5vdGhpbmcgaXMgc2VsZWN0
ZWQsIHRoZSBjdXJzb3Igc2l0cyBhZnRlciBwcmV2aW91c2x5CisgIC8vIHNlZW4gdGV4dCAoY2Fu
IGJlIGVtcHR5KSwgd2hpY2ggaXMgc3RvcmVkIGluIHByZXZJbnB1dCAod2UgbXVzdAorICAvLyBu
b3QgcmVzZXQgdGhlIHRleHRhcmVhIHdoZW4gdHlwaW5nLCBiZWNhdXNlIHRoYXQgYnJlYWtzIElN
RSkuCiAgIGZ1bmN0aW9uIHJlYWRJbnB1dChjbSkgewotICAgIHZhciBpbnB1dCA9IGNtLmRpc3Bs
YXkuaW5wdXQsIHByZXZJbnB1dCA9IGNtLmRpc3BsYXkucHJldklucHV0LCBkb2MgPSBjbS5kb2Ms
IHNlbCA9IGRvYy5zZWw7Ci0gICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkIHx8IGhhc1NlbGVjdGlv
bihpbnB1dCkgfHwgaXNSZWFkT25seShjbSkgfHwgY20uc3RhdGUuZGlzYWJsZUlucHV0KSByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgJiYgY20uc3RhdGUuZmFr
ZWRMYXN0Q2hhcikgewotICAgICAgaW5wdXQudmFsdWUgPSBpbnB1dC52YWx1ZS5zdWJzdHJpbmco
MCwgaW5wdXQudmFsdWUubGVuZ3RoIC0gMSk7Ci0gICAgICBjbS5zdGF0ZS5mYWtlZExhc3RDaGFy
ID0gZmFsc2U7Ci0gICAgfQorICAgIHZhciBpbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQsIHByZXZJ
bnB1dCA9IGNtLmRpc3BsYXkucHJldklucHV0LCBkb2MgPSBjbS5kb2M7CisgICAgLy8gU2luY2Ug
dGhpcyBpcyBjYWxsZWQgYSAqbG90KiwgdHJ5IHRvIGJhaWwgb3V0IGFzIGNoZWFwbHkgYXMKKyAg
ICAvLyBwb3NzaWJsZSB3aGVuIGl0IGlzIGNsZWFyIHRoYXQgbm90aGluZyBoYXBwZW5lZC4gaGFz
U2VsZWN0aW9uCisgICAgLy8gd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGEgbG90IG9m
IHRleHQgaW4gdGhlIHRleHRhcmVhLAorICAgIC8vIGluIHdoaWNoIGNhc2UgcmVhZGluZyBpdHMg
dmFsdWUgd291bGQgYmUgZXhwZW5zaXZlLgorICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCB8fCBo
YXNTZWxlY3Rpb24oaW5wdXQpIHx8IGlzUmVhZE9ubHkoY20pIHx8IGNtLm9wdGlvbnMuZGlzYWJs
ZUlucHV0KSByZXR1cm4gZmFsc2U7CiAgICAgdmFyIHRleHQgPSBpbnB1dC52YWx1ZTsKLSAgICBp
ZiAodGV4dCA9PSBwcmV2SW5wdXQgJiYgcG9zRXEoc2VsLmZyb20sIHNlbC50bykpIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoaWUgJiYgIWllX2x0OSAmJiBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0
aW9uID09PSB0ZXh0KSB7Ci0gICAgICByZXNldElucHV0KGNtLCB0cnVlKTsKKyAgICAvLyBJZiBu
b3RoaW5nIGNoYW5nZWQsIGJhaWwuCisgICAgaWYgKHRleHQgPT0gcHJldklucHV0ICYmICFjbS5z
b21ldGhpbmdTZWxlY3RlZCgpKSByZXR1cm4gZmFsc2U7CisgICAgLy8gV29yayBhcm91bmQgbm9u
c2Vuc2ljYWwgc2VsZWN0aW9uIHJlc2V0dGluZyBpbiBJRTkvMTAKKyAgICBpZiAoaWUgJiYgIWll
X3VwdG84ICYmIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPT09IHRleHQpIHsKKyAgICAg
IHJlc2V0SW5wdXQoY20pOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KCiAgICAgdmFyIHdp
dGhPcCA9ICFjbS5jdXJPcDsKICAgICBpZiAod2l0aE9wKSBzdGFydE9wZXJhdGlvbihjbSk7Ci0g
ICAgc2VsLnNoaWZ0ID0gZmFsc2U7CisgICAgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlOworCisg
ICAgLy8gRmluZCB0aGUgcGFydCBvZiB0aGUgaW5wdXQgdGhhdCBpcyBhY3R1YWxseSBuZXcKICAg
ICB2YXIgc2FtZSA9IDAsIGwgPSBNYXRoLm1pbihwcmV2SW5wdXQubGVuZ3RoLCB0ZXh0Lmxlbmd0
aCk7CiAgICAgd2hpbGUgKHNhbWUgPCBsICYmIHByZXZJbnB1dC5jaGFyQ29kZUF0KHNhbWUpID09
IHRleHQuY2hhckNvZGVBdChzYW1lKSkgKytzYW1lOwotICAgIHZhciBmcm9tID0gc2VsLmZyb20s
IHRvID0gc2VsLnRvOwotICAgIGlmIChzYW1lIDwgcHJldklucHV0Lmxlbmd0aCkKLSAgICAgIGZy
b20gPSBQb3MoZnJvbS5saW5lLCBmcm9tLmNoIC0gKHByZXZJbnB1dC5sZW5ndGggLSBzYW1lKSk7
Ci0gICAgZWxzZSBpZiAoY20uc3RhdGUub3ZlcndyaXRlICYmIHBvc0VxKGZyb20sIHRvKSAmJiAh
Y20uc3RhdGUucGFzdGVJbmNvbWluZykKLSAgICAgIHRvID0gUG9zKHRvLmxpbmUsIE1hdGgubWlu
KGdldExpbmUoZG9jLCB0by5saW5lKS50ZXh0Lmxlbmd0aCwgdG8uY2ggKyAodGV4dC5sZW5ndGgg
LSBzYW1lKSkpOwotCi0gICAgdmFyIHVwZGF0ZUlucHV0ID0gY20uY3VyT3AudXBkYXRlSW5wdXQ7
Ci0gICAgdmFyIGNoYW5nZUV2ZW50ID0ge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogc3BsaXRM
aW5lcyh0ZXh0LnNsaWNlKHNhbWUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBj
bS5zdGF0ZS5wYXN0ZUluY29taW5nID8gInBhc3RlIiA6ICIraW5wdXQifTsKLSAgICBtYWtlQ2hh
bmdlKGNtLmRvYywgY2hhbmdlRXZlbnQsICJlbmQiKTsKKyAgICB2YXIgaW5zZXJ0ZWQgPSB0ZXh0
LnNsaWNlKHNhbWUpLCB0ZXh0TGluZXMgPSBzcGxpdExpbmVzKGluc2VydGVkKTsKKworICAgIC8v
IFdoZW4gcGFzaW5nIE4gbGluZXMgaW50byBOIHNlbGVjdGlvbnMsIGluc2VydCBvbmUgbGluZSBw
ZXIgc2VsZWN0aW9uCisgICAgdmFyIG11bHRpUGFzdGUgPSBjbS5zdGF0ZS5wYXN0ZUluY29taW5n
ICYmIHRleHRMaW5lcy5sZW5ndGggPiAxICYmIGRvYy5zZWwucmFuZ2VzLmxlbmd0aCA9PSB0ZXh0
TGluZXMubGVuZ3RoOworCisgICAgLy8gTm9ybWFsIGJlaGF2aW9yIGlzIHRvIGluc2VydCB0aGUg
bmV3IHRleHQgaW50byBldmVyeSBzZWxlY3Rpb24KKyAgICBmb3IgKHZhciBpID0gZG9jLnNlbC5y
YW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgIHZhciByYW5nZSA9IGRvYy5z
ZWwucmFuZ2VzW2ldOworICAgICAgdmFyIGZyb20gPSByYW5nZS5mcm9tKCksIHRvID0gcmFuZ2Uu
dG8oKTsKKyAgICAgIC8vIEhhbmRsZSBkZWxldGlvbgorICAgICAgaWYgKHNhbWUgPCBwcmV2SW5w
dXQubGVuZ3RoKQorICAgICAgICBmcm9tID0gUG9zKGZyb20ubGluZSwgZnJvbS5jaCAtIChwcmV2
SW5wdXQubGVuZ3RoIC0gc2FtZSkpOworICAgICAgLy8gSGFuZGxlIG92ZXJ3cml0ZQorICAgICAg
ZWxzZSBpZiAoY20uc3RhdGUub3ZlcndyaXRlICYmIHJhbmdlLmVtcHR5KCkgJiYgIWNtLnN0YXRl
LnBhc3RlSW5jb21pbmcpCisgICAgICAgIHRvID0gUG9zKHRvLmxpbmUsIE1hdGgubWluKGdldExp
bmUoZG9jLCB0by5saW5lKS50ZXh0Lmxlbmd0aCwgdG8uY2ggKyBsc3QodGV4dExpbmVzKS5sZW5n
dGgpKTsKKyAgICAgIHZhciB1cGRhdGVJbnB1dCA9IGNtLmN1ck9wLnVwZGF0ZUlucHV0OworICAg
ICAgdmFyIGNoYW5nZUV2ZW50ID0ge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogbXVsdGlQYXN0
ZSA/IFt0ZXh0TGluZXNbaV1dIDogdGV4dExpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
IG9yaWdpbjogY20uc3RhdGUucGFzdGVJbmNvbWluZyA/ICJwYXN0ZSIgOiBjbS5zdGF0ZS5jdXRJ
bmNvbWluZyA/ICJjdXQiIDogIitpbnB1dCJ9OworICAgICAgbWFrZUNoYW5nZShjbS5kb2MsIGNo
YW5nZUV2ZW50KTsKKyAgICAgIHNpZ25hbExhdGVyKGNtLCAiaW5wdXRSZWFkIiwgY20sIGNoYW5n
ZUV2ZW50KTsKKyAgICAgIC8vIFdoZW4gYW4gJ2VsZWN0cmljJyBjaGFyYWN0ZXIgaXMgaW5zZXJ0
ZWQsIGltbWVkaWF0ZWx5IHRyaWdnZXIgYSByZWluZGVudAorICAgICAgaWYgKGluc2VydGVkICYm
ICFjbS5zdGF0ZS5wYXN0ZUluY29taW5nICYmIGNtLm9wdGlvbnMuZWxlY3RyaWNDaGFycyAmJgor
ICAgICAgICAgIGNtLm9wdGlvbnMuc21hcnRJbmRlbnQgJiYgcmFuZ2UuaGVhZC5jaCA8IDEwMCAm
JgorICAgICAgICAgICghaSB8fCBkb2Muc2VsLnJhbmdlc1tpIC0gMV0uaGVhZC5saW5lICE9IHJh
bmdlLmhlYWQubGluZSkpIHsKKyAgICAgICAgdmFyIG1vZGUgPSBjbS5nZXRNb2RlQXQocmFuZ2Uu
aGVhZCk7CisgICAgICAgIGlmIChtb2RlLmVsZWN0cmljQ2hhcnMpIHsKKyAgICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IG1vZGUuZWxlY3RyaWNDaGFycy5sZW5ndGg7IGorKykKKyAgICAgICAg
ICAgIGlmIChpbnNlcnRlZC5pbmRleE9mKG1vZGUuZWxlY3RyaWNDaGFycy5jaGFyQXQoaikpID4g
LTEpIHsKKyAgICAgICAgICAgICAgaW5kZW50TGluZShjbSwgcmFuZ2UuaGVhZC5saW5lLCAic21h
cnQiKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAobW9kZS5lbGVjdHJpY0lucHV0KSB7CisgICAgICAgICAgdmFyIGVuZCA9IGNoYW5nZUVu
ZChjaGFuZ2VFdmVudCk7CisgICAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNJbnB1dC50ZXN0KGdl
dExpbmUoZG9jLCBlbmQubGluZSkudGV4dC5zbGljZSgwLCBlbmQuY2gpKSkKKyAgICAgICAgICAg
IGluZGVudExpbmUoY20sIHJhbmdlLmhlYWQubGluZSwgInNtYXJ0Iik7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICB9CisgICAgZW5zdXJlQ3Vyc29yVmlzaWJsZShjbSk7CiAgICAgY20uY3VyT3Au
dXBkYXRlSW5wdXQgPSB1cGRhdGVJbnB1dDsKLSAgICBzaWduYWxMYXRlcihjbSwgImlucHV0UmVh
ZCIsIGNtLCBjaGFuZ2VFdmVudCk7CisgICAgY20uY3VyT3AudHlwaW5nID0gdHJ1ZTsKCisgICAg
Ly8gRG9uJ3QgbGVhdmUgbG9uZyB0ZXh0IGluIHRoZSB0ZXh0YXJlYSwgc2luY2UgaXQgbWFrZXMg
ZnVydGhlciBwb2xsaW5nIHNsb3cKICAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwIHx8IHRleHQu
aW5kZXhPZigiXG4iKSA+IC0xKSBpbnB1dC52YWx1ZSA9IGNtLmRpc3BsYXkucHJldklucHV0ID0g
IiI7CiAgICAgZWxzZSBjbS5kaXNwbGF5LnByZXZJbnB1dCA9IHRleHQ7CiAgICAgaWYgKHdpdGhP
cCkgZW5kT3BlcmF0aW9uKGNtKTsKLSAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gZmFsc2U7
CisgICAgY20uc3RhdGUucGFzdGVJbmNvbWluZyA9IGNtLnN0YXRlLmN1dEluY29taW5nID0gZmFs
c2U7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KCi0gIGZ1bmN0aW9uIHJlc2V0SW5wdXQoY20sIHVz
ZXIpIHsKKyAgLy8gUmVzZXQgdGhlIGlucHV0IHRvIGNvcnJlc3BvbmQgdG8gdGhlIHNlbGVjdGlv
biAob3IgdG8gYmUgZW1wdHksCisgIC8vIHdoZW4gbm90IHR5cGluZyBhbmQgbm90aGluZyBpcyBz
ZWxlY3RlZCkKKyAgZnVuY3Rpb24gcmVzZXRJbnB1dChjbSwgdHlwaW5nKSB7CiAgICAgdmFyIG1p
bmltYWwsIHNlbGVjdGVkLCBkb2MgPSBjbS5kb2M7Ci0gICAgaWYgKCFwb3NFcShkb2Muc2VsLmZy
b20sIGRvYy5zZWwudG8pKSB7CisgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsKICAg
ICAgIGNtLmRpc3BsYXkucHJldklucHV0ID0gIiI7CisgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2Vs
LnByaW1hcnkoKTsKICAgICAgIG1pbmltYWwgPSBoYXNDb3B5RXZlbnQgJiYKLSAgICAgICAgKGRv
Yy5zZWwudG8ubGluZSAtIGRvYy5zZWwuZnJvbS5saW5lID4gMTAwIHx8IChzZWxlY3RlZCA9IGNt
LmdldFNlbGVjdGlvbigpKS5sZW5ndGggPiAxMDAwKTsKKyAgICAgICAgKHJhbmdlLnRvKCkubGlu
ZSAtIHJhbmdlLmZyb20oKS5saW5lID4gMTAwIHx8IChzZWxlY3RlZCA9IGNtLmdldFNlbGVjdGlv
bigpKS5sZW5ndGggPiAxMDAwKTsKICAgICAgIHZhciBjb250ZW50ID0gbWluaW1hbCA/ICItIiA6
IHNlbGVjdGVkIHx8IGNtLmdldFNlbGVjdGlvbigpOwogICAgICAgY20uZGlzcGxheS5pbnB1dC52
YWx1ZSA9IGNvbnRlbnQ7CiAgICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgc2VsZWN0SW5wdXQo
Y20uZGlzcGxheS5pbnB1dCk7Ci0gICAgICBpZiAoaWUgJiYgIWllX2x0OSkgY20uZGlzcGxheS5p
bnB1dEhhc1NlbGVjdGlvbiA9IGNvbnRlbnQ7Ci0gICAgfSBlbHNlIGlmICh1c2VyKSB7CisgICAg
ICBpZiAoaWUgJiYgIWllX3VwdG84KSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gY29u
dGVudDsKKyAgICB9IGVsc2UgaWYgKCF0eXBpbmcpIHsKICAgICAgIGNtLmRpc3BsYXkucHJldklu
cHV0ID0gY20uZGlzcGxheS5pbnB1dC52YWx1ZSA9ICIiOwotICAgICAgaWYgKGllICYmICFpZV9s
dDkpIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOworICAgICAgaWYgKGllICYm
ICFpZV91cHRvOCkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IG51bGw7CiAgICAgfQog
ICAgIGNtLmRpc3BsYXkuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IG1pbmltYWw7CiAgIH0KCiAgIGZ1
bmN0aW9uIGZvY3VzSW5wdXQoY20pIHsKLSAgICBpZiAoY20ub3B0aW9ucy5yZWFkT25seSAhPSAi
bm9jdXJzb3IiICYmICghbW9iaWxlIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT0gY20uZGlz
cGxheS5pbnB1dCkpCisgICAgaWYgKGNtLm9wdGlvbnMucmVhZE9ubHkgIT0gIm5vY3Vyc29yIiAm
JiAoIW1vYmlsZSB8fCBhY3RpdmVFbHQoKSAhPSBjbS5kaXNwbGF5LmlucHV0KSkKICAgICAgIGNt
LmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsKICAgfQoKKyAgZnVuY3Rpb24gZW5zdXJlRm9jdXMoY20p
IHsKKyAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgZm9jdXNJbnB1dChjbSk7IG9uRm9jdXMo
Y20pOyB9CisgIH0KKwogICBmdW5jdGlvbiBpc1JlYWRPbmx5KGNtKSB7CiAgICAgcmV0dXJuIGNt
Lm9wdGlvbnMucmVhZE9ubHkgfHwgY20uZG9jLmNhbnRFZGl0OwogICB9CgogICAvLyBFVkVOVCBI
QU5ETEVSUwoKKyAgLy8gQXR0YWNoIHRoZSBuZWNlc3NhcnkgZXZlbnQgaGFuZGxlcnMgd2hlbiBp
bml0aWFsaXppbmcgdGhlIGVkaXRvcgogICBmdW5jdGlvbiByZWdpc3RlckV2ZW50SGFuZGxlcnMo
Y20pIHsKICAgICB2YXIgZCA9IGNtLmRpc3BsYXk7CiAgICAgb24oZC5zY3JvbGxlciwgIm1vdXNl
ZG93biIsIG9wZXJhdGlvbihjbSwgb25Nb3VzZURvd24pKTsKLSAgICBpZiAoaWUpCisgICAgLy8g
T2xkZXIgSUUncyB3aWxsIG5vdCBmaXJlIGEgc2Vjb25kIG1vdXNlZG93biBmb3IgYSBkb3VibGUg
Y2xpY2sKKyAgICBpZiAoaWVfdXB0bzEwKQogICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNr
Iiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7CiAgICAgICAgIGlmIChzaWduYWxET01FdmVu
dChjbSwgZSkpIHJldHVybjsKICAgICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7
CiAgICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2ZW50SW5XaWRn
ZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKICAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsK
LSAgICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGdldExpbmUoY20uZG9jLCBwb3MubGluZSku
dGV4dCwgcG9zKTsKLSAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5mcm9tLCB3
b3JkLnRvKTsKKyAgICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGNtLmRvYywgcG9zKTsKKyAg
ICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5hbmNob3IsIHdvcmQuaGVhZCk7CiAg
ICAgICB9KSk7CiAgICAgZWxzZQogICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwgZnVu
Y3Rpb24oZSkgeyBzaWduYWxET01FdmVudChjbSwgZSkgfHwgZV9wcmV2ZW50RGVmYXVsdChlKTsg
fSk7CisgICAgLy8gUHJldmVudCBub3JtYWwgc2VsZWN0aW9uIGluIHRoZSBlZGl0b3IgKHdlIGhh
bmRsZSBvdXIgb3duKQogICAgIG9uKGQubGluZVNwYWNlLCAic2VsZWN0c3RhcnQiLCBmdW5jdGlv
bihlKSB7CiAgICAgICBpZiAoIWV2ZW50SW5XaWRnZXQoZCwgZSkpIGVfcHJldmVudERlZmF1bHQo
ZSk7CiAgICAgfSk7Ci0gICAgLy8gR2Vja28gYnJvd3NlcnMgZmlyZSBjb250ZXh0bWVudSAqYWZ0
ZXIqIG9wZW5pbmcgdGhlIG1lbnUsIGF0CisgICAgLy8gU29tZSBicm93c2VycyBmaXJlIGNvbnRl
eHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXQKICAgICAvLyB3aGljaCBwb2ludCB3
ZSBjYW4ndCBtZXNzIHdpdGggaXQgYW55bW9yZS4gQ29udGV4dCBtZW51IGlzCi0gICAgLy8gaGFu
ZGxlZCBpbiBvbk1vdXNlRG93biBmb3IgR2Vja28uCi0gICAgaWYgKCFjYXB0dXJlTWlkZGxlQ2xp
Y2spIG9uKGQuc2Nyb2xsZXIsICJjb250ZXh0bWVudSIsIGZ1bmN0aW9uKGUpIHtvbkNvbnRleHRN
ZW51KGNtLCBlKTt9KTsKKyAgICAvLyBoYW5kbGVkIGluIG9uTW91c2VEb3duIGZvciB0aGVzZSBi
cm93c2Vycy4KKyAgICBpZiAoIWNhcHR1cmVSaWdodENsaWNrKSBvbihkLnNjcm9sbGVyLCAiY29u
dGV4dG1lbnUiLCBmdW5jdGlvbihlKSB7b25Db250ZXh0TWVudShjbSwgZSk7fSk7CgorICAgIC8v
IFN5bmMgc2Nyb2xsaW5nIGJldHdlZW4gZmFrZSBzY3JvbGxiYXJzIGFuZCByZWFsIHNjcm9sbGFi
bGUKKyAgICAvLyBhcmVhLCBlbnN1cmUgdmlld3BvcnQgaXMgdXBkYXRlZCB3aGVuIHNjcm9sbGlu
Zy4KICAgICBvbihkLnNjcm9sbGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CiAgICAgICBpZiAo
ZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHsKICAgICAgICAgc2V0U2Nyb2xsVG9wKGNtLCBkLnNj
cm9sbGVyLnNjcm9sbFRvcCk7CkBAIC0xNTgyLDQyICsyMzY3LDQwIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSBz
ZXRTY3JvbGxMZWZ0KGNtLCBkLnNjcm9sbGJhckguc2Nyb2xsTGVmdCk7CiAgICAgfSk7CgorICAg
IC8vIExpc3RlbiB0byB3aGVlbCBldmVudHMgaW4gb3JkZXIgdG8gdHJ5IGFuZCB1cGRhdGUgdGhl
IHZpZXdwb3J0IG9uIHRpbWUuCiAgICAgb24oZC5zY3JvbGxlciwgIm1vdXNld2hlZWwiLCBmdW5j
dGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKICAgICBvbihkLnNjcm9sbGVyLCAiRE9N
TW91c2VTY3JvbGwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKCisgICAg
Ly8gUHJldmVudCBjbGlja3MgaW4gdGhlIHNjcm9sbGJhcnMgZnJvbSBraWxsaW5nIGZvY3VzCiAg
ICAgZnVuY3Rpb24gcmVGb2N1cygpIHsgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHNldFRpbWVvdXQo
YmluZChmb2N1c0lucHV0LCBjbSksIDApOyB9CiAgICAgb24oZC5zY3JvbGxiYXJILCAibW91c2Vk
b3duIiwgcmVGb2N1cyk7CiAgICAgb24oZC5zY3JvbGxiYXJWLCAibW91c2Vkb3duIiwgcmVGb2N1
cyk7CiAgICAgLy8gUHJldmVudCB3cmFwcGVyIGZyb20gZXZlciBzY3JvbGxpbmcKICAgICBvbihk
LndyYXBwZXIsICJzY3JvbGwiLCBmdW5jdGlvbigpIHsgZC53cmFwcGVyLnNjcm9sbFRvcCA9IGQu
d3JhcHBlci5zY3JvbGxMZWZ0ID0gMDsgfSk7CgorICAgIC8vIFdoZW4gdGhlIHdpbmRvdyByZXNp
emVzLCB3ZSBuZWVkIHRvIHJlZnJlc2ggYWN0aXZlIGVkaXRvcnMuCiAgICAgdmFyIHJlc2l6ZVRp
bWVyOwogICAgIGZ1bmN0aW9uIG9uUmVzaXplKCkgewogICAgICAgaWYgKHJlc2l6ZVRpbWVyID09
IG51bGwpIHJlc2l6ZVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgcmVz
aXplVGltZXIgPSBudWxsOwogICAgICAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGluZyBvcGVy
YXRpb24sIGNsZWFyIHNpemUgY2FjaGVzLgotICAgICAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQu
Y2FjaGVkVGV4dEhlaWdodCA9IGtub3duU2Nyb2xsYmFyV2lkdGggPSBudWxsOwotICAgICAgICBj
bGVhckNhY2hlcyhjbSk7Ci0gICAgICAgIHJ1bkluT3AoY20sIGJpbmQocmVnQ2hhbmdlLCBjbSkp
OworICAgICAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQuY2Fj
aGVkUGFkZGluZ0ggPSBrbm93blNjcm9sbGJhcldpZHRoID0gbnVsbDsKKyAgICAgICAgY20uc2V0
U2l6ZSgpOwogICAgICAgfSwgMTAwKTsKICAgICB9CiAgICAgb24od2luZG93LCAicmVzaXplIiwg
b25SZXNpemUpOwotICAgIC8vIEFib3ZlIGhhbmRsZXIgaG9sZHMgb24gdG8gdGhlIGVkaXRvciBh
bmQgaXRzIGRhdGEgc3RydWN0dXJlcy4KLSAgICAvLyBIZXJlIHdlIHBvbGwgdG8gdW5yZWdpc3Rl
ciBpdCB3aGVuIHRoZSBlZGl0b3IgaXMgbm8gbG9uZ2VyIGluCi0gICAgLy8gdGhlIGRvY3VtZW50
LCBzbyB0aGF0IGl0IGNhbiBiZSBnYXJiYWdlLWNvbGxlY3RlZC4KKyAgICAvLyBUaGUgYWJvdmUg
aGFuZGxlciBob2xkcyBvbiB0byB0aGUgZWRpdG9yIGFuZCBpdHMgZGF0YQorICAgIC8vIHN0cnVj
dHVyZXMuIEhlcmUgd2UgcG9sbCB0byB1bnJlZ2lzdGVyIGl0IHdoZW4gdGhlIGVkaXRvciBpcyBu
bworICAgIC8vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQsIHNvIHRoYXQgaXQgY2FuIGJlIGdhcmJh
Z2UtY29sbGVjdGVkLgogICAgIGZ1bmN0aW9uIHVucmVnaXN0ZXIoKSB7Ci0gICAgICBmb3IgKHZh
ciBwID0gZC53cmFwcGVyLnBhcmVudE5vZGU7IHAgJiYgcCAhPSBkb2N1bWVudC5ib2R5OyBwID0g
cC5wYXJlbnROb2RlKSB7fQotICAgICAgaWYgKHApIHNldFRpbWVvdXQodW5yZWdpc3RlciwgNTAw
MCk7CisgICAgICBpZiAoY29udGFpbnMoZG9jdW1lbnQuYm9keSwgZC53cmFwcGVyKSkgc2V0VGlt
ZW91dCh1bnJlZ2lzdGVyLCA1MDAwKTsKICAgICAgIGVsc2Ugb2ZmKHdpbmRvdywgInJlc2l6ZSIs
IG9uUmVzaXplKTsKICAgICB9CiAgICAgc2V0VGltZW91dCh1bnJlZ2lzdGVyLCA1MDAwKTsKCi0g
ICAgb24oZC5pbnB1dCwgImtleXVwIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7Ci0gICAg
ICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGNtLm9wdGlvbnMub25LZXlFdmVudCAmJiBj
bS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47Ci0gICAgICBpZiAo
ZS5rZXlDb2RlID09IDE2KSBjbS5kb2Muc2VsLnNoaWZ0ID0gZmFsc2U7Ci0gICAgfSkpOworICAg
IG9uKGQuaW5wdXQsICJrZXl1cCIsIG9wZXJhdGlvbihjbSwgb25LZXlVcCkpOwogICAgIG9uKGQu
aW5wdXQsICJpbnB1dCIsIGZ1bmN0aW9uKCkgewotICAgICAgaWYgKGllICYmICFpZV9sdDkgJiYg
Y20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbikgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlv
biA9IG51bGw7CisgICAgICBpZiAoaWUgJiYgIWllX3VwdG84ICYmIGNtLmRpc3BsYXkuaW5wdXRI
YXNTZWxlY3Rpb24pIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOwogICAgICAg
ZmFzdFBvbGwoY20pOwogICAgIH0pOwogICAgIG9uKGQuaW5wdXQsICJrZXlkb3duIiwgb3BlcmF0
aW9uKGNtLCBvbktleURvd24pKTsKQEAgLTE2MjYsOCArMjQwOSw3IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgIG9uKGQuaW5wdXQsICJibHVyIiwgYmluZChvbkJsdXIs
IGNtKSk7CgogICAgIGZ1bmN0aW9uIGRyYWdfKGUpIHsKLSAgICAgIGlmIChzaWduYWxET01FdmVu
dChjbSwgZSkgfHwgY20ub3B0aW9ucy5vbkRyYWdFdmVudCAmJiBjbS5vcHRpb25zLm9uRHJhZ0V2
ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwotICAgICAgZV9zdG9wKGUpOworICAgICAgaWYg
KCFzaWduYWxET01FdmVudChjbSwgZSkpIGVfc3RvcChlKTsKICAgICB9CiAgICAgaWYgKGNtLm9w
dGlvbnMuZHJhZ0Ryb3ApIHsKICAgICAgIG9uKGQuc2Nyb2xsZXIsICJkcmFnc3RhcnQiLCBmdW5j
dGlvbihlKXtvbkRyYWdTdGFydChjbSwgZSk7fSk7CkBAIC0xNjM3LDcwICsyNDE5LDk4IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAgICBvbihkLnNjcm9sbGVy
LCAicGFzdGUiLCBmdW5jdGlvbihlKSB7CiAgICAgICBpZiAoZXZlbnRJbldpZGdldChkLCBlKSkg
cmV0dXJuOworICAgICAgY20uc3RhdGUucGFzdGVJbmNvbWluZyA9IHRydWU7CiAgICAgICBmb2N1
c0lucHV0KGNtKTsKICAgICAgIGZhc3RQb2xsKGNtKTsKICAgICB9KTsKICAgICBvbihkLmlucHV0
LCAicGFzdGUiLCBmdW5jdGlvbigpIHsKLSAgICAgIC8vIFdvcmthcm91bmQgZm9yIHdlYmtpdCBi
dWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMjA2Ci0gICAgICAv
LyBBZGQgYSBjaGFyIHRvIHRoZSBlbmQgb2YgdGV4dGFyZWEgYmVmb3JlIHBhc3RlIG9jY3VyIHNv
IHRoYXQKLSAgICAgIC8vIHNlbGVjdGlvbiBkb2Vzbid0IHNwYW4gdG8gdGhlIGVuZCBvZiB0ZXh0
YXJlYS4KLSAgICAgIGlmICh3ZWJraXQgJiYgIWNtLnN0YXRlLmZha2VkTGFzdENoYXIgJiYgIShu
ZXcgRGF0ZSAtIGNtLnN0YXRlLmxhc3RNaWRkbGVEb3duIDwgMjAwKSkgewotICAgICAgICB2YXIg
c3RhcnQgPSBkLmlucHV0LnNlbGVjdGlvblN0YXJ0LCBlbmQgPSBkLmlucHV0LnNlbGVjdGlvbkVu
ZDsKLSAgICAgICAgZC5pbnB1dC52YWx1ZSArPSAiJCI7Ci0gICAgICAgIGQuaW5wdXQuc2VsZWN0
aW9uU3RhcnQgPSBzdGFydDsKLSAgICAgICAgZC5pbnB1dC5zZWxlY3Rpb25FbmQgPSBlbmQ7Ci0g
ICAgICAgIGNtLnN0YXRlLmZha2VkTGFzdENoYXIgPSB0cnVlOwotICAgICAgfQogICAgICAgY20u
c3RhdGUucGFzdGVJbmNvbWluZyA9IHRydWU7CiAgICAgICBmYXN0UG9sbChjbSk7CiAgICAgfSk7
CgotICAgIGZ1bmN0aW9uIHByZXBhcmVDb3B5KCkgewotICAgICAgaWYgKGQuaW5hY2N1cmF0ZVNl
bGVjdGlvbikgewotICAgICAgICBkLnByZXZJbnB1dCA9ICIiOwotICAgICAgICBkLmluYWNjdXJh
dGVTZWxlY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgZC5pbnB1dC52YWx1ZSA9IGNtLmdldFNlbGVj
dGlvbigpOwotICAgICAgICBzZWxlY3RJbnB1dChkLmlucHV0KTsKKyAgICBmdW5jdGlvbiBwcmVw
YXJlQ29weUN1dChlKSB7CisgICAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgeworICAg
ICAgICBpZiAoZC5pbmFjY3VyYXRlU2VsZWN0aW9uKSB7CisgICAgICAgICAgZC5wcmV2SW5wdXQg
PSAiIjsKKyAgICAgICAgICBkLmluYWNjdXJhdGVTZWxlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAg
ICBkLmlucHV0LnZhbHVlID0gY20uZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgc2VsZWN0SW5w
dXQoZC5pbnB1dCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciB0ZXh0
ID0gIiIsIHJhbmdlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRvYy5z
ZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgdmFyIGxpbmUgPSBjbS5kb2Muc2Vs
LnJhbmdlc1tpXS5oZWFkLmxpbmU7CisgICAgICAgICAgdmFyIGxpbmVSYW5nZSA9IHthbmNob3I6
IFBvcyhsaW5lLCAwKSwgaGVhZDogUG9zKGxpbmUgKyAxLCAwKX07CisgICAgICAgICAgcmFuZ2Vz
LnB1c2gobGluZVJhbmdlKTsKKyAgICAgICAgICB0ZXh0ICs9IGNtLmdldFJhbmdlKGxpbmVSYW5n
ZS5hbmNob3IsIGxpbmVSYW5nZS5oZWFkKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZS50eXBl
ID09ICJjdXQiKSB7CisgICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMsIG51bGwsIHNl
bF9kb250U2Nyb2xsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBkLnByZXZJbnB1dCA9
ICIiOworICAgICAgICAgIGQuaW5wdXQudmFsdWUgPSB0ZXh0OworICAgICAgICAgIHNlbGVjdElu
cHV0KGQuaW5wdXQpOworICAgICAgICB9CiAgICAgICB9CisgICAgICBpZiAoZS50eXBlID09ICJj
dXQiKSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IHRydWU7CiAgICAgfQotICAgIG9uKGQuaW5wdXQs
ICJjdXQiLCBwcmVwYXJlQ29weSk7Ci0gICAgb24oZC5pbnB1dCwgImNvcHkiLCBwcmVwYXJlQ29w
eSk7CisgICAgb24oZC5pbnB1dCwgImN1dCIsIHByZXBhcmVDb3B5Q3V0KTsKKyAgICBvbihkLmlu
cHV0LCAiY29weSIsIHByZXBhcmVDb3B5Q3V0KTsKCiAgICAgLy8gTmVlZGVkIHRvIGhhbmRsZSBU
YWIga2V5IGluIEtIVE1MCiAgICAgaWYgKGtodG1sKSBvbihkLnNpemVyLCAibW91c2V1cCIsIGZ1
bmN0aW9uKCkgewotICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBkLmlucHV0
KSBkLmlucHV0LmJsdXIoKTsKLSAgICAgICAgZm9jdXNJbnB1dChjbSk7CisgICAgICBpZiAoYWN0
aXZlRWx0KCkgPT0gZC5pbnB1dCkgZC5pbnB1dC5ibHVyKCk7CisgICAgICBmb2N1c0lucHV0KGNt
KTsKICAgICB9KTsKICAgfQoKKyAgLy8gTU9VU0UgRVZFTlRTCisKKyAgLy8gUmV0dXJuIHRydWUg
d2hlbiB0aGUgZ2l2ZW4gbW91c2UgZXZlbnQgaGFwcGVuZWQgaW4gYSB3aWRnZXQKICAgZnVuY3Rp
b24gZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB7CiAgICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0
KGUpOyBuICE9IGRpc3BsYXkud3JhcHBlcjsgbiA9IG4ucGFyZW50Tm9kZSkgewogICAgICAgaWYg
KCFuIHx8IG4uaWdub3JlRXZlbnRzIHx8IG4ucGFyZW50Tm9kZSA9PSBkaXNwbGF5LnNpemVyICYm
IG4gIT0gZGlzcGxheS5tb3ZlcikgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CgotICBmdW5jdGlv
biBwb3NGcm9tTW91c2UoY20sIGUsIGxpYmVyYWwpIHsKKyAgLy8gR2l2ZW4gYSBtb3VzZSBldmVu
dCwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBwb3NpdGlvbi4gSWYgbGliZXJhbAorICAvLyBpcyBm
YWxzZSwgaXQgY2hlY2tzIHdoZXRoZXIgYSBndXR0ZXIgb3Igc2Nyb2xsYmFyIHdhcyBjbGlja2Vk
LAorICAvLyBhbmQgcmV0dXJucyBudWxsIGlmIGl0IHdhcy4gZm9yUmVjdCBpcyB1c2VkIGJ5IHJl
Y3Rhbmd1bGFyCisgIC8vIHNlbGVjdGlvbnMsIGFuZCB0cmllcyB0byBlc3RpbWF0ZSBhIGNoYXJh
Y3RlciBwb3NpdGlvbiBldmVuIGZvcgorICAvLyBjb29yZGluYXRlcyBiZXlvbmQgdGhlIHJpZ2h0
IG9mIHRoZSB0ZXh0LgorICBmdW5jdGlvbiBwb3NGcm9tTW91c2UoY20sIGUsIGxpYmVyYWwsIGZv
clJlY3QpIHsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CiAgICAgaWYgKCFsaWJlcmFs
KSB7CiAgICAgICB2YXIgdGFyZ2V0ID0gZV90YXJnZXQoZSk7Ci0gICAgICBpZiAodGFyZ2V0ID09
IGRpc3BsYXkuc2Nyb2xsYmFySCB8fCB0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJILmZpcnN0
Q2hpbGQgfHwKLSAgICAgICAgICB0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJWIHx8IHRhcmdl
dCA9PSBkaXNwbGF5LnNjcm9sbGJhclYuZmlyc3RDaGlsZCB8fAorICAgICAgaWYgKHRhcmdldCA9
PSBkaXNwbGF5LnNjcm9sbGJhckggfHwgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFyViB8fAog
ICAgICAgICAgIHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckZpbGxlciB8fCB0YXJnZXQgPT0g
ZGlzcGxheS5ndXR0ZXJGaWxsZXIpIHJldHVybiBudWxsOwogICAgIH0KLSAgICB2YXIgeCwgeSwg
c3BhY2UgPSBnZXRSZWN0KGRpc3BsYXkubGluZVNwYWNlKTsKKyAgICB2YXIgeCwgeSwgc3BhY2Ug
PSBkaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAvLyBGYWls
cyB1bnByZWRpY3RhYmx5IG9uIElFWzY3XSB3aGVuIG1vdXNlIGlzIGRyYWdnZWQgYXJvdW5kIHF1
aWNrbHkuCi0gICAgdHJ5IHsgeCA9IGUuY2xpZW50WDsgeSA9IGUuY2xpZW50WTsgfSBjYXRjaCAo
ZSkgeyByZXR1cm4gbnVsbDsgfQotICAgIHJldHVybiBjb29yZHNDaGFyKGNtLCB4IC0gc3BhY2Uu
bGVmdCwgeSAtIHNwYWNlLnRvcCk7CisgICAgdHJ5IHsgeCA9IGUuY2xpZW50WCAtIHNwYWNlLmxl
ZnQ7IHkgPSBlLmNsaWVudFkgLSBzcGFjZS50b3A7IH0KKyAgICBjYXRjaCAoZSkgeyByZXR1cm4g
bnVsbDsgfQorICAgIHZhciBjb29yZHMgPSBjb29yZHNDaGFyKGNtLCB4LCB5KSwgbGluZTsKKyAg
ICBpZiAoZm9yUmVjdCAmJiBjb29yZHMueFJlbCA9PSAxICYmIChsaW5lID0gZ2V0TGluZShjbS5k
b2MsIGNvb3Jkcy5saW5lKS50ZXh0KS5sZW5ndGggPT0gY29vcmRzLmNoKSB7CisgICAgICB2YXIg
Y29sRGlmZiA9IGNvdW50Q29sdW1uKGxpbmUsIGxpbmUubGVuZ3RoLCBjbS5vcHRpb25zLnRhYlNp
emUpIC0gbGluZS5sZW5ndGg7CisgICAgICBjb29yZHMgPSBQb3MoY29vcmRzLmxpbmUsIE1hdGgu
cm91bmQoKHggLSBwYWRkaW5nSChjbS5kaXNwbGF5KS5sZWZ0KSAvIGNoYXJXaWR0aChjbS5kaXNw
bGF5KSkgLSBjb2xEaWZmKTsKKyAgICB9CisgICAgcmV0dXJuIGNvb3JkczsKICAgfQoKLSAgdmFy
IGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrOworICAvLyBBIG1vdXNlIGRvd24gY2FuIGJlIGEg
c2luZ2xlIGNsaWNrLCBkb3VibGUgY2xpY2ssIHRyaXBsZSBjbGljaywKKyAgLy8gc3RhcnQgb2Yg
c2VsZWN0aW9uIGRyYWcsIHN0YXJ0IG9mIHRleHQgZHJhZywgbmV3IGN1cnNvcgorICAvLyAoY3Ry
bC1jbGljayksIHJlY3RhbmdsZSBkcmFnIChhbHQtZHJhZyksIG9yIHh3aW4KKyAgLy8gbWlkZGxl
LWNsaWNrLXBhc3RlLiBPciBpdCBtaWdodCBiZSBhIGNsaWNrIG9uIHNvbWV0aGluZyB3ZSBzaG91
bGQKKyAgLy8gbm90IGludGVyZmVyZSB3aXRoLCBzdWNoIGFzIGEgc2Nyb2xsYmFyIG9yIHdpZGdl
dC4KICAgZnVuY3Rpb24gb25Nb3VzZURvd24oZSkgewogICAgIGlmIChzaWduYWxET01FdmVudCh0
aGlzLCBlKSkgcmV0dXJuOwotICAgIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5
LCBkb2MgPSBjbS5kb2MsIHNlbCA9IGRvYy5zZWw7Ci0gICAgc2VsLnNoaWZ0ID0gZS5zaGlmdEtl
eTsKKyAgICB2YXIgY20gPSB0aGlzLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICBkaXNwbGF5
LnNoaWZ0ID0gZS5zaGlmdEtleTsKCiAgICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkp
IHsKICAgICAgIGlmICghd2Via2l0KSB7CisgICAgICAgIC8vIEJyaWVmbHkgdHVybiBvZmYgZHJh
Z2dhYmlsaXR5LCB0byBhbGxvdyB3aWRnZXRzIHRvIGRvCisgICAgICAgIC8vIG5vcm1hbCBkcmFn
Z2luZyB0aGluZ3MuCiAgICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7
CiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJs
ZSA9IHRydWU7fSwgMTAwKTsKICAgICAgIH0KQEAgLTE3MDgsODkgKzI1MTgsMTY4IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAgICBpZiAoY2xpY2tJbkd1dHRl
cihjbSwgZSkpIHJldHVybjsKICAgICB2YXIgc3RhcnQgPSBwb3NGcm9tTW91c2UoY20sIGUpOwor
ICAgIHdpbmRvdy5mb2N1cygpOwoKICAgICBzd2l0Y2ggKGVfYnV0dG9uKGUpKSB7Ci0gICAgY2Fz
ZSAzOgotICAgICAgaWYgKGNhcHR1cmVNaWRkbGVDbGljaykgb25Db250ZXh0TWVudS5jYWxsKGNt
LCBjbSwgZSk7Ci0gICAgICByZXR1cm47CisgICAgY2FzZSAxOgorICAgICAgaWYgKHN0YXJ0KQor
ICAgICAgICBsZWZ0QnV0dG9uRG93bihjbSwgZSwgc3RhcnQpOworICAgICAgZWxzZSBpZiAoZV90
YXJnZXQoZSkgPT0gZGlzcGxheS5zY3JvbGxlcikKKyAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChl
KTsKKyAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgIGlmICh3ZWJraXQpIGNtLnN0YXRl
Lmxhc3RNaWRkbGVEb3duID0gK25ldyBEYXRlOwogICAgICAgaWYgKHN0YXJ0KSBleHRlbmRTZWxl
Y3Rpb24oY20uZG9jLCBzdGFydCk7CiAgICAgICBzZXRUaW1lb3V0KGJpbmQoZm9jdXNJbnB1dCwg
Y20pLCAyMCk7CiAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgICAgcmV0dXJuOworICAg
ICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgaWYgKGNhcHR1cmVSaWdodENsaWNrKSBvbkNv
bnRleHRNZW51KGNtLCBlKTsKKyAgICAgIGJyZWFrOwogICAgIH0KLSAgICAvLyBGb3IgYnV0dG9u
IDEsIGlmIGl0IHdhcyBjbGlja2VkIGluc2lkZSB0aGUgZWRpdG9yCi0gICAgLy8gKHBvc0Zyb21N
b3VzZSByZXR1cm5pbmcgbm9uLW51bGwpLCB3ZSBoYXZlIHRvIGFkanVzdCB0aGUKLSAgICAvLyBz
ZWxlY3Rpb24uCi0gICAgaWYgKCFzdGFydCkge2lmIChlX3RhcmdldChlKSA9PSBkaXNwbGF5LnNj
cm9sbGVyKSBlX3ByZXZlbnREZWZhdWx0KGUpOyByZXR1cm47fQorICB9CgotICAgIGlmICghY20u
c3RhdGUuZm9jdXNlZCkgb25Gb2N1cyhjbSk7CisgIHZhciBsYXN0Q2xpY2ssIGxhc3REb3VibGVD
bGljazsKKyAgZnVuY3Rpb24gbGVmdEJ1dHRvbkRvd24oY20sIGUsIHN0YXJ0KSB7CisgICAgc2V0
VGltZW91dChiaW5kKGVuc3VyZUZvY3VzLCBjbSksIDApOwoKLSAgICB2YXIgbm93ID0gK25ldyBE
YXRlLCB0eXBlID0gInNpbmdsZSI7Ci0gICAgaWYgKGxhc3REb3VibGVDbGljayAmJiBsYXN0RG91
YmxlQ2xpY2sudGltZSA+IG5vdyAtIDQwMCAmJiBwb3NFcShsYXN0RG91YmxlQ2xpY2sucG9zLCBz
dGFydCkpIHsKKyAgICB2YXIgbm93ID0gK25ldyBEYXRlLCB0eXBlOworICAgIGlmIChsYXN0RG91
YmxlQ2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgY21wKGxhc3RE
b3VibGVDbGljay5wb3MsIHN0YXJ0KSA9PSAwKSB7CiAgICAgICB0eXBlID0gInRyaXBsZSI7Ci0g
ICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgICAgc2V0VGltZW91dChiaW5kKGZvY3VzSW5w
dXQsIGNtKSwgMjApOwotICAgICAgc2VsZWN0TGluZShjbSwgc3RhcnQubGluZSk7Ci0gICAgfSBl
bHNlIGlmIChsYXN0Q2xpY2sgJiYgbGFzdENsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEo
bGFzdENsaWNrLnBvcywgc3RhcnQpKSB7CisgICAgfSBlbHNlIGlmIChsYXN0Q2xpY2sgJiYgbGFz
dENsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgY21wKGxhc3RDbGljay5wb3MsIHN0YXJ0KSA9PSAw
KSB7CiAgICAgICB0eXBlID0gImRvdWJsZSI7CiAgICAgICBsYXN0RG91YmxlQ2xpY2sgPSB7dGlt
ZTogbm93LCBwb3M6IHN0YXJ0fTsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICB2
YXIgd29yZCA9IGZpbmRXb3JkQXQoZ2V0TGluZShkb2MsIHN0YXJ0LmxpbmUpLnRleHQsIHN0YXJ0
KTsKLSAgICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHdvcmQuZnJvbSwgd29yZC50byk7Ci0g
ICAgfSBlbHNlIHsgbGFzdENsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07IH0KLQotICAg
IHZhciBsYXN0ID0gc3RhcnQ7Ci0gICAgaWYgKGNtLm9wdGlvbnMuZHJhZ0Ryb3AgJiYgZHJhZ0Fu
ZERyb3AgJiYgIWlzUmVhZE9ubHkoY20pICYmICFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSAmJgot
ICAgICAgICAhcG9zTGVzcyhzdGFydCwgc2VsLmZyb20pICYmICFwb3NMZXNzKHNlbC50bywgc3Rh
cnQpICYmIHR5cGUgPT0gInNpbmdsZSIpIHsKLSAgICAgIHZhciBkcmFnRW5kID0gb3BlcmF0aW9u
KGNtLCBmdW5jdGlvbihlMikgewotICAgICAgICBpZiAod2Via2l0KSBkaXNwbGF5LnNjcm9sbGVy
LmRyYWdnYWJsZSA9IGZhbHNlOwotICAgICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgPSBmYWxz
ZTsKLSAgICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2V1cCIsIGRyYWdFbmQpOwotICAgICAgICBv
ZmYoZGlzcGxheS5zY3JvbGxlciwgImRyb3AiLCBkcmFnRW5kKTsKLSAgICAgICAgaWYgKE1hdGgu
YWJzKGUuY2xpZW50WCAtIGUyLmNsaWVudFgpICsgTWF0aC5hYnMoZS5jbGllbnRZIC0gZTIuY2xp
ZW50WSkgPCAxMCkgewotICAgICAgICAgIGVfcHJldmVudERlZmF1bHQoZTIpOwotICAgICAgICAg
IGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0KTsKLSAgICAgICAgICBmb2N1c0lucHV0KGNt
KTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICAvLyBMZXQgdGhlIGRyYWcgaGFuZGxlciBo
YW5kbGUgdGhpcy4KLSAgICAgIGlmICh3ZWJraXQpIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxl
ID0gdHJ1ZTsKLSAgICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dCA9IGRyYWdFbmQ7Ci0gICAgICAv
LyBJRSdzIGFwcHJvYWNoIHRvIGRyYWdnYWJsZQotICAgICAgaWYgKGRpc3BsYXkuc2Nyb2xsZXIu
ZHJhZ0Ryb3ApIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ryb3AoKTsKLSAgICAgIG9uKGRvY3VtZW50
LCAibW91c2V1cCIsIGRyYWdFbmQpOwotICAgICAgb24oZGlzcGxheS5zY3JvbGxlciwgImRyb3Ai
LCBkcmFnRW5kKTsKLSAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgdHlwZSA9ICJz
aW5nbGUiOworICAgICAgbGFzdENsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07CiAgICAg
fQotICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgaWYgKHR5cGUgPT0gInNpbmdsZSIpIGV4
dGVuZFNlbGVjdGlvbihjbS5kb2MsIGNsaXBQb3MoZG9jLCBzdGFydCkpOwoKLSAgICB2YXIgc3Rh
cnRzdGFydCA9IHNlbC5mcm9tLCBzdGFydGVuZCA9IHNlbC50bywgbGFzdFBvcyA9IHN0YXJ0Owot
Ci0gICAgZnVuY3Rpb24gZG9TZWxlY3QoY3VyKSB7Ci0gICAgICBpZiAocG9zRXEobGFzdFBvcywg
Y3VyKSkgcmV0dXJuOwotICAgICAgbGFzdFBvcyA9IGN1cjsKKyAgICB2YXIgc2VsID0gY20uZG9j
LnNlbCwgYWRkTmV3ID0gbWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5OworICAgIGlmIChjbS5v
cHRpb25zLmRyYWdEcm9wICYmIGRyYWdBbmREcm9wICYmICFhZGROZXcgJiYgIWlzUmVhZE9ubHko
Y20pICYmCisgICAgICAgIHR5cGUgPT0gInNpbmdsZSIgJiYgc2VsLmNvbnRhaW5zKHN0YXJ0KSA+
IC0xICYmIHNlbC5zb21ldGhpbmdTZWxlY3RlZCgpKQorICAgICAgbGVmdEJ1dHRvblN0YXJ0RHJh
ZyhjbSwgZSwgc3RhcnQpOworICAgIGVsc2UKKyAgICAgIGxlZnRCdXR0b25TZWxlY3QoY20sIGUs
IHN0YXJ0LCB0eXBlLCBhZGROZXcpOworICB9CgotICAgICAgaWYgKHR5cGUgPT0gInNpbmdsZSIp
IHsKLSAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgY2xpcFBvcyhkb2MsIHN0YXJ0KSwg
Y3VyKTsKLSAgICAgICAgcmV0dXJuOworICAvLyBTdGFydCBhIHRleHQgZHJhZy4gV2hlbiBpdCBl
bmRzLCBzZWUgaWYgYW55IGRyYWdnaW5nIGFjdHVhbGx5CisgIC8vIGhhcHBlbiwgYW5kIHRyZWF0
IGFzIGEgY2xpY2sgaWYgaXQgZGlkbid0LgorICBmdW5jdGlvbiBsZWZ0QnV0dG9uU3RhcnREcmFn
KGNtLCBlLCBzdGFydCkgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICB2YXIg
ZHJhZ0VuZCA9IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oZTIpIHsKKyAgICAgIGlmICh3ZWJraXQp
IGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7CisgICAgICBjbS5zdGF0ZS5kcmFn
Z2luZ1RleHQgPSBmYWxzZTsKKyAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNldXAiLCBkcmFnRW5k
KTsKKyAgICAgIG9mZihkaXNwbGF5LnNjcm9sbGVyLCAiZHJvcCIsIGRyYWdFbmQpOworICAgICAg
aWYgKE1hdGguYWJzKGUuY2xpZW50WCAtIGUyLmNsaWVudFgpICsgTWF0aC5hYnMoZS5jbGllbnRZ
IC0gZTIuY2xpZW50WSkgPCAxMCkgeworICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUyKTsKKyAg
ICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3RhcnQpOworICAgICAgICBmb2N1c0lucHV0
KGNtKTsKKyAgICAgICAgLy8gV29yayBhcm91bmQgdW5leHBsYWluYWJsZSBmb2N1cyBwcm9ibGVt
IGluIElFOSAoIzIxMjcpCisgICAgICAgIGlmIChpZV91cHRvMTAgJiYgIWllX3VwdG84KQorICAg
ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ZG9jdW1lbnQuYm9keS5mb2N1cygpOyBmb2N1
c0lucHV0KGNtKTt9LCAyMCk7CiAgICAgICB9CisgICAgfSk7CisgICAgLy8gTGV0IHRoZSBkcmFn
IGhhbmRsZXIgaGFuZGxlIHRoaXMuCisgICAgaWYgKHdlYmtpdCkgZGlzcGxheS5zY3JvbGxlci5k
cmFnZ2FibGUgPSB0cnVlOworICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dCA9IGRyYWdFbmQ7Cisg
ICAgLy8gSUUncyBhcHByb2FjaCB0byBkcmFnZ2FibGUKKyAgICBpZiAoZGlzcGxheS5zY3JvbGxl
ci5kcmFnRHJvcCkgZGlzcGxheS5zY3JvbGxlci5kcmFnRHJvcCgpOworICAgIG9uKGRvY3VtZW50
LCAibW91c2V1cCIsIGRyYWdFbmQpOworICAgIG9uKGRpc3BsYXkuc2Nyb2xsZXIsICJkcm9wIiwg
ZHJhZ0VuZCk7CisgIH0KKworICAvLyBOb3JtYWwgc2VsZWN0aW9uLCBhcyBvcHBvc2VkIHRvIHRl
eHQgZHJhZ2dpbmcuCisgIGZ1bmN0aW9uIGxlZnRCdXR0b25TZWxlY3QoY20sIGUsIHN0YXJ0LCB0
eXBlLCBhZGROZXcpIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRv
YzsKKyAgICBlX3ByZXZlbnREZWZhdWx0KGUpOworCisgICAgdmFyIG91clJhbmdlLCBvdXJJbmRl
eCwgc3RhcnRTZWwgPSBkb2Muc2VsOworICAgIGlmIChhZGROZXcpIHsKKyAgICAgIG91ckluZGV4
ID0gZG9jLnNlbC5jb250YWlucyhzdGFydCk7CisgICAgICBpZiAob3VySW5kZXggPiAtMSkKKyAg
ICAgICAgb3VyUmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tvdXJJbmRleF07CisgICAgICBlbHNlCisg
ICAgICAgIG91clJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBzdGFydCk7CisgICAgfSBlbHNlIHsK
KyAgICAgIG91clJhbmdlID0gZG9jLnNlbC5wcmltYXJ5KCk7CisgICAgfQorCisgICAgaWYgKGUu
YWx0S2V5KSB7CisgICAgICB0eXBlID0gInJlY3QiOworICAgICAgaWYgKCFhZGROZXcpIG91clJh
bmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBzdGFydCk7CisgICAgICBzdGFydCA9IHBvc0Zyb21Nb3Vz
ZShjbSwgZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICBvdXJJbmRleCA9IC0xOworICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSAiZG91YmxlIikgeworICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGRvYywg
c3RhcnQpOworICAgICAgaWYgKGNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCkKKyAgICAg
ICAgb3VyUmFuZ2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCB3b3JkLmFuY2hvciwgd29y
ZC5oZWFkKTsKKyAgICAgIGVsc2UKKyAgICAgICAgb3VyUmFuZ2UgPSB3b3JkOworICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSAidHJpcGxlIikgeworICAgICAgdmFyIGxpbmUgPSBuZXcgUmFuZ2UoUG9z
KHN0YXJ0LmxpbmUsIDApLCBjbGlwUG9zKGRvYywgUG9zKHN0YXJ0LmxpbmUgKyAxLCAwKSkpOwor
ICAgICAgaWYgKGNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCkKKyAgICAgICAgb3VyUmFu
Z2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCBsaW5lLmFuY2hvciwgbGluZS5oZWFkKTsK
KyAgICAgIGVsc2UKKyAgICAgICAgb3VyUmFuZ2UgPSBsaW5lOworICAgIH0gZWxzZSB7CisgICAg
ICBvdXJSYW5nZSA9IGV4dGVuZFJhbmdlKGRvYywgb3VyUmFuZ2UsIHN0YXJ0KTsKKyAgICB9Cgot
ICAgICAgc3RhcnRzdGFydCA9IGNsaXBQb3MoZG9jLCBzdGFydHN0YXJ0KTsKLSAgICAgIHN0YXJ0
ZW5kID0gY2xpcFBvcyhkb2MsIHN0YXJ0ZW5kKTsKLSAgICAgIGlmICh0eXBlID09ICJkb3VibGUi
KSB7Ci0gICAgICAgIHZhciB3b3JkID0gZmluZFdvcmRBdChnZXRMaW5lKGRvYywgY3VyLmxpbmUp
LnRleHQsIGN1cik7Ci0gICAgICAgIGlmIChwb3NMZXNzKGN1ciwgc3RhcnRzdGFydCkpIGV4dGVu
ZFNlbGVjdGlvbihjbS5kb2MsIHdvcmQuZnJvbSwgc3RhcnRlbmQpOwotICAgICAgICBlbHNlIGV4
dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0c3RhcnQsIHdvcmQudG8pOwotICAgICAgfSBlbHNl
IGlmICh0eXBlID09ICJ0cmlwbGUiKSB7Ci0gICAgICAgIGlmIChwb3NMZXNzKGN1ciwgc3RhcnRz
dGFydCkpIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0ZW5kLCBjbGlwUG9zKGRvYywgUG9z
KGN1ci5saW5lLCAwKSkpOwotICAgICAgICBlbHNlIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0
YXJ0c3RhcnQsIGNsaXBQb3MoZG9jLCBQb3MoY3VyLmxpbmUgKyAxLCAwKSkpOworICAgIGlmICgh
YWRkTmV3KSB7CisgICAgICBvdXJJbmRleCA9IDA7CisgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBu
ZXcgU2VsZWN0aW9uKFtvdXJSYW5nZV0sIDApLCBzZWxfbW91c2UpOworICAgIH0gZWxzZSBpZiAo
b3VySW5kZXggPiAtMSkgeworICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIG91ckluZGV4
LCBvdXJSYW5nZSwgc2VsX21vdXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgb3VySW5kZXggPSBk
b2Muc2VsLnJhbmdlcy5sZW5ndGg7CisgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVT
ZWxlY3Rpb24oZG9jLnNlbC5yYW5nZXMuY29uY2F0KFtvdXJSYW5nZV0pLCBvdXJJbmRleCksCisg
ICAgICAgICAgICAgICAgICAge3Njcm9sbDogZmFsc2UsIG9yaWdpbjogIiptb3VzZSJ9KTsKKyAg
ICB9CisKKyAgICB2YXIgbGFzdFBvcyA9IHN0YXJ0OworICAgIGZ1bmN0aW9uIGV4dGVuZFRvKHBv
cykgeworICAgICAgaWYgKGNtcChsYXN0UG9zLCBwb3MpID09IDApIHJldHVybjsKKyAgICAgIGxh
c3RQb3MgPSBwb3M7CisKKyAgICAgIGlmICh0eXBlID09ICJyZWN0IikgeworICAgICAgICB2YXIg
cmFuZ2VzID0gW10sIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemU7CisgICAgICAgIHZhciBz
dGFydENvbCA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBzdGFydC5saW5lKS50ZXh0LCBzdGFy
dC5jaCwgdGFiU2l6ZSk7CisgICAgICAgIHZhciBwb3NDb2wgPSBjb3VudENvbHVtbihnZXRMaW5l
KGRvYywgcG9zLmxpbmUpLnRleHQsIHBvcy5jaCwgdGFiU2l6ZSk7CisgICAgICAgIHZhciBsZWZ0
ID0gTWF0aC5taW4oc3RhcnRDb2wsIHBvc0NvbCksIHJpZ2h0ID0gTWF0aC5tYXgoc3RhcnRDb2ws
IHBvc0NvbCk7CisgICAgICAgIGZvciAodmFyIGxpbmUgPSBNYXRoLm1pbihzdGFydC5saW5lLCBw
b3MubGluZSksIGVuZCA9IE1hdGgubWluKGNtLmxhc3RMaW5lKCksIE1hdGgubWF4KHN0YXJ0Lmxp
bmUsIHBvcy5saW5lKSk7CisgICAgICAgICAgICAgbGluZSA8PSBlbmQ7IGxpbmUrKykgeworICAg
ICAgICAgIHZhciB0ZXh0ID0gZ2V0TGluZShkb2MsIGxpbmUpLnRleHQsIGxlZnRQb3MgPSBmaW5k
Q29sdW1uKHRleHQsIGxlZnQsIHRhYlNpemUpOworICAgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0
KQorICAgICAgICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKFBvcyhsaW5lLCBsZWZ0UG9zKSwg
UG9zKGxpbmUsIGxlZnRQb3MpKSk7CisgICAgICAgICAgZWxzZSBpZiAodGV4dC5sZW5ndGggPiBs
ZWZ0UG9zKQorICAgICAgICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKFBvcyhsaW5lLCBsZWZ0
UG9zKSwgUG9zKGxpbmUsIGZpbmRDb2x1bW4odGV4dCwgcmlnaHQsIHRhYlNpemUpKSkpOworICAg
ICAgICB9CisgICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkgcmFuZ2VzLnB1c2gobmV3IFJhbmdl
KHN0YXJ0LCBzdGFydCkpOworICAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxl
Y3Rpb24oc3RhcnRTZWwucmFuZ2VzLnNsaWNlKDAsIG91ckluZGV4KS5jb25jYXQocmFuZ2VzKSwg
b3VySW5kZXgpLCBzZWxfbW91c2UpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIG9sZFJh
bmdlID0gb3VyUmFuZ2U7CisgICAgICAgIHZhciBhbmNob3IgPSBvbGRSYW5nZS5hbmNob3IsIGhl
YWQgPSBwb3M7CisgICAgICAgIGlmICh0eXBlICE9ICJzaW5nbGUiKSB7CisgICAgICAgICAgaWYg
KHR5cGUgPT0gImRvdWJsZSIpCisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBmaW5kV29yZEF0KGRv
YywgcG9zKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFu
Z2UoUG9zKHBvcy5saW5lLCAwKSwgY2xpcFBvcyhkb2MsIFBvcyhwb3MubGluZSArIDEsIDApKSk7
CisgICAgICAgICAgaWYgKGNtcChyYW5nZS5hbmNob3IsIGFuY2hvcikgPiAwKSB7CisgICAgICAg
ICAgICBoZWFkID0gcmFuZ2UuaGVhZDsKKyAgICAgICAgICAgIGFuY2hvciA9IG1pblBvcyhvbGRS
YW5nZS5mcm9tKCksIHJhbmdlLmFuY2hvcik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGhlYWQgPSByYW5nZS5hbmNob3I7CisgICAgICAgICAgICBhbmNob3IgPSBtYXhQb3Mob2xk
UmFuZ2UudG8oKSwgcmFuZ2UuaGVhZCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHZhciByYW5nZXMgPSBzdGFydFNlbC5yYW5nZXMuc2xpY2UoMCk7CisgICAgICAgIHJhbmdlc1tv
dXJJbmRleF0gPSBuZXcgUmFuZ2UoY2xpcFBvcyhkb2MsIGFuY2hvciksIGhlYWQpOworICAgICAg
ICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLCBvdXJJbmRleCks
IHNlbF9tb3VzZSk7CiAgICAgICB9CiAgICAgfQoKLSAgICB2YXIgZWRpdG9yU2l6ZSA9IGdldFJl
Y3QoZGlzcGxheS53cmFwcGVyKTsKKyAgICB2YXIgZWRpdG9yU2l6ZSA9IGRpc3BsYXkud3JhcHBl
ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAvLyBVc2VkIHRvIGVuc3VyZSB0aW1lb3V0
IHJlLXRyaWVzIGRvbid0IGZpcmUgd2hlbiBhbm90aGVyIGV4dGVuZAogICAgIC8vIGhhcHBlbmVk
IGluIHRoZSBtZWFudGltZSAoY2xlYXJUaW1lb3V0IGlzbid0IHJlbGlhYmxlIC0tIGF0CiAgICAg
Ly8gbGVhc3Qgb24gQ2hyb21lLCB0aGUgdGltZW91dHMgc3RpbGwgaGFwcGVuIGV2ZW4gd2hlbiBj
bGVhcmVkLApAQCAtMTc5OSwxMiArMjY4OCwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKCiAgICAgZnVuY3Rpb24gZXh0ZW5kKGUpIHsKICAgICAgIHZhciBjdXJDb3VudCA9
ICsrY291bnRlcjsKLSAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUpOwor
ICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSwgdHlwZSA9PSAicmVjdCIp
OwogICAgICAgaWYgKCFjdXIpIHJldHVybjsKLSAgICAgIGlmICghcG9zRXEoY3VyLCBsYXN0KSkg
ewotICAgICAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIG9uRm9jdXMoY20pOwotICAgICAgICBs
YXN0ID0gY3VyOwotICAgICAgICBkb1NlbGVjdChjdXIpOworICAgICAgaWYgKGNtcChjdXIsIGxh
c3RQb3MpICE9IDApIHsKKyAgICAgICAgZW5zdXJlRm9jdXMoY20pOworICAgICAgICBleHRlbmRU
byhjdXIpOwogICAgICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcyhkaXNwbGF5LCBkb2Mp
OwogICAgICAgICBpZiAoY3VyLmxpbmUgPj0gdmlzaWJsZS50byB8fCBjdXIubGluZSA8IHZpc2li
bGUuZnJvbSkKICAgICAgICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oKXtp
ZiAoY291bnRlciA9PSBjdXJDb3VudCkgZXh0ZW5kKGUpO30pLCAxNTApOwpAQCAtMTgyNCwxMCAr
MjcxMiwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGZvY3Vz
SW5wdXQoY20pOwogICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwgbW92ZSk7CiAgICAg
ICBvZmYoZG9jdW1lbnQsICJtb3VzZXVwIiwgdXApOworICAgICAgZG9jLmhpc3RvcnkubGFzdFNl
bE9yaWdpbiA9IG51bGw7CiAgICAgfQoKICAgICB2YXIgbW92ZSA9IG9wZXJhdGlvbihjbSwgZnVu
Y3Rpb24oZSkgewotICAgICAgaWYgKCFpZSAmJiAhZV9idXR0b24oZSkpIGRvbmUoZSk7CisgICAg
ICBpZiAoKGllICYmICFpZV91cHRvOSkgPyAgIWUuYnV0dG9ucyA6ICFlX2J1dHRvbihlKSkgZG9u
ZShlKTsKICAgICAgIGVsc2UgZXh0ZW5kKGUpOwogICAgIH0pOwogICAgIHZhciB1cCA9IG9wZXJh
dGlvbihjbSwgZG9uZSk7CkBAIC0xODM1LDIxICsyNzI0LDIzIEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgIG9uKGRvY3VtZW50LCAibW91c2V1cCIsIHVwKTsKICAgfQoK
KyAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGV2ZW50IGhhcHBlbmVkIGluIHRoZSBndXR0ZXIs
IGFuZCBmaXJlcyB0aGUKKyAgLy8gaGFuZGxlcnMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50
LgogICBmdW5jdGlvbiBndXR0ZXJFdmVudChjbSwgZSwgdHlwZSwgcHJldmVudCwgc2lnbmFsZm4p
IHsKICAgICB0cnkgeyB2YXIgbVggPSBlLmNsaWVudFgsIG1ZID0gZS5jbGllbnRZOyB9CiAgICAg
Y2F0Y2goZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBpZiAobVggPj0gTWF0aC5mbG9vcihnZXRS
ZWN0KGNtLmRpc3BsYXkuZ3V0dGVycykucmlnaHQpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1Y
ID49IE1hdGguZmxvb3IoY20uZGlzcGxheS5ndXR0ZXJzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
LnJpZ2h0KSkgcmV0dXJuIGZhbHNlOwogICAgIGlmIChwcmV2ZW50KSBlX3ByZXZlbnREZWZhdWx0
KGUpOwoKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0gICAgdmFyIGxpbmVCb3ggPSBn
ZXRSZWN0KGRpc3BsYXkubGluZURpdik7CisgICAgdmFyIGxpbmVCb3ggPSBkaXNwbGF5LmxpbmVE
aXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgogICAgIGlmIChtWSA+IGxpbmVCb3guYm90dG9t
IHx8ICFoYXNIYW5kbGVyKGNtLCB0eXBlKSkgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKTsK
ICAgICBtWSAtPSBsaW5lQm94LnRvcCAtIGRpc3BsYXkudmlld09mZnNldDsKCiAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgIHZh
ciBnID0gZGlzcGxheS5ndXR0ZXJzLmNoaWxkTm9kZXNbaV07Ci0gICAgICBpZiAoZyAmJiBnZXRS
ZWN0KGcpLnJpZ2h0ID49IG1YKSB7CisgICAgICBpZiAoZyAmJiBnLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpLnJpZ2h0ID49IG1YKSB7CiAgICAgICAgIHZhciBsaW5lID0gbGluZUF0SGVpZ2h0KGNt
LmRvYywgbVkpOwogICAgICAgICB2YXIgZ3V0dGVyID0gY20ub3B0aW9ucy5ndXR0ZXJzW2ldOwog
ICAgICAgICBzaWduYWxmbihjbSwgdHlwZSwgY20sIGxpbmUsIGd1dHRlciwgZSk7CkBAIC0xODU4
LDExICsyNzQ5LDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQog
ICB9CgotICBmdW5jdGlvbiBjb250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSB7Ci0gICAgaWYgKCFo
YXNIYW5kbGVyKGNtLCAiZ3V0dGVyQ29udGV4dE1lbnUiKSkgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiBndXR0ZXJFdmVudChjbSwgZSwgImd1dHRlckNvbnRleHRNZW51IiwgZmFsc2UsIHNpZ25h
bCk7Ci0gIH0KLQogICBmdW5jdGlvbiBjbGlja0luR3V0dGVyKGNtLCBlKSB7CiAgICAgcmV0dXJu
IGd1dHRlckV2ZW50KGNtLCBlLCAiZ3V0dGVyQ2xpY2siLCB0cnVlLCBzaWduYWxMYXRlcik7CiAg
IH0KQEAgLTE4NzMsMjkgKzI3NTksMzMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CgogICBmdW5jdGlvbiBvbkRyb3AoZSkgewogICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgaWYg
KHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpIHx8
IChjbS5vcHRpb25zLm9uRHJhZ0V2ZW50ICYmIGNtLm9wdGlvbnMub25EcmFnRXZlbnQoY20sIGFk
ZFN0b3AoZSkpKSkKKyAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGV2ZW50SW5XaWRn
ZXQoY20uZGlzcGxheSwgZSkpCiAgICAgICByZXR1cm47CiAgICAgZV9wcmV2ZW50RGVmYXVsdChl
KTsKLSAgICBpZiAoaWUpIGxhc3REcm9wID0gK25ldyBEYXRlOworICAgIGlmIChpZV91cHRvMTAp
IGxhc3REcm9wID0gK25ldyBEYXRlOwogICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUs
IHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzOwogICAgIGlmICghcG9zIHx8IGlz
UmVhZE9ubHkoY20pKSByZXR1cm47CisgICAgLy8gTWlnaHQgYmUgYSBmaWxlIGRyb3AsIGluIHdo
aWNoIGNhc2Ugd2Ugc2ltcGx5IGV4dHJhY3QgdGhlIHRleHQKKyAgICAvLyBhbmQgaW5zZXJ0IGl0
LgogICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggJiYgd2luZG93LkZpbGVSZWFkZXIgJiYg
d2luZG93LkZpbGUpIHsKICAgICAgIHZhciBuID0gZmlsZXMubGVuZ3RoLCB0ZXh0ID0gQXJyYXko
biksIHJlYWQgPSAwOwogICAgICAgdmFyIGxvYWRGaWxlID0gZnVuY3Rpb24oZmlsZSwgaSkgewog
ICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXI7Ci0gICAgICAgIHJlYWRlci5vbmxv
YWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmVhZGVyLm9ubG9hZCA9IG9wZXJhdGlvbihjbSwg
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgdGV4dFtpXSA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAg
ICAgaWYgKCsrcmVhZCA9PSBuKSB7CiAgICAgICAgICAgICBwb3MgPSBjbGlwUG9zKGNtLmRvYywg
cG9zKTsKLSAgICAgICAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCB7ZnJvbTogcG9zLCB0bzogcG9z
LCB0ZXh0OiBzcGxpdExpbmVzKHRleHQuam9pbigiXG4iKSksIG9yaWdpbjogInBhc3RlIn0sICJh
cm91bmQiKTsKKyAgICAgICAgICAgIHZhciBjaGFuZ2UgPSB7ZnJvbTogcG9zLCB0bzogcG9zLCB0
ZXh0OiBzcGxpdExpbmVzKHRleHQuam9pbigiXG4iKSksIG9yaWdpbjogInBhc3RlIn07CisgICAg
ICAgICAgICBtYWtlQ2hhbmdlKGNtLmRvYywgY2hhbmdlKTsKKyAgICAgICAgICAgIHNldFNlbGVj
dGlvblJlcGxhY2VIaXN0b3J5KGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKHBvcywgY2hhbmdlRW5k
KGNoYW5nZSkpKTsKICAgICAgICAgICB9Ci0gICAgICAgIH07CisgICAgICAgIH0pOwogICAgICAg
ICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTsKICAgICAgIH07CiAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG47ICsraSkgbG9hZEZpbGUoZmlsZXNbaV0sIGkpOwotICAgIH0gZWxzZSB7CisgICAg
fSBlbHNlIHsgLy8gTm9ybWFsIGRyb3AKICAgICAgIC8vIERvbid0IGRvIGEgcmVwbGFjZSBpZiB0
aGUgZHJvcCBoYXBwZW5lZCBpbnNpZGUgb2YgdGhlIHNlbGVjdGVkIHRleHQuCi0gICAgICBpZiAo
Y20uc3RhdGUuZHJhZ2dpbmdUZXh0ICYmICEocG9zTGVzcyhwb3MsIGNtLmRvYy5zZWwuZnJvbSkg
fHwgcG9zTGVzcyhjbS5kb2Muc2VsLnRvLCBwb3MpKSkgeworICAgICAgaWYgKGNtLnN0YXRlLmRy
YWdnaW5nVGV4dCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPiAtMSkgewogICAgICAgICBj
bS5zdGF0ZS5kcmFnZ2luZ1RleHQoZSk7CiAgICAgICAgIC8vIEVuc3VyZSB0aGUgZWRpdG9yIGlz
IHJlLWZvY3VzZWQKICAgICAgICAgc2V0VGltZW91dChiaW5kKGZvY3VzSW5wdXQsIGNtKSwgMjAp
OwpAQCAtMTkwNCwxMCArMjc5NCwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICAgIHRyeSB7CiAgICAgICAgIHZhciB0ZXh0ID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0
YSgiVGV4dCIpOwogICAgICAgICBpZiAodGV4dCkgewotICAgICAgICAgIHZhciBjdXJGcm9tID0g
Y20uZG9jLnNlbC5mcm9tLCBjdXJUbyA9IGNtLmRvYy5zZWwudG87Ci0gICAgICAgICAgc2V0U2Vs
ZWN0aW9uKGNtLmRvYywgcG9zLCBwb3MpOwotICAgICAgICAgIGlmIChjbS5zdGF0ZS5kcmFnZ2lu
Z1RleHQpIHJlcGxhY2VSYW5nZShjbS5kb2MsICIiLCBjdXJGcm9tLCBjdXJUbywgInBhc3RlIik7
Ci0gICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbih0ZXh0LCBudWxsLCAicGFzdGUiKTsKKyAg
ICAgICAgICB2YXIgc2VsZWN0ZWQgPSBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgY20ubGlzdFNl
bGVjdGlvbnMoKTsKKyAgICAgICAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oY20uZG9jLCBzaW1wbGVT
ZWxlY3Rpb24ocG9zLCBwb3MpKTsKKyAgICAgICAgICBpZiAoc2VsZWN0ZWQpIGZvciAodmFyIGkg
PSAwOyBpIDwgc2VsZWN0ZWQubGVuZ3RoOyArK2kpCisgICAgICAgICAgICByZXBsYWNlUmFuZ2Uo
Y20uZG9jLCAiIiwgc2VsZWN0ZWRbaV0uYW5jaG9yLCBzZWxlY3RlZFtpXS5oZWFkLCAiZHJhZyIp
OworICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24odGV4dCwgImFyb3VuZCIsICJwYXN0ZSIp
OwogICAgICAgICAgIGZvY3VzSW5wdXQoY20pOwogICAgICAgICB9CiAgICAgICB9CkBAIC0xOTE2
LDM3ICsyODA3LDQyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9Cgog
ICBmdW5jdGlvbiBvbkRyYWdTdGFydChjbSwgZSkgewotICAgIGlmIChpZSAmJiAoIWNtLnN0YXRl
LmRyYWdnaW5nVGV4dCB8fCArbmV3IERhdGUgLSBsYXN0RHJvcCA8IDEwMCkpIHsgZV9zdG9wKGUp
OyByZXR1cm47IH0KKyAgICBpZiAoaWVfdXB0bzEwICYmICghY20uc3RhdGUuZHJhZ2dpbmdUZXh0
IHx8ICtuZXcgRGF0ZSAtIGxhc3REcm9wIDwgMTAwKSkgeyBlX3N0b3AoZSk7IHJldHVybjsgfQog
ICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgZXZlbnRJbldpZGdldChjbS5kaXNwbGF5
LCBlKSkgcmV0dXJuOwoKLSAgICB2YXIgdHh0ID0gY20uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgZS5k
YXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsIHR4dCk7CisgICAgZS5kYXRhVHJhbnNmZXIuc2V0
RGF0YSgiVGV4dCIsIGNtLmdldFNlbGVjdGlvbigpKTsKCiAgICAgLy8gVXNlIGR1bW15IGltYWdl
IGluc3RlYWQgb2YgZGVmYXVsdCBicm93c2VycyBpbWFnZS4KICAgICAvLyBSZWNlbnQgU2FmYXJp
ICh+Ni4wLjIpIGhhdmUgYSB0ZW5kZW5jeSB0byBzZWdmYXVsdCB3aGVuIHRoaXMgaGFwcGVucywg
c28gd2UgZG9uJ3QgZG8gaXQgdGhlcmUuCiAgICAgaWYgKGUuZGF0YVRyYW5zZmVyLnNldERyYWdJ
bWFnZSAmJiAhc2FmYXJpKSB7CiAgICAgICB2YXIgaW1nID0gZWx0KCJpbWciLCBudWxsLCBudWxs
LCAicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7CiAgICAgICBpbWcuc3JjID0g
ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFB
QUJBQUVBQUFJQ1RBRUFPdz09IjsKLSAgICAgIGlmIChvcGVyYSkgeworICAgICAgaWYgKHByZXN0
bykgewogICAgICAgICBpbWcud2lkdGggPSBpbWcuaGVpZ2h0ID0gMTsKICAgICAgICAgY20uZGlz
cGxheS53cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7CiAgICAgICAgIC8vIEZvcmNlIGEgcmVsYXlv
dXQsIG9yIE9wZXJhIHdvbid0IHVzZSBvdXIgaW1hZ2UgZm9yIHNvbWUgb2JzY3VyZSByZWFzb24K
ICAgICAgICAgaW1nLl90b3AgPSBpbWcub2Zmc2V0VG9wOwogICAgICAgfQogICAgICAgZS5kYXRh
VHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGltZywgMCwgMCk7Ci0gICAgICBpZiAob3BlcmEpIGltZy5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKGltZyk7CisgICAgICBpZiAocHJlc3RvKSBpbWcucGFyZW50
Tm9kZS5yZW1vdmVDaGlsZChpbWcpOwogICAgIH0KICAgfQoKKyAgLy8gU0NST0xMIEVWRU5UUwor
CisgIC8vIFN5bmMgdGhlIHNjcm9sbGFibGUgYXJlYSBhbmQgc2Nyb2xsYmFycywgZW5zdXJlIHRo
ZSB2aWV3cG9ydAorICAvLyBjb3ZlcnMgdGhlIHZpc2libGUgYXJlYS4KICAgZnVuY3Rpb24gc2V0
U2Nyb2xsVG9wKGNtLCB2YWwpIHsKICAgICBpZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAt
IHZhbCkgPCAyKSByZXR1cm47CiAgICAgY20uZG9jLnNjcm9sbFRvcCA9IHZhbDsKLSAgICBpZiAo
IWdlY2tvKSB1cGRhdGVEaXNwbGF5KGNtLCBbXSwgdmFsKTsKKyAgICBpZiAoIWdlY2tvKSB1cGRh
dGVEaXNwbGF5KGNtLCB7dG9wOiB2YWx9KTsKICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5z
Y3JvbGxUb3AgIT0gdmFsKSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsKICAg
ICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCAhPSB2YWwpIGNtLmRpc3BsYXku
c2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSB2YWw7Ci0gICAgaWYgKGdlY2tvKSB1cGRhdGVEaXNwbGF5
KGNtLCBbXSk7CisgICAgaWYgKGdlY2tvKSB1cGRhdGVEaXNwbGF5KGNtKTsKICAgICBzdGFydFdv
cmtlcihjbSwgMTAwKTsKICAgfQorICAvLyBTeW5jIHNjcm9sbGVyIGFuZCBzY3JvbGxiYXIsIGVu
c3VyZSB0aGUgZ3V0dGVyIGVsZW1lbnRzIGFyZQorICAvLyBhbGlnbmVkLgogICBmdW5jdGlvbiBz
ZXRTY3JvbGxMZWZ0KGNtLCB2YWwsIGlzU2Nyb2xsZXIpIHsKICAgICBpZiAoaXNTY3JvbGxlciA/
IHZhbCA9PSBjbS5kb2Muc2Nyb2xsTGVmdCA6IE1hdGguYWJzKGNtLmRvYy5zY3JvbGxMZWZ0IC0g
dmFsKSA8IDIpIHJldHVybjsKICAgICB2YWwgPSBNYXRoLm1pbih2YWwsIGNtLmRpc3BsYXkuc2Ny
b2xsZXIuc2Nyb2xsV2lkdGggLSBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKTsKQEAg
LTE5OTMsMTAgKzI4ODksMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgLy8gVGhpcyBoYWNrIChzZWUgcmVsYXRlZCBjb2RlIGluIHBhdGNoRGlzcGxheSkgbWFrZXMg
c3VyZSB0aGUKICAgICAvLyBlbGVtZW50IGlzIGtlcHQgYXJvdW5kLgogICAgIGlmIChkeSAmJiBt
YWMgJiYgd2Via2l0KSB7Ci0gICAgICBmb3IgKHZhciBjdXIgPSBlLnRhcmdldDsgY3VyICE9IHNj
cm9sbDsgY3VyID0gY3VyLnBhcmVudE5vZGUpIHsKLSAgICAgICAgaWYgKGN1ci5saW5lT2JqKSB7
Ci0gICAgICAgICAgY20uZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQgPSBjdXI7Ci0gICAgICAg
ICAgYnJlYWs7CisgICAgICBvdXRlcjogZm9yICh2YXIgY3VyID0gZS50YXJnZXQsIHZpZXcgPSBk
aXNwbGF5LnZpZXc7IGN1ciAhPSBzY3JvbGw7IGN1ciA9IGN1ci5wYXJlbnROb2RlKSB7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIGlm
ICh2aWV3W2ldLm5vZGUgPT0gY3VyKSB7CisgICAgICAgICAgICBjbS5kaXNwbGF5LmN1cnJlbnRX
aGVlbFRhcmdldCA9IGN1cjsKKyAgICAgICAgICAgIGJyZWFrIG91dGVyOworICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTIwMDcsNyArMjkwNSw3IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIC8vIGVzdGltYXRlZCBwaXhlbHMvZGVsdGEg
dmFsdWUsIHdlIGp1c3QgaGFuZGxlIGhvcml6b250YWwKICAgICAvLyBzY3JvbGxpbmcgZW50aXJl
bHkgaGVyZS4gSXQnbGwgYmUgc2xpZ2h0bHkgb2ZmIGZyb20gbmF0aXZlLCBidXQKICAgICAvLyBi
ZXR0ZXIgdGhhbiBnbGl0Y2hpbmcgb3V0LgotICAgIGlmIChkeCAmJiAhZ2Vja28gJiYgIW9wZXJh
ICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7CisgICAgaWYgKGR4ICYmICFnZWNrbyAm
JiAhcHJlc3RvICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7CiAgICAgICBpZiAoZHkp
CiAgICAgICAgIHNldFNjcm9sbFRvcChjbSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsLnNj
cm9sbFRvcCArIGR5ICogd2hlZWxQaXhlbHNQZXJVbml0LCBzY3JvbGwuc2Nyb2xsSGVpZ2h0IC0g
c2Nyb2xsLmNsaWVudEhlaWdodCkpKTsKICAgICAgIHNldFNjcm9sbExlZnQoY20sIE1hdGgubWF4
KDAsIE1hdGgubWluKHNjcm9sbC5zY3JvbGxMZWZ0ICsgZHggKiB3aGVlbFBpeGVsc1BlclVuaXQs
IHNjcm9sbC5zY3JvbGxXaWR0aCAtIHNjcm9sbC5jbGllbnRXaWR0aCkpKTsKQEAgLTIwMTYsMTIg
KzI5MTQsMTQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICByZXR1
cm47CiAgICAgfQoKKyAgICAvLyAnUHJvamVjdCcgdGhlIHZpc2libGUgdmlld3BvcnQgdG8gY292
ZXIgdGhlIGFyZWEgdGhhdCBpcyBiZWluZworICAgIC8vIHNjcm9sbGVkIGludG8gdmlldyAoaWYg
d2Uga25vdyBlbm91Z2ggdG8gZXN0aW1hdGUgaXQpLgogICAgIGlmIChkeSAmJiB3aGVlbFBpeGVs
c1BlclVuaXQgIT0gbnVsbCkgewogICAgICAgdmFyIHBpeGVscyA9IGR5ICogd2hlZWxQaXhlbHNQ
ZXJVbml0OwogICAgICAgdmFyIHRvcCA9IGNtLmRvYy5zY3JvbGxUb3AsIGJvdCA9IHRvcCArIGRp
c3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAgICBpZiAocGl4ZWxzIDwgMCkgdG9wID0g
TWF0aC5tYXgoMCwgdG9wICsgcGl4ZWxzIC0gNTApOwogICAgICAgZWxzZSBib3QgPSBNYXRoLm1p
bihjbS5kb2MuaGVpZ2h0LCBib3QgKyBwaXhlbHMgKyA1MCk7Ci0gICAgICB1cGRhdGVEaXNwbGF5
KGNtLCBbXSwge3RvcDogdG9wLCBib3R0b206IGJvdH0pOworICAgICAgdXBkYXRlRGlzcGxheShj
bSwge3RvcDogdG9wLCBib3R0b206IGJvdH0pOwogICAgIH0KCiAgICAgaWYgKHdoZWVsU2FtcGxl
cyA8IDIwKSB7CkBAIC0yMDQ1LDYgKzI5NDUsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICB9CiAgIH0KCisgIC8vIEtFWSBFVkVOVFMKKworICAvLyBSdW4gYSBoYW5k
bGVyIHRoYXQgd2FzIGJvdW5kIHRvIGEga2V5LgogICBmdW5jdGlvbiBkb0hhbmRsZUJpbmRpbmco
Y20sIGJvdW5kLCBkcm9wU2hpZnQpIHsKICAgICBpZiAodHlwZW9mIGJvdW5kID09ICJzdHJpbmci
KSB7CiAgICAgICBib3VuZCA9IGNvbW1hbmRzW2JvdW5kXTsKQEAgLTIwNTMsMTggKzI5NTYsMTkg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gRW5zdXJlIHByZXZp
b3VzIGlucHV0IGhhcyBiZWVuIHJlYWQsIHNvIHRoYXQgdGhlIGhhbmRsZXIgc2VlcyBhCiAgICAg
Ly8gY29uc2lzdGVudCB2aWV3IG9mIHRoZSBkb2N1bWVudAogICAgIGlmIChjbS5kaXNwbGF5LnBv
bGxpbmdGYXN0ICYmIHJlYWRJbnB1dChjbSkpIGNtLmRpc3BsYXkucG9sbGluZ0Zhc3QgPSBmYWxz
ZTsKLSAgICB2YXIgZG9jID0gY20uZG9jLCBwcmV2U2hpZnQgPSBkb2Muc2VsLnNoaWZ0LCBkb25l
ID0gZmFsc2U7CisgICAgdmFyIHByZXZTaGlmdCA9IGNtLmRpc3BsYXkuc2hpZnQsIGRvbmUgPSBm
YWxzZTsKICAgICB0cnkgewogICAgICAgaWYgKGlzUmVhZE9ubHkoY20pKSBjbS5zdGF0ZS5zdXBw
cmVzc0VkaXRzID0gdHJ1ZTsKLSAgICAgIGlmIChkcm9wU2hpZnQpIGRvYy5zZWwuc2hpZnQgPSBm
YWxzZTsKKyAgICAgIGlmIChkcm9wU2hpZnQpIGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZTsKICAg
ICAgIGRvbmUgPSBib3VuZChjbSkgIT0gUGFzczsKICAgICB9IGZpbmFsbHkgewotICAgICAgZG9j
LnNlbC5zaGlmdCA9IHByZXZTaGlmdDsKKyAgICAgIGNtLmRpc3BsYXkuc2hpZnQgPSBwcmV2U2hp
ZnQ7CiAgICAgICBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiBkb25lOwogICB9CgorICAvLyBDb2xsZWN0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGtleW1h
cHMuCiAgIGZ1bmN0aW9uIGFsbEtleU1hcHMoY20pIHsKICAgICB2YXIgbWFwcyA9IGNtLnN0YXRl
LmtleU1hcHMuc2xpY2UoMCk7CiAgICAgaWYgKGNtLm9wdGlvbnMuZXh0cmFLZXlzKSBtYXBzLnB1
c2goY20ub3B0aW9ucy5leHRyYUtleXMpOwpAQCAtMjA3Myw4ICsyOTc3LDkgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KCiAgIHZhciBtYXliZVRyYW5zaXRpb247Cisg
IC8vIEhhbmRsZSBhIGtleSBmcm9tIHRoZSBrZXlkb3duIGV2ZW50LgogICBmdW5jdGlvbiBoYW5k
bGVLZXlCaW5kaW5nKGNtLCBlKSB7Ci0gICAgLy8gSGFuZGxlIGF1dG8ga2V5bWFwIHRyYW5zaXRp
b25zCisgICAgLy8gSGFuZGxlIGF1dG9tYXRpYyBrZXltYXAgdHJhbnNpdGlvbnMKICAgICB2YXIg
c3RhcnRNYXAgPSBnZXRLZXlNYXAoY20ub3B0aW9ucy5rZXlNYXApLCBuZXh0ID0gc3RhcnRNYXAu
YXV0bzsKICAgICBjbGVhclRpbWVvdXQobWF5YmVUcmFuc2l0aW9uKTsKICAgICBpZiAobmV4dCAm
JiAhaXNNb2RpZmllcktleShlKSkgbWF5YmVUcmFuc2l0aW9uID0gc2V0VGltZW91dChmdW5jdGlv
bigpIHsKQEAgLTIxMDQsMTIgKzMwMDksMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgaWYgKGhhbmRsZWQpIHsKICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAg
ICAgICByZXN0YXJ0QmxpbmsoY20pOwotICAgICAgaWYgKGllX2x0OSkgeyBlLm9sZEtleUNvZGUg
PSBlLmtleUNvZGU7IGUua2V5Q29kZSA9IDA7IH0KICAgICAgIHNpZ25hbExhdGVyKGNtLCAia2V5
SGFuZGxlZCIsIGNtLCBuYW1lLCBlKTsKICAgICB9CiAgICAgcmV0dXJuIGhhbmRsZWQ7CiAgIH0K
CisgIC8vIEhhbmRsZSBhIGtleSBmcm9tIHRoZSBrZXlwcmVzcyBldmVudAogICBmdW5jdGlvbiBo
YW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpIHsKICAgICB2YXIgaGFuZGxlZCA9IGxvb2t1cEtl
eSgiJyIgKyBjaCArICInIiwgYWxsS2V5TWFwcyhjbSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24oYikgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiLCB0cnVlKTsg
fSk7CkBAIC0yMTI0LDQ3ICszMDI5LDY3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICB2YXIgbGFzdFN0b3BwZWRLZXkgPSBudWxsOwogICBmdW5jdGlvbiBvbktleURvd24o
ZSkgewogICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSBvbkZv
Y3VzKGNtKTsKLSAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGNtLm9wdGlvbnMub25L
ZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47
Ci0gICAgaWYgKGllICYmIGUua2V5Q29kZSA9PSAyNykgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwot
ICAgIHZhciBjb2RlID0gZS5rZXlDb2RlOworICAgIGVuc3VyZUZvY3VzKGNtKTsKKyAgICBpZiAo
c2lnbmFsRE9NRXZlbnQoY20sIGUpKSByZXR1cm47CiAgICAgLy8gSUUgZG9lcyBzdHJhbmdlIHRo
aW5ncyB3aXRoIGVzY2FwZS4KLSAgICBjbS5kb2Muc2VsLnNoaWZ0ID0gY29kZSA9PSAxNiB8fCBl
LnNoaWZ0S2V5OwotICAgIC8vIEZpcnN0IGdpdmUgb25LZXlFdmVudCBvcHRpb24gYSBjaGFuY2Ug
dG8gaGFuZGxlIHRoaXMuCisgICAgaWYgKGllX3VwdG8xMCAmJiBlLmtleUNvZGUgPT0gMjcpIGUu
cmV0dXJuVmFsdWUgPSBmYWxzZTsKKyAgICB2YXIgY29kZSA9IGUua2V5Q29kZTsKKyAgICBjbS5k
aXNwbGF5LnNoaWZ0ID0gY29kZSA9PSAxNiB8fCBlLnNoaWZ0S2V5OwogICAgIHZhciBoYW5kbGVk
ID0gaGFuZGxlS2V5QmluZGluZyhjbSwgZSk7Ci0gICAgaWYgKG9wZXJhKSB7CisgICAgaWYgKHBy
ZXN0bykgewogICAgICAgbGFzdFN0b3BwZWRLZXkgPSBoYW5kbGVkID8gY29kZSA6IG51bGw7CiAg
ICAgICAvLyBPcGVyYSBoYXMgbm8gY3V0IGV2ZW50Li4uIHdlIHRyeSB0byBhdCBsZWFzdCBjYXRj
aCB0aGUga2V5IGNvbWJvCiAgICAgICBpZiAoIWhhbmRsZWQgJiYgY29kZSA9PSA4OCAmJiAhaGFz
Q29weUV2ZW50ICYmIChtYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXkpKQotICAgICAgICBjbS5y
ZXBsYWNlU2VsZWN0aW9uKCIiKTsKKyAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiIiwgbnVs
bCwgImN1dCIpOworICAgIH0KKworICAgIC8vIFR1cm4gbW91c2UgaW50byBjcm9zc2hhaXIgd2hl
biBBbHQgaXMgaGVsZCBvbiBNYWMuCisgICAgaWYgKGNvZGUgPT0gMTggJiYgIS9cYkNvZGVNaXJy
b3ItY3Jvc3NoYWlyXGIvLnRlc3QoY20uZGlzcGxheS5saW5lRGl2LmNsYXNzTmFtZSkpCisgICAg
ICBzaG93Q3Jvc3NIYWlyKGNtKTsKKyAgfQorCisgIGZ1bmN0aW9uIHNob3dDcm9zc0hhaXIoY20p
IHsKKyAgICB2YXIgbGluZURpdiA9IGNtLmRpc3BsYXkubGluZURpdjsKKyAgICBhZGRDbGFzcyhs
aW5lRGl2LCAiQ29kZU1pcnJvci1jcm9zc2hhaXIiKTsKKworICAgIGZ1bmN0aW9uIHVwKGUpIHsK
KyAgICAgIGlmIChlLmtleUNvZGUgPT0gMTggfHwgIWUuYWx0S2V5KSB7CisgICAgICAgIHJtQ2xh
c3MobGluZURpdiwgIkNvZGVNaXJyb3ItY3Jvc3NoYWlyIik7CisgICAgICAgIG9mZihkb2N1bWVu
dCwgImtleXVwIiwgdXApOworICAgICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZW92ZXIiLCB1cCk7
CisgICAgICB9CiAgICAgfQorICAgIG9uKGRvY3VtZW50LCAia2V5dXAiLCB1cCk7CisgICAgb24o
ZG9jdW1lbnQsICJtb3VzZW92ZXIiLCB1cCk7CisgIH0KKworICBmdW5jdGlvbiBvbktleVVwKGUp
IHsKKyAgICBpZiAoc2lnbmFsRE9NRXZlbnQodGhpcywgZSkpIHJldHVybjsKKyAgICBpZiAoZS5r
ZXlDb2RlID09IDE2KSB0aGlzLmRvYy5zZWwuc2hpZnQgPSBmYWxzZTsKICAgfQoKICAgZnVuY3Rp
b24gb25LZXlQcmVzcyhlKSB7CiAgICAgdmFyIGNtID0gdGhpczsKLSAgICBpZiAoc2lnbmFsRE9N
RXZlbnQoY20sIGUpIHx8IGNtLm9wdGlvbnMub25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5
RXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47CisgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNt
LCBlKSkgcmV0dXJuOwogICAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlLCBjaGFyQ29kZSA9IGUu
Y2hhckNvZGU7Ci0gICAgaWYgKG9wZXJhICYmIGtleUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkpIHts
YXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9Ci0gICAg
aWYgKCgob3BlcmEgJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAxMCkpIHx8IGtodG1sKSAmJiBo
YW5kbGVLZXlCaW5kaW5nKGNtLCBlKSkgcmV0dXJuOworICAgIGlmIChwcmVzdG8gJiYga2V5Q29k
ZSA9PSBsYXN0U3RvcHBlZEtleSkge2xhc3RTdG9wcGVkS2V5ID0gbnVsbDsgZV9wcmV2ZW50RGVm
YXVsdChlKTsgcmV0dXJuO30KKyAgICBpZiAoKChwcmVzdG8gJiYgKCFlLndoaWNoIHx8IGUud2hp
Y2ggPCAxMCkpIHx8IGtodG1sKSAmJiBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKSkgcmV0dXJuOwog
ICAgIHZhciBjaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUgPT0gbnVsbCA/IGtleUNv
ZGUgOiBjaGFyQ29kZSk7Ci0gICAgaWYgKHRoaXMub3B0aW9ucy5lbGVjdHJpY0NoYXJzICYmIHRo
aXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycyAmJgotICAgICAgICB0aGlzLm9wdGlvbnMuc21hcnRJ
bmRlbnQgJiYgIWlzUmVhZE9ubHkodGhpcykgJiYKLSAgICAgICAgdGhpcy5kb2MubW9kZS5lbGVj
dHJpY0NoYXJzLmluZGV4T2YoY2gpID4gLTEpCi0gICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihj
bSwgZnVuY3Rpb24oKSB7aW5kZW50TGluZShjbSwgY20uZG9jLnNlbC50by5saW5lLCAic21hcnQi
KTt9KSwgNzUpOwogICAgIGlmIChoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpKSByZXR1cm47
Ci0gICAgaWYgKGllICYmICFpZV9sdDkpIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBu
dWxsOworICAgIGlmIChpZSAmJiAhaWVfdXB0bzgpIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rp
b24gPSBudWxsOwogICAgIGZhc3RQb2xsKGNtKTsKICAgfQoKKyAgLy8gRk9DVVMvQkxVUiBFVkVO
VFMKKwogICBmdW5jdGlvbiBvbkZvY3VzKGNtKSB7CiAgICAgaWYgKGNtLm9wdGlvbnMucmVhZE9u
bHkgPT0gIm5vY3Vyc29yIikgcmV0dXJuOwogICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgewog
ICAgICAgc2lnbmFsKGNtLCAiZm9jdXMiLCBjbSk7CiAgICAgICBjbS5zdGF0ZS5mb2N1c2VkID0g
dHJ1ZTsKLSAgICAgIGlmIChjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJD
b2RlTWlycm9yLWZvY3VzZWRcYi8pID09IC0xKQotICAgICAgICBjbS5kaXNwbGF5LndyYXBwZXIu
Y2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci1mb2N1c2VkIjsKKyAgICAgIGFkZENsYXNzKGNtLmRp
c3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3ItZm9jdXNlZCIpOwogICAgICAgaWYgKCFjbS5jdXJP
cCkgewotICAgICAgICByZXNldElucHV0KGNtLCB0cnVlKTsKKyAgICAgICAgcmVzZXRJbnB1dChj
bSk7CiAgICAgICAgIGlmICh3ZWJraXQpIHNldFRpbWVvdXQoYmluZChyZXNldElucHV0LCBjbSwg
dHJ1ZSksIDApOyAvLyBJc3N1ZSAjMTczMAogICAgICAgfQogICAgIH0KQEAgLTIxNzUsNDAgKzMx
MDAsNDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGNtLnN0
YXRlLmZvY3VzZWQpIHsKICAgICAgIHNpZ25hbChjbSwgImJsdXIiLCBjbSk7CiAgICAgICBjbS5z
dGF0ZS5mb2N1c2VkID0gZmFsc2U7Ci0gICAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1l
ID0gY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1mb2N1
c2VkIiwgIiIpOworICAgICAgcm1DbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2RlTWlycm9y
LWZvY3VzZWQiKTsKICAgICB9CiAgICAgY2xlYXJJbnRlcnZhbChjbS5kaXNwbGF5LmJsaW5rZXIp
OwotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7aWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSBjbS5k
b2Muc2VsLnNoaWZ0ID0gZmFsc2U7fSwgMTUwKTsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
e2lmICghY20uc3RhdGUuZm9jdXNlZCkgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlO30sIDE1MCk7
CiAgIH0KCisgIC8vIENPTlRFWFQgTUVOVSBIQU5ETElORworCiAgIHZhciBkZXRlY3RpbmdTZWxl
Y3RBbGw7CisgIC8vIFRvIG1ha2UgdGhlIGNvbnRleHQgbWVudSB3b3JrLCB3ZSBuZWVkIHRvIGJy
aWVmbHkgdW5oaWRlIHRoZQorICAvLyB0ZXh0YXJlYSAobWFraW5nIGl0IGFzIHVub2J0cnVzaXZl
IGFzIHBvc3NpYmxlKSB0byBsZXQgdGhlCisgIC8vIHJpZ2h0LWNsaWNrIHRha2UgZWZmZWN0IG9u
IGl0LgogICBmdW5jdGlvbiBvbkNvbnRleHRNZW51KGNtLCBlKSB7CiAgICAgaWYgKHNpZ25hbERP
TUV2ZW50KGNtLCBlLCAiY29udGV4dG1lbnUiKSkgcmV0dXJuOwotICAgIHZhciBkaXNwbGF5ID0g
Y20uZGlzcGxheSwgc2VsID0gY20uZG9jLnNlbDsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3Bs
YXk7CiAgICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkgfHwgY29udGV4dE1lbnVJbkd1
dHRlcihjbSwgZSkpIHJldHVybjsKCiAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSks
IHNjcm9sbFBvcyA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOwotICAgIGlmICghcG9zIHx8
IG9wZXJhKSByZXR1cm47IC8vIE9wZXJhIGlzIGRpZmZpY3VsdC4KKyAgICBpZiAoIXBvcyB8fCBw
cmVzdG8pIHJldHVybjsgLy8gT3BlcmEgaXMgZGlmZmljdWx0LgoKICAgICAvLyBSZXNldCB0aGUg
Y3VycmVudCB0ZXh0IHNlbGVjdGlvbiBvbmx5IGlmIHRoZSBjbGljayBpcyBkb25lIG91dHNpZGUg
b2YgdGhlIHNlbGVjdGlvbgogICAgIC8vIGFuZCAncmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51
JyBvcHRpb24gaXMgdHJ1ZS4KICAgICB2YXIgcmVzZXQgPSBjbS5vcHRpb25zLnJlc2V0U2VsZWN0
aW9uT25Db250ZXh0TWVudTsKLSAgICBpZiAocmVzZXQgJiYgKHBvc0VxKHNlbC5mcm9tLCBzZWwu
dG8pIHx8IHBvc0xlc3MocG9zLCBzZWwuZnJvbSkgfHwgIXBvc0xlc3MocG9zLCBzZWwudG8pKSkK
LSAgICAgIG9wZXJhdGlvbihjbSwgc2V0U2VsZWN0aW9uKShjbS5kb2MsIHBvcywgcG9zKTsKKyAg
ICBpZiAocmVzZXQgJiYgY20uZG9jLnNlbC5jb250YWlucyhwb3MpID09IC0xKQorICAgICAgb3Bl
cmF0aW9uKGNtLCBzZXRTZWxlY3Rpb24pKGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKHBvcyksIHNl
bF9kb250U2Nyb2xsKTsKCiAgICAgdmFyIG9sZENTUyA9IGRpc3BsYXkuaW5wdXQuc3R5bGUuY3Nz
VGV4dDsKICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsK
ICAgICBkaXNwbGF5LmlucHV0LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGZpeGVkOyB3aWR0
aDogMzBweDsgaGVpZ2h0OiAzMHB4OyB0b3A6ICIgKyAoZS5jbGllbnRZIC0gNSkgKwotICAgICAg
InB4OyBsZWZ0OiAiICsgKGUuY2xpZW50WCAtIDUpICsgInB4OyB6LWluZGV4OiAxMDAwOyBiYWNr
Z3JvdW5kOiB3aGl0ZTsgb3V0bGluZTogbm9uZTsiICsKLSAgICAgICJib3JkZXItd2lkdGg6IDA7
IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgLW1zLW9wYWNp
dHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyI7CisgICAgICAicHg7IGxlZnQ6ICIg
KyAoZS5jbGllbnRYIC0gNSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6ICIgKwor
ICAgICAgKGllID8gInJnYmEoMjU1LCAyNTUsIDI1NSwgLjA1KSIgOiAidHJhbnNwYXJlbnQiKSAr
CisgICAgICAiOyBvdXRsaW5lOiBub25lOyBib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7
IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUp
OyI7CiAgICAgZm9jdXNJbnB1dChjbSk7Ci0gICAgcmVzZXRJbnB1dChjbSwgdHJ1ZSk7CisgICAg
cmVzZXRJbnB1dChjbSk7CiAgICAgLy8gQWRkcyAiU2VsZWN0IGFsbCIgdG8gY29udGV4dCBtZW51
IGluIEZGCi0gICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSBkaXNwbGF5LmlucHV0LnZh
bHVlID0gZGlzcGxheS5wcmV2SW5wdXQgPSAiICI7CisgICAgaWYgKCFjbS5zb21ldGhpbmdTZWxl
Y3RlZCgpKSBkaXNwbGF5LmlucHV0LnZhbHVlID0gZGlzcGxheS5wcmV2SW5wdXQgPSAiICI7Cgor
ICAgIC8vIFNlbGVjdC1hbGwgd2lsbCBiZSBncmV5ZWQgb3V0IGlmIHRoZXJlJ3Mgbm90aGluZyB0
byBzZWxlY3QsIHNvCisgICAgLy8gdGhpcyBhZGRzIGEgemVyby13aWR0aCBzcGFjZSBzbyB0aGF0
IHdlIGNhbiBsYXRlciBjaGVjayB3aGV0aGVyCisgICAgLy8gaXQgZ290IHNlbGVjdGVkLgogICAg
IGZ1bmN0aW9uIHByZXBhcmVTZWxlY3RBbGxIYWNrKCkgewogICAgICAgaWYgKGRpc3BsYXkuaW5w
dXQuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkgewotICAgICAgICB2YXIgZXh0dmFsID0gZGlzcGxh
eS5pbnB1dC52YWx1ZSA9ICJcdTIwMGIiICsgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pID8gIiIg
OiBkaXNwbGF5LmlucHV0LnZhbHVlKTsKKyAgICAgICAgdmFyIGV4dHZhbCA9IGRpc3BsYXkuaW5w
dXQudmFsdWUgPSAiXHUyMDBiIiArIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpID8gZGlzcGxheS5p
bnB1dC52YWx1ZSA6ICIiKTsKICAgICAgICAgZGlzcGxheS5wcmV2SW5wdXQgPSAiXHUyMDBiIjsK
ICAgICAgICAgZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFydCA9IDE7IGRpc3BsYXkuaW5wdXQu
c2VsZWN0aW9uRW5kID0gZXh0dmFsLmxlbmd0aDsKICAgICAgIH0KQEAgLTIyMTYsMTUgKzMxNTAs
MTUgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZnVuY3Rpb24gcmVo
aWRlKCkgewogICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2
ZSI7CiAgICAgICBkaXNwbGF5LmlucHV0LnN0eWxlLmNzc1RleHQgPSBvbGRDU1M7Ci0gICAgICBp
ZiAoaWVfbHQ5KSBkaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wID0gZGlzcGxheS5zY3JvbGxl
ci5zY3JvbGxUb3AgPSBzY3JvbGxQb3M7CisgICAgICBpZiAoaWVfdXB0bzgpIGRpc3BsYXkuc2Ny
b2xsYmFyVi5zY3JvbGxUb3AgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHNjcm9sbFBv
czsKICAgICAgIHNsb3dQb2xsKGNtKTsKCiAgICAgICAvLyBUcnkgdG8gZGV0ZWN0IHRoZSB1c2Vy
IGNob29zaW5nIHNlbGVjdC1hbGwKICAgICAgIGlmIChkaXNwbGF5LmlucHV0LnNlbGVjdGlvblN0
YXJ0ICE9IG51bGwpIHsKLSAgICAgICAgaWYgKCFpZSB8fCBpZV9sdDkpIHByZXBhcmVTZWxlY3RB
bGxIYWNrKCk7CisgICAgICAgIGlmICghaWUgfHwgaWVfdXB0bzgpIHByZXBhcmVTZWxlY3RBbGxI
YWNrKCk7CiAgICAgICAgIGNsZWFyVGltZW91dChkZXRlY3RpbmdTZWxlY3RBbGwpOwogICAgICAg
ICB2YXIgaSA9IDAsIHBvbGwgPSBmdW5jdGlvbigpewotICAgICAgICAgIGlmIChkaXNwbGF5LnBy
ZXZJbnB1dCA9PSAiICIgJiYgZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFydCA9PSAwKQorICAg
ICAgICAgIGlmIChkaXNwbGF5LnByZXZJbnB1dCA9PSAiXHUyMDBiIiAmJiBkaXNwbGF5LmlucHV0
LnNlbGVjdGlvblN0YXJ0ID09IDApCiAgICAgICAgICAgICBvcGVyYXRpb24oY20sIGNvbW1hbmRz
LnNlbGVjdEFsbCkoY20pOwogICAgICAgICAgIGVsc2UgaWYgKGkrKyA8IDEwKSBkZXRlY3RpbmdT
ZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBvbGwsIDUwMCk7CiAgICAgICAgICAgZWxzZSByZXNldElu
cHV0KGNtKTsKQEAgLTIyMzMsOCArMzE2Nyw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgICAgfQogICAgIH0KCi0gICAgaWYgKGllICYmICFpZV9sdDkpIHByZXBhcmVT
ZWxlY3RBbGxIYWNrKCk7Ci0gICAgaWYgKGNhcHR1cmVNaWRkbGVDbGljaykgeworICAgIGlmIChp
ZSAmJiAhaWVfdXB0bzgpIHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7CisgICAgaWYgKGNhcHR1cmVS
aWdodENsaWNrKSB7CiAgICAgICBlX3N0b3AoZSk7CiAgICAgICB2YXIgbW91c2V1cCA9IGZ1bmN0
aW9uKCkgewogICAgICAgICBvZmYod2luZG93LCAibW91c2V1cCIsIG1vdXNldXApOwpAQCAtMjI0
Niw1NCArMzE4MCw3MSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9
CiAgIH0KCisgIGZ1bmN0aW9uIGNvbnRleHRNZW51SW5HdXR0ZXIoY20sIGUpIHsKKyAgICBpZiAo
IWhhc0hhbmRsZXIoY20sICJndXR0ZXJDb250ZXh0TWVudSIpKSByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGd1dHRlckV2ZW50KGNtLCBlLCAiZ3V0dGVyQ29udGV4dE1lbnUiLCBmYWxzZSwgc2ln
bmFsKTsKKyAgfQorCiAgIC8vIFVQREFUSU5HCgorICAvLyBDb21wdXRlIHRoZSBwb3NpdGlvbiBv
ZiB0aGUgZW5kIG9mIGEgY2hhbmdlIChpdHMgJ3RvJyBwcm9wZXJ0eQorICAvLyByZWZlcnMgdG8g
dGhlIHByZS1jaGFuZ2UgZW5kKS4KICAgdmFyIGNoYW5nZUVuZCA9IENvZGVNaXJyb3IuY2hhbmdl
RW5kID0gZnVuY3Rpb24oY2hhbmdlKSB7CiAgICAgaWYgKCFjaGFuZ2UudGV4dCkgcmV0dXJuIGNo
YW5nZS50bzsKICAgICByZXR1cm4gUG9zKGNoYW5nZS5mcm9tLmxpbmUgKyBjaGFuZ2UudGV4dC5s
ZW5ndGggLSAxLAogICAgICAgICAgICAgICAgbHN0KGNoYW5nZS50ZXh0KS5sZW5ndGggKyAoY2hh
bmdlLnRleHQubGVuZ3RoID09IDEgPyBjaGFuZ2UuZnJvbS5jaCA6IDApKTsKICAgfTsKCi0gIC8v
IE1ha2Ugc3VyZSBhIHBvc2l0aW9uIHdpbGwgYmUgdmFsaWQgYWZ0ZXIgdGhlIGdpdmVuIGNoYW5n
ZS4KLSAgZnVuY3Rpb24gY2xpcFBvc3RDaGFuZ2UoZG9jLCBjaGFuZ2UsIHBvcykgewotICAgIGlm
ICghcG9zTGVzcyhjaGFuZ2UuZnJvbSwgcG9zKSkgcmV0dXJuIGNsaXBQb3MoZG9jLCBwb3MpOwot
ICAgIHZhciBkaWZmID0gKGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEpIC0gKGNoYW5nZS50by5saW5l
IC0gY2hhbmdlLmZyb20ubGluZSk7Ci0gICAgaWYgKHBvcy5saW5lID4gY2hhbmdlLnRvLmxpbmUg
KyBkaWZmKSB7Ci0gICAgICB2YXIgcHJlTGluZSA9IHBvcy5saW5lIC0gZGlmZiwgbGFzdExpbmUg
PSBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE7Ci0gICAgICBpZiAocHJlTGluZSA+IGxhc3RMaW5l
KSByZXR1cm4gUG9zKGxhc3RMaW5lLCBnZXRMaW5lKGRvYywgbGFzdExpbmUpLnRleHQubGVuZ3Ro
KTsKLSAgICAgIHJldHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywgcHJlTGluZSkudGV4
dC5sZW5ndGgpOwotICAgIH0KLSAgICBpZiAocG9zLmxpbmUgPT0gY2hhbmdlLnRvLmxpbmUgKyBk
aWZmKQotICAgICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGxzdChjaGFuZ2UudGV4dCkubGVuZ3Ro
ICsgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxID8gY2hhbmdlLmZyb20uY2ggOiAwKSArCi0gICAg
ICAgICAgICAgICAgICAgICAgIGdldExpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSkudGV4dC5sZW5n
dGggLSBjaGFuZ2UudG8uY2gpOwotICAgIHZhciBpbnNpZGUgPSBwb3MubGluZSAtIGNoYW5nZS5m
cm9tLmxpbmU7Ci0gICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGNoYW5nZS50ZXh0W2luc2lkZV0u
bGVuZ3RoICsgKGluc2lkZSA/IDAgOiBjaGFuZ2UuZnJvbS5jaCkpOwotICB9Ci0KLSAgLy8gSGlu
dCBjYW4gYmUgbnVsbHwiZW5kInwic3RhcnQifCJhcm91bmQifHthbmNob3IsaGVhZH0KLSAgZnVu
Y3Rpb24gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCBoaW50KSB7Ci0gICAgaWYg
KGhpbnQgJiYgdHlwZW9mIGhpbnQgPT0gIm9iamVjdCIpIC8vIEFzc3VtZWQgdG8gYmUge2FuY2hv
ciwgaGVhZH0gb2JqZWN0Ci0gICAgICByZXR1cm4ge2FuY2hvcjogY2xpcFBvc3RDaGFuZ2UoZG9j
LCBjaGFuZ2UsIGhpbnQuYW5jaG9yKSwKLSAgICAgICAgICAgICAgaGVhZDogY2xpcFBvc3RDaGFu
Z2UoZG9jLCBjaGFuZ2UsIGhpbnQuaGVhZCl9OwotCi0gICAgaWYgKGhpbnQgPT0gInN0YXJ0Iikg
cmV0dXJuIHthbmNob3I6IGNoYW5nZS5mcm9tLCBoZWFkOiBjaGFuZ2UuZnJvbX07Ci0KLSAgICB2
YXIgZW5kID0gY2hhbmdlRW5kKGNoYW5nZSk7Ci0gICAgaWYgKGhpbnQgPT0gImFyb3VuZCIpIHJl
dHVybiB7YW5jaG9yOiBjaGFuZ2UuZnJvbSwgaGVhZDogZW5kfTsKLSAgICBpZiAoaGludCA9PSAi
ZW5kIikgcmV0dXJuIHthbmNob3I6IGVuZCwgaGVhZDogZW5kfTsKLQotICAgIC8vIGhpbnQgaXMg
bnVsbCwgbGVhdmUgdGhlIHNlbGVjdGlvbiBhbG9uZSBhcyBtdWNoIGFzIHBvc3NpYmxlCi0gICAg
dmFyIGFkanVzdFBvcyA9IGZ1bmN0aW9uKHBvcykgewotICAgICAgaWYgKHBvc0xlc3MocG9zLCBj
aGFuZ2UuZnJvbSkpIHJldHVybiBwb3M7Ci0gICAgICBpZiAoIXBvc0xlc3MoY2hhbmdlLnRvLCBw
b3MpKSByZXR1cm4gZW5kOwotCi0gICAgICB2YXIgbGluZSA9IHBvcy5saW5lICsgY2hhbmdlLnRl
eHQubGVuZ3RoIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkgLSAxLCBjaCA9
IHBvcy5jaDsKLSAgICAgIGlmIChwb3MubGluZSA9PSBjaGFuZ2UudG8ubGluZSkgY2ggKz0gZW5k
LmNoIC0gY2hhbmdlLnRvLmNoOwotICAgICAgcmV0dXJuIFBvcyhsaW5lLCBjaCk7Ci0gICAgfTsK
LSAgICByZXR1cm4ge2FuY2hvcjogYWRqdXN0UG9zKGRvYy5zZWwuYW5jaG9yKSwgaGVhZDogYWRq
dXN0UG9zKGRvYy5zZWwuaGVhZCl9OworICAvLyBBZGp1c3QgYSBwb3NpdGlvbiB0byByZWZlciB0
byB0aGUgcG9zdC1jaGFuZ2UgcG9zaXRpb24gb2YgdGhlCisgIC8vIHNhbWUgdGV4dCwgb3IgdGhl
IGVuZCBvZiB0aGUgY2hhbmdlIGlmIHRoZSBjaGFuZ2UgY292ZXJzIGl0LgorICBmdW5jdGlvbiBh
ZGp1c3RGb3JDaGFuZ2UocG9zLCBjaGFuZ2UpIHsKKyAgICBpZiAoY21wKHBvcywgY2hhbmdlLmZy
b20pIDwgMCkgcmV0dXJuIHBvczsKKyAgICBpZiAoY21wKHBvcywgY2hhbmdlLnRvKSA8PSAwKSBy
ZXR1cm4gY2hhbmdlRW5kKGNoYW5nZSk7CisKKyAgICB2YXIgbGluZSA9IHBvcy5saW5lICsgY2hh
bmdlLnRleHQubGVuZ3RoIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkgLSAx
LCBjaCA9IHBvcy5jaDsKKyAgICBpZiAocG9zLmxpbmUgPT0gY2hhbmdlLnRvLmxpbmUpIGNoICs9
IGNoYW5nZUVuZChjaGFuZ2UpLmNoIC0gY2hhbmdlLnRvLmNoOworICAgIHJldHVybiBQb3MobGlu
ZSwgY2gpOwogICB9CgorICBmdW5jdGlvbiBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFu
Z2UpIHsKKyAgICB2YXIgb3V0ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2Muc2Vs
LnJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNb
aV07CisgICAgICBvdXQucHVzaChuZXcgUmFuZ2UoYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmFuY2hv
ciwgY2hhbmdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RGb3JDaGFuZ2UocmFu
Z2UuaGVhZCwgY2hhbmdlKSkpOworICAgIH0KKyAgICByZXR1cm4gbm9ybWFsaXplU2VsZWN0aW9u
KG91dCwgZG9jLnNlbC5wcmltSW5kZXgpOworICB9CisKKyAgZnVuY3Rpb24gb2Zmc2V0UG9zKHBv
cywgb2xkLCBudykgeworICAgIGlmIChwb3MubGluZSA9PSBvbGQubGluZSkKKyAgICAgIHJldHVy
biBQb3MobncubGluZSwgcG9zLmNoIC0gb2xkLmNoICsgbncuY2gpOworICAgIGVsc2UKKyAgICAg
IHJldHVybiBQb3MobncubGluZSArIChwb3MubGluZSAtIG9sZC5saW5lKSwgcG9zLmNoKTsKKyAg
fQorCisgIC8vIFVzZWQgYnkgcmVwbGFjZVNlbGVjdGlvbnMgdG8gYWxsb3cgbW92aW5nIHRoZSBz
ZWxlY3Rpb24gdG8gdGhlCisgIC8vIHN0YXJ0IG9yIGFyb3VuZCB0aGUgcmVwbGFjZWQgdGVzdC4g
SGludCBtYXkgYmUgInN0YXJ0IiBvciAiYXJvdW5kIi4KKyAgZnVuY3Rpb24gY29tcHV0ZVJlcGxh
Y2VkU2VsKGRvYywgY2hhbmdlcywgaGludCkgeworICAgIHZhciBvdXQgPSBbXTsKKyAgICB2YXIg
b2xkUHJldiA9IFBvcyhkb2MuZmlyc3QsIDApLCBuZXdQcmV2ID0gb2xkUHJldjsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBjaGFuZ2Ug
PSBjaGFuZ2VzW2ldOworICAgICAgdmFyIGZyb20gPSBvZmZzZXRQb3MoY2hhbmdlLmZyb20sIG9s
ZFByZXYsIG5ld1ByZXYpOworICAgICAgdmFyIHRvID0gb2Zmc2V0UG9zKGNoYW5nZUVuZChjaGFu
Z2UpLCBvbGRQcmV2LCBuZXdQcmV2KTsKKyAgICAgIG9sZFByZXYgPSBjaGFuZ2UudG87CisgICAg
ICBuZXdQcmV2ID0gdG87CisgICAgICBpZiAoaGludCA9PSAiYXJvdW5kIikgeworICAgICAgICB2
YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXSwgaW52ID0gY21wKHJhbmdlLmhlYWQsIHJhbmdl
LmFuY2hvcikgPCAwOworICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2UoaW52ID8gdG8gOiBmcm9t
LCBpbnYgPyBmcm9tIDogdG8pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgb3V0W2ldID0gbmV3
IFJhbmdlKGZyb20sIGZyb20pOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbmV3IFNlbGVj
dGlvbihvdXQsIGRvYy5zZWwucHJpbUluZGV4KTsKKyAgfQorCisgIC8vIEFsbG93ICJiZWZvcmVD
aGFuZ2UiIGV2ZW50IGhhbmRsZXJzIHRvIGluZmx1ZW5jZSBhIGNoYW5nZQogICBmdW5jdGlvbiBm
aWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIHVwZGF0ZSkgewogICAgIHZhciBvYmogPSB7CiAgICAg
ICBjYW5jZWxlZDogZmFsc2UsCkBAIC0yMzE2LDExICszMjY3LDExIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiB7ZnJvbTogb2JqLmZyb20sIHRvOiBvYmou
dG8sIHRleHQ6IG9iai50ZXh0LCBvcmlnaW46IG9iai5vcmlnaW59OwogICB9CgotICAvLyBSZXBs
YWNlIHRoZSByYW5nZSBmcm9tIGZyb20gdG8gdG8gYnkgdGhlIHN0cmluZ3MgaW4gcmVwbGFjZW1l
bnQuCi0gIC8vIGNoYW5nZSBpcyBhIHtmcm9tLCB0bywgdGV4dCBbLCBvcmlnaW5dfSBvYmplY3QK
LSAgZnVuY3Rpb24gbWFrZUNoYW5nZShkb2MsIGNoYW5nZSwgc2VsVXBkYXRlLCBpZ25vcmVSZWFk
T25seSkgeworICAvLyBBcHBseSBhIGNoYW5nZSB0byBhIGRvY3VtZW50LCBhbmQgYWRkIGl0IHRv
IHRoZSBkb2N1bWVudCdzCisgIC8vIGhpc3RvcnksIGFuZCBwcm9wYWdhdGluZyBpdCB0byBhbGwg
bGlua2VkIGRvY3VtZW50cy4KKyAgZnVuY3Rpb24gbWFrZUNoYW5nZShkb2MsIGNoYW5nZSwgaWdu
b3JlUmVhZE9ubHkpIHsKICAgICBpZiAoZG9jLmNtKSB7Ci0gICAgICBpZiAoIWRvYy5jbS5jdXJP
cCkgcmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1ha2VDaGFuZ2UpKGRvYywgY2hhbmdlLCBzZWxV
cGRhdGUsIGlnbm9yZVJlYWRPbmx5KTsKKyAgICAgIGlmICghZG9jLmNtLmN1ck9wKSByZXR1cm4g
b3BlcmF0aW9uKGRvYy5jbSwgbWFrZUNoYW5nZSkoZG9jLCBjaGFuZ2UsIGlnbm9yZVJlYWRPbmx5
KTsKICAgICAgIGlmIChkb2MuY20uc3RhdGUuc3VwcHJlc3NFZGl0cykgcmV0dXJuOwogICAgIH0K
CkBAIC0yMzMzLDE5ICszMjg0LDE3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgIC8vIG9mIHJlYWQtb25seSBzcGFucyBpbiBpdHMgcmFuZ2UuCiAgICAgdmFyIHNwbGl0
ID0gc2F3UmVhZE9ubHlTcGFucyAmJiAhaWdub3JlUmVhZE9ubHkgJiYgcmVtb3ZlUmVhZE9ubHlS
YW5nZXMoZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKTsKICAgICBpZiAoc3BsaXQpIHsKLSAg
ICAgIGZvciAodmFyIGkgPSBzcGxpdC5sZW5ndGggLSAxOyBpID49IDE7IC0taSkKLSAgICAgICAg
bWFrZUNoYW5nZU5vUmVhZG9ubHkoZG9jLCB7ZnJvbTogc3BsaXRbaV0uZnJvbSwgdG86IHNwbGl0
W2ldLnRvLCB0ZXh0OiBbIiJdfSk7Ci0gICAgICBpZiAoc3BsaXQubGVuZ3RoKQotICAgICAgICBt
YWtlQ2hhbmdlTm9SZWFkb25seShkb2MsIHtmcm9tOiBzcGxpdFswXS5mcm9tLCB0bzogc3BsaXRb
MF0udG8sIHRleHQ6IGNoYW5nZS50ZXh0fSwgc2VsVXBkYXRlKTsKKyAgICAgIGZvciAodmFyIGkg
PSBzcGxpdC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgbWFrZUNoYW5nZUlubmVy
KGRvYywge2Zyb206IHNwbGl0W2ldLmZyb20sIHRvOiBzcGxpdFtpXS50bywgdGV4dDogaSA/IFsi
Il0gOiBjaGFuZ2UudGV4dH0pOwogICAgIH0gZWxzZSB7Ci0gICAgICBtYWtlQ2hhbmdlTm9SZWFk
b25seShkb2MsIGNoYW5nZSwgc2VsVXBkYXRlKTsKKyAgICAgIG1ha2VDaGFuZ2VJbm5lcihkb2Ms
IGNoYW5nZSk7CiAgICAgfQogICB9CgotICBmdW5jdGlvbiBtYWtlQ2hhbmdlTm9SZWFkb25seShk
b2MsIGNoYW5nZSwgc2VsVXBkYXRlKSB7Ci0gICAgaWYgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAx
ICYmIGNoYW5nZS50ZXh0WzBdID09ICIiICYmIHBvc0VxKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8p
KSByZXR1cm47Ci0gICAgdmFyIHNlbEFmdGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywg
Y2hhbmdlLCBzZWxVcGRhdGUpOwotICAgIGFkZFRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0
ZXIsIGRvYy5jbSA/IGRvYy5jbS5jdXJPcC5pZCA6IE5hTik7CisgIGZ1bmN0aW9uIG1ha2VDaGFu
Z2VJbm5lcihkb2MsIGNoYW5nZSkgeworICAgIGlmIChjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSAm
JiBjaGFuZ2UudGV4dFswXSA9PSAiIiAmJiBjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0g
MCkgcmV0dXJuOworICAgIHZhciBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2Ms
IGNoYW5nZSk7CisgICAgYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRlciwg
ZG9jLmNtID8gZG9jLmNtLmN1ck9wLmlkIDogTmFOKTsKCiAgICAgbWFrZUNoYW5nZVNpbmdsZURv
Yyhkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFu
Z2UpKTsKICAgICB2YXIgcmViYXNlZCA9IFtdOwpAQCAtMjM1OSwxNyArMzMwOCw0MSBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9KTsKICAgfQoKLSAgZnVuY3Rpb24g
bWFrZUNoYW5nZUZyb21IaXN0b3J5KGRvYywgdHlwZSkgeworICAvLyBSZXZlcnQgYSBjaGFuZ2Ug
c3RvcmVkIGluIGEgZG9jdW1lbnQncyBoaXN0b3J5LgorICBmdW5jdGlvbiBtYWtlQ2hhbmdlRnJv
bUhpc3RvcnkoZG9jLCB0eXBlLCBhbGxvd1NlbGVjdGlvbk9ubHkpIHsKICAgICBpZiAoZG9jLmNt
ICYmIGRvYy5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKSByZXR1cm47CgotICAgIHZhciBoaXN0ID0g
ZG9jLmhpc3Rvcnk7Ci0gICAgdmFyIGV2ZW50ID0gKHR5cGUgPT0gInVuZG8iID8gaGlzdC5kb25l
IDogaGlzdC51bmRvbmUpLnBvcCgpOwotICAgIGlmICghZXZlbnQpIHJldHVybjsKKyAgICB2YXIg
aGlzdCA9IGRvYy5oaXN0b3J5LCBldmVudCwgc2VsQWZ0ZXIgPSBkb2Muc2VsOworICAgIHZhciBz
b3VyY2UgPSB0eXBlID09ICJ1bmRvIiA/IGhpc3QuZG9uZSA6IGhpc3QudW5kb25lLCBkZXN0ID0g
dHlwZSA9PSAidW5kbyIgPyBoaXN0LnVuZG9uZSA6IGhpc3QuZG9uZTsKKworICAgIC8vIFZlcmlm
eSB0aGF0IHRoZXJlIGlzIGEgdXNlYWJsZSBldmVudCAoc28gdGhhdCBjdHJsLXogd29uJ3QKKyAg
ICAvLyBuZWVkbGVzc2x5IGNsZWFyIHNlbGVjdGlvbiBldmVudHMpCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHsKKyAgICAgIGV2ZW50ID0gc291cmNlW2ldOwor
ICAgICAgaWYgKGFsbG93U2VsZWN0aW9uT25seSA/IGV2ZW50LnJhbmdlcyAmJiAhZXZlbnQuZXF1
YWxzKGRvYy5zZWwpIDogIWV2ZW50LnJhbmdlcykKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGlmIChpID09IHNvdXJjZS5sZW5ndGgpIHJldHVybjsKKyAgICBoaXN0Lmxhc3RPcmlnaW4gPSBo
aXN0Lmxhc3RTZWxPcmlnaW4gPSBudWxsOworCisgICAgZm9yICg7OykgeworICAgICAgZXZlbnQg
PSBzb3VyY2UucG9wKCk7CisgICAgICBpZiAoZXZlbnQucmFuZ2VzKSB7CisgICAgICAgIHB1c2hT
ZWxlY3Rpb25Ub0hpc3RvcnkoZXZlbnQsIGRlc3QpOworICAgICAgICBpZiAoYWxsb3dTZWxlY3Rp
b25Pbmx5ICYmICFldmVudC5lcXVhbHMoZG9jLnNlbCkpIHsKKyAgICAgICAgICBzZXRTZWxlY3Rp
b24oZG9jLCBldmVudCwge2NsZWFyUmVkbzogZmFsc2V9KTsKKyAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgc2VsQWZ0ZXIgPSBldmVudDsKKyAgICAgIH0KKyAgICAgIGVsc2Ug
YnJlYWs7CisgICAgfQoKLSAgICB2YXIgYW50aSA9IHtjaGFuZ2VzOiBbXSwgYW5jaG9yQmVmb3Jl
OiBldmVudC5hbmNob3JBZnRlciwgaGVhZEJlZm9yZTogZXZlbnQuaGVhZEFmdGVyLAotICAgICAg
ICAgICAgICAgIGFuY2hvckFmdGVyOiBldmVudC5hbmNob3JCZWZvcmUsIGhlYWRBZnRlcjogZXZl
bnQuaGVhZEJlZm9yZSwKLSAgICAgICAgICAgICAgICBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRp
b259OwotICAgICh0eXBlID09ICJ1bmRvIiA/IGhpc3QudW5kb25lIDogaGlzdC5kb25lKS5wdXNo
KGFudGkpOworICAgIC8vIEJ1aWxkIHVwIGEgcmV2ZXJzZSBjaGFuZ2Ugb2JqZWN0IHRvIGFkZCB0
byB0aGUgb3Bwb3NpdGUgaGlzdG9yeQorICAgIC8vIHN0YWNrIChyZWRvIHdoZW4gdW5kb2luZywg
YW5kIHZpY2UgdmVyc2EpLgorICAgIHZhciBhbnRpQ2hhbmdlcyA9IFtdOworICAgIHB1c2hTZWxl
Y3Rpb25Ub0hpc3Rvcnkoc2VsQWZ0ZXIsIGRlc3QpOworICAgIGRlc3QucHVzaCh7Y2hhbmdlczog
YW50aUNoYW5nZXMsIGdlbmVyYXRpb246IGhpc3QuZ2VuZXJhdGlvbn0pOwogICAgIGhpc3QuZ2Vu
ZXJhdGlvbiA9IGV2ZW50LmdlbmVyYXRpb24gfHwgKytoaXN0Lm1heEdlbmVyYXRpb247CgogICAg
IHZhciBmaWx0ZXIgPSBoYXNIYW5kbGVyKGRvYywgImJlZm9yZUNoYW5nZSIpIHx8IGRvYy5jbSAm
JiBoYXNIYW5kbGVyKGRvYy5jbSwgImJlZm9yZUNoYW5nZSIpOwpAQCAtMjM3OCwxNyArMzM1MSwx
OCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBjaGFuZ2Ug
PSBldmVudC5jaGFuZ2VzW2ldOwogICAgICAgY2hhbmdlLm9yaWdpbiA9IHR5cGU7CiAgICAgICBp
ZiAoZmlsdGVyICYmICFmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIGZhbHNlKSkgewotICAgICAg
ICAodHlwZSA9PSAidW5kbyIgPyBoaXN0LmRvbmUgOiBoaXN0LnVuZG9uZSkubGVuZ3RoID0gMDsK
KyAgICAgICAgc291cmNlLmxlbmd0aCA9IDA7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KCi0g
ICAgICBhbnRpLmNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5n
ZSkpOworICAgICAgYW50aUNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2Ms
IGNoYW5nZSkpOwoKLSAgICAgIHZhciBhZnRlciA9IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2Uo
ZG9jLCBjaGFuZ2UsIG51bGwpCi0gICAgICAgICAgICAgICAgICAgIDoge2FuY2hvcjogZXZlbnQu
YW5jaG9yQmVmb3JlLCBoZWFkOiBldmVudC5oZWFkQmVmb3JlfTsKKyAgICAgIHZhciBhZnRlciA9
IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIG51bGwpIDogbHN0KHNvdXJj
ZSk7CiAgICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBhZnRlciwgbWVyZ2VP
bGRTcGFucyhkb2MsIGNoYW5nZSkpOworICAgICAgaWYgKGRvYy5jbSkgZW5zdXJlQ3Vyc29yVmlz
aWJsZShkb2MuY20pOwogICAgICAgdmFyIHJlYmFzZWQgPSBbXTsKCisgICAgICAvLyBQcm9wYWdh
dGUgdG8gdGhlIGxpbmtlZCBkb2N1bWVudHMKICAgICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlv
bihkb2MsIHNoYXJlZEhpc3QpIHsKICAgICAgICAgaWYgKCFzaGFyZWRIaXN0ICYmIGluZGV4T2Yo
cmViYXNlZCwgZG9jLmhpc3RvcnkpID09IC0xKSB7CiAgICAgICAgICAgcmViYXNlSGlzdChkb2Mu
aGlzdG9yeSwgY2hhbmdlKTsKQEAgLTIzOTksMTQgKzMzNzMsMTkgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CgorICAvLyBTdWItdmlld3MgbmVlZCB0aGVp
ciBsaW5lIG51bWJlcnMgc2hpZnRlZCB3aGVuIHRleHQgaXMgYWRkZWQKKyAgLy8gYWJvdmUgb3Ig
YmVsb3cgdGhlbSBpbiB0aGUgcGFyZW50IGRvY3VtZW50LgogICBmdW5jdGlvbiBzaGlmdERvYyhk
b2MsIGRpc3RhbmNlKSB7Ci0gICAgZnVuY3Rpb24gc2hpZnRQb3MocG9zKSB7cmV0dXJuIFBvcyhw
b3MubGluZSArIGRpc3RhbmNlLCBwb3MuY2gpO30KICAgICBkb2MuZmlyc3QgKz0gZGlzdGFuY2U7
Ci0gICAgaWYgKGRvYy5jbSkgcmVnQ2hhbmdlKGRvYy5jbSwgZG9jLmZpcnN0LCBkb2MuZmlyc3Qs
IGRpc3RhbmNlKTsKLSAgICBkb2Muc2VsLmhlYWQgPSBzaGlmdFBvcyhkb2Muc2VsLmhlYWQpOyBk
b2Muc2VsLmFuY2hvciA9IHNoaWZ0UG9zKGRvYy5zZWwuYW5jaG9yKTsKLSAgICBkb2Muc2VsLmZy
b20gPSBzaGlmdFBvcyhkb2Muc2VsLmZyb20pOyBkb2Muc2VsLnRvID0gc2hpZnRQb3MoZG9jLnNl
bC50byk7CisgICAgZG9jLnNlbCA9IG5ldyBTZWxlY3Rpb24obWFwKGRvYy5zZWwucmFuZ2VzLCBm
dW5jdGlvbihyYW5nZSkgeworICAgICAgcmV0dXJuIG5ldyBSYW5nZShQb3MocmFuZ2UuYW5jaG9y
LmxpbmUgKyBkaXN0YW5jZSwgcmFuZ2UuYW5jaG9yLmNoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgUG9zKHJhbmdlLmhlYWQubGluZSArIGRpc3RhbmNlLCByYW5nZS5oZWFkLmNoKSk7CisgICAg
fSksIGRvYy5zZWwucHJpbUluZGV4KTsKKyAgICBpZiAoZG9jLmNtKSByZWdDaGFuZ2UoZG9jLmNt
LCBkb2MuZmlyc3QsIGRvYy5maXJzdCAtIGRpc3RhbmNlLCBkaXN0YW5jZSk7CiAgIH0KCisgIC8v
IE1vcmUgbG93ZXItbGV2ZWwgY2hhbmdlIGZ1bmN0aW9uLCBoYW5kbGluZyBvbmx5IGEgc2luZ2xl
IGRvY3VtZW50CisgIC8vIChub3QgbGlua2VkIG9uZXMpLgogICBmdW5jdGlvbiBtYWtlQ2hhbmdl
U2luZ2xlRG9jKGRvYywgY2hhbmdlLCBzZWxBZnRlciwgc3BhbnMpIHsKICAgICBpZiAoZG9jLmNt
ICYmICFkb2MuY20uY3VyT3ApCiAgICAgICByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFrZUNo
YW5nZVNpbmdsZURvYykoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzcGFucyk7CkBAIC0yNDMzLDE2
ICszNDEyLDE5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGNoYW5n
ZS5yZW1vdmVkID0gZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pOwoKICAg
ICBpZiAoIXNlbEFmdGVyKSBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNo
YW5nZSwgbnVsbCk7Ci0gICAgaWYgKGRvYy5jbSkgbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9y
KGRvYy5jbSwgY2hhbmdlLCBzcGFucywgc2VsQWZ0ZXIpOwotICAgIGVsc2UgdXBkYXRlRG9jKGRv
YywgY2hhbmdlLCBzcGFucywgc2VsQWZ0ZXIpOworICAgIGlmIChkb2MuY20pIG1ha2VDaGFuZ2VT
aW5nbGVEb2NJbkVkaXRvcihkb2MuY20sIGNoYW5nZSwgc3BhbnMpOworICAgIGVsc2UgdXBkYXRl
RG9jKGRvYywgY2hhbmdlLCBzcGFucyk7CisgICAgc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2Vs
QWZ0ZXIsIHNlbF9kb250U2Nyb2xsKTsKICAgfQoKLSAgZnVuY3Rpb24gbWFrZUNoYW5nZVNpbmds
ZURvY0luRWRpdG9yKGNtLCBjaGFuZ2UsIHNwYW5zLCBzZWxBZnRlcikgeworICAvLyBIYW5kbGUg
dGhlIGludGVyYWN0aW9uIG9mIGEgY2hhbmdlIHRvIGEgZG9jdW1lbnQgd2l0aCB0aGUgZWRpdG9y
CisgIC8vIHRoYXQgdGhpcyBkb2N1bWVudCBpcyBwYXJ0IG9mLgorICBmdW5jdGlvbiBtYWtlQ2hh
bmdlU2luZ2xlRG9jSW5FZGl0b3IoY20sIGNoYW5nZSwgc3BhbnMpIHsKICAgICB2YXIgZG9jID0g
Y20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgZnJvbSA9IGNoYW5nZS5mcm9tLCB0byA9IGNo
YW5nZS50bzsKCiAgICAgdmFyIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlLCBjaGVja1dpZHRo
U3RhcnQgPSBmcm9tLmxpbmU7CiAgICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgewot
ICAgICAgY2hlY2tXaWR0aFN0YXJ0ID0gbGluZU5vKHZpc3VhbExpbmUoZG9jLCBnZXRMaW5lKGRv
YywgZnJvbS5saW5lKSkpOworICAgICAgY2hlY2tXaWR0aFN0YXJ0ID0gbGluZU5vKHZpc3VhbExp
bmUoZ2V0TGluZShkb2MsIGZyb20ubGluZSkpKTsKICAgICAgIGRvYy5pdGVyKGNoZWNrV2lkdGhT
dGFydCwgdG8ubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgaWYgKGxpbmUgPT0g
ZGlzcGxheS5tYXhMaW5lKSB7CiAgICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gdHJ1ZTsK
QEAgLTI0NTEsMTQgKzM0MzMsMTQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICB9KTsKICAgICB9CgotICAgIGlmICghcG9zTGVzcyhkb2Muc2VsLmhlYWQsIGNoYW5n
ZS5mcm9tKSAmJiAhcG9zTGVzcyhjaGFuZ2UudG8sIGRvYy5zZWwuaGVhZCkpCisgICAgaWYgKGRv
Yy5zZWwuY29udGFpbnMoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPiAtMSkKICAgICAgIGNtLmN1
ck9wLmN1cnNvckFjdGl2aXR5ID0gdHJ1ZTsKCi0gICAgdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBz
cGFucywgc2VsQWZ0ZXIsIGVzdGltYXRlSGVpZ2h0KGNtKSk7CisgICAgdXBkYXRlRG9jKGRvYywg
Y2hhbmdlLCBzcGFucywgZXN0aW1hdGVIZWlnaHQoY20pKTsKCiAgICAgaWYgKCFjbS5vcHRpb25z
LmxpbmVXcmFwcGluZykgewogICAgICAgZG9jLml0ZXIoY2hlY2tXaWR0aFN0YXJ0LCBmcm9tLmxp
bmUgKyBjaGFuZ2UudGV4dC5sZW5ndGgsIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgdmFyIGxl
biA9IGxpbmVMZW5ndGgoZG9jLCBsaW5lKTsKKyAgICAgICAgdmFyIGxlbiA9IGxpbmVMZW5ndGgo
bGluZSk7CiAgICAgICAgIGlmIChsZW4gPiBkaXNwbGF5Lm1heExpbmVMZW5ndGgpIHsKICAgICAg
ICAgICBkaXNwbGF5Lm1heExpbmUgPSBsaW5lOwogICAgICAgICAgIGRpc3BsYXkubWF4TGluZUxl
bmd0aCA9IGxlbjsKQEAgLTI0NzUsMTkyICszNDU3LDQ5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewoKICAgICB2YXIgbGVuZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtICh0
by5saW5lIC0gZnJvbS5saW5lKSAtIDE7CiAgICAgLy8gUmVtZW1iZXIgdGhhdCB0aGVzZSBsaW5l
cyBjaGFuZ2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXkKLSAgICByZWdDaGFuZ2UoY20sIGZy
b20ubGluZSwgdG8ubGluZSArIDEsIGxlbmRpZmYpOwotCi0gICAgaWYgKGhhc0hhbmRsZXIoY20s
ICJjaGFuZ2UiKSkgewotICAgICAgdmFyIGNoYW5nZU9iaiA9IHtmcm9tOiBmcm9tLCB0bzogdG8s
Ci0gICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGNoYW5nZS50ZXh0LAotICAgICAgICAgICAg
ICAgICAgICAgICByZW1vdmVkOiBjaGFuZ2UucmVtb3ZlZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgb3JpZ2luOiBjaGFuZ2Uub3JpZ2lufTsKLSAgICAgIGlmIChjbS5jdXJPcC50ZXh0Q2hhbmdl
ZCkgewotICAgICAgICBmb3IgKHZhciBjdXIgPSBjbS5jdXJPcC50ZXh0Q2hhbmdlZDsgY3VyLm5l
eHQ7IGN1ciA9IGN1ci5uZXh0KSB7fQotICAgICAgICBjdXIubmV4dCA9IGNoYW5nZU9iajsKLSAg
ICAgIH0gZWxzZSBjbS5jdXJPcC50ZXh0Q2hhbmdlZCA9IGNoYW5nZU9iajsKLSAgICB9CisgICAg
aWYgKGZyb20ubGluZSA9PSB0by5saW5lICYmIGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxICYmICFp
c1dob2xlTGluZVVwZGF0ZShjbS5kb2MsIGNoYW5nZSkpCisgICAgICByZWdMaW5lQ2hhbmdlKGNt
LCBmcm9tLmxpbmUsICJ0ZXh0Iik7CisgICAgZWxzZQorICAgICAgcmVnQ2hhbmdlKGNtLCBmcm9t
LmxpbmUsIHRvLmxpbmUgKyAxLCBsZW5kaWZmKTsKKworICAgIGlmIChoYXNIYW5kbGVyKGNtLCAi
Y2hhbmdlIikgfHwgaGFzSGFuZGxlcihjbSwgImNoYW5nZXMiKSkKKyAgICAgIChjbS5jdXJPcC5j
aGFuZ2VPYmpzIHx8IChjbS5jdXJPcC5jaGFuZ2VPYmpzID0gW10pKS5wdXNoKHsKKyAgICAgICAg
ZnJvbTogZnJvbSwgdG86IHRvLAorICAgICAgICB0ZXh0OiBjaGFuZ2UudGV4dCwKKyAgICAgICAg
cmVtb3ZlZDogY2hhbmdlLnJlbW92ZWQsCisgICAgICAgIG9yaWdpbjogY2hhbmdlLm9yaWdpbgor
ICAgICAgfSk7CiAgIH0KCiAgIGZ1bmN0aW9uIHJlcGxhY2VSYW5nZShkb2MsIGNvZGUsIGZyb20s
IHRvLCBvcmlnaW4pIHsKICAgICBpZiAoIXRvKSB0byA9IGZyb207Ci0gICAgaWYgKHBvc0xlc3Mo
dG8sIGZyb20pKSB7IHZhciB0bXAgPSB0bzsgdG8gPSBmcm9tOyBmcm9tID0gdG1wOyB9CisgICAg
aWYgKGNtcCh0bywgZnJvbSkgPCAwKSB7IHZhciB0bXAgPSB0bzsgdG8gPSBmcm9tOyBmcm9tID0g
dG1wOyB9CiAgICAgaWYgKHR5cGVvZiBjb2RlID09ICJzdHJpbmciKSBjb2RlID0gc3BsaXRMaW5l
cyhjb2RlKTsKLSAgICBtYWtlQ2hhbmdlKGRvYywge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDog
Y29kZSwgb3JpZ2luOiBvcmlnaW59LCBudWxsKTsKLSAgfQotCi0gIC8vIFBPU0lUSU9OIE9CSkVD
VAotCi0gIGZ1bmN0aW9uIFBvcyhsaW5lLCBjaCkgewotICAgIGlmICghKHRoaXMgaW5zdGFuY2Vv
ZiBQb3MpKSByZXR1cm4gbmV3IFBvcyhsaW5lLCBjaCk7Ci0gICAgdGhpcy5saW5lID0gbGluZTsg
dGhpcy5jaCA9IGNoOwotICB9Ci0gIENvZGVNaXJyb3IuUG9zID0gUG9zOwotCi0gIGZ1bmN0aW9u
IHBvc0VxKGEsIGIpIHtyZXR1cm4gYS5saW5lID09IGIubGluZSAmJiBhLmNoID09IGIuY2g7fQot
ICBmdW5jdGlvbiBwb3NMZXNzKGEsIGIpIHtyZXR1cm4gYS5saW5lIDwgYi5saW5lIHx8IChhLmxp
bmUgPT0gYi5saW5lICYmIGEuY2ggPCBiLmNoKTt9Ci0gIGZ1bmN0aW9uIGNvcHlQb3MoeCkge3Jl
dHVybiBQb3MoeC5saW5lLCB4LmNoKTt9Ci0KLSAgLy8gU0VMRUNUSU9OCi0KLSAgZnVuY3Rpb24g
Y2xpcExpbmUoZG9jLCBuKSB7cmV0dXJuIE1hdGgubWF4KGRvYy5maXJzdCwgTWF0aC5taW4obiwg
ZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSk7fQotICBmdW5jdGlvbiBjbGlwUG9zKGRvYywgcG9z
KSB7Ci0gICAgaWYgKHBvcy5saW5lIDwgZG9jLmZpcnN0KSByZXR1cm4gUG9zKGRvYy5maXJzdCwg
MCk7Ci0gICAgdmFyIGxhc3QgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE7Ci0gICAgaWYgKHBv
cy5saW5lID4gbGFzdCkgcmV0dXJuIFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5s
ZW5ndGgpOwotICAgIHJldHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywgcG9zLmxpbmUp
LnRleHQubGVuZ3RoKTsKLSAgfQotICBmdW5jdGlvbiBjbGlwVG9MZW4ocG9zLCBsaW5lbGVuKSB7
Ci0gICAgdmFyIGNoID0gcG9zLmNoOwotICAgIGlmIChjaCA9PSBudWxsIHx8IGNoID4gbGluZWxl
bikgcmV0dXJuIFBvcyhwb3MubGluZSwgbGluZWxlbik7Ci0gICAgZWxzZSBpZiAoY2ggPCAwKSBy
ZXR1cm4gUG9zKHBvcy5saW5lLCAwKTsKLSAgICBlbHNlIHJldHVybiBwb3M7Ci0gIH0KLSAgZnVu
Y3Rpb24gaXNMaW5lKGRvYywgbCkge3JldHVybiBsID49IGRvYy5maXJzdCAmJiBsIDwgZG9jLmZp
cnN0ICsgZG9jLnNpemU7fQotCi0gIC8vIElmIHNoaWZ0IGlzIGhlbGQsIHRoaXMgd2lsbCBtb3Zl
IHRoZSBzZWxlY3Rpb24gYW5jaG9yLiBPdGhlcndpc2UsCi0gIC8vIGl0J2xsIHNldCB0aGUgd2hv
bGUgc2VsZWN0aW9uLgotICBmdW5jdGlvbiBleHRlbmRTZWxlY3Rpb24oZG9jLCBwb3MsIG90aGVy
LCBiaWFzKSB7Ci0gICAgaWYgKGRvYy5zZWwuc2hpZnQgfHwgZG9jLnNlbC5leHRlbmQpIHsKLSAg
ICAgIHZhciBhbmNob3IgPSBkb2Muc2VsLmFuY2hvcjsKLSAgICAgIGlmIChvdGhlcikgewotICAg
ICAgICB2YXIgcG9zQmVmb3JlID0gcG9zTGVzcyhwb3MsIGFuY2hvcik7Ci0gICAgICAgIGlmIChw
b3NCZWZvcmUgIT0gcG9zTGVzcyhvdGhlciwgYW5jaG9yKSkgewotICAgICAgICAgIGFuY2hvciA9
IHBvczsKLSAgICAgICAgICBwb3MgPSBvdGhlcjsKLSAgICAgICAgfSBlbHNlIGlmIChwb3NCZWZv
cmUgIT0gcG9zTGVzcyhwb3MsIG90aGVyKSkgewotICAgICAgICAgIHBvcyA9IG90aGVyOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBhbmNob3IsIHBvcywgYmlh
cyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNldFNlbGVjdGlvbihkb2MsIHBvcywgb3RoZXIgfHwg
cG9zLCBiaWFzKTsKLSAgICB9Ci0gICAgaWYgKGRvYy5jbSkgZG9jLmNtLmN1ck9wLnVzZXJTZWxD
aGFuZ2UgPSB0cnVlOwotICB9Ci0KLSAgZnVuY3Rpb24gZmlsdGVyU2VsZWN0aW9uQ2hhbmdlKGRv
YywgYW5jaG9yLCBoZWFkKSB7Ci0gICAgdmFyIG9iaiA9IHthbmNob3I6IGFuY2hvciwgaGVhZDog
aGVhZH07Ci0gICAgc2lnbmFsKGRvYywgImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsIGRvYywgb2Jq
KTsKLSAgICBpZiAoZG9jLmNtKSBzaWduYWwoZG9jLmNtLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdl
IiwgZG9jLmNtLCBvYmopOwotICAgIG9iai5hbmNob3IgPSBjbGlwUG9zKGRvYywgb2JqLmFuY2hv
cik7IG9iai5oZWFkID0gY2xpcFBvcyhkb2MsIG9iai5oZWFkKTsKLSAgICByZXR1cm4gb2JqOwot
ICB9Ci0KLSAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24uIExhc3QgdHdvIGFyZ3MgYXJlIG9ubHkg
dXNlZCBieQotICAvLyB1cGRhdGVEb2MsIHNpbmNlIHRoZXkgaGF2ZSB0byBiZSBleHByZXNzZWQg
aW4gdGhlIGxpbmUKLSAgLy8gbnVtYmVycyBiZWZvcmUgdGhlIHVwZGF0ZS4KLSAgZnVuY3Rpb24g
c2V0U2VsZWN0aW9uKGRvYywgYW5jaG9yLCBoZWFkLCBiaWFzLCBjaGVja0F0b21pYykgewotICAg
IGlmICghY2hlY2tBdG9taWMgJiYgaGFzSGFuZGxlcihkb2MsICJiZWZvcmVTZWxlY3Rpb25DaGFu
Z2UiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sICJiZWZvcmVTZWxlY3Rpb25DaGFu
Z2UiKSkgewotICAgICAgdmFyIGZpbHRlcmVkID0gZmlsdGVyU2VsZWN0aW9uQ2hhbmdlKGRvYywg
YW5jaG9yLCBoZWFkKTsKLSAgICAgIGhlYWQgPSBmaWx0ZXJlZC5oZWFkOwotICAgICAgYW5jaG9y
ID0gZmlsdGVyZWQuYW5jaG9yOwotICAgIH0KLQotICAgIHZhciBzZWwgPSBkb2Muc2VsOwotICAg
IHNlbC5nb2FsQ29sdW1uID0gbnVsbDsKLSAgICBpZiAoYmlhcyA9PSBudWxsKSBiaWFzID0gcG9z
TGVzcyhoZWFkLCBzZWwuaGVhZCkgPyAtMSA6IDE7Ci0gICAgLy8gU2tpcCBvdmVyIGF0b21pYyBz
cGFucy4KLSAgICBpZiAoY2hlY2tBdG9taWMgfHwgIXBvc0VxKGFuY2hvciwgc2VsLmFuY2hvcikp
Ci0gICAgICBhbmNob3IgPSBza2lwQXRvbWljKGRvYywgYW5jaG9yLCBiaWFzLCBjaGVja0F0b21p
YyAhPSAicHVzaCIpOwotICAgIGlmIChjaGVja0F0b21pYyB8fCAhcG9zRXEoaGVhZCwgc2VsLmhl
YWQpKQotICAgICAgaGVhZCA9IHNraXBBdG9taWMoZG9jLCBoZWFkLCBiaWFzLCBjaGVja0F0b21p
YyAhPSAicHVzaCIpOwotCi0gICAgaWYgKHBvc0VxKHNlbC5hbmNob3IsIGFuY2hvcikgJiYgcG9z
RXEoc2VsLmhlYWQsIGhlYWQpKSByZXR1cm47Ci0KLSAgICBzZWwuYW5jaG9yID0gYW5jaG9yOyBz
ZWwuaGVhZCA9IGhlYWQ7Ci0gICAgdmFyIGludiA9IHBvc0xlc3MoaGVhZCwgYW5jaG9yKTsKLSAg
ICBzZWwuZnJvbSA9IGludiA/IGhlYWQgOiBhbmNob3I7Ci0gICAgc2VsLnRvID0gaW52ID8gYW5j
aG9yIDogaGVhZDsKLQotICAgIGlmIChkb2MuY20pCi0gICAgICBkb2MuY20uY3VyT3AudXBkYXRl
SW5wdXQgPSBkb2MuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9Ci0gICAgICAgIGRvYy5jbS5j
dXJPcC5jdXJzb3JBY3Rpdml0eSA9IHRydWU7Ci0KLSAgICBzaWduYWxMYXRlcihkb2MsICJjdXJz
b3JBY3Rpdml0eSIsIGRvYyk7Ci0gIH0KLQotICBmdW5jdGlvbiByZUNoZWNrU2VsZWN0aW9uKGNt
KSB7Ci0gICAgc2V0U2VsZWN0aW9uKGNtLmRvYywgY20uZG9jLnNlbC5mcm9tLCBjbS5kb2Muc2Vs
LnRvLCBudWxsLCAicHVzaCIpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2tpcEF0b21pYyhkb2MsIHBv
cywgYmlhcywgbWF5Q2xlYXIpIHsKLSAgICB2YXIgZmxpcHBlZCA9IGZhbHNlLCBjdXJQb3MgPSBw
b3M7Ci0gICAgdmFyIGRpciA9IGJpYXMgfHwgMTsKLSAgICBkb2MuY2FudEVkaXQgPSBmYWxzZTsK
LSAgICBzZWFyY2g6IGZvciAoOzspIHsKLSAgICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGN1
clBvcy5saW5lKTsKLSAgICAgIGlmIChsaW5lLm1hcmtlZFNwYW5zKSB7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGluZS5tYXJrZWRTcGFucy5sZW5ndGg7ICsraSkgewotICAgICAgICAg
IHZhciBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV0sIG0gPSBzcC5tYXJrZXI7Ci0gICAgICAgICAg
aWYgKChzcC5mcm9tID09IG51bGwgfHwgKG0uaW5jbHVzaXZlTGVmdCA/IHNwLmZyb20gPD0gY3Vy
UG9zLmNoIDogc3AuZnJvbSA8IGN1clBvcy5jaCkpICYmCi0gICAgICAgICAgICAgIChzcC50byA9
PSBudWxsIHx8IChtLmluY2x1c2l2ZVJpZ2h0ID8gc3AudG8gPj0gY3VyUG9zLmNoIDogc3AudG8g
PiBjdXJQb3MuY2gpKSkgewotICAgICAgICAgICAgaWYgKG1heUNsZWFyKSB7Ci0gICAgICAgICAg
ICAgIHNpZ25hbChtLCAiYmVmb3JlQ3Vyc29yRW50ZXIiKTsKLSAgICAgICAgICAgICAgaWYgKG0u
ZXhwbGljaXRseUNsZWFyZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWxpbmUubWFya2VkU3Bh
bnMpIGJyZWFrOwotICAgICAgICAgICAgICAgIGVsc2Ugey0taTsgY29udGludWU7fQotICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW0uYXRvbWljKSBjb250
aW51ZTsKLSAgICAgICAgICAgIHZhciBuZXdQb3MgPSBtLmZpbmQoKVtkaXIgPCAwID8gImZyb20i
IDogInRvIl07Ci0gICAgICAgICAgICBpZiAocG9zRXEobmV3UG9zLCBjdXJQb3MpKSB7Ci0gICAg
ICAgICAgICAgIG5ld1Bvcy5jaCArPSBkaXI7Ci0gICAgICAgICAgICAgIGlmIChuZXdQb3MuY2gg
PCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5saW5lID4gZG9jLmZpcnN0KSBuZXdQ
b3MgPSBjbGlwUG9zKGRvYywgUG9zKG5ld1Bvcy5saW5lIC0gMSkpOwotICAgICAgICAgICAgICAg
IGVsc2UgbmV3UG9zID0gbnVsbDsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdQb3MuY2gg
PiBsaW5lLnRleHQubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5saW5lIDwg
ZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSBuZXdQb3MgPSBQb3MobmV3UG9zLmxpbmUgKyAxLCAw
KTsKLSAgICAgICAgICAgICAgICBlbHNlIG5ld1BvcyA9IG51bGw7Ci0gICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgaWYgKCFuZXdQb3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmxpcHBl
ZCkgewotICAgICAgICAgICAgICAgICAgLy8gRHJpdmVuIGluIGEgY29ybmVyIC0tIG5vIHZhbGlk
IGN1cnNvciBwb3NpdGlvbiBmb3VuZCBhdCBhbGwKLSAgICAgICAgICAgICAgICAgIC8vIC0tIHRy
eSBhZ2FpbiAqd2l0aCogY2xlYXJpbmcsIGlmIHdlIGRpZG4ndCBhbHJlYWR5Ci0gICAgICAgICAg
ICAgICAgICBpZiAoIW1heUNsZWFyKSByZXR1cm4gc2tpcEF0b21pYyhkb2MsIHBvcywgYmlhcywg
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHR1cm4gb2ZmIGVkaXRpbmcg
dW50aWwgZnVydGhlciBub3RpY2UsIGFuZCByZXR1cm4gdGhlIHN0YXJ0IG9mIHRoZSBkb2MKLSAg
ICAgICAgICAgICAgICAgIGRvYy5jYW50RWRpdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICBy
ZXR1cm4gUG9zKGRvYy5maXJzdCwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGZsaXBwZWQgPSB0cnVlOyBuZXdQb3MgPSBwb3M7IGRpciA9IC1kaXI7Ci0gICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1clBvcyA9IG5ld1BvczsKLSAgICAg
ICAgICAgIGNvbnRpbnVlIHNlYXJjaDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICAgIHJldHVybiBjdXJQb3M7Ci0gICAgfQorICAgIG1ha2VDaGFuZ2UoZG9jLCB7ZnJvbTog
ZnJvbSwgdG86IHRvLCB0ZXh0OiBjb2RlLCBvcmlnaW46IG9yaWdpbn0pOwogICB9CgotICAvLyBT
Q1JPTExJTkcKKyAgLy8gU0NST0xMSU5HIFRISU5HUyBJTlRPIFZJRVcKCi0gIGZ1bmN0aW9uIHNj
cm9sbEN1cnNvckludG9WaWV3KGNtKSB7Ci0gICAgdmFyIGNvb3JkcyA9IHNjcm9sbFBvc0ludG9W
aWV3KGNtLCBjbS5kb2Muc2VsLmhlYWQsIG51bGwsIGNtLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFy
Z2luKTsKLSAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHJldHVybjsKLSAgICB2YXIgZGlzcGxh
eSA9IGNtLmRpc3BsYXksIGJveCA9IGdldFJlY3QoZGlzcGxheS5zaXplciksIGRvU2Nyb2xsID0g
bnVsbDsKKyAgLy8gSWYgYW4gZWRpdG9yIHNpdHMgb24gdGhlIHRvcCBvciBib3R0b20gb2YgdGhl
IHdpbmRvdywgcGFydGlhbGx5CisgIC8vIHNjcm9sbGVkIG91dCBvZiB2aWV3LCB0aGlzIGVuc3Vy
ZXMgdGhhdCB0aGUgY3Vyc29yIGlzIHZpc2libGUuCisgIGZ1bmN0aW9uIG1heWJlU2Nyb2xsV2lu
ZG93KGNtLCBjb29yZHMpIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGJveCA9IGRp
c3BsYXkuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGRvU2Nyb2xsID0gbnVsbDsKICAg
ICBpZiAoY29vcmRzLnRvcCArIGJveC50b3AgPCAwKSBkb1Njcm9sbCA9IHRydWU7CiAgICAgZWxz
ZSBpZiAoY29vcmRzLmJvdHRvbSArIGJveC50b3AgPiAod2luZG93LmlubmVySGVpZ2h0IHx8IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpKSBkb1Njcm9sbCA9IGZhbHNlOwog
ICAgIGlmIChkb1Njcm9sbCAhPSBudWxsICYmICFwaGFudG9tKSB7Ci0gICAgICB2YXIgaGlkZGVu
ID0gZGlzcGxheS5jdXJzb3Iuc3R5bGUuZGlzcGxheSA9PSAibm9uZSI7Ci0gICAgICBpZiAoaGlk
ZGVuKSB7Ci0gICAgICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAg
ICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUubGVmdCA9IGNvb3Jkcy5sZWZ0ICsgInB4IjsKLSAgICAg
ICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUudG9wID0gKGNvb3Jkcy50b3AgLSBkaXNwbGF5LnZpZXdP
ZmZzZXQpICsgInB4IjsKLSAgICAgIH0KLSAgICAgIGRpc3BsYXkuY3Vyc29yLnNjcm9sbEludG9W
aWV3KGRvU2Nyb2xsKTsKLSAgICAgIGlmIChoaWRkZW4pIGRpc3BsYXkuY3Vyc29yLnN0eWxlLmRp
c3BsYXkgPSAibm9uZSI7CisgICAgICB2YXIgc2Nyb2xsTm9kZSA9IGVsdCgiZGl2IiwgIlx1MjAw
YiIsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogIiArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY29vcmRzLnRvcCAtIGRpc3BsYXkudmlld09mZnNldCAtIHBhZGRpbmdUb3Ao
Y20uZGlzcGxheSkpICsgInB4OyBoZWlnaHQ6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvb3Jkcy5ib3R0b20gLSBjb29yZHMudG9wICsgc2Nyb2xsZXJDdXRPZmYpICsgInB4OyBs
ZWZ0OiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5sZWZ0ICsgInB4OyB3
aWR0aDogMnB4OyIpOworICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuYXBwZW5kQ2hpbGQoc2Ny
b2xsTm9kZSk7CisgICAgICBzY3JvbGxOb2RlLnNjcm9sbEludG9WaWV3KGRvU2Nyb2xsKTsKKyAg
ICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKHNjcm9sbE5vZGUpOwogICAgIH0K
ICAgfQoKKyAgLy8gU2Nyb2xsIGEgZ2l2ZW4gcG9zaXRpb24gaW50byB2aWV3IChpbW1lZGlhdGVs
eSksIHZlcmlmeWluZyB0aGF0CisgIC8vIGl0IGFjdHVhbGx5IGJlY2FtZSB2aXNpYmxlIChhcyBs
aW5lIGhlaWdodHMgYXJlIGFjY3VyYXRlbHkKKyAgLy8gbWVhc3VyZWQsIHRoZSBwb3NpdGlvbiBv
ZiBzb21ldGhpbmcgbWF5ICdkcmlmdCcgZHVyaW5nIGRyYXdpbmcpLgogICBmdW5jdGlvbiBzY3Jv
bGxQb3NJbnRvVmlldyhjbSwgcG9zLCBlbmQsIG1hcmdpbikgewogICAgIGlmIChtYXJnaW4gPT0g
bnVsbCkgbWFyZ2luID0gMDsKICAgICBmb3IgKDs7KSB7CkBAIC0yNjgzLDE2ICszNTIyLDIyIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAgfQoKKyAgLy8gU2Ny
b2xsIGEgZ2l2ZW4gc2V0IG9mIGNvb3JkaW5hdGVzIGludG8gdmlldyAoaW1tZWRpYXRlbHkpLgog
ICBmdW5jdGlvbiBzY3JvbGxJbnRvVmlldyhjbSwgeDEsIHkxLCB4MiwgeTIpIHsKICAgICB2YXIg
c2Nyb2xsUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9zKGNtLCB4MSwgeTEsIHgyLCB5Mik7CiAgICAg
aWYgKHNjcm9sbFBvcy5zY3JvbGxUb3AgIT0gbnVsbCkgc2V0U2Nyb2xsVG9wKGNtLCBzY3JvbGxQ
b3Muc2Nyb2xsVG9wKTsKICAgICBpZiAoc2Nyb2xsUG9zLnNjcm9sbExlZnQgIT0gbnVsbCkgc2V0
U2Nyb2xsTGVmdChjbSwgc2Nyb2xsUG9zLnNjcm9sbExlZnQpOwogICB9CgorICAvLyBDYWxjdWxh
dGUgYSBuZXcgc2Nyb2xsIHBvc2l0aW9uIG5lZWRlZCB0byBzY3JvbGwgdGhlIGdpdmVuCisgIC8v
IHJlY3RhbmdsZSBpbnRvIHZpZXcuIFJldHVybnMgYW4gb2JqZWN0IHdpdGggc2Nyb2xsVG9wIGFu
ZAorICAvLyBzY3JvbGxMZWZ0IHByb3BlcnRpZXMuIFdoZW4gdGhlc2UgYXJlIHVuZGVmaW5lZCwg
dGhlCisgIC8vIHZlcnRpY2FsL2hvcml6b250YWwgcG9zaXRpb24gZG9lcyBub3QgbmVlZCB0byBi
ZSBhZGp1c3RlZC4KICAgZnVuY3Rpb24gY2FsY3VsYXRlU2Nyb2xsUG9zKGNtLCB4MSwgeTEsIHgy
LCB5MikgewogICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc25hcE1hcmdpbiA9IHRleHRI
ZWlnaHQoY20uZGlzcGxheSk7CiAgICAgaWYgKHkxIDwgMCkgeTEgPSAwOwotICAgIHZhciBzY3Jl
ZW4gPSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCAtIHNjcm9sbGVyQ3V0T2ZmLCBzY3Jl
ZW50b3AgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCwgcmVzdWx0ID0ge307CisgICAgdmFy
IHNjcmVlbnRvcCA9IGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbFRvcCAhPSBudWxsID8gY20u
Y3VyT3Auc2Nyb2xsVG9wIDogZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7CisgICAgdmFyIHNj
cmVlbiA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYsIHJl
c3VsdCA9IHt9OwogICAgIHZhciBkb2NCb3R0b20gPSBjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1Zl
cnQoZGlzcGxheSk7CiAgICAgdmFyIGF0VG9wID0geTEgPCBzbmFwTWFyZ2luLCBhdEJvdHRvbSA9
IHkyID4gZG9jQm90dG9tIC0gc25hcE1hcmdpbjsKICAgICBpZiAoeTEgPCBzY3JlZW50b3ApIHsK
QEAgLTI3MDIsNyArMzU0Nyw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgICAgaWYgKG5ld1RvcCAhPSBzY3JlZW50b3ApIHJlc3VsdC5zY3JvbGxUb3AgPSBuZXdUb3A7
CiAgICAgfQoKLSAgICB2YXIgc2NyZWVudyA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgg
LSBzY3JvbGxlckN1dE9mZiwgc2NyZWVubGVmdCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVm
dDsKKyAgICB2YXIgc2NyZWVubGVmdCA9IGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbExlZnQg
IT0gbnVsbCA/IGNtLmN1ck9wLnNjcm9sbExlZnQgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExl
ZnQ7CisgICAgdmFyIHNjcmVlbncgPSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoIC0gc2Ny
b2xsZXJDdXRPZmY7CiAgICAgeDEgKz0gZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoOyB4MiAr
PSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7CiAgICAgdmFyIGd1dHRlcncgPSBkaXNwbGF5
Lmd1dHRlcnMub2Zmc2V0V2lkdGg7CiAgICAgdmFyIGF0TGVmdCA9IHgxIDwgZ3V0dGVydyArIDEw
OwpAQCAtMjcxNSwzMiArMzU2MSw3MCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CgotICBmdW5jdGlvbiB1cGRhdGVTY3JvbGxQb3Mo
Y20sIGxlZnQsIHRvcCkgewotICAgIGNtLmN1ck9wLnVwZGF0ZVNjcm9sbFBvcyA9IHtzY3JvbGxM
ZWZ0OiBsZWZ0ID09IG51bGwgPyBjbS5kb2Muc2Nyb2xsTGVmdCA6IGxlZnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogdG9wID09IG51bGwgPyBjbS5kb2Muc2Ny
b2xsVG9wIDogdG9wfTsKKyAgLy8gU3RvcmUgYSByZWxhdGl2ZSBhZGp1c3RtZW50IHRvIHRoZSBz
Y3JvbGwgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQKKyAgLy8gb3BlcmF0aW9uICh0byBiZSBhcHBs
aWVkIHdoZW4gdGhlIG9wZXJhdGlvbiBmaW5pc2hlcykuCisgIGZ1bmN0aW9uIGFkZFRvU2Nyb2xs
UG9zKGNtLCBsZWZ0LCB0b3ApIHsKKyAgICBpZiAobGVmdCAhPSBudWxsIHx8IHRvcCAhPSBudWxs
KSByZXNvbHZlU2Nyb2xsVG9Qb3MoY20pOworICAgIGlmIChsZWZ0ICE9IG51bGwpCisgICAgICBj
bS5jdXJPcC5zY3JvbGxMZWZ0ID0gKGNtLmN1ck9wLnNjcm9sbExlZnQgPT0gbnVsbCA/IGNtLmRv
Yy5zY3JvbGxMZWZ0IDogY20uY3VyT3Auc2Nyb2xsTGVmdCkgKyBsZWZ0OworICAgIGlmICh0b3Ag
IT0gbnVsbCkKKyAgICAgIGNtLmN1ck9wLnNjcm9sbFRvcCA9IChjbS5jdXJPcC5zY3JvbGxUb3Ag
PT0gbnVsbCA/IGNtLmRvYy5zY3JvbGxUb3AgOiBjbS5jdXJPcC5zY3JvbGxUb3ApICsgdG9wOwor
ICB9CisKKyAgLy8gTWFrZSBzdXJlIHRoYXQgYXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uIHRo
ZSBjdXJyZW50IGN1cnNvciBpcworICAvLyBzaG93bi4KKyAgZnVuY3Rpb24gZW5zdXJlQ3Vyc29y
VmlzaWJsZShjbSkgeworICAgIHJlc29sdmVTY3JvbGxUb1BvcyhjbSk7CisgICAgdmFyIGN1ciA9
IGNtLmdldEN1cnNvcigpLCBmcm9tID0gY3VyLCB0byA9IGN1cjsKKyAgICBpZiAoIWNtLm9wdGlv
bnMubGluZVdyYXBwaW5nKSB7CisgICAgICBmcm9tID0gY3VyLmNoID8gUG9zKGN1ci5saW5lLCBj
dXIuY2ggLSAxKSA6IGN1cjsKKyAgICAgIHRvID0gUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKTsK
KyAgICB9CisgICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCBt
YXJnaW46IGNtLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2luLCBpc0N1cnNvcjogdHJ1ZX07CiAg
IH0KCi0gIGZ1bmN0aW9uIGFkZFRvU2Nyb2xsUG9zKGNtLCBsZWZ0LCB0b3ApIHsKLSAgICB2YXIg
cG9zID0gY20uY3VyT3AudXBkYXRlU2Nyb2xsUG9zIHx8IChjbS5jdXJPcC51cGRhdGVTY3JvbGxQ
b3MgPSB7c2Nyb2xsTGVmdDogY20uZG9jLnNjcm9sbExlZnQsIHNjcm9sbFRvcDogY20uZG9jLnNj
cm9sbFRvcH0pOwotICAgIHZhciBzY3JvbGwgPSBjbS5kaXNwbGF5LnNjcm9sbGVyOwotICAgIHBv
cy5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGwuc2Nyb2xsSGVpZ2h0IC0g
c2Nyb2xsLmNsaWVudEhlaWdodCwgcG9zLnNjcm9sbFRvcCArIHRvcCkpOwotICAgIHBvcy5zY3Jv
bGxMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsLnNjcm9sbFdpZHRoIC0gc2Nyb2xs
LmNsaWVudFdpZHRoLCBwb3Muc2Nyb2xsTGVmdCArIGxlZnQpKTsKKyAgLy8gV2hlbiBhbiBvcGVy
YXRpb24gaGFzIGl0cyBzY3JvbGxUb1BvcyBwcm9wZXJ0eSBzZXQsIGFuZCBhbm90aGVyCisgIC8v
IHNjcm9sbCBhY3Rpb24gaXMgYXBwbGllZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9u
LCB0aGlzCisgIC8vICdzaW11bGF0ZXMnIHNjcm9sbGluZyB0aGF0IHBvc2l0aW9uIGludG8gdmll
dyBpbiBhIGNoZWFwIHdheSwgc28KKyAgLy8gdGhhdCB0aGUgZWZmZWN0IG9mIGludGVybWVkaWF0
ZSBzY3JvbGwgY29tbWFuZHMgaXMgbm90IGlnbm9yZWQuCisgIGZ1bmN0aW9uIHJlc29sdmVTY3Jv
bGxUb1BvcyhjbSkgeworICAgIHZhciByYW5nZSA9IGNtLmN1ck9wLnNjcm9sbFRvUG9zOworICAg
IGlmIChyYW5nZSkgeworICAgICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSBudWxsOworICAgICAg
dmFyIGZyb20gPSBlc3RpbWF0ZUNvb3JkcyhjbSwgcmFuZ2UuZnJvbSksIHRvID0gZXN0aW1hdGVD
b29yZHMoY20sIHJhbmdlLnRvKTsKKyAgICAgIHZhciBzUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9z
KGNtLCBNYXRoLm1pbihmcm9tLmxlZnQsIHRvLmxlZnQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWF0aC5taW4oZnJvbS50b3AsIHRvLnRvcCkgLSByYW5nZS5tYXJnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChmcm9tLnJpZ2h0
LCB0by5yaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1h
eChmcm9tLmJvdHRvbSwgdG8uYm90dG9tKSArIHJhbmdlLm1hcmdpbik7CisgICAgICBjbS5zY3Jv
bGxUbyhzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTsKKyAgICB9CiAgIH0KCiAgIC8v
IEFQSSBVVElMSVRJRVMKCisgIC8vIEluZGVudCB0aGUgZ2l2ZW4gbGluZS4gVGhlIGhvdyBwYXJh
bWV0ZXIgY2FuIGJlICJzbWFydCIsCisgIC8vICJhZGQiL251bGwsICJzdWJ0cmFjdCIsIG9yICJw
cmV2Ii4gV2hlbiBhZ2dyZXNzaXZlIGlzIGZhbHNlCisgIC8vICh0eXBpY2FsbHkgc2V0IHRvIHRy
dWUgZm9yIGZvcmNlZCBzaW5nbGUtbGluZSBpbmRlbnRzKSwgZW1wdHkKKyAgLy8gbGluZXMgYXJl
IG5vdCBpbmRlbnRlZCwgYW5kIHBsYWNlcyB3aGVyZSB0aGUgbW9kZSByZXR1cm5zIFBhc3MKKyAg
Ly8gYXJlIGxlZnQgYWxvbmUuCiAgIGZ1bmN0aW9uIGluZGVudExpbmUoY20sIG4sIGhvdywgYWdn
cmVzc2l2ZSkgewotICAgIHZhciBkb2MgPSBjbS5kb2M7CisgICAgdmFyIGRvYyA9IGNtLmRvYywg
c3RhdGU7CiAgICAgaWYgKGhvdyA9PSBudWxsKSBob3cgPSAiYWRkIjsKICAgICBpZiAoaG93ID09
ICJzbWFydCIpIHsKKyAgICAgIC8vIEZhbGwgYmFjayB0byAicHJldiIgd2hlbiB0aGUgbW9kZSBk
b2Vzbid0IGhhdmUgYW4gaW5kZW50YXRpb24KKyAgICAgIC8vIG1ldGhvZC4KICAgICAgIGlmICgh
Y20uZG9jLm1vZGUuaW5kZW50KSBob3cgPSAicHJldiI7Ci0gICAgICBlbHNlIHZhciBzdGF0ZSA9
IGdldFN0YXRlQmVmb3JlKGNtLCBuKTsKKyAgICAgIGVsc2Ugc3RhdGUgPSBnZXRTdGF0ZUJlZm9y
ZShjbSwgbik7CiAgICAgfQoKICAgICB2YXIgdGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTsK
ICAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBuKSwgY3VyU3BhY2UgPSBjb3VudENvbHVtbihs
aW5lLnRleHQsIG51bGwsIHRhYlNpemUpOworICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIGxpbmUu
c3RhdGVBZnRlciA9IG51bGw7CiAgICAgdmFyIGN1clNwYWNlU3RyaW5nID0gbGluZS50ZXh0Lm1h
dGNoKC9eXHMqLylbMF0sIGluZGVudGF0aW9uOwotICAgIGlmIChob3cgPT0gInNtYXJ0Iikgewor
ICAgIGlmICghYWdncmVzc2l2ZSAmJiAhL1xTLy50ZXN0KGxpbmUudGV4dCkpIHsKKyAgICAgIGlu
ZGVudGF0aW9uID0gMDsKKyAgICAgIGhvdyA9ICJub3QiOworICAgIH0gZWxzZSBpZiAoaG93ID09
ICJzbWFydCIpIHsKICAgICAgIGluZGVudGF0aW9uID0gY20uZG9jLm1vZGUuaW5kZW50KHN0YXRl
LCBsaW5lLnRleHQuc2xpY2UoY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgbGluZS50ZXh0KTsKICAg
ICAgIGlmIChpbmRlbnRhdGlvbiA9PSBQYXNzKSB7CiAgICAgICAgIGlmICghYWdncmVzc2l2ZSkg
cmV0dXJuOwpAQCAtMjc2NCwyMyArMzY0OCw2OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICAgIGZvciAodmFyIGkgPSBNYXRoLmZsb29yKGluZGVudGF0aW9uIC8gdGFi
U2l6ZSk7IGk7IC0taSkge3BvcyArPSB0YWJTaXplOyBpbmRlbnRTdHJpbmcgKz0gIlx0Ijt9CiAg
ICAgaWYgKHBvcyA8IGluZGVudGF0aW9uKSBpbmRlbnRTdHJpbmcgKz0gc3BhY2VTdHIoaW5kZW50
YXRpb24gLSBwb3MpOwoKLSAgICBpZiAoaW5kZW50U3RyaW5nICE9IGN1clNwYWNlU3RyaW5nKQor
ICAgIGlmIChpbmRlbnRTdHJpbmcgIT0gY3VyU3BhY2VTdHJpbmcpIHsKICAgICAgIHJlcGxhY2VS
YW5nZShjbS5kb2MsIGluZGVudFN0cmluZywgUG9zKG4sIDApLCBQb3MobiwgY3VyU3BhY2VTdHJp
bmcubGVuZ3RoKSwgIitpbnB1dCIpOwotICAgIGVsc2UgaWYgKGRvYy5zZWwuaGVhZC5saW5lID09
IG4gJiYgZG9jLnNlbC5oZWFkLmNoIDwgY3VyU3BhY2VTdHJpbmcubGVuZ3RoKQotICAgICAgc2V0
U2VsZWN0aW9uKGRvYywgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIFBvcyhuLCBjdXJT
cGFjZVN0cmluZy5sZW5ndGgpLCAxKTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gRW5zdXJlIHRo
YXQsIGlmIHRoZSBjdXJzb3Igd2FzIGluIHRoZSB3aGl0ZXNwYWNlIGF0IHRoZSBzdGFydAorICAg
ICAgLy8gb2YgdGhlIGxpbmUsIGl0IGlzIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhhdCBzcGFjZS4K
KyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV07CisgICAgICAgIGlmIChyYW5n
ZS5oZWFkLmxpbmUgPT0gbiAmJiByYW5nZS5oZWFkLmNoIDwgY3VyU3BhY2VTdHJpbmcubGVuZ3Ro
KSB7CisgICAgICAgICAgdmFyIHBvcyA9IFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpOwor
ICAgICAgICAgIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpLCBuZXcgUmFuZ2UocG9zLCBwb3Mp
KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KICAgICBsaW5l
LnN0YXRlQWZ0ZXIgPSBudWxsOwogICB9CgotICBmdW5jdGlvbiBjaGFuZ2VMaW5lKGNtLCBoYW5k
bGUsIG9wKSB7CisgIC8vIFV0aWxpdHkgZm9yIGFwcGx5aW5nIGEgY2hhbmdlIHRvIGEgbGluZSBi
eSBoYW5kbGUgb3IgbnVtYmVyLAorICAvLyByZXR1cm5pbmcgdGhlIG51bWJlciBhbmQgb3B0aW9u
YWxseSByZWdpc3RlcmluZyB0aGUgbGluZSBhcworICAvLyBjaGFuZ2VkLgorICBmdW5jdGlvbiBj
aGFuZ2VMaW5lKGNtLCBoYW5kbGUsIGNoYW5nZVR5cGUsIG9wKSB7CiAgICAgdmFyIG5vID0gaGFu
ZGxlLCBsaW5lID0gaGFuZGxlLCBkb2MgPSBjbS5kb2M7CiAgICAgaWYgKHR5cGVvZiBoYW5kbGUg
PT0gIm51bWJlciIpIGxpbmUgPSBnZXRMaW5lKGRvYywgY2xpcExpbmUoZG9jLCBoYW5kbGUpKTsK
ICAgICBlbHNlIG5vID0gbGluZU5vKGhhbmRsZSk7CiAgICAgaWYgKG5vID09IG51bGwpIHJldHVy
biBudWxsOwotICAgIGlmIChvcChsaW5lLCBubykpIHJlZ0NoYW5nZShjbSwgbm8sIG5vICsgMSk7
Ci0gICAgZWxzZSByZXR1cm4gbnVsbDsKKyAgICBpZiAob3AobGluZSwgbm8pKSByZWdMaW5lQ2hh
bmdlKGNtLCBubywgY2hhbmdlVHlwZSk7CiAgICAgcmV0dXJuIGxpbmU7CiAgIH0KCisgIC8vIEhl
bHBlciBmb3IgZGVsZXRpbmcgdGV4dCBuZWFyIHRoZSBzZWxlY3Rpb24ocyksIHVzZWQgdG8gaW1w
bGVtZW50CisgIC8vIGJhY2tzcGFjZSwgZGVsZXRlLCBhbmQgc2ltaWxhciBmdW5jdGlvbmFsaXR5
LgorICBmdW5jdGlvbiBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBjb21wdXRlKSB7CisgICAgdmFy
IHJhbmdlcyA9IGNtLmRvYy5zZWwucmFuZ2VzLCBraWxsID0gW107CisgICAgLy8gQnVpbGQgdXAg
YSBzZXQgb2YgcmFuZ2VzIHRvIGtpbGwgZmlyc3QsIG1lcmdpbmcgb3ZlcmxhcHBpbmcKKyAgICAv
LyByYW5nZXMuCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsK
KyAgICAgIHZhciB0b0tpbGwgPSBjb21wdXRlKHJhbmdlc1tpXSk7CisgICAgICB3aGlsZSAoa2ls
bC5sZW5ndGggJiYgY21wKHRvS2lsbC5mcm9tLCBsc3Qoa2lsbCkudG8pIDw9IDApIHsKKyAgICAg
ICAgdmFyIHJlcGxhY2VkID0ga2lsbC5wb3AoKTsKKyAgICAgICAgaWYgKGNtcChyZXBsYWNlZC5m
cm9tLCB0b0tpbGwuZnJvbSkgPCAwKSB7CisgICAgICAgICAgdG9LaWxsLmZyb20gPSByZXBsYWNl
ZC5mcm9tOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBraWxs
LnB1c2godG9LaWxsKTsKKyAgICB9CisgICAgLy8gTmV4dCwgcmVtb3ZlIHRob3NlIGFjdHVhbCBy
YW5nZXMuCisgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CisgICAgICBmb3IgKHZhciBpID0g
a2lsbC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkKKyAgICAgICAgcmVwbGFjZVJhbmdlKGNtLmRv
YywgIiIsIGtpbGxbaV0uZnJvbSwga2lsbFtpXS50bywgIitkZWxldGUiKTsKKyAgICAgIGVuc3Vy
ZUN1cnNvclZpc2libGUoY20pOworICAgIH0pOworICB9CisKKyAgLy8gVXNlZCBmb3IgaG9yaXpv
bnRhbCByZWxhdGl2ZSBtb3Rpb24uIERpciBpcyAtMSBvciAxIChsZWZ0IG9yCisgIC8vIHJpZ2h0
KSwgdW5pdCBjYW4gYmUgImNoYXIiLCAiY29sdW1uIiAobGlrZSBjaGFyLCBidXQgZG9lc24ndAor
ICAvLyBjcm9zcyBsaW5lIGJvdW5kYXJpZXMpLCAid29yZCIgKGFjcm9zcyBuZXh0IHdvcmQpLCBv
ciAiZ3JvdXAiICh0bworICAvLyB0aGUgc3RhcnQgb2YgbmV4dCBncm91cCBvZiB3b3JkIG9yIG5v
bi13b3JkLW5vbi13aGl0ZXNwYWNlCisgIC8vIGNoYXJzKS4gVGhlIHZpc3VhbGx5IHBhcmFtIGNv
bnRyb2xzIHdoZXRoZXIsIGluIHJpZ2h0LXRvLWxlZnQKKyAgLy8gdGV4dCwgZGlyZWN0aW9uIDEg
bWVhbnMgdG8gbW92ZSB0b3dhcmRzIHRoZSBuZXh0IGluZGV4IGluIHRoZQorICAvLyBzdHJpbmcs
IG9yIHRvd2FyZHMgdGhlIGNoYXJhY3RlciB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnJlbnQKKyAg
Ly8gcG9zaXRpb24uIFRoZSByZXN1bHRpbmcgcG9zaXRpb24gd2lsbCBoYXZlIGEgaGl0U2lkZT10
cnVlCisgIC8vIHByb3BlcnR5IGlmIGl0IHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQu
CiAgIGZ1bmN0aW9uIGZpbmRQb3NIKGRvYywgcG9zLCBkaXIsIHVuaXQsIHZpc3VhbGx5KSB7CiAg
ICAgdmFyIGxpbmUgPSBwb3MubGluZSwgY2ggPSBwb3MuY2gsIG9yaWdEaXIgPSBkaXI7CiAgICAg
dmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZSk7CkBAIC0yODEwLDEzICszNzQwLDE1IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAoZGlyIDwgMCAm
JiAhbW92ZU9uY2UoIWZpcnN0KSkgYnJlYWs7CiAgICAgICAgIHZhciBjdXIgPSBsaW5lT2JqLnRl
eHQuY2hhckF0KGNoKSB8fCAiXG4iOwogICAgICAgICB2YXIgdHlwZSA9IGlzV29yZENoYXIoY3Vy
KSA/ICJ3IgotICAgICAgICAgIDogIWdyb3VwID8gbnVsbAotICAgICAgICAgIDogL1xzLy50ZXN0
KGN1cikgPyBudWxsCisgICAgICAgICAgOiBncm91cCAmJiBjdXIgPT0gIlxuIiA/ICJuIgorICAg
ICAgICAgIDogIWdyb3VwIHx8IC9ccy8udGVzdChjdXIpID8gbnVsbAogICAgICAgICAgIDogInAi
OworICAgICAgICBpZiAoZ3JvdXAgJiYgIWZpcnN0ICYmICF0eXBlKSB0eXBlID0gInMiOwogICAg
ICAgICBpZiAoc2F3VHlwZSAmJiBzYXdUeXBlICE9IHR5cGUpIHsKICAgICAgICAgICBpZiAoZGly
IDwgMCkge2RpciA9IDE7IG1vdmVPbmNlKCk7fQogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CisKICAgICAgICAgaWYgKHR5cGUpIHNhd1R5cGUgPSB0eXBlOwogICAgICAgICBpZiAoZGlyID4g
MCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkgYnJlYWs7CiAgICAgICB9CkBAIC0yODI2LDYgKzM3NTgs
OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gcmVzdWx0
OwogICB9CgorICAvLyBGb3IgcmVsYXRpdmUgdmVydGljYWwgbW92ZW1lbnQuIERpciBtYXkgYmUg
LTEgb3IgMS4gVW5pdCBjYW4gYmUKKyAgLy8gInBhZ2UiIG9yICJsaW5lIi4gVGhlIHJlc3VsdGlu
ZyBwb3NpdGlvbiB3aWxsIGhhdmUgYSBoaXRTaWRlPXRydWUKKyAgLy8gcHJvcGVydHkgaWYgaXQg
cmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KICAgZnVuY3Rpb24gZmluZFBvc1YoY20s
IHBvcywgZGlyLCB1bml0KSB7CiAgICAgdmFyIGRvYyA9IGNtLmRvYywgeCA9IHBvcy5sZWZ0LCB5
OwogICAgIGlmICh1bml0ID09ICJwYWdlIikgewpAQCAtMjg0Myw3ICszNzc4LDkgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIHRhcmdldDsKICAgfQoKLSAg
ZnVuY3Rpb24gZmluZFdvcmRBdChsaW5lLCBwb3MpIHsKKyAgLy8gRmluZCB0aGUgd29yZCBhdCB0
aGUgZ2l2ZW4gcG9zaXRpb24gKGFzIHJldHVybmVkIGJ5IGNvb3Jkc0NoYXIpLgorICBmdW5jdGlv
biBmaW5kV29yZEF0KGRvYywgcG9zKSB7CisgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9z
LmxpbmUpLnRleHQ7CiAgICAgdmFyIHN0YXJ0ID0gcG9zLmNoLCBlbmQgPSBwb3MuY2g7CiAgICAg
aWYgKGxpbmUpIHsKICAgICAgIGlmICgocG9zLnhSZWwgPCAwIHx8IGVuZCA9PSBsaW5lLmxlbmd0
aCkgJiYgc3RhcnQpIC0tc3RhcnQ7IGVsc2UgKytlbmQ7CkBAIC0yODU0LDE3ICszNzkxLDE4IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgd2hpbGUgKHN0YXJ0ID4g
MCAmJiBjaGVjayhsaW5lLmNoYXJBdChzdGFydCAtIDEpKSkgLS1zdGFydDsKICAgICAgIHdoaWxl
IChlbmQgPCBsaW5lLmxlbmd0aCAmJiBjaGVjayhsaW5lLmNoYXJBdChlbmQpKSkgKytlbmQ7CiAg
ICAgfQotICAgIHJldHVybiB7ZnJvbTogUG9zKHBvcy5saW5lLCBzdGFydCksIHRvOiBQb3MocG9z
LmxpbmUsIGVuZCl9OworICAgIHJldHVybiBuZXcgUmFuZ2UoUG9zKHBvcy5saW5lLCBzdGFydCks
IFBvcyhwb3MubGluZSwgZW5kKSk7CiAgIH0KCi0gIGZ1bmN0aW9uIHNlbGVjdExpbmUoY20sIGxp
bmUpIHsKLSAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBQb3MobGluZSwgMCksIGNsaXBQb3Mo
Y20uZG9jLCBQb3MobGluZSArIDEsIDApKSk7Ci0gIH0KKyAgLy8gRURJVE9SIE1FVEhPRFMKCi0g
IC8vIFBST1RPVFlQRQorICAvLyBUaGUgcHVibGljbHkgdmlzaWJsZSBBUEkuIE5vdGUgdGhhdCBt
ZXRob2RPcChmKSBtZWFucworICAvLyAnd3JhcCBmIGluIGFuIG9wZXJhdGlvbiwgcGVyZm9ybWVk
IG9uIGl0cyBgdGhpc2AgcGFyYW1ldGVyJy4KCi0gIC8vIFRoZSBwdWJsaWNseSB2aXNpYmxlIEFQ
SS4gTm90ZSB0aGF0IG9wZXJhdGlvbihudWxsLCBmKSBtZWFucwotICAvLyAnd3JhcCBmIGluIGFu
IG9wZXJhdGlvbiwgcGVyZm9ybWVkIG9uIGl0cyBgdGhpc2AgcGFyYW1ldGVyJworICAvLyBUaGlz
IGlzIG5vdCB0aGUgY29tcGxldGUgc2V0IG9mIGVkaXRvciBtZXRob2RzLiBNb3N0IG9mIHRoZQor
ICAvLyBtZXRob2RzIGRlZmluZWQgb24gdGhlIERvYyB0eXBlIGFyZSBhbHNvIGluamVjdGVkIGlu
dG8KKyAgLy8gQ29kZU1pcnJvci5wcm90b3R5cGUsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0
eSBhbmQKKyAgLy8gY29udmVuaWVuY2UuCgogICBDb2RlTWlycm9yLnByb3RvdHlwZSA9IHsKICAg
ICBjb25zdHJ1Y3RvcjogQ29kZU1pcnJvciwKQEAgLTI4OTMsMTQgKzM4MzEsMTQgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIH0KICAgICB9LAoKLSAgICBhZGRP
dmVybGF5OiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oc3BlYywgb3B0aW9ucykgeworICAgIGFk
ZE92ZXJsYXk6IG1ldGhvZE9wKGZ1bmN0aW9uKHNwZWMsIG9wdGlvbnMpIHsKICAgICAgIHZhciBt
b2RlID0gc3BlYy50b2tlbiA/IHNwZWMgOiBDb2RlTWlycm9yLmdldE1vZGUodGhpcy5vcHRpb25z
LCBzcGVjKTsKICAgICAgIGlmIChtb2RlLnN0YXJ0U3RhdGUpIHRocm93IG5ldyBFcnJvcigiT3Zl
cmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKTsKICAgICAgIHRoaXMuc3RhdGUub3ZlcmxheXMu
cHVzaCh7bW9kZTogbW9kZSwgbW9kZVNwZWM6IHNwZWMsIG9wYXF1ZTogb3B0aW9ucyAmJiBvcHRp
b25zLm9wYXF1ZX0pOwogICAgICAgdGhpcy5zdGF0ZS5tb2RlR2VuKys7CiAgICAgICByZWdDaGFu
Z2UodGhpcyk7CiAgICAgfSksCi0gICAgcmVtb3ZlT3ZlcmxheTogb3BlcmF0aW9uKG51bGwsIGZ1
bmN0aW9uKHNwZWMpIHsKKyAgICByZW1vdmVPdmVybGF5OiBtZXRob2RPcChmdW5jdGlvbihzcGVj
KSB7CiAgICAgICB2YXIgb3ZlcmxheXMgPSB0aGlzLnN0YXRlLm92ZXJsYXlzOwogICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBvdmVybGF5cy5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgY3Vy
ID0gb3ZlcmxheXNbaV0ubW9kZVNwZWM7CkBAIC0yOTEzLDE4ICszODUxLDI5IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgfQogICAgIH0pLAoKLSAgICBpbmRlbnRM
aW5lOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24obiwgZGlyLCBhZ2dyZXNzaXZlKSB7CisgICAg
aW5kZW50TGluZTogbWV0aG9kT3AoZnVuY3Rpb24obiwgZGlyLCBhZ2dyZXNzaXZlKSB7CiAgICAg
ICBpZiAodHlwZW9mIGRpciAhPSAic3RyaW5nIiAmJiB0eXBlb2YgZGlyICE9ICJudW1iZXIiKSB7
CiAgICAgICAgIGlmIChkaXIgPT0gbnVsbCkgZGlyID0gdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50
ID8gInNtYXJ0IiA6ICJwcmV2IjsKICAgICAgICAgZWxzZSBkaXIgPSBkaXIgPyAiYWRkIiA6ICJz
dWJ0cmFjdCI7CiAgICAgICB9CiAgICAgICBpZiAoaXNMaW5lKHRoaXMuZG9jLCBuKSkgaW5kZW50
TGluZSh0aGlzLCBuLCBkaXIsIGFnZ3Jlc3NpdmUpOwogICAgIH0pLAotICAgIGluZGVudFNlbGVj
dGlvbjogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGhvdykgewotICAgICAgdmFyIHNlbCA9IHRo
aXMuZG9jLnNlbDsKLSAgICAgIGlmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmV0dXJuIGlu
ZGVudExpbmUodGhpcywgc2VsLmZyb20ubGluZSwgaG93KTsKLSAgICAgIHZhciBlID0gc2VsLnRv
LmxpbmUgLSAoc2VsLnRvLmNoID8gMCA6IDEpOwotICAgICAgZm9yICh2YXIgaSA9IHNlbC5mcm9t
LmxpbmU7IGkgPD0gZTsgKytpKSBpbmRlbnRMaW5lKHRoaXMsIGksIGhvdyk7CisgICAgaW5kZW50
U2VsZWN0aW9uOiBtZXRob2RPcChmdW5jdGlvbihob3cpIHsKKyAgICAgIHZhciByYW5nZXMgPSB0
aGlzLmRvYy5zZWwucmFuZ2VzLCBlbmQgPSAtMTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciByYW5nZSA9IHJhbmdlc1tpXTsKKyAg
ICAgICAgaWYgKCFyYW5nZS5lbXB0eSgpKSB7CisgICAgICAgICAgdmFyIHN0YXJ0ID0gTWF0aC5t
YXgoZW5kLCByYW5nZS5mcm9tKCkubGluZSk7CisgICAgICAgICAgdmFyIHRvID0gcmFuZ2UudG8o
KTsKKyAgICAgICAgICBlbmQgPSBNYXRoLm1pbih0aGlzLmxhc3RMaW5lKCksIHRvLmxpbmUgLSAo
dG8uY2ggPyAwIDogMSkpICsgMTsKKyAgICAgICAgICBmb3IgKHZhciBqID0gc3RhcnQ7IGogPCBl
bmQ7ICsraikKKyAgICAgICAgICAgIGluZGVudExpbmUodGhpcywgaiwgaG93KTsKKyAgICAgICAg
fSBlbHNlIGlmIChyYW5nZS5oZWFkLmxpbmUgPiBlbmQpIHsKKyAgICAgICAgICBpbmRlbnRMaW5l
KHRoaXMsIHJhbmdlLmhlYWQubGluZSwgaG93LCB0cnVlKTsKKyAgICAgICAgICBlbmQgPSByYW5n
ZS5oZWFkLmxpbmU7CisgICAgICAgICAgaWYgKGkgPT0gdGhpcy5kb2Muc2VsLnByaW1JbmRleCkg
ZW5zdXJlQ3Vyc29yVmlzaWJsZSh0aGlzKTsKKyAgICAgICAgfQorICAgICAgfQogICAgIH0pLAoK
ICAgICAvLyBGZXRjaCB0aGUgcGFyc2VyIHRva2VuIGZvciBhIGdpdmVuIGNoYXJhY3Rlci4gVXNl
ZnVsIGZvciBoYWNrcwpAQCAtMjkzNywxMiArMzg4NiwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUu
dGV4dCwgdGhpcy5vcHRpb25zLnRhYlNpemUpOwogICAgICAgd2hpbGUgKHN0cmVhbS5wb3MgPCBw
b3MuY2ggJiYgIXN0cmVhbS5lb2woKSkgewogICAgICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0u
cG9zOwotICAgICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOworICAg
ICAgICB2YXIgc3R5bGUgPSByZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgICB9
CiAgICAgICByZXR1cm4ge3N0YXJ0OiBzdHJlYW0uc3RhcnQsCiAgICAgICAgICAgICAgIGVuZDog
c3RyZWFtLnBvcywKICAgICAgICAgICAgICAgc3RyaW5nOiBzdHJlYW0uY3VycmVudCgpLAotICAg
ICAgICAgICAgICBjbGFzc05hbWU6IHN0eWxlIHx8IG51bGwsIC8vIERlcHJlY2F0ZWQsIHVzZSAn
dHlwZScgaW5zdGVhZAogICAgICAgICAgICAgICB0eXBlOiBzdHlsZSB8fCBudWxsLAogICAgICAg
ICAgICAgICBzdGF0ZTogc3RhdGV9OwogICAgIH0sCkBAIC0yOTY3LDExICszOTE1LDMxIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0sCgogICAgIGdldEhlbHBlcjog
ZnVuY3Rpb24ocG9zLCB0eXBlKSB7Ci0gICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHko
dHlwZSkpIHJldHVybjsKKyAgICAgIHJldHVybiB0aGlzLmdldEhlbHBlcnMocG9zLCB0eXBlKVsw
XTsKKyAgICB9LAorCisgICAgZ2V0SGVscGVyczogZnVuY3Rpb24ocG9zLCB0eXBlKSB7CisgICAg
ICB2YXIgZm91bmQgPSBbXTsKKyAgICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBl
KSkgcmV0dXJuIGhlbHBlcnM7CiAgICAgICB2YXIgaGVscCA9IGhlbHBlcnNbdHlwZV0sIG1vZGUg
PSB0aGlzLmdldE1vZGVBdChwb3MpOwotICAgICAgcmV0dXJuIG1vZGVbdHlwZV0gJiYgaGVscFtt
b2RlW3R5cGVdXSB8fAotICAgICAgICBtb2RlLmhlbHBlclR5cGUgJiYgaGVscFttb2RlLmhlbHBl
clR5cGVdIHx8Ci0gICAgICAgIGhlbHBbbW9kZS5uYW1lXTsKKyAgICAgIGlmICh0eXBlb2YgbW9k
ZVt0eXBlXSA9PSAic3RyaW5nIikgeworICAgICAgICBpZiAoaGVscFttb2RlW3R5cGVdXSkgZm91
bmQucHVzaChoZWxwW21vZGVbdHlwZV1dKTsKKyAgICAgIH0gZWxzZSBpZiAobW9kZVt0eXBlXSkg
eworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGVbdHlwZV0ubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICB2YXIgdmFsID0gaGVscFttb2RlW3R5cGVdW2ldXTsKKyAgICAgICAgICBpZiAo
dmFsKSBmb3VuZC5wdXNoKHZhbCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAobW9kZS5o
ZWxwZXJUeXBlICYmIGhlbHBbbW9kZS5oZWxwZXJUeXBlXSkgeworICAgICAgICBmb3VuZC5wdXNo
KGhlbHBbbW9kZS5oZWxwZXJUeXBlXSk7CisgICAgICB9IGVsc2UgaWYgKGhlbHBbbW9kZS5uYW1l
XSkgeworICAgICAgICBmb3VuZC5wdXNoKGhlbHBbbW9kZS5uYW1lXSk7CisgICAgICB9CisgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGhlbHAuX2dsb2JhbC5sZW5ndGg7IGkrKykgeworICAgICAg
ICB2YXIgY3VyID0gaGVscC5fZ2xvYmFsW2ldOworICAgICAgICBpZiAoY3VyLnByZWQobW9kZSwg
dGhpcykgJiYgaW5kZXhPZihmb3VuZCwgY3VyLnZhbCkgPT0gLTEpCisgICAgICAgICAgZm91bmQu
cHVzaChjdXIudmFsKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBmb3VuZDsKICAgICB9LAoKICAg
ICBnZXRTdGF0ZUFmdGVyOiBmdW5jdGlvbihsaW5lLCBwcmVjaXNlKSB7CkBAIC0yOTgxLDEwICsz
OTQ5LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0sCgogICAg
IGN1cnNvckNvb3JkczogZnVuY3Rpb24oc3RhcnQsIG1vZGUpIHsKLSAgICAgIHZhciBwb3MsIHNl
bCA9IHRoaXMuZG9jLnNlbDsKLSAgICAgIGlmIChzdGFydCA9PSBudWxsKSBwb3MgPSBzZWwuaGVh
ZDsKKyAgICAgIHZhciBwb3MsIHJhbmdlID0gdGhpcy5kb2Muc2VsLnByaW1hcnkoKTsKKyAgICAg
IGlmIChzdGFydCA9PSBudWxsKSBwb3MgPSByYW5nZS5oZWFkOwogICAgICAgZWxzZSBpZiAodHlw
ZW9mIHN0YXJ0ID09ICJvYmplY3QiKSBwb3MgPSBjbGlwUG9zKHRoaXMuZG9jLCBzdGFydCk7Ci0g
ICAgICBlbHNlIHBvcyA9IHN0YXJ0ID8gc2VsLmZyb20gOiBzZWwudG87CisgICAgICBlbHNlIHBv
cyA9IHN0YXJ0ID8gcmFuZ2UuZnJvbSgpIDogcmFuZ2UudG8oKTsKICAgICAgIHJldHVybiBjdXJz
b3JDb29yZHModGhpcywgcG9zLCBtb2RlIHx8ICJwYWdlIik7CiAgICAgfSwKCkBAIC0zMDA2LDE1
ICszOTc0LDE1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYg
KGxpbmUgPCB0aGlzLmRvYy5maXJzdCkgbGluZSA9IHRoaXMuZG9jLmZpcnN0OwogICAgICAgZWxz
ZSBpZiAobGluZSA+IGxhc3QpIHsgbGluZSA9IGxhc3Q7IGVuZCA9IHRydWU7IH0KICAgICAgIHZh
ciBsaW5lT2JqID0gZ2V0TGluZSh0aGlzLmRvYywgbGluZSk7Ci0gICAgICByZXR1cm4gaW50b0Nv
b3JkU3lzdGVtKHRoaXMsIGdldExpbmUodGhpcy5kb2MsIGxpbmUpLCB7dG9wOiAwLCBsZWZ0OiAw
fSwgbW9kZSB8fCAicGFnZSIpLnRvcCArCi0gICAgICAgIChlbmQgPyBsaW5lT2JqLmhlaWdodCA6
IDApOworICAgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbSh0aGlzLCBsaW5lT2JqLCB7dG9wOiAw
LCBsZWZ0OiAwfSwgbW9kZSB8fCAicGFnZSIpLnRvcCArCisgICAgICAgIChlbmQgPyB0aGlzLmRv
Yy5oZWlnaHQgLSBoZWlnaHRBdExpbmUobGluZU9iaikgOiAwKTsKICAgICB9LAoKICAgICBkZWZh
dWx0VGV4dEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0SGVpZ2h0KHRoaXMuZGlzcGxh
eSk7IH0sCiAgICAgZGVmYXVsdENoYXJXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBjaGFyV2lk
dGgodGhpcy5kaXNwbGF5KTsgfSwKCi0gICAgc2V0R3V0dGVyTWFya2VyOiBvcGVyYXRpb24obnVs
bCwgZnVuY3Rpb24obGluZSwgZ3V0dGVySUQsIHZhbHVlKSB7Ci0gICAgICByZXR1cm4gY2hhbmdl
TGluZSh0aGlzLCBsaW5lLCBmdW5jdGlvbihsaW5lKSB7CisgICAgc2V0R3V0dGVyTWFya2VyOiBt
ZXRob2RPcChmdW5jdGlvbihsaW5lLCBndXR0ZXJJRCwgdmFsdWUpIHsKKyAgICAgIHJldHVybiBj
aGFuZ2VMaW5lKHRoaXMsIGxpbmUsICJndXR0ZXIiLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAg
IHZhciBtYXJrZXJzID0gbGluZS5ndXR0ZXJNYXJrZXJzIHx8IChsaW5lLmd1dHRlck1hcmtlcnMg
PSB7fSk7CiAgICAgICAgIG1hcmtlcnNbZ3V0dGVySURdID0gdmFsdWU7CiAgICAgICAgIGlmICgh
dmFsdWUgJiYgaXNFbXB0eShtYXJrZXJzKSkgbGluZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsKQEAg
LTMwMjIsMjAgKzM5OTAsMjAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICB9KTsKICAgICB9KSwKCi0gICAgY2xlYXJHdXR0ZXI6IG9wZXJhdGlvbihudWxsLCBmdW5j
dGlvbihndXR0ZXJJRCkgeworICAgIGNsZWFyR3V0dGVyOiBtZXRob2RPcChmdW5jdGlvbihndXR0
ZXJJRCkgewogICAgICAgdmFyIGNtID0gdGhpcywgZG9jID0gY20uZG9jLCBpID0gZG9jLmZpcnN0
OwogICAgICAgZG9jLml0ZXIoZnVuY3Rpb24obGluZSkgewogICAgICAgICBpZiAobGluZS5ndXR0
ZXJNYXJrZXJzICYmIGxpbmUuZ3V0dGVyTWFya2Vyc1tndXR0ZXJJRF0pIHsKICAgICAgICAgICBs
aW5lLmd1dHRlck1hcmtlcnNbZ3V0dGVySURdID0gbnVsbDsKLSAgICAgICAgICByZWdDaGFuZ2Uo
Y20sIGksIGkgKyAxKTsKKyAgICAgICAgICByZWdMaW5lQ2hhbmdlKGNtLCBpLCAiZ3V0dGVyIik7
CiAgICAgICAgICAgaWYgKGlzRW1wdHkobGluZS5ndXR0ZXJNYXJrZXJzKSkgbGluZS5ndXR0ZXJN
YXJrZXJzID0gbnVsbDsKICAgICAgICAgfQogICAgICAgICArK2k7CiAgICAgICB9KTsKICAgICB9
KSwKCi0gICAgYWRkTGluZUNsYXNzOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oaGFuZGxlLCB3
aGVyZSwgY2xzKSB7Ci0gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBoYW5kbGUsIGZ1bmN0
aW9uKGxpbmUpIHsKKyAgICBhZGRMaW5lQ2xhc3M6IG1ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwg
d2hlcmUsIGNscykgeworICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCAiY2xh
c3MiLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gInRleHQi
ID8gInRleHRDbGFzcyIgOiB3aGVyZSA9PSAiYmFja2dyb3VuZCIgPyAiYmdDbGFzcyIgOiAid3Jh
cENsYXNzIjsKICAgICAgICAgaWYgKCFsaW5lW3Byb3BdKSBsaW5lW3Byb3BdID0gY2xzOwogICAg
ICAgICBlbHNlIGlmIChuZXcgUmVnRXhwKCIoPzpefFxccykiICsgY2xzICsgIig/OiR8XFxzKSIp
LnRlc3QobGluZVtwcm9wXSkpIHJldHVybiBmYWxzZTsKQEAgLTMwNDQsOCArNDAxMiw4IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgfSk7CiAgICAgfSksCgotICAg
IHJlbW92ZUxpbmVDbGFzczogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUs
IGNscykgewotICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCBmdW5jdGlvbihs
aW5lKSB7CisgICAgcmVtb3ZlTGluZUNsYXNzOiBtZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIHdo
ZXJlLCBjbHMpIHsKKyAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgImNsYXNz
IiwgZnVuY3Rpb24obGluZSkgewogICAgICAgICB2YXIgcHJvcCA9IHdoZXJlID09ICJ0ZXh0IiA/
ICJ0ZXh0Q2xhc3MiIDogd2hlcmUgPT0gImJhY2tncm91bmQiID8gImJnQ2xhc3MiIDogIndyYXBD
bGFzcyI7CiAgICAgICAgIHZhciBjdXIgPSBsaW5lW3Byb3BdOwogICAgICAgICBpZiAoIWN1cikg
cmV0dXJuIGZhbHNlOwpAQCAtMzA2MCw3ICs0MDI4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICB9KTsKICAgICB9KSwKCi0gICAgYWRkTGluZVdpZGdldDogb3Bl
cmF0aW9uKG51bGwsIGZ1bmN0aW9uKGhhbmRsZSwgbm9kZSwgb3B0aW9ucykgeworICAgIGFkZExp
bmVXaWRnZXQ6IG1ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgbm9kZSwgb3B0aW9ucykgewogICAg
ICAgcmV0dXJuIGFkZExpbmVXaWRnZXQodGhpcywgaGFuZGxlLCBub2RlLCBvcHRpb25zKTsKICAg
ICB9KSwKCkBAIC0zMDgxLDcgKzQwNDksNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgd2lkZ2V0czogbGluZS53aWRnZXRzfTsKICAgICB9LAoKLSAg
ICBnZXRWaWV3cG9ydDogZnVuY3Rpb24oKSB7IHJldHVybiB7ZnJvbTogdGhpcy5kaXNwbGF5LnNo
b3dpbmdGcm9tLCB0bzogdGhpcy5kaXNwbGF5LnNob3dpbmdUb307fSwKKyAgICBnZXRWaWV3cG9y
dDogZnVuY3Rpb24oKSB7IHJldHVybiB7ZnJvbTogdGhpcy5kaXNwbGF5LnZpZXdGcm9tLCB0bzog
dGhpcy5kaXNwbGF5LnZpZXdUb307fSwKCiAgICAgYWRkV2lkZ2V0OiBmdW5jdGlvbihwb3MsIG5v
ZGUsIHNjcm9sbCwgdmVydCwgaG9yaXopIHsKICAgICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNw
bGF5OwpAQCAtMzExNiw5ICs0MDg0LDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLCBsZWZ0LCB0b3AsIGxlZnQgKyBub2Rl
Lm9mZnNldFdpZHRoLCB0b3AgKyBub2RlLm9mZnNldEhlaWdodCk7CiAgICAgfSwKCi0gICAgdHJp
Z2dlck9uS2V5RG93bjogb3BlcmF0aW9uKG51bGwsIG9uS2V5RG93biksCisgICAgdHJpZ2dlck9u
S2V5RG93bjogbWV0aG9kT3Aob25LZXlEb3duKSwKKyAgICB0cmlnZ2VyT25LZXlQcmVzczogbWV0
aG9kT3Aob25LZXlQcmVzcyksCisgICAgdHJpZ2dlck9uS2V5VXA6IG1ldGhvZE9wKG9uS2V5VXAp
LAoKLSAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7cmV0dXJuIGNvbW1hbmRzW2NtZF0o
dGhpcyk7fSwKKyAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7CisgICAgICBpZiAoY29t
bWFuZHMuaGFzT3duUHJvcGVydHkoY21kKSkKKyAgICAgICAgcmV0dXJuIGNvbW1hbmRzW2NtZF0o
dGhpcyk7CisgICAgfSwKCiAgICAgZmluZFBvc0g6IGZ1bmN0aW9uKGZyb20sIGFtb3VudCwgdW5p
dCwgdmlzdWFsbHkpIHsKICAgICAgIHZhciBkaXIgPSAxOwpAQCAtMzEzMCwyMCArNDEwMywyNSBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiBjdXI7CiAg
ICAgfSwKCi0gICAgbW92ZUg6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihkaXIsIHVuaXQpIHsK
LSAgICAgIHZhciBzZWwgPSB0aGlzLmRvYy5zZWwsIHBvczsKLSAgICAgIGlmIChzZWwuc2hpZnQg
fHwgc2VsLmV4dGVuZCB8fCBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkKLSAgICAgICAgcG9zID0g
ZmluZFBvc0godGhpcy5kb2MsIHNlbC5oZWFkLCBkaXIsIHVuaXQsIHRoaXMub3B0aW9ucy5ydGxN
b3ZlVmlzdWFsbHkpOwotICAgICAgZWxzZQotICAgICAgICBwb3MgPSBkaXIgPCAwID8gc2VsLmZy
b20gOiBzZWwudG87Ci0gICAgICBleHRlbmRTZWxlY3Rpb24odGhpcy5kb2MsIHBvcywgcG9zLCBk
aXIpOworICAgIG1vdmVIOiBtZXRob2RPcChmdW5jdGlvbihkaXIsIHVuaXQpIHsKKyAgICAgIHZh
ciBjbSA9IHRoaXM7CisgICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2Up
IHsKKyAgICAgICAgaWYgKGNtLmRpc3BsYXkuc2hpZnQgfHwgY20uZG9jLmV4dGVuZCB8fCByYW5n
ZS5lbXB0eSgpKQorICAgICAgICAgIHJldHVybiBmaW5kUG9zSChjbS5kb2MsIHJhbmdlLmhlYWQs
IGRpciwgdW5pdCwgY20ub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgcmV0dXJuIGRpciA8IDAgPyByYW5nZS5mcm9tKCkgOiByYW5nZS50bygpOworICAg
ICAgfSwgc2VsX21vdmUpOwogICAgIH0pLAoKLSAgICBkZWxldGVIOiBvcGVyYXRpb24obnVsbCwg
ZnVuY3Rpb24oZGlyLCB1bml0KSB7Ci0gICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsOwotICAg
ICAgaWYgKCFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmVwbGFjZVJhbmdlKHRoaXMuZG9jLCAi
Iiwgc2VsLmZyb20sIHNlbC50bywgIitkZWxldGUiKTsKLSAgICAgIGVsc2UgcmVwbGFjZVJhbmdl
KHRoaXMuZG9jLCAiIiwgc2VsLmZyb20sIGZpbmRQb3NIKHRoaXMuZG9jLCBzZWwuaGVhZCwgZGly
LCB1bml0LCBmYWxzZSksICIrZGVsZXRlIik7Ci0gICAgICB0aGlzLmN1ck9wLnVzZXJTZWxDaGFu
Z2UgPSB0cnVlOworICAgIGRlbGV0ZUg6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkgewor
ICAgICAgdmFyIHNlbCA9IHRoaXMuZG9jLnNlbCwgZG9jID0gdGhpcy5kb2M7CisgICAgICBpZiAo
c2VsLnNvbWV0aGluZ1NlbGVjdGVkKCkpCisgICAgICAgIGRvYy5yZXBsYWNlU2VsZWN0aW9uKCIi
LCBudWxsLCAiK2RlbGV0ZSIpOworICAgICAgZWxzZQorICAgICAgICBkZWxldGVOZWFyU2VsZWN0
aW9uKHRoaXMsIGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgICAgdmFyIG90aGVyID0gZmluZFBv
c0goZG9jLCByYW5nZS5oZWFkLCBkaXIsIHVuaXQsIGZhbHNlKTsKKyAgICAgICAgICByZXR1cm4g
ZGlyIDwgMCA/IHtmcm9tOiBvdGhlciwgdG86IHJhbmdlLmhlYWR9IDoge2Zyb206IHJhbmdlLmhl
YWQsIHRvOiBvdGhlcn07CisgICAgICAgIH0pOwogICAgIH0pLAoKICAgICBmaW5kUG9zVjogZnVu
Y3Rpb24oZnJvbSwgYW1vdW50LCB1bml0LCBnb2FsQ29sdW1uKSB7CkBAIC0zMTU5LDI4ICs0MTM3
LDM5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIGN1
cjsKICAgICB9LAoKLSAgICBtb3ZlVjogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRpciwgdW5p
dCkgewotICAgICAgdmFyIHNlbCA9IHRoaXMuZG9jLnNlbDsKLSAgICAgIHZhciBwb3MgPSBjdXJz
b3JDb29yZHModGhpcywgc2VsLmhlYWQsICJkaXYiKTsKLSAgICAgIGlmIChzZWwuZ29hbENvbHVt
biAhPSBudWxsKSBwb3MubGVmdCA9IHNlbC5nb2FsQ29sdW1uOwotICAgICAgdmFyIHRhcmdldCA9
IGZpbmRQb3NWKHRoaXMsIHBvcywgZGlyLCB1bml0KTsKLQotICAgICAgaWYgKHVuaXQgPT0gInBh
Z2UiKSBhZGRUb1Njcm9sbFBvcyh0aGlzLCAwLCBjaGFyQ29vcmRzKHRoaXMsIHRhcmdldCwgImRp
diIpLnRvcCAtIHBvcy50b3ApOwotICAgICAgZXh0ZW5kU2VsZWN0aW9uKHRoaXMuZG9jLCB0YXJn
ZXQsIHRhcmdldCwgZGlyKTsKLSAgICAgIHNlbC5nb2FsQ29sdW1uID0gcG9zLmxlZnQ7CisgICAg
bW92ZVY6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkgeworICAgICAgdmFyIGNtID0gdGhp
cywgZG9jID0gdGhpcy5kb2MsIGdvYWxzID0gW107CisgICAgICB2YXIgY29sbGFwc2UgPSAhY20u
ZGlzcGxheS5zaGlmdCAmJiAhZG9jLmV4dGVuZCAmJiBkb2Muc2VsLnNvbWV0aGluZ1NlbGVjdGVk
KCk7CisgICAgICBkb2MuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7CisgICAg
ICAgIGlmIChjb2xsYXBzZSkKKyAgICAgICAgICByZXR1cm4gZGlyIDwgMCA/IHJhbmdlLmZyb20o
KSA6IHJhbmdlLnRvKCk7CisgICAgICAgIHZhciBoZWFkUG9zID0gY3Vyc29yQ29vcmRzKGNtLCBy
YW5nZS5oZWFkLCAiZGl2Iik7CisgICAgICAgIGlmIChyYW5nZS5nb2FsQ29sdW1uICE9IG51bGwp
IGhlYWRQb3MubGVmdCA9IHJhbmdlLmdvYWxDb2x1bW47CisgICAgICAgIGdvYWxzLnB1c2goaGVh
ZFBvcy5sZWZ0KTsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRQb3NWKGNtLCBoZWFkUG9zLCBkaXIs
IHVuaXQpOworICAgICAgICBpZiAodW5pdCA9PSAicGFnZSIgJiYgcmFuZ2UgPT0gZG9jLnNlbC5w
cmltYXJ5KCkpCisgICAgICAgICAgYWRkVG9TY3JvbGxQb3MoY20sIG51bGwsIGNoYXJDb29yZHMo
Y20sIHBvcywgImRpdiIpLnRvcCAtIGhlYWRQb3MudG9wKTsKKyAgICAgICAgcmV0dXJuIHBvczsK
KyAgICAgIH0sIHNlbF9tb3ZlKTsKKyAgICAgIGlmIChnb2Fscy5sZW5ndGgpIGZvciAodmFyIGkg
PSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspCisgICAgICAgIGRvYy5zZWwucmFu
Z2VzW2ldLmdvYWxDb2x1bW4gPSBnb2Fsc1tpXTsKICAgICB9KSwKCiAgICAgdG9nZ2xlT3Zlcndy
aXRlOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUg
PT0gdGhpcy5zdGF0ZS5vdmVyd3JpdGUpIHJldHVybjsKICAgICAgIGlmICh0aGlzLnN0YXRlLm92
ZXJ3cml0ZSA9ICF0aGlzLnN0YXRlLm92ZXJ3cml0ZSkKLSAgICAgICAgdGhpcy5kaXNwbGF5LmN1
cnNvci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI7CisgICAgICAgIGFkZENs
YXNzKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsICJDb2RlTWlycm9yLW92ZXJ3cml0ZSIpOwogICAg
ICAgZWxzZQotICAgICAgICB0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSA9IHRoaXMuZGlz
cGxheS5jdXJzb3IuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLW92ZXJ3cml0ZSIsICIi
KTsKKyAgICAgICAgcm1DbGFzcyh0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LCAiQ29kZU1pcnJvci1v
dmVyd3JpdGUiKTsKKworICAgICAgc2lnbmFsKHRoaXMsICJvdmVyd3JpdGVUb2dnbGUiLCB0aGlz
LCB0aGlzLnN0YXRlLm92ZXJ3cml0ZSk7CiAgICAgfSwKLSAgICBoYXNGb2N1czogZnVuY3Rpb24o
KSB7IHJldHVybiB0aGlzLnN0YXRlLmZvY3VzZWQ7IH0sCisgICAgaGFzRm9jdXM6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gYWN0aXZlRWx0KCkgPT0gdGhpcy5kaXNwbGF5LmlucHV0OyB9LAoKLSAgICBz
Y3JvbGxUbzogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHgsIHkpIHsKLSAgICAgIHVwZGF0ZVNj
cm9sbFBvcyh0aGlzLCB4LCB5KTsKKyAgICBzY3JvbGxUbzogbWV0aG9kT3AoZnVuY3Rpb24oeCwg
eSkgeworICAgICAgaWYgKHggIT0gbnVsbCB8fCB5ICE9IG51bGwpIHJlc29sdmVTY3JvbGxUb1Bv
cyh0aGlzKTsKKyAgICAgIGlmICh4ICE9IG51bGwpIHRoaXMuY3VyT3Auc2Nyb2xsTGVmdCA9IHg7
CisgICAgICBpZiAoeSAhPSBudWxsKSB0aGlzLmN1ck9wLnNjcm9sbFRvcCA9IHk7CiAgICAgfSks
CiAgICAgZ2V0U2Nyb2xsSW5mbzogZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgc2Nyb2xsZXIgPSB0
aGlzLmRpc3BsYXkuc2Nyb2xsZXIsIGNvID0gc2Nyb2xsZXJDdXRPZmY7CkBAIC0zMTg5LDU0ICs0
MTc4LDYyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICBjbGllbnRIZWlnaHQ6IHNjcm9sbGVyLmNsaWVudEhlaWdodCAtIGNvLCBjbGllbnRXaWR0aDog
c2Nyb2xsZXIuY2xpZW50V2lkdGggLSBjb307CiAgICAgfSwKCi0gICAgc2Nyb2xsSW50b1ZpZXc6
IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihyYW5nZSwgbWFyZ2luKSB7Ci0gICAgICBpZiAocmFu
Z2UgPT0gbnVsbCkgcmFuZ2UgPSB7ZnJvbTogdGhpcy5kb2Muc2VsLmhlYWQsIHRvOiBudWxsfTsK
LSAgICAgIGVsc2UgaWYgKHR5cGVvZiByYW5nZSA9PSAibnVtYmVyIikgcmFuZ2UgPSB7ZnJvbTog
UG9zKHJhbmdlLCAwKSwgdG86IG51bGx9OwotICAgICAgZWxzZSBpZiAocmFuZ2UuZnJvbSA9PSBu
dWxsKSByYW5nZSA9IHtmcm9tOiByYW5nZSwgdG86IG51bGx9OworICAgIHNjcm9sbEludG9WaWV3
OiBtZXRob2RPcChmdW5jdGlvbihyYW5nZSwgbWFyZ2luKSB7CisgICAgICBpZiAocmFuZ2UgPT0g
bnVsbCkgeworICAgICAgICByYW5nZSA9IHtmcm9tOiB0aGlzLmRvYy5zZWwucHJpbWFyeSgpLmhl
YWQsIHRvOiBudWxsfTsKKyAgICAgICAgaWYgKG1hcmdpbiA9PSBudWxsKSBtYXJnaW4gPSB0aGlz
Lm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2luOworICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmFu
Z2UgPT0gIm51bWJlciIpIHsKKyAgICAgICAgcmFuZ2UgPSB7ZnJvbTogUG9zKHJhbmdlLCAwKSwg
dG86IG51bGx9OworICAgICAgfSBlbHNlIGlmIChyYW5nZS5mcm9tID09IG51bGwpIHsKKyAgICAg
ICAgcmFuZ2UgPSB7ZnJvbTogcmFuZ2UsIHRvOiBudWxsfTsKKyAgICAgIH0KICAgICAgIGlmICgh
cmFuZ2UudG8pIHJhbmdlLnRvID0gcmFuZ2UuZnJvbTsKLSAgICAgIGlmICghbWFyZ2luKSBtYXJn
aW4gPSAwOworICAgICAgcmFuZ2UubWFyZ2luID0gbWFyZ2luIHx8IDA7CgotICAgICAgdmFyIGNv
b3JkcyA9IHJhbmdlOwogICAgICAgaWYgKHJhbmdlLmZyb20ubGluZSAhPSBudWxsKSB7Ci0gICAg
ICAgIHRoaXMuY3VyT3Auc2Nyb2xsVG9Qb3MgPSB7ZnJvbTogcmFuZ2UuZnJvbSwgdG86IHJhbmdl
LnRvLCBtYXJnaW46IG1hcmdpbn07Ci0gICAgICAgIGNvb3JkcyA9IHtmcm9tOiBjdXJzb3JDb29y
ZHModGhpcywgcmFuZ2UuZnJvbSksCi0gICAgICAgICAgICAgICAgICB0bzogY3Vyc29yQ29vcmRz
KHRoaXMsIHJhbmdlLnRvKX07Ci0gICAgICB9Ci0gICAgICB2YXIgc1BvcyA9IGNhbGN1bGF0ZVNj
cm9sbFBvcyh0aGlzLCBNYXRoLm1pbihjb29yZHMuZnJvbS5sZWZ0LCBjb29yZHMudG8ubGVmdCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihjb29yZHMuZnJv
bS50b3AsIGNvb3Jkcy50by50b3ApIC0gbWFyZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTWF0aC5tYXgoY29vcmRzLmZyb20ucmlnaHQsIGNvb3Jkcy50by5yaWdodCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChjb29yZHMuZnJv
bS5ib3R0b20sIGNvb3Jkcy50by5ib3R0b20pICsgbWFyZ2luKTsKLSAgICAgIHVwZGF0ZVNjcm9s
bFBvcyh0aGlzLCBzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTsKKyAgICAgICAgcmVz
b2x2ZVNjcm9sbFRvUG9zKHRoaXMpOworICAgICAgICB0aGlzLmN1ck9wLnNjcm9sbFRvUG9zID0g
cmFuZ2U7CisgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgc1BvcyA9IGNhbGN1bGF0ZVNjcm9s
bFBvcyh0aGlzLCBNYXRoLm1pbihyYW5nZS5mcm9tLmxlZnQsIHJhbmdlLnRvLmxlZnQpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihyYW5nZS5mcm9tLnRv
cCwgcmFuZ2UudG8udG9wKSAtIHJhbmdlLm1hcmdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWF0aC5tYXgocmFuZ2UuZnJvbS5yaWdodCwgcmFuZ2UudG8ucmlnaHQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChyYW5nZS5m
cm9tLmJvdHRvbSwgcmFuZ2UudG8uYm90dG9tKSArIHJhbmdlLm1hcmdpbik7CisgICAgICAgIHRo
aXMuc2Nyb2xsVG8oc1Bvcy5zY3JvbGxMZWZ0LCBzUG9zLnNjcm9sbFRvcCk7CisgICAgICB9CiAg
ICAgfSksCgotICAgIHNldFNpemU6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbih3aWR0aCwgaGVp
Z2h0KSB7CisgICAgc2V0U2l6ZTogbWV0aG9kT3AoZnVuY3Rpb24od2lkdGgsIGhlaWdodCkgewog
ICAgICAgZnVuY3Rpb24gaW50ZXJwcmV0KHZhbCkgewogICAgICAgICByZXR1cm4gdHlwZW9mIHZh
bCA9PSAibnVtYmVyIiB8fCAvXlxkKyQvLnRlc3QoU3RyaW5nKHZhbCkpID8gdmFsICsgInB4IiA6
IHZhbDsKICAgICAgIH0KICAgICAgIGlmICh3aWR0aCAhPSBudWxsKSB0aGlzLmRpc3BsYXkud3Jh
cHBlci5zdHlsZS53aWR0aCA9IGludGVycHJldCh3aWR0aCk7CiAgICAgICBpZiAoaGVpZ2h0ICE9
IG51bGwpIHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLmhlaWdodCA9IGludGVycHJldChoZWln
aHQpOwotICAgICAgaWYgKHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcpCi0gICAgICAgIHRoaXMu
ZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aCA9IHRoaXMuZGlzcGxheS5tZWFzdXJlTGlu
ZUNhY2hlUG9zID0gMDsKKyAgICAgIGlmICh0aGlzLm9wdGlvbnMubGluZVdyYXBwaW5nKSBjbGVh
ckxpbmVNZWFzdXJlbWVudENhY2hlKHRoaXMpOwogICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0
ZSA9IHRydWU7CisgICAgICBzaWduYWwodGhpcywgInJlZnJlc2giLCB0aGlzKTsKICAgICB9KSwK
CiAgICAgb3BlcmF0aW9uOiBmdW5jdGlvbihmKXtyZXR1cm4gcnVuSW5PcCh0aGlzLCBmKTt9LAoK
LSAgICByZWZyZXNoOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgYmFk
SGVpZ2h0ID0gdGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgPT0gbnVsbDsKLSAgICAgIGNs
ZWFyQ2FjaGVzKHRoaXMpOwotICAgICAgdXBkYXRlU2Nyb2xsUG9zKHRoaXMsIHRoaXMuZG9jLnNj
cm9sbExlZnQsIHRoaXMuZG9jLnNjcm9sbFRvcCk7CisgICAgcmVmcmVzaDogbWV0aG9kT3AoZnVu
Y3Rpb24oKSB7CisgICAgICB2YXIgb2xkSGVpZ2h0ID0gdGhpcy5kaXNwbGF5LmNhY2hlZFRleHRI
ZWlnaHQ7CiAgICAgICByZWdDaGFuZ2UodGhpcyk7Ci0gICAgICBpZiAoYmFkSGVpZ2h0KSBlc3Rp
bWF0ZUxpbmVIZWlnaHRzKHRoaXMpOworICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRy
dWU7CisgICAgICBjbGVhckNhY2hlcyh0aGlzKTsKKyAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy5k
b2Muc2Nyb2xsTGVmdCwgdGhpcy5kb2Muc2Nyb2xsVG9wKTsKKyAgICAgIHVwZGF0ZUd1dHRlclNw
YWNlKHRoaXMpOworICAgICAgaWYgKG9sZEhlaWdodCA9PSBudWxsIHx8IE1hdGguYWJzKG9sZEhl
aWdodCAtIHRleHRIZWlnaHQodGhpcy5kaXNwbGF5KSkgPiAuNSkKKyAgICAgICAgZXN0aW1hdGVM
aW5lSGVpZ2h0cyh0aGlzKTsKKyAgICAgIHNpZ25hbCh0aGlzLCAicmVmcmVzaCIsIHRoaXMpOwog
ICAgIH0pLAoKLSAgICBzd2FwRG9jOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oZG9jKSB7Cisg
ICAgc3dhcERvYzogbWV0aG9kT3AoZnVuY3Rpb24oZG9jKSB7CiAgICAgICB2YXIgb2xkID0gdGhp
cy5kb2M7CiAgICAgICBvbGQuY20gPSBudWxsOwogICAgICAgYXR0YWNoRG9jKHRoaXMsIGRvYyk7
CiAgICAgICBjbGVhckNhY2hlcyh0aGlzKTsKLSAgICAgIHJlc2V0SW5wdXQodGhpcywgdHJ1ZSk7
Ci0gICAgICB1cGRhdGVTY3JvbGxQb3ModGhpcywgZG9jLnNjcm9sbExlZnQsIGRvYy5zY3JvbGxU
b3ApOworICAgICAgcmVzZXRJbnB1dCh0aGlzKTsKKyAgICAgIHRoaXMuc2Nyb2xsVG8oZG9jLnNj
cm9sbExlZnQsIGRvYy5zY3JvbGxUb3ApOwogICAgICAgc2lnbmFsTGF0ZXIodGhpcywgInN3YXBE
b2MiLCB0aGlzLCBvbGQpOwogICAgICAgcmV0dXJuIG9sZDsKICAgICB9KSwKQEAgLTMyNTAsMTAg
KzQyNDcsMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CgogICAvLyBPUFRJ
T04gREVGQVVMVFMKCi0gIHZhciBvcHRpb25IYW5kbGVycyA9IENvZGVNaXJyb3Iub3B0aW9uSGFu
ZGxlcnMgPSB7fTsKLQogICAvLyBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCiAg
IHZhciBkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHMgPSB7fTsKKyAgLy8gRnVuY3Rpb25z
IHRvIHJ1biB3aGVuIG9wdGlvbnMgYXJlIGNoYW5nZWQuCisgIHZhciBvcHRpb25IYW5kbGVycyA9
IENvZGVNaXJyb3Iub3B0aW9uSGFuZGxlcnMgPSB7fTsKCiAgIGZ1bmN0aW9uIG9wdGlvbihuYW1l
LCBkZWZsdCwgaGFuZGxlLCBub3RPbkluaXQpIHsKICAgICBDb2RlTWlycm9yLmRlZmF1bHRzW25h
bWVdID0gZGVmbHQ7CkBAIC0zMjYxLDYgKzQyNTgsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIG5vdE9uSW5pdCA/IGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkge2lm
IChvbGQgIT0gSW5pdCkgaGFuZGxlKGNtLCB2YWwsIG9sZCk7fSA6IGhhbmRsZTsKICAgfQoKKyAg
Ly8gUGFzc2VkIHRvIG9wdGlvbiBoYW5kbGVycyB3aGVuIHRoZXJlIGlzIG5vIG9sZCB2YWx1ZS4K
ICAgdmFyIEluaXQgPSBDb2RlTWlycm9yLkluaXQgPSB7dG9TdHJpbmc6IGZ1bmN0aW9uKCl7cmV0
dXJuICJDb2RlTWlycm9yLkluaXQiO319OwoKICAgLy8gVGhlc2UgdHdvIGFyZSwgb24gaW5pdCwg
Y2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yIGJlY2F1c2UgdGhleQpAQCAtMzI3Nyw3ICs0Mjc1
LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIG9wdGlvbigiaW5kZW50
V2l0aFRhYnMiLCBmYWxzZSk7CiAgIG9wdGlvbigic21hcnRJbmRlbnQiLCB0cnVlKTsKICAgb3B0
aW9uKCJ0YWJTaXplIiwgNCwgZnVuY3Rpb24oY20pIHsKLSAgICBsb2FkTW9kZShjbSk7CisgICAg
cmVzZXRNb2RlU3RhdGUoY20pOwogICAgIGNsZWFyQ2FjaGVzKGNtKTsKICAgICByZWdDaGFuZ2Uo
Y20pOwogICB9LCB0cnVlKTsKQEAgLTMyOTcsOSArNDI5NSw2IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICBvcHRpb24oImtleU1hcCIsICJkZWZhdWx0Iiwga2V5TWFwQ2hh
bmdlZCk7CiAgIG9wdGlvbigiZXh0cmFLZXlzIiwgbnVsbCk7CgotICBvcHRpb24oIm9uS2V5RXZl
bnQiLCBudWxsKTsKLSAgb3B0aW9uKCJvbkRyYWdFdmVudCIsIG51bGwpOwotCiAgIG9wdGlvbigi
bGluZVdyYXBwaW5nIiwgZmFsc2UsIHdyYXBwaW5nQ2hhbmdlZCwgdHJ1ZSk7CiAgIG9wdGlvbigi
Z3V0dGVycyIsIFtdLCBmdW5jdGlvbihjbSkgewogICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVy
cyhjbS5vcHRpb25zKTsKQEAgLTMzMjcsOSArNDMyMiwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIGNtLmRpc3BsYXkuZGlzYWJsZWQgPSB0cnVlOwogICAgIH0g
ZWxzZSB7CiAgICAgICBjbS5kaXNwbGF5LmRpc2FibGVkID0gZmFsc2U7Ci0gICAgICBpZiAoIXZh
bCkgcmVzZXRJbnB1dChjbSwgdHJ1ZSk7CisgICAgICBpZiAoIXZhbCkgcmVzZXRJbnB1dChjbSk7
CiAgICAgfQogICB9KTsKKyAgb3B0aW9uKCJkaXNhYmxlSW5wdXQiLCBmYWxzZSwgZnVuY3Rpb24o
Y20sIHZhbCkge2lmICghdmFsKSByZXNldElucHV0KGNtKTt9LCB0cnVlKTsKICAgb3B0aW9uKCJk
cmFnRHJvcCIsIHRydWUpOwoKICAgb3B0aW9uKCJjdXJzb3JCbGlua1JhdGUiLCA1MzApOwpAQCAt
MzMzNywxMyArNDMzMywxMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
b3B0aW9uKCJjdXJzb3JIZWlnaHQiLCAxKTsKICAgb3B0aW9uKCJ3b3JrVGltZSIsIDEwMCk7CiAg
IG9wdGlvbigid29ya0RlbGF5IiwgMTAwKTsKLSAgb3B0aW9uKCJmbGF0dGVuU3BhbnMiLCB0cnVl
KTsKKyAgb3B0aW9uKCJmbGF0dGVuU3BhbnMiLCB0cnVlLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7
CisgIG9wdGlvbigiYWRkTW9kZUNsYXNzIiwgZmFsc2UsIHJlc2V0TW9kZVN0YXRlLCB0cnVlKTsK
ICAgb3B0aW9uKCJwb2xsSW50ZXJ2YWwiLCAxMDApOwotICBvcHRpb24oInVuZG9EZXB0aCIsIDQw
LCBmdW5jdGlvbihjbSwgdmFsKXtjbS5kb2MuaGlzdG9yeS51bmRvRGVwdGggPSB2YWw7fSk7Ci0g
IG9wdGlvbigiaGlzdG9yeUV2ZW50RGVsYXkiLCA1MDApOworICBvcHRpb24oInVuZG9EZXB0aCIs
IDIwMCwgZnVuY3Rpb24oY20sIHZhbCl7Y20uZG9jLmhpc3RvcnkudW5kb0RlcHRoID0gdmFsO30p
OworICBvcHRpb24oImhpc3RvcnlFdmVudERlbGF5IiwgMTI1MCk7CiAgIG9wdGlvbigidmlld3Bv
cnRNYXJnaW4iLCAxMCwgZnVuY3Rpb24oY20pe2NtLnJlZnJlc2goKTt9LCB0cnVlKTsKLSAgb3B0
aW9uKCJtYXhIaWdobGlnaHRMZW5ndGgiLCAxMDAwMCwgZnVuY3Rpb24oY20pe2xvYWRNb2RlKGNt
KTsgY20ucmVmcmVzaCgpO30sIHRydWUpOwotICBvcHRpb24oImNydWRlTWVhc3VyaW5nRnJvbSIs
IDEwMDAwKTsKKyAgb3B0aW9uKCJtYXhIaWdobGlnaHRMZW5ndGgiLCAxMDAwMCwgcmVzZXRNb2Rl
U3RhdGUsIHRydWUpOwogICBvcHRpb24oIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCB0cnVlLCBmdW5j
dGlvbihjbSwgdmFsKSB7CiAgICAgaWYgKCF2YWwpIGNtLmRpc3BsYXkuaW5wdXREaXYuc3R5bGUu
dG9wID0gY20uZGlzcGxheS5pbnB1dERpdi5zdHlsZS5sZWZ0ID0gMDsKICAgfSk7CkBAIC0zMzU4
LDYgKzQzNTQsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gS25v
d24gbW9kZXMsIGJ5IG5hbWUgYW5kIGJ5IE1JTUUKICAgdmFyIG1vZGVzID0gQ29kZU1pcnJvci5t
b2RlcyA9IHt9LCBtaW1lTW9kZXMgPSBDb2RlTWlycm9yLm1pbWVNb2RlcyA9IHt9OwoKKyAgLy8g
RXh0cmEgYXJndW1lbnRzIGFyZSBzdG9yZWQgYXMgdGhlIG1vZGUncyBkZXBlbmRlbmNpZXMsIHdo
aWNoIGlzCisgIC8vIHVzZWQgYnkgKGxlZ2FjeSkgbWVjaGFuaXNtcyBsaWtlIGxvYWRtb2RlLmpz
IHRvIGF1dG9tYXRpY2FsbHkKKyAgLy8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQgbWVjaGFuaXNt
IGlzIHRoZSByZXF1aXJlL2RlZmluZSBjYWxscy4pCiAgIENvZGVNaXJyb3IuZGVmaW5lTW9kZSA9
IGZ1bmN0aW9uKG5hbWUsIG1vZGUpIHsKICAgICBpZiAoIUNvZGVNaXJyb3IuZGVmYXVsdHMubW9k
ZSAmJiBuYW1lICE9ICJudWxsIikgQ29kZU1pcnJvci5kZWZhdWx0cy5tb2RlID0gbmFtZTsKICAg
ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHsKQEAgLTMzNzEsMTEgKzQzNzAsMTQgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgbWltZU1vZGVzW21pbWVdID0gc3Bl
YzsKICAgfTsKCisgIC8vIEdpdmVuIGEgTUlNRSB0eXBlLCBhIHtuYW1lLCAuLi5vcHRpb25zfSBj
b25maWcgb2JqZWN0LCBvciBhIG5hbWUKKyAgLy8gc3RyaW5nLCByZXR1cm4gYSBtb2RlIGNvbmZp
ZyBvYmplY3QuCiAgIENvZGVNaXJyb3IucmVzb2x2ZU1vZGUgPSBmdW5jdGlvbihzcGVjKSB7CiAg
ICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0
eShzcGVjKSkgewogICAgICAgc3BlYyA9IG1pbWVNb2Rlc1tzcGVjXTsKICAgICB9IGVsc2UgaWYg
KHNwZWMgJiYgdHlwZW9mIHNwZWMubmFtZSA9PSAic3RyaW5nIiAmJiBtaW1lTW9kZXMuaGFzT3du
UHJvcGVydHkoc3BlYy5uYW1lKSkgewogICAgICAgdmFyIGZvdW5kID0gbWltZU1vZGVzW3NwZWMu
bmFtZV07CisgICAgICBpZiAodHlwZW9mIGZvdW5kID09ICJzdHJpbmciKSBmb3VuZCA9IHtuYW1l
OiBmb3VuZH07CiAgICAgICBzcGVjID0gY3JlYXRlT2JqKGZvdW5kLCBzcGVjKTsKICAgICAgIHNw
ZWMubmFtZSA9IGZvdW5kLm5hbWU7CiAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BlYyA9PSAic3Ry
aW5nIiAmJiAvXltcd1wtXStcL1tcd1wtXStcK3htbCQvLnRlc3Qoc3BlYykpIHsKQEAgLTMzODUs
NiArNDM4Nyw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGVsc2Ug
cmV0dXJuIHNwZWMgfHwge25hbWU6ICJudWxsIn07CiAgIH07CgorICAvLyBHaXZlbiBhIG1vZGUg
c3BlYyAoYW55dGhpbmcgdGhhdCByZXNvbHZlTW9kZSBhY2NlcHRzKSwgZmluZCBhbmQKKyAgLy8g
aW5pdGlhbGl6ZSBhbiBhY3R1YWwgbW9kZSBvYmplY3QuCiAgIENvZGVNaXJyb3IuZ2V0TW9kZSA9
IGZ1bmN0aW9uKG9wdGlvbnMsIHNwZWMpIHsKICAgICB2YXIgc3BlYyA9IENvZGVNaXJyb3IucmVz
b2x2ZU1vZGUoc3BlYyk7CiAgICAgdmFyIG1mYWN0b3J5ID0gbW9kZXNbc3BlYy5uYW1lXTsKQEAg
LTMzOTksMTUgKzQ0MDMsMjEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICB9CiAgICAgfQogICAgIG1vZGVPYmoubmFtZSA9IHNwZWMubmFtZTsKKyAgICBpZiAoc3Bl
Yy5oZWxwZXJUeXBlKSBtb2RlT2JqLmhlbHBlclR5cGUgPSBzcGVjLmhlbHBlclR5cGU7CisgICAg
aWYgKHNwZWMubW9kZVByb3BzKSBmb3IgKHZhciBwcm9wIGluIHNwZWMubW9kZVByb3BzKQorICAg
ICAgbW9kZU9ialtwcm9wXSA9IHNwZWMubW9kZVByb3BzW3Byb3BdOwoKICAgICByZXR1cm4gbW9k
ZU9iajsKICAgfTsKCisgIC8vIE1pbmltYWwgZGVmYXVsdCBtb2RlLgogICBDb2RlTWlycm9yLmRl
ZmluZU1vZGUoIm51bGwiLCBmdW5jdGlvbigpIHsKICAgICByZXR1cm4ge3Rva2VuOiBmdW5jdGlv
bihzdHJlYW0pIHtzdHJlYW0uc2tpcFRvRW5kKCk7fX07CiAgIH0pOwogICBDb2RlTWlycm9yLmRl
ZmluZU1JTUUoInRleHQvcGxhaW4iLCAibnVsbCIpOwoKKyAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0
byBhdHRhY2ggcHJvcGVydGllcyB0byBtb2RlIG9iamVjdHMgZnJvbQorICAvLyBvdXRzaWRlIHRo
ZSBhY3R1YWwgbW9kZSBkZWZpbml0aW9uLgogICB2YXIgbW9kZUV4dGVuc2lvbnMgPSBDb2RlTWly
cm9yLm1vZGVFeHRlbnNpb25zID0ge307CiAgIENvZGVNaXJyb3IuZXh0ZW5kTW9kZSA9IGZ1bmN0
aW9uKG1vZGUsIHByb3BlcnRpZXMpIHsKICAgICB2YXIgZXh0cyA9IG1vZGVFeHRlbnNpb25zLmhh
c093blByb3BlcnR5KG1vZGUpID8gbW9kZUV4dGVuc2lvbnNbbW9kZV0gOiAobW9kZUV4dGVuc2lv
bnNbbW9kZV0gPSB7fSk7CkBAIC0zNDI5LDE5ICs0NDM5LDIwIEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewoKICAgdmFyIGhlbHBlcnMgPSBDb2RlTWlycm9yLmhlbHBlcnMgPSB7
fTsKICAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlciA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHZh
bHVlKSB7Ci0gICAgaWYgKCFoZWxwZXJzLmhhc093blByb3BlcnR5KHR5cGUpKSBoZWxwZXJzW3R5
cGVdID0gQ29kZU1pcnJvclt0eXBlXSA9IHt9OworICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9w
ZXJ0eSh0eXBlKSkgaGVscGVyc1t0eXBlXSA9IENvZGVNaXJyb3JbdHlwZV0gPSB7X2dsb2JhbDog
W119OwogICAgIGhlbHBlcnNbdHlwZV1bbmFtZV0gPSB2YWx1ZTsKICAgfTsKLQotICAvLyBVVElM
SVRJRVMKLQotICBDb2RlTWlycm9yLmlzV29yZENoYXIgPSBpc1dvcmRDaGFyOworICBDb2RlTWly
cm9yLnJlZ2lzdGVyR2xvYmFsSGVscGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgcHJlZGljYXRl
LCB2YWx1ZSkgeworICAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIodHlwZSwgbmFtZSwgdmFs
dWUpOworICAgIGhlbHBlcnNbdHlwZV0uX2dsb2JhbC5wdXNoKHtwcmVkOiBwcmVkaWNhdGUsIHZh
bDogdmFsdWV9KTsKKyAgfTsKCiAgIC8vIE1PREUgU1RBVEUgSEFORExJTkcKCi0gIC8vIFV0aWxp
dHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggc3RhdGUuIEV4cG9ydGVkIGJlY2F1c2UgbW9k
ZXMKLSAgLy8gc29tZXRpbWVzIG5lZWQgdG8gZG8gdGhpcy4KLSAgZnVuY3Rpb24gY29weVN0YXRl
KG1vZGUsIHN0YXRlKSB7CisgIC8vIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGgg
c3RhdGUuIEV4cG9ydGVkIGJlY2F1c2UgbmVzdGVkCisgIC8vIG1vZGVzIG5lZWQgdG8gZG8gdGhp
cyBmb3IgdGhlaXIgaW5uZXIgbW9kZXMuCisKKyAgdmFyIGNvcHlTdGF0ZSA9IENvZGVNaXJyb3Iu
Y29weVN0YXRlID0gZnVuY3Rpb24obW9kZSwgc3RhdGUpIHsKICAgICBpZiAoc3RhdGUgPT09IHRy
dWUpIHJldHVybiBzdGF0ZTsKICAgICBpZiAobW9kZS5jb3B5U3RhdGUpIHJldHVybiBtb2RlLmNv
cHlTdGF0ZShzdGF0ZSk7CiAgICAgdmFyIG5zdGF0ZSA9IHt9OwpAQCAtMzQ1MSwxNCArNDQ2Miwx
NCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIG5zdGF0ZVtuXSA9
IHZhbDsKICAgICB9CiAgICAgcmV0dXJuIG5zdGF0ZTsKLSAgfQotICBDb2RlTWlycm9yLmNvcHlT
dGF0ZSA9IGNvcHlTdGF0ZTsKKyAgfTsKCi0gIGZ1bmN0aW9uIHN0YXJ0U3RhdGUobW9kZSwgYTEs
IGEyKSB7CisgIHZhciBzdGFydFN0YXRlID0gQ29kZU1pcnJvci5zdGFydFN0YXRlID0gZnVuY3Rp
b24obW9kZSwgYTEsIGEyKSB7CiAgICAgcmV0dXJuIG1vZGUuc3RhcnRTdGF0ZSA/IG1vZGUuc3Rh
cnRTdGF0ZShhMSwgYTIpIDogdHJ1ZTsKLSAgfQotICBDb2RlTWlycm9yLnN0YXJ0U3RhdGUgPSBz
dGFydFN0YXRlOworICB9OwoKKyAgLy8gR2l2ZW4gYSBtb2RlIGFuZCBhIHN0YXRlIChmb3IgdGhh
dCBtb2RlKSwgZmluZCB0aGUgaW5uZXIgbW9kZSBhbmQKKyAgLy8gc3RhdGUgYXQgdGhlIHBvc2l0
aW9uIHRoYXQgdGhlIHN0YXRlIHJlZmVycyB0by4KICAgQ29kZU1pcnJvci5pbm5lck1vZGUgPSBm
dW5jdGlvbihtb2RlLCBzdGF0ZSkgewogICAgIHdoaWxlIChtb2RlLmlubmVyTW9kZSkgewogICAg
ICAgdmFyIGluZm8gPSBtb2RlLmlubmVyTW9kZShzdGF0ZSk7CkBAIC0zNDcxLDQ5ICs0NDgyLDcz
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewoKICAgLy8gU1RBTkRBUkQgQ09N
TUFORFMKCisgIC8vIENvbW1hbmRzIGFyZSBwYXJhbWV0ZXItbGVzcyBhY3Rpb25zIHRoYXQgY2Fu
IGJlIHBlcmZvcm1lZCBvbiBhbgorICAvLyBlZGl0b3IsIG1vc3RseSB1c2VkIGZvciBrZXliaW5k
aW5ncy4KICAgdmFyIGNvbW1hbmRzID0gQ29kZU1pcnJvci5jb21tYW5kcyA9IHsKLSAgICBzZWxl
Y3RBbGw6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0U2VsZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwg
MCksIFBvcyhjbS5sYXN0TGluZSgpKSk7fSwKKyAgICBzZWxlY3RBbGw6IGZ1bmN0aW9uKGNtKSB7
Y20uc2V0U2VsZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCksIFBvcyhjbS5sYXN0TGluZSgp
KSwgc2VsX2RvbnRTY3JvbGwpO30sCisgICAgc2luZ2xlU2VsZWN0aW9uOiBmdW5jdGlvbihjbSkg
eworICAgICAgY20uc2V0U2VsZWN0aW9uKGNtLmdldEN1cnNvcigiYW5jaG9yIiksIGNtLmdldEN1
cnNvcigiaGVhZCIpLCBzZWxfZG9udFNjcm9sbCk7CisgICAgfSwKICAgICBraWxsTGluZTogZnVu
Y3Rpb24oY20pIHsKLSAgICAgIHZhciBmcm9tID0gY20uZ2V0Q3Vyc29yKHRydWUpLCB0byA9IGNt
LmdldEN1cnNvcihmYWxzZSksIHNlbCA9ICFwb3NFcShmcm9tLCB0byk7Ci0gICAgICBpZiAoIXNl
bCAmJiBjbS5nZXRMaW5lKGZyb20ubGluZSkubGVuZ3RoID09IGZyb20uY2gpCi0gICAgICAgIGNt
LnJlcGxhY2VSYW5nZSgiIiwgZnJvbSwgUG9zKGZyb20ubGluZSArIDEsIDApLCAiK2RlbGV0ZSIp
OwotICAgICAgZWxzZSBjbS5yZXBsYWNlUmFuZ2UoIiIsIGZyb20sIHNlbCA/IHRvIDogUG9zKGZy
b20ubGluZSksICIrZGVsZXRlIik7CisgICAgICBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5j
dGlvbihyYW5nZSkgeworICAgICAgICBpZiAocmFuZ2UuZW1wdHkoKSkgeworICAgICAgICAgIHZh
ciBsZW4gPSBnZXRMaW5lKGNtLmRvYywgcmFuZ2UuaGVhZC5saW5lKS50ZXh0Lmxlbmd0aDsKKyAg
ICAgICAgICBpZiAocmFuZ2UuaGVhZC5jaCA9PSBsZW4gJiYgcmFuZ2UuaGVhZC5saW5lIDwgY20u
bGFzdExpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IFBv
cyhyYW5nZS5oZWFkLmxpbmUgKyAxLCAwKX07CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmV0dXJuIHtmcm9tOiByYW5nZS5oZWFkLCB0bzogUG9zKHJhbmdlLmhlYWQubGluZSwgbGVuKX07
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIHtmcm9tOiByYW5nZS5mcm9tKCks
IHRvOiByYW5nZS50bygpfTsKKyAgICAgICAgfQorICAgICAgfSk7CiAgICAgfSwKICAgICBkZWxl
dGVMaW5lOiBmdW5jdGlvbihjbSkgewotICAgICAgdmFyIGwgPSBjbS5nZXRDdXJzb3IoKS5saW5l
OwotICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCBQb3MobCwgMCksIFBvcyhsKSwgIitkZWxldGUi
KTsKKyAgICAgIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uKHJhbmdlKSB7CisgICAg
ICAgIHJldHVybiB7ZnJvbTogUG9zKHJhbmdlLmZyb20oKS5saW5lLCAwKSwKKyAgICAgICAgICAg
ICAgICB0bzogY2xpcFBvcyhjbS5kb2MsIFBvcyhyYW5nZS50bygpLmxpbmUgKyAxLCAwKSl9Owor
ICAgICAgfSk7CiAgICAgfSwKICAgICBkZWxMaW5lTGVmdDogZnVuY3Rpb24oY20pIHsKLSAgICAg
IHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKLSAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgUG9z
KGN1ci5saW5lLCAwKSwgY3VyLCAiK2RlbGV0ZSIpOworICAgICAgZGVsZXRlTmVhclNlbGVjdGlv
bihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgcmV0dXJuIHtmcm9tOiBQb3MocmFuZ2Uu
ZnJvbSgpLmxpbmUsIDApLCB0bzogcmFuZ2UuZnJvbSgpfTsKKyAgICAgIH0pOwogICAgIH0sCiAg
ICAgdW5kbzogZnVuY3Rpb24oY20pIHtjbS51bmRvKCk7fSwKICAgICByZWRvOiBmdW5jdGlvbihj
bSkge2NtLnJlZG8oKTt9LAorICAgIHVuZG9TZWxlY3Rpb246IGZ1bmN0aW9uKGNtKSB7Y20udW5k
b1NlbGVjdGlvbigpO30sCisgICAgcmVkb1NlbGVjdGlvbjogZnVuY3Rpb24oY20pIHtjbS5yZWRv
U2VsZWN0aW9uKCk7fSwKICAgICBnb0RvY1N0YXJ0OiBmdW5jdGlvbihjbSkge2NtLmV4dGVuZFNl
bGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDApKTt9LAogICAgIGdvRG9jRW5kOiBmdW5jdGlv
bihjbSkge2NtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20ubGFzdExpbmUoKSkpO30sCiAgICAgZ29M
aW5lU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICBjbS5leHRlbmRTZWxlY3Rpb24obGluZVN0
YXJ0KGNtLCBjbS5nZXRDdXJzb3IoKS5saW5lKSk7CisgICAgICBjbS5leHRlbmRTZWxlY3Rpb25z
QnkoZnVuY3Rpb24ocmFuZ2UpIHsgcmV0dXJuIGxpbmVTdGFydChjbSwgcmFuZ2UuaGVhZC5saW5l
KTsgfSwgc2VsX21vdmUpOwogICAgIH0sCiAgICAgZ29MaW5lU3RhcnRTbWFydDogZnVuY3Rpb24o
Y20pIHsKLSAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgc3RhcnQgPSBsaW5lU3RhcnQo
Y20sIGN1ci5saW5lKTsKLSAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShzdGFydC5s
aW5lKTsKLSAgICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUpOwotICAgICAgaWYgKCFvcmRl
ciB8fCBvcmRlclswXS5sZXZlbCA9PSAwKSB7Ci0gICAgICAgIHZhciBmaXJzdE5vbldTID0gTWF0
aC5tYXgoMCwgbGluZS50ZXh0LnNlYXJjaCgvXFMvKSk7Ci0gICAgICAgIHZhciBpbldTID0gY3Vy
LmxpbmUgPT0gc3RhcnQubGluZSAmJiBjdXIuY2ggPD0gZmlyc3ROb25XUyAmJiBjdXIuY2g7Ci0g
ICAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbihQb3Moc3RhcnQubGluZSwgaW5XUyA/IDAgOiBmaXJz
dE5vbldTKSk7Ci0gICAgICB9IGVsc2UgY20uZXh0ZW5kU2VsZWN0aW9uKHN0YXJ0KTsKKyAgICAg
IGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB2YXIgc3Rh
cnQgPSBsaW5lU3RhcnQoY20sIHJhbmdlLmhlYWQubGluZSk7CisgICAgICAgIHZhciBsaW5lID0g
Y20uZ2V0TGluZUhhbmRsZShzdGFydC5saW5lKTsKKyAgICAgICAgdmFyIG9yZGVyID0gZ2V0T3Jk
ZXIobGluZSk7CisgICAgICAgIGlmICghb3JkZXIgfHwgb3JkZXJbMF0ubGV2ZWwgPT0gMCkgewor
ICAgICAgICAgIHZhciBmaXJzdE5vbldTID0gTWF0aC5tYXgoMCwgbGluZS50ZXh0LnNlYXJjaCgv
XFMvKSk7CisgICAgICAgICAgdmFyIGluV1MgPSByYW5nZS5oZWFkLmxpbmUgPT0gc3RhcnQubGlu
ZSAmJiByYW5nZS5oZWFkLmNoIDw9IGZpcnN0Tm9uV1MgJiYgcmFuZ2UuaGVhZC5jaDsKKyAgICAg
ICAgICByZXR1cm4gUG9zKHN0YXJ0LmxpbmUsIGluV1MgPyAwIDogZmlyc3ROb25XUyk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgfSwgc2VsX21vdmUpOwogICAgIH0s
CiAgICAgZ29MaW5lRW5kOiBmdW5jdGlvbihjbSkgewotICAgICAgY20uZXh0ZW5kU2VsZWN0aW9u
KGxpbmVFbmQoY20sIGNtLmdldEN1cnNvcigpLmxpbmUpKTsKKyAgICAgIGNtLmV4dGVuZFNlbGVj
dGlvbnNCeShmdW5jdGlvbihyYW5nZSkgeyByZXR1cm4gbGluZUVuZChjbSwgcmFuZ2UuaGVhZC5s
aW5lKTsgfSwgc2VsX21vdmUpOwogICAgIH0sCiAgICAgZ29MaW5lUmlnaHQ6IGZ1bmN0aW9uKGNt
KSB7Ci0gICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhjbS5nZXRDdXJzb3IoKSwgImRpdiIp
LnRvcCArIDU7Ci0gICAgICBjbS5leHRlbmRTZWxlY3Rpb24oY20uY29vcmRzQ2hhcih7bGVmdDog
Y20uZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoICsgMTAwLCB0b3A6IHRvcH0sICJkaXYiKSk7
CisgICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAg
dmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgImRpdiIpLnRvcCArIDU7CisgICAg
ICAgIHJldHVybiBjbS5jb29yZHNDaGFyKHtsZWZ0OiBjbS5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0
V2lkdGggKyAxMDAsIHRvcDogdG9wfSwgImRpdiIpOworICAgICAgfSwgc2VsX21vdmUpOwogICAg
IH0sCiAgICAgZ29MaW5lTGVmdDogZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciB0b3AgPSBjbS5j
aGFyQ29vcmRzKGNtLmdldEN1cnNvcigpLCAiZGl2IikudG9wICsgNTsKLSAgICAgIGNtLmV4dGVu
ZFNlbGVjdGlvbihjbS5jb29yZHNDaGFyKHtsZWZ0OiAwLCB0b3A6IHRvcH0sICJkaXYiKSk7Cisg
ICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdmFy
IHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgImRpdiIpLnRvcCArIDU7CisgICAgICAg
IHJldHVybiBjbS5jb29yZHNDaGFyKHtsZWZ0OiAwLCB0b3A6IHRvcH0sICJkaXYiKTsKKyAgICAg
IH0sIHNlbF9tb3ZlKTsKICAgICB9LAogICAgIGdvTGluZVVwOiBmdW5jdGlvbihjbSkge2NtLm1v
dmVWKC0xLCAibGluZSIpO30sCiAgICAgZ29MaW5lRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3Zl
VigxLCAibGluZSIpO30sCkBAIC0zNTM2LDIyICs0NTcxLDQxIEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgIGluZGVudEF1dG86IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50
U2VsZWN0aW9uKCJzbWFydCIpO30sCiAgICAgaW5kZW50TW9yZTogZnVuY3Rpb24oY20pIHtjbS5p
bmRlbnRTZWxlY3Rpb24oImFkZCIpO30sCiAgICAgaW5kZW50TGVzczogZnVuY3Rpb24oY20pIHtj
bS5pbmRlbnRTZWxlY3Rpb24oInN1YnRyYWN0Iik7fSwKLSAgICBpbnNlcnRUYWI6IGZ1bmN0aW9u
KGNtKSB7Y20ucmVwbGFjZVNlbGVjdGlvbigiXHQiLCAiZW5kIiwgIitpbnB1dCIpO30sCisgICAg
aW5zZXJ0VGFiOiBmdW5jdGlvbihjbSkge2NtLnJlcGxhY2VTZWxlY3Rpb24oIlx0Iik7fSwKKyAg
ICBpbnNlcnRTb2Z0VGFiOiBmdW5jdGlvbihjbSkgeworICAgICAgdmFyIHNwYWNlcyA9IFtdLCBy
YW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXpl
OworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgdmFyIHBvcyA9IHJhbmdlc1tpXS5mcm9tKCk7CisgICAgICAgIHZhciBjb2wgPSBjb3VudENv
bHVtbihjbS5nZXRMaW5lKHBvcy5saW5lKSwgcG9zLmNoLCB0YWJTaXplKTsKKyAgICAgICAgc3Bh
Y2VzLnB1c2gobmV3IEFycmF5KHRhYlNpemUgLSBjb2wgJSB0YWJTaXplICsgMSkuam9pbigiICIp
KTsKKyAgICAgIH0KKyAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNwYWNlcyk7CisgICAgfSwK
ICAgICBkZWZhdWx0VGFiOiBmdW5jdGlvbihjbSkgewogICAgICAgaWYgKGNtLnNvbWV0aGluZ1Nl
bGVjdGVkKCkpIGNtLmluZGVudFNlbGVjdGlvbigiYWRkIik7Ci0gICAgICBlbHNlIGNtLnJlcGxh
Y2VTZWxlY3Rpb24oIlx0IiwgImVuZCIsICIraW5wdXQiKTsKKyAgICAgIGVsc2UgY20uZXhlY0Nv
bW1hbmQoImluc2VydFRhYiIpOwogICAgIH0sCiAgICAgdHJhbnNwb3NlQ2hhcnM6IGZ1bmN0aW9u
KGNtKSB7Ci0gICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGxpbmUgPSBjbS5nZXRMaW5l
KGN1ci5saW5lKTsKLSAgICAgIGlmIChjdXIuY2ggPiAwICYmIGN1ci5jaCA8IGxpbmUubGVuZ3Ro
IC0gMSkKLSAgICAgICAgY20ucmVwbGFjZVJhbmdlKGxpbmUuY2hhckF0KGN1ci5jaCkgKyBsaW5l
LmNoYXJBdChjdXIuY2ggLSAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhjdXIubGlu
ZSwgY3VyLmNoIC0gMSksIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSkpOworICAgICAgcnVuSW5P
cChjbSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9u
cygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgIHZhciBjdXIgPSByYW5nZXNbaV0uaGVhZCwgbGluZSA9IGdldExpbmUoY20uZG9j
LCBjdXIubGluZSkudGV4dDsKKyAgICAgICAgICBpZiAoY3VyLmNoID4gMCAmJiBjdXIuY2ggPCBs
aW5lLmxlbmd0aCAtIDEpCisgICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQo
Y3VyLmNoKSArIGxpbmUuY2hhckF0KGN1ci5jaCAtIDEpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSksIFBvcyhjdXIubGluZSwgY3VyLmNoICsg
MSkpOworICAgICAgICB9CisgICAgICB9KTsKICAgICB9LAogICAgIG5ld2xpbmVBbmRJbmRlbnQ6
IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCkgewotICAgICAg
ICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJcbiIsICJlbmQiLCAiK2lucHV0Iik7Ci0gICAgICAgIGNt
LmluZGVudExpbmUoY20uZ2V0Q3Vyc29yKCkubGluZSwgbnVsbCwgdHJ1ZSk7Ci0gICAgICB9KSgp
OworICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsZW4gPSBjbS5s
aXN0U2VsZWN0aW9ucygpLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47
IGkrKykgeworICAgICAgICAgIHZhciByYW5nZSA9IGNtLmxpc3RTZWxlY3Rpb25zKClbaV07Cisg
ICAgICAgICAgY20ucmVwbGFjZVJhbmdlKCJcbiIsIHJhbmdlLmFuY2hvciwgcmFuZ2UuaGVhZCwg
IitpbnB1dCIpOworICAgICAgICAgIGNtLmluZGVudExpbmUocmFuZ2UuZnJvbSgpLmxpbmUgKyAx
LCBudWxsLCB0cnVlKTsKKyAgICAgICAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKTsKKyAgICAg
ICAgfQorICAgICAgfSk7CiAgICAgfSwKICAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKGNt
KSB7Y20udG9nZ2xlT3ZlcndyaXRlKCk7fQogICB9OwpAQCAtMzU2NCwxNyArNDYxOCwyMCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAiRW5kIjogImdvTGluZUVuZCIs
ICJIb21lIjogImdvTGluZVN0YXJ0U21hcnQiLCAiUGFnZVVwIjogImdvUGFnZVVwIiwgIlBhZ2VE
b3duIjogImdvUGFnZURvd24iLAogICAgICJEZWxldGUiOiAiZGVsQ2hhckFmdGVyIiwgIkJhY2tz
cGFjZSI6ICJkZWxDaGFyQmVmb3JlIiwgIlNoaWZ0LUJhY2tzcGFjZSI6ICJkZWxDaGFyQmVmb3Jl
IiwKICAgICAiVGFiIjogImRlZmF1bHRUYWIiLCAiU2hpZnQtVGFiIjogImluZGVudEF1dG8iLAot
ICAgICJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50IiwgIkluc2VydCI6ICJ0b2dnbGVPdmVyd3Jp
dGUiCisgICAgIkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnQiLCAiSW5zZXJ0IjogInRvZ2dsZU92
ZXJ3cml0ZSIsCisgICAgIkVzYyI6ICJzaW5nbGVTZWxlY3Rpb24iCiAgIH07CiAgIC8vIE5vdGUg
dGhhdCB0aGUgc2F2ZSBhbmQgZmluZC1yZWxhdGVkIGNvbW1hbmRzIGFyZW4ndCBkZWZpbmVkIGJ5
Ci0gIC8vIGRlZmF1bHQuIFVua25vd24gY29tbWFuZHMgYXJlIHNpbXBseSBpZ25vcmVkLgorICAv
LyBkZWZhdWx0LiBVc2VyIGNvZGUgb3IgYWRkb25zIGNhbiBkZWZpbmUgdGhlbS4gVW5rbm93biBj
b21tYW5kcworICAvLyBhcmUgc2ltcGx5IGlnbm9yZWQuCiAgIGtleU1hcC5wY0RlZmF1bHQgPSB7
CiAgICAgIkN0cmwtQSI6ICJzZWxlY3RBbGwiLCAiQ3RybC1EIjogImRlbGV0ZUxpbmUiLCAiQ3Ry
bC1aIjogInVuZG8iLCAiU2hpZnQtQ3RybC1aIjogInJlZG8iLCAiQ3RybC1ZIjogInJlZG8iLAot
ICAgICJDdHJsLUhvbWUiOiAiZ29Eb2NTdGFydCIsICJBbHQtVXAiOiAiZ29Eb2NTdGFydCIsICJD
dHJsLUVuZCI6ICJnb0RvY0VuZCIsICJDdHJsLURvd24iOiAiZ29Eb2NFbmQiLAorICAgICJDdHJs
LUhvbWUiOiAiZ29Eb2NTdGFydCIsICJDdHJsLVVwIjogImdvRG9jU3RhcnQiLCAiQ3RybC1FbmQi
OiAiZ29Eb2NFbmQiLCAiQ3RybC1Eb3duIjogImdvRG9jRW5kIiwKICAgICAiQ3RybC1MZWZ0Ijog
ImdvR3JvdXBMZWZ0IiwgIkN0cmwtUmlnaHQiOiAiZ29Hcm91cFJpZ2h0IiwgIkFsdC1MZWZ0Ijog
ImdvTGluZVN0YXJ0IiwgIkFsdC1SaWdodCI6ICJnb0xpbmVFbmQiLAogICAgICJDdHJsLUJhY2tz
cGFjZSI6ICJkZWxHcm91cEJlZm9yZSIsICJDdHJsLURlbGV0ZSI6ICJkZWxHcm91cEFmdGVyIiwg
IkN0cmwtUyI6ICJzYXZlIiwgIkN0cmwtRiI6ICJmaW5kIiwKICAgICAiQ3RybC1HIjogImZpbmRO
ZXh0IiwgIlNoaWZ0LUN0cmwtRyI6ICJmaW5kUHJldiIsICJTaGlmdC1DdHJsLUYiOiAicmVwbGFj
ZSIsICJTaGlmdC1DdHJsLVIiOiAicmVwbGFjZUFsbCIsCiAgICAgIkN0cmwtWyI6ICJpbmRlbnRM
ZXNzIiwgIkN0cmwtXSI6ICJpbmRlbnRNb3JlIiwKKyAgICAiQ3RybC1VIjogInVuZG9TZWxlY3Rp
b24iLCAiU2hpZnQtQ3RybC1VIjogInJlZG9TZWxlY3Rpb24iLCAiQWx0LVUiOiAicmVkb1NlbGVj
dGlvbiIsCiAgICAgZmFsbHRocm91Z2g6ICJiYXNpYyIKICAgfTsKICAga2V5TWFwLm1hY0RlZmF1
bHQgPSB7CkBAIC0zNTg0LDE1ICs0NjQxLDE3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgICJDdHJsLUFsdC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBBZnRlciIsICJBbHQt
RGVsZXRlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQ21kLVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5k
IiwKICAgICAiQ21kLUciOiAiZmluZE5leHQiLCAiU2hpZnQtQ21kLUciOiAiZmluZFByZXYiLCAi
Q21kLUFsdC1GIjogInJlcGxhY2UiLCAiU2hpZnQtQ21kLUFsdC1GIjogInJlcGxhY2VBbGwiLAog
ICAgICJDbWQtWyI6ICJpbmRlbnRMZXNzIiwgIkNtZC1dIjogImluZGVudE1vcmUiLCAiQ21kLUJh
Y2tzcGFjZSI6ICJkZWxMaW5lTGVmdCIsCisgICAgIkNtZC1VIjogInVuZG9TZWxlY3Rpb24iLCAi
U2hpZnQtQ21kLVUiOiAicmVkb1NlbGVjdGlvbiIsCiAgICAgZmFsbHRocm91Z2g6IFsiYmFzaWMi
LCAiZW1hY3N5Il0KICAgfTsKLSAga2V5TWFwWyJkZWZhdWx0Il0gPSBtYWMgPyBrZXlNYXAubWFj
RGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7CisgIC8vIFZlcnkgYmFzaWMgcmVhZGxpbmUvZW1h
Y3Mtc3R5bGUgYmluZGluZ3MsIHdoaWNoIGFyZSBzdGFuZGFyZCBvbiBNYWMuCiAgIGtleU1hcC5l
bWFjc3kgPSB7CiAgICAgIkN0cmwtRiI6ICJnb0NoYXJSaWdodCIsICJDdHJsLUIiOiAiZ29DaGFy
TGVmdCIsICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjogImdvTGluZURvd24iLAogICAg
ICJBbHQtRiI6ICJnb1dvcmRSaWdodCIsICJBbHQtQiI6ICJnb1dvcmRMZWZ0IiwgIkN0cmwtQSI6
ICJnb0xpbmVTdGFydCIsICJDdHJsLUUiOiAiZ29MaW5lRW5kIiwKICAgICAiQ3RybC1WIjogImdv
UGFnZURvd24iLCAiU2hpZnQtQ3RybC1WIjogImdvUGFnZVVwIiwgIkN0cmwtRCI6ICJkZWxDaGFy
QWZ0ZXIiLCAiQ3RybC1IIjogImRlbENoYXJCZWZvcmUiLAogICAgICJBbHQtRCI6ICJkZWxXb3Jk
QWZ0ZXIiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxXb3JkQmVmb3JlIiwgIkN0cmwtSyI6ICJraWxs
TGluZSIsICJDdHJsLVQiOiAidHJhbnNwb3NlQ2hhcnMiCiAgIH07CisgIGtleU1hcFsiZGVmYXVs
dCJdID0gbWFjID8ga2V5TWFwLm1hY0RlZmF1bHQgOiBrZXlNYXAucGNEZWZhdWx0OwoKICAgLy8g
S0VZTUFQIERJU1BBVENICgpAQCAtMzYwMSw3ICs0NjYwLDExIEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgIGVsc2UgcmV0dXJuIHZhbDsKICAgfQoKLSAgZnVuY3Rpb24g
bG9va3VwS2V5KG5hbWUsIG1hcHMsIGhhbmRsZSkgeworICAvLyBHaXZlbiBhbiBhcnJheSBvZiBr
ZXltYXBzIGFuZCBhIGtleSBuYW1lLCBjYWxsIGhhbmRsZSBvbiBhbnkKKyAgLy8gYmluZGluZ3Mg
Zm91bmQsIHVudGlsIHRoYXQgcmV0dXJucyBhIHRydXRoeSB2YWx1ZSwgYXQgd2hpY2ggcG9pbnQK
KyAgLy8gd2UgY29uc2lkZXIgdGhlIGtleSBoYW5kbGVkLiBJbXBsZW1lbnRzIHRoaW5ncyBsaWtl
IGJpbmRpbmcgYSBrZXkKKyAgLy8gdG8gZmFsc2Ugc3RvcHBpbmcgZnVydGhlciBoYW5kbGluZyBh
bmQga2V5bWFwIGZhbGx0aHJvdWdoLgorICB2YXIgbG9va3VwS2V5ID0gQ29kZU1pcnJvci5sb29r
dXBLZXkgPSBmdW5jdGlvbihuYW1lLCBtYXBzLCBoYW5kbGUpIHsKICAgICBmdW5jdGlvbiBsb29r
dXAobWFwKSB7CiAgICAgICBtYXAgPSBnZXRLZXlNYXAobWFwKTsKICAgICAgIHZhciBmb3VuZCA9
IG1hcFtuYW1lXTsKQEAgLTM2MTMsNyArNDY3Niw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgICAgaWYgKGZhbGx0aHJvdWdoID09IG51bGwpIHJldHVybiBmYWxzZTsK
ICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZmFsbHRocm91Z2gpICE9
ICJbb2JqZWN0IEFycmF5XSIpCiAgICAgICAgIHJldHVybiBsb29rdXAoZmFsbHRocm91Z2gpOwot
ICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBmYWxsdGhyb3VnaC5sZW5ndGg7IGkgPCBlOyArK2kp
IHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFsbHRocm91Z2gubGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgdmFyIGRvbmUgPSBsb29rdXAoZmFsbHRocm91Z2hbaV0pOwogICAgICAgICBpZiAo
ZG9uZSkgcmV0dXJuIGRvbmU7CiAgICAgICB9CkBAIC0zNjI0LDEzICs0Njg3LDE4IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIGRvbmUgPSBsb29rdXAobWFw
c1tpXSk7CiAgICAgICBpZiAoZG9uZSkgcmV0dXJuIGRvbmUgIT0gInN0b3AiOwogICAgIH0KLSAg
fQotICBmdW5jdGlvbiBpc01vZGlmaWVyS2V5KGV2ZW50KSB7CisgIH07CisKKyAgLy8gTW9kaWZp
ZXIga2V5IHByZXNzZXMgZG9uJ3QgY291bnQgYXMgJ3JlYWwnIGtleSBwcmVzc2VzIGZvciB0aGUK
KyAgLy8gcHVycG9zZSBvZiBrZXltYXAgZmFsbHRocm91Z2guCisgIHZhciBpc01vZGlmaWVyS2V5
ID0gQ29kZU1pcnJvci5pc01vZGlmaWVyS2V5ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICB2YXIg
bmFtZSA9IGtleU5hbWVzW2V2ZW50LmtleUNvZGVdOwogICAgIHJldHVybiBuYW1lID09ICJDdHJs
IiB8fCBuYW1lID09ICJBbHQiIHx8IG5hbWUgPT0gIlNoaWZ0IiB8fCBuYW1lID09ICJNb2QiOwot
ICB9Ci0gIGZ1bmN0aW9uIGtleU5hbWUoZXZlbnQsIG5vU2hpZnQpIHsKLSAgICBpZiAob3BlcmEg
JiYgZXZlbnQua2V5Q29kZSA9PSAzNCAmJiBldmVudFsiY2hhciJdKSByZXR1cm4gZmFsc2U7Cisg
IH07CisKKyAgLy8gTG9vayB1cCB0aGUgbmFtZSBvZiBhIGtleSBhcyBpbmRpY2F0ZWQgYnkgYW4g
ZXZlbnQgb2JqZWN0LgorICB2YXIga2V5TmFtZSA9IENvZGVNaXJyb3Iua2V5TmFtZSA9IGZ1bmN0
aW9uKGV2ZW50LCBub1NoaWZ0KSB7CisgICAgaWYgKHByZXN0byAmJiBldmVudC5rZXlDb2RlID09
IDM0ICYmIGV2ZW50WyJjaGFyIl0pIHJldHVybiBmYWxzZTsKICAgICB2YXIgbmFtZSA9IGtleU5h
bWVzW2V2ZW50LmtleUNvZGVdOwogICAgIGlmIChuYW1lID09IG51bGwgfHwgZXZlbnQuYWx0R3Jh
cGhLZXkpIHJldHVybiBmYWxzZTsKICAgICBpZiAoZXZlbnQuYWx0S2V5KSBuYW1lID0gIkFsdC0i
ICsgbmFtZTsKQEAgLTM2MzgsMTAgKzQ3MDYsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICBpZiAoZmxpcEN0cmxDbWQgPyBldmVudC5jdHJsS2V5IDogZXZlbnQubWV0
YUtleSkgbmFtZSA9ICJDbWQtIiArIG5hbWU7CiAgICAgaWYgKCFub1NoaWZ0ICYmIGV2ZW50LnNo
aWZ0S2V5KSBuYW1lID0gIlNoaWZ0LSIgKyBuYW1lOwogICAgIHJldHVybiBuYW1lOwotICB9Ci0g
IENvZGVNaXJyb3IubG9va3VwS2V5ID0gbG9va3VwS2V5OwotICBDb2RlTWlycm9yLmlzTW9kaWZp
ZXJLZXkgPSBpc01vZGlmaWVyS2V5OwotICBDb2RlTWlycm9yLmtleU5hbWUgPSBrZXlOYW1lOwor
ICB9OwoKICAgLy8gRlJPTVRFWFRBUkVBCgpAQCAtMzY1NSw5ICs0NzIwLDcgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gU2V0IGF1dG9mb2N1cyB0byB0cnVlIGlm
IHRoaXMgdGV4dGFyZWEgaXMgZm9jdXNlZCwgb3IgaWYgaXQgaGFzCiAgICAgLy8gYXV0b2ZvY3Vz
IGFuZCBubyBvdGhlciBlbGVtZW50IGlzIGZvY3VzZWQuCiAgICAgaWYgKG9wdGlvbnMuYXV0b2Zv
Y3VzID09IG51bGwpIHsKLSAgICAgIHZhciBoYXNGb2N1cyA9IGRvY3VtZW50LmJvZHk7Ci0gICAg
ICAvLyBkb2MuYWN0aXZlRWxlbWVudCBvY2Nhc2lvbmFsbHkgdGhyb3dzIG9uIElFCi0gICAgICB0
cnkgeyBoYXNGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7IH0gY2F0Y2goZSkge30KKyAg
ICAgIHZhciBoYXNGb2N1cyA9IGFjdGl2ZUVsdCgpOwogICAgICAgb3B0aW9ucy5hdXRvZm9jdXMg
PSBoYXNGb2N1cyA9PSB0ZXh0YXJlYSB8fAogICAgICAgICB0ZXh0YXJlYS5nZXRBdHRyaWJ1dGUo
ImF1dG9mb2N1cyIpICE9IG51bGwgJiYgaGFzRm9jdXMgPT0gZG9jdW1lbnQuYm9keTsKICAgICB9
CkBAIC0zNzAzLDE3ICs0NzY2LDE3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAvLyBGZWQgdG8gdGhlIG1vZGUgcGFyc2VycywgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9u
cyB0byBtYWtlCiAgIC8vIHBhcnNlcnMgbW9yZSBzdWNjaW5jdC4KCi0gIC8vIFRoZSBjaGFyYWN0
ZXIgc3RyZWFtIHVzZWQgYnkgYSBtb2RlJ3MgcGFyc2VyLgotICBmdW5jdGlvbiBTdHJpbmdTdHJl
YW0oc3RyaW5nLCB0YWJTaXplKSB7CisgIHZhciBTdHJpbmdTdHJlYW0gPSBDb2RlTWlycm9yLlN0
cmluZ1N0cmVhbSA9IGZ1bmN0aW9uKHN0cmluZywgdGFiU2l6ZSkgewogICAgIHRoaXMucG9zID0g
dGhpcy5zdGFydCA9IDA7CiAgICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7CiAgICAgdGhpcy50YWJT
aXplID0gdGFiU2l6ZSB8fCA4OwogICAgIHRoaXMubGFzdENvbHVtblBvcyA9IHRoaXMubGFzdENv
bHVtblZhbHVlID0gMDsKLSAgfQorICAgIHRoaXMubGluZVN0YXJ0ID0gMDsKKyAgfTsKCiAgIFN0
cmluZ1N0cmVhbS5wcm90b3R5cGUgPSB7CiAgICAgZW9sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhp
cy5wb3MgPj0gdGhpcy5zdHJpbmcubGVuZ3RoO30sCi0gICAgc29sOiBmdW5jdGlvbigpIHtyZXR1
cm4gdGhpcy5wb3MgPT0gMDt9LAorICAgIHNvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9z
ID09IHRoaXMubGluZVN0YXJ0O30sCiAgICAgcGVlazogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMu
c3RyaW5nLmNoYXJBdCh0aGlzLnBvcykgfHwgdW5kZWZpbmVkO30sCiAgICAgbmV4dDogZnVuY3Rp
b24oKSB7CiAgICAgICBpZiAodGhpcy5wb3MgPCB0aGlzLnN0cmluZy5sZW5ndGgpCkBAIC0zNzQ2
LDkgKzQ4MDksMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAg
IHRoaXMubGFzdENvbHVtblZhbHVlID0gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMuc3Rh
cnQsIHRoaXMudGFiU2l6ZSwgdGhpcy5sYXN0Q29sdW1uUG9zLCB0aGlzLmxhc3RDb2x1bW5WYWx1
ZSk7CiAgICAgICAgIHRoaXMubGFzdENvbHVtblBvcyA9IHRoaXMuc3RhcnQ7CiAgICAgICB9Ci0g
ICAgICByZXR1cm4gdGhpcy5sYXN0Q29sdW1uVmFsdWU7CisgICAgICByZXR1cm4gdGhpcy5sYXN0
Q29sdW1uVmFsdWUgLSAodGhpcy5saW5lU3RhcnQgPyBjb3VudENvbHVtbih0aGlzLnN0cmluZywg
dGhpcy5saW5lU3RhcnQsIHRoaXMudGFiU2l6ZSkgOiAwKTsKKyAgICB9LAorICAgIGluZGVudGF0
aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBjb3VudENvbHVtbih0aGlzLnN0cmluZywg
bnVsbCwgdGhpcy50YWJTaXplKSAtCisgICAgICAgICh0aGlzLmxpbmVTdGFydCA/IGNvdW50Q29s
dW1uKHRoaXMuc3RyaW5nLCB0aGlzLmxpbmVTdGFydCwgdGhpcy50YWJTaXplKSA6IDApOwogICAg
IH0sCi0gICAgaW5kZW50YXRpb246IGZ1bmN0aW9uKCkge3JldHVybiBjb3VudENvbHVtbih0aGlz
LnN0cmluZywgbnVsbCwgdGhpcy50YWJTaXplKTt9LAogICAgIG1hdGNoOiBmdW5jdGlvbihwYXR0
ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHsKICAgICAgIGlmICh0eXBlb2YgcGF0dGVy
biA9PSAic3RyaW5nIikgewogICAgICAgICB2YXIgY2FzZWQgPSBmdW5jdGlvbihzdHIpIHtyZXR1
cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7fTsKQEAgLTM3NjQs
MjAgKzQ4MzAsMzQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAg
IHJldHVybiBtYXRjaDsKICAgICAgIH0KICAgICB9LAotICAgIGN1cnJlbnQ6IGZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMucG9zKTt9CisgICAgY3Vy
cmVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCwgdGhp
cy5wb3MpO30sCisgICAgaGlkZUZpcnN0Q2hhcnM6IGZ1bmN0aW9uKG4sIGlubmVyKSB7CisgICAg
ICB0aGlzLmxpbmVTdGFydCArPSBuOworICAgICAgdHJ5IHsgcmV0dXJuIGlubmVyKCk7IH0KKyAg
ICAgIGZpbmFsbHkgeyB0aGlzLmxpbmVTdGFydCAtPSBuOyB9CisgICAgfQogICB9OwotICBDb2Rl
TWlycm9yLlN0cmluZ1N0cmVhbSA9IFN0cmluZ1N0cmVhbTsKCiAgIC8vIFRFWFRNQVJLRVJTCgot
ICBmdW5jdGlvbiBUZXh0TWFya2VyKGRvYywgdHlwZSkgeworICAvLyBDcmVhdGVkIHdpdGggbWFy
a1RleHQgYW5kIHNldEJvb2ttYXJrIG1ldGhvZHMuIEEgVGV4dE1hcmtlciBpcyBhCisgIC8vIGhh
bmRsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNsZWFyIG9yIGZpbmQgYSBtYXJrZWQgcG9zaXRpb24g
aW4gdGhlCisgIC8vIGRvY3VtZW50LiBMaW5lIG9iamVjdHMgaG9sZCBhcnJheXMgKG1hcmtlZFNw
YW5zKSBjb250YWluaW5nCisgIC8vIHtmcm9tLCB0bywgbWFya2VyfSBvYmplY3QgcG9pbnRpbmcg
dG8gc3VjaCBtYXJrZXIgb2JqZWN0cywgYW5kCisgIC8vIGluZGljYXRpbmcgdGhhdCBzdWNoIGEg
bWFya2VyIGlzIHByZXNlbnQgb24gdGhhdCBsaW5lLiBNdWx0aXBsZQorICAvLyBsaW5lcyBtYXkg
cG9pbnQgdG8gdGhlIHNhbWUgbWFya2VyIHdoZW4gaXQgc3BhbnMgYWNyb3NzIGxpbmVzLgorICAv
LyBUaGUgc3BhbnMgd2lsbCBoYXZlIG51bGwgZm9yIHRoZWlyIGZyb20vdG8gcHJvcGVydGllcyB3
aGVuIHRoZQorICAvLyBtYXJrZXIgY29udGludWVzIGJleW9uZCB0aGUgc3RhcnQvZW5kIG9mIHRo
ZSBsaW5lLiBNYXJrZXJzIGhhdmUKKyAgLy8gbGlua3MgYmFjayB0byB0aGUgbGluZXMgdGhleSBj
dXJyZW50bHkgdG91Y2guCisKKyAgdmFyIFRleHRNYXJrZXIgPSBDb2RlTWlycm9yLlRleHRNYXJr
ZXIgPSBmdW5jdGlvbihkb2MsIHR5cGUpIHsKICAgICB0aGlzLmxpbmVzID0gW107CiAgICAgdGhp
cy50eXBlID0gdHlwZTsKICAgICB0aGlzLmRvYyA9IGRvYzsKLSAgfQotICBDb2RlTWlycm9yLlRl
eHRNYXJrZXIgPSBUZXh0TWFya2VyOworICB9OwogICBldmVudE1peGluKFRleHRNYXJrZXIpOwoK
KyAgLy8gQ2xlYXIgdGhlIG1hcmtlci4KICAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBm
dW5jdGlvbigpIHsKICAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgcmV0dXJuOwogICAg
IHZhciBjbSA9IHRoaXMuZG9jLmNtLCB3aXRoT3AgPSBjbSAmJiAhY20uY3VyT3A7CkBAIC0zNzkw
LDE1ICs0ODcwLDE3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIGxp
bmUgPSB0aGlzLmxpbmVzW2ldOwogICAgICAgdmFyIHNwYW4gPSBnZXRNYXJrZWRTcGFuRm9yKGxp
bmUubWFya2VkU3BhbnMsIHRoaXMpOwotICAgICAgaWYgKHNwYW4udG8gIT0gbnVsbCkgbWF4ID0g
bGluZU5vKGxpbmUpOworICAgICAgaWYgKGNtICYmICF0aGlzLmNvbGxhcHNlZCkgcmVnTGluZUNo
YW5nZShjbSwgbGluZU5vKGxpbmUpLCAidGV4dCIpOworICAgICAgZWxzZSBpZiAoY20pIHsKKyAg
ICAgICAgaWYgKHNwYW4udG8gIT0gbnVsbCkgbWF4ID0gbGluZU5vKGxpbmUpOworICAgICAgICBp
ZiAoc3Bhbi5mcm9tICE9IG51bGwpIG1pbiA9IGxpbmVObyhsaW5lKTsKKyAgICAgIH0KICAgICAg
IGxpbmUubWFya2VkU3BhbnMgPSByZW1vdmVNYXJrZWRTcGFuKGxpbmUubWFya2VkU3BhbnMsIHNw
YW4pOwotICAgICAgaWYgKHNwYW4uZnJvbSAhPSBudWxsKQotICAgICAgICBtaW4gPSBsaW5lTm8o
bGluZSk7Ci0gICAgICBlbHNlIGlmICh0aGlzLmNvbGxhcHNlZCAmJiAhbGluZUlzSGlkZGVuKHRo
aXMuZG9jLCBsaW5lKSAmJiBjbSkKKyAgICAgIGlmIChzcGFuLmZyb20gPT0gbnVsbCAmJiB0aGlz
LmNvbGxhcHNlZCAmJiAhbGluZUlzSGlkZGVuKHRoaXMuZG9jLCBsaW5lKSAmJiBjbSkKICAgICAg
ICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpKTsKICAgICB9
CiAgICAgaWYgKGNtICYmIHRoaXMuY29sbGFwc2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGlu
ZykgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2
YXIgdmlzdWFsID0gdmlzdWFsTGluZShjbS5kb2MsIHRoaXMubGluZXNbaV0pLCBsZW4gPSBsaW5l
TGVuZ3RoKGNtLmRvYywgdmlzdWFsKTsKKyAgICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKHRo
aXMubGluZXNbaV0pLCBsZW4gPSBsaW5lTGVuZ3RoKHZpc3VhbCk7CiAgICAgICBpZiAobGVuID4g
Y20uZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7CiAgICAgICAgIGNtLmRpc3BsYXkubWF4TGluZSA9
IHZpc3VhbDsKICAgICAgICAgY20uZGlzcGxheS5tYXhMaW5lTGVuZ3RoID0gbGVuOwpAQCAtMzgw
Niw0NiArNDg4OCw2MiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IH0KICAgICB9CgotICAgIGlmIChtaW4gIT0gbnVsbCAmJiBjbSkgcmVnQ2hhbmdlKGNtLCBtaW4s
IG1heCArIDEpOworICAgIGlmIChtaW4gIT0gbnVsbCAmJiBjbSAmJiB0aGlzLmNvbGxhcHNlZCkg
cmVnQ2hhbmdlKGNtLCBtaW4sIG1heCArIDEpOwogICAgIHRoaXMubGluZXMubGVuZ3RoID0gMDsK
ICAgICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVkID0gdHJ1ZTsKICAgICBpZiAodGhpcy5hdG9taWMg
JiYgdGhpcy5kb2MuY2FudEVkaXQpIHsKICAgICAgIHRoaXMuZG9jLmNhbnRFZGl0ID0gZmFsc2U7
Ci0gICAgICBpZiAoY20pIHJlQ2hlY2tTZWxlY3Rpb24oY20pOworICAgICAgaWYgKGNtKSByZUNo
ZWNrU2VsZWN0aW9uKGNtLmRvYyk7CiAgICAgfQorICAgIGlmIChjbSkgc2lnbmFsTGF0ZXIoY20s
ICJtYXJrZXJDbGVhcmVkIiwgY20sIHRoaXMpOwogICAgIGlmICh3aXRoT3ApIGVuZE9wZXJhdGlv
bihjbSk7CisgICAgaWYgKHRoaXMucGFyZW50KSB0aGlzLnBhcmVudC5jbGVhcigpOwogICB9OwoK
LSAgVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKCkgeworICAvLyBGaW5kIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgbWFya2VyIGluIHRoZSBkb2N1bWVudC4gUmV0dXJucyBhIHtmcm9t
LAorICAvLyB0b30gb2JqZWN0IGJ5IGRlZmF1bHQuIFNpZGUgY2FuIGJlIHBhc3NlZCB0byBnZXQg
YSBzcGVjaWZpYyBzaWRlCisgIC8vIC0tIDAgKGJvdGgpLCAtMSAobGVmdCksIG9yIDEgKHJpZ2h0
KS4gV2hlbiBsaW5lT2JqIGlzIHRydWUsIHRoZQorICAvLyBQb3Mgb2JqZWN0cyByZXR1cm5lZCBj
b250YWluIGEgbGluZSBvYmplY3QsIHJhdGhlciB0aGFuIGEgbGluZQorICAvLyBudW1iZXIgKHVz
ZWQgdG8gcHJldmVudCBsb29raW5nIHVwIHRoZSBzYW1lIGxpbmUgdHdpY2UpLgorICBUZXh0TWFy
a2VyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24oc2lkZSwgbGluZU9iaikgeworICAgIGlmIChz
aWRlID09IG51bGwgJiYgdGhpcy50eXBlID09ICJib29rbWFyayIpIHNpZGUgPSAxOwogICAgIHZh
ciBmcm9tLCB0bzsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyAr
K2kpIHsKICAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTsKICAgICAgIHZhciBzcGFuID0g
Z2V0TWFya2VkU3BhbkZvcihsaW5lLm1hcmtlZFNwYW5zLCB0aGlzKTsKLSAgICAgIGlmIChzcGFu
LmZyb20gIT0gbnVsbCB8fCBzcGFuLnRvICE9IG51bGwpIHsKLSAgICAgICAgdmFyIGZvdW5kID0g
bGluZU5vKGxpbmUpOwotICAgICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpIGZyb20gPSBQb3Mo
Zm91bmQsIHNwYW4uZnJvbSk7Ci0gICAgICAgIGlmIChzcGFuLnRvICE9IG51bGwpIHRvID0gUG9z
KGZvdW5kLCBzcGFuLnRvKTsKKyAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCkgeworICAgICAg
ICBmcm9tID0gUG9zKGxpbmVPYmogPyBsaW5lIDogbGluZU5vKGxpbmUpLCBzcGFuLmZyb20pOwor
ICAgICAgICBpZiAoc2lkZSA9PSAtMSkgcmV0dXJuIGZyb207CisgICAgICB9CisgICAgICBpZiAo
c3Bhbi50byAhPSBudWxsKSB7CisgICAgICAgIHRvID0gUG9zKGxpbmVPYmogPyBsaW5lIDogbGlu
ZU5vKGxpbmUpLCBzcGFuLnRvKTsKKyAgICAgICAgaWYgKHNpZGUgPT0gMSkgcmV0dXJuIHRvOwog
ICAgICAgfQogICAgIH0KLSAgICBpZiAodGhpcy50eXBlID09ICJib29rbWFyayIpIHJldHVybiBm
cm9tOwogICAgIHJldHVybiBmcm9tICYmIHtmcm9tOiBmcm9tLCB0bzogdG99OwogICB9OwoKKyAg
Ly8gU2lnbmFscyB0aGF0IHRoZSBtYXJrZXIncyB3aWRnZXQgY2hhbmdlZCwgYW5kIHN1cnJvdW5k
aW5nIGxheW91dAorICAvLyBzaG91bGQgYmUgcmVjb21wdXRlZC4KICAgVGV4dE1hcmtlci5wcm90
b3R5cGUuY2hhbmdlZCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwb3MgPSB0aGlzLmZpbmQoKSwg
Y20gPSB0aGlzLmRvYy5jbTsKKyAgICB2YXIgcG9zID0gdGhpcy5maW5kKC0xLCB0cnVlKSwgd2lk
Z2V0ID0gdGhpcywgY20gPSB0aGlzLmRvYy5jbTsKICAgICBpZiAoIXBvcyB8fCAhY20pIHJldHVy
bjsKLSAgICBpZiAodGhpcy50eXBlICE9ICJib29rbWFyayIpIHBvcyA9IHBvcy5mcm9tOwotICAg
IHZhciBsaW5lID0gZ2V0TGluZSh0aGlzLmRvYywgcG9zLmxpbmUpOwotICAgIGNsZWFyQ2FjaGVk
TWVhc3VyZW1lbnQoY20sIGxpbmUpOwotICAgIGlmIChwb3MubGluZSA+PSBjbS5kaXNwbGF5LnNo
b3dpbmdGcm9tICYmIHBvcy5saW5lIDwgY20uZGlzcGxheS5zaG93aW5nVG8pIHsKLSAgICAgIGZv
ciAodmFyIG5vZGUgPSBjbS5kaXNwbGF5LmxpbmVEaXYuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9
IG5vZGUubmV4dFNpYmxpbmcpIGlmIChub2RlLmxpbmVPYmogPT0gbGluZSkgewotICAgICAgICBp
ZiAobm9kZS5vZmZzZXRIZWlnaHQgIT0gbGluZS5oZWlnaHQpIHVwZGF0ZUxpbmVIZWlnaHQobGlu
ZSwgbm9kZS5vZmZzZXRIZWlnaHQpOwotICAgICAgICBicmVhazsKKyAgICBydW5Jbk9wKGNtLCBm
dW5jdGlvbigpIHsKKyAgICAgIHZhciBsaW5lID0gcG9zLmxpbmUsIGxpbmVOID0gbGluZU5vKHBv
cy5saW5lKTsKKyAgICAgIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTik7Cisg
ICAgICBpZiAodmlldykgeworICAgICAgICBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKHZp
ZXcpOworICAgICAgICBjbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gY20uY3VyT3AuZm9yY2VV
cGRhdGUgPSB0cnVlOwogICAgICAgfQotICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9
IGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlOwotICAgICAgfSk7Ci0gICAgfQorICAgICAg
Y20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7CisgICAgICBpZiAoIWxpbmVJc0hpZGRlbih3
aWRnZXQuZG9jLCBsaW5lKSAmJiB3aWRnZXQuaGVpZ2h0ICE9IG51bGwpIHsKKyAgICAgICAgdmFy
IG9sZEhlaWdodCA9IHdpZGdldC5oZWlnaHQ7CisgICAgICAgIHdpZGdldC5oZWlnaHQgPSBudWxs
OworICAgICAgICB2YXIgZEhlaWdodCA9IHdpZGdldEhlaWdodCh3aWRnZXQpIC0gb2xkSGVpZ2h0
OworICAgICAgICBpZiAoZEhlaWdodCkKKyAgICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUs
IGxpbmUuaGVpZ2h0ICsgZEhlaWdodCk7CisgICAgICB9CisgICAgfSk7CiAgIH07CgogICBUZXh0
TWFya2VyLnByb3RvdHlwZS5hdHRhY2hMaW5lID0gZnVuY3Rpb24obGluZSkgewpAQCAtMzg2NCw0
MiArNDk2Miw1MyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAg
IH07CgorICAvLyBDb2xsYXBzZWQgbWFya2VycyBoYXZlIHVuaXF1ZSBpZHMsIGluIG9yZGVyIHRv
IGJlIGFibGUgdG8gb3JkZXIKKyAgLy8gdGhlbSwgd2hpY2ggaXMgbmVlZGVkIGZvciB1bmlxdWVs
eSBkZXRlcm1pbmluZyBhbiBvdXRlciBtYXJrZXIKKyAgLy8gd2hlbiB0aGV5IG92ZXJsYXAgKHRo
ZXkgbWF5IG5lc3QsIGJ1dCBub3QgcGFydGlhbGx5IG92ZXJsYXApLgorICB2YXIgbmV4dE1hcmtl
cklkID0gMDsKKworICAvLyBDcmVhdGUgYSBtYXJrZXIsIHdpcmUgaXQgdXAgdG8gdGhlIHJpZ2h0
IGxpbmVzLCBhbmQKICAgZnVuY3Rpb24gbWFya1RleHQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywg
dHlwZSkgeworICAgIC8vIFNoYXJlZCBtYXJrZXJzIChhY3Jvc3MgbGlua2VkIGRvY3VtZW50cykg
YXJlIGhhbmRsZWQgc2VwYXJhdGVseQorICAgIC8vIChtYXJrVGV4dFNoYXJlZCB3aWxsIGNhbGwg
b3V0IHRvIHRoaXMgYWdhaW4sIG9uY2UgcGVyCisgICAgLy8gZG9jdW1lbnQpLgogICAgIGlmIChv
cHRpb25zICYmIG9wdGlvbnMuc2hhcmVkKSByZXR1cm4gbWFya1RleHRTaGFyZWQoZG9jLCBmcm9t
LCB0bywgb3B0aW9ucywgdHlwZSk7CisgICAgLy8gRW5zdXJlIHdlIGFyZSBpbiBhbiBvcGVyYXRp
b24uCiAgICAgaWYgKGRvYy5jbSAmJiAhZG9jLmNtLmN1ck9wKSByZXR1cm4gb3BlcmF0aW9uKGRv
Yy5jbSwgbWFya1RleHQpKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpOwoKLSAgICB2YXIg
bWFya2VyID0gbmV3IFRleHRNYXJrZXIoZG9jLCB0eXBlKTsKLSAgICBpZiAocG9zTGVzcyh0bywg
ZnJvbSkgfHwgcG9zRXEoZnJvbSwgdG8pICYmIHR5cGUgPT0gInJhbmdlIiAmJgotICAgICAgICAh
KG9wdGlvbnMuaW5jbHVzaXZlTGVmdCAmJiBvcHRpb25zLmluY2x1c2l2ZVJpZ2h0KSkKKyAgICB2
YXIgbWFya2VyID0gbmV3IFRleHRNYXJrZXIoZG9jLCB0eXBlKSwgZGlmZiA9IGNtcChmcm9tLCB0
byk7CisgICAgaWYgKG9wdGlvbnMpIGNvcHlPYmoob3B0aW9ucywgbWFya2VyLCBmYWxzZSk7Cisg
ICAgLy8gRG9uJ3QgY29ubmVjdCBlbXB0eSBtYXJrZXJzIHVubGVzcyBjbGVhcldoZW5FbXB0eSBp
cyBmYWxzZQorICAgIGlmIChkaWZmID4gMCB8fCBkaWZmID09IDAgJiYgbWFya2VyLmNsZWFyV2hl
bkVtcHR5ICE9PSBmYWxzZSkKICAgICAgIHJldHVybiBtYXJrZXI7Ci0gICAgaWYgKG9wdGlvbnMp
IGNvcHlPYmoob3B0aW9ucywgbWFya2VyKTsKICAgICBpZiAobWFya2VyLnJlcGxhY2VkV2l0aCkg
eworICAgICAgLy8gU2hvd2luZyB1cCBhcyBhIHdpZGdldCBpbXBsaWVzIGNvbGxhcHNlZCAod2lk
Z2V0IHJlcGxhY2VzIHRleHQpCiAgICAgICBtYXJrZXIuY29sbGFwc2VkID0gdHJ1ZTsKLSAgICAg
IG1hcmtlci5yZXBsYWNlZFdpdGggPSBlbHQoInNwYW4iLCBbbWFya2VyLnJlcGxhY2VkV2l0aF0s
ICJDb2RlTWlycm9yLXdpZGdldCIpOwotICAgICAgaWYgKCFvcHRpb25zLmhhbmRsZU1vdXNlRXZl
bnRzKSBtYXJrZXIucmVwbGFjZWRXaXRoLmlnbm9yZUV2ZW50cyA9IHRydWU7CisgICAgICBtYXJr
ZXIud2lkZ2V0Tm9kZSA9IGVsdCgic3BhbiIsIFttYXJrZXIucmVwbGFjZWRXaXRoXSwgIkNvZGVN
aXJyb3Itd2lkZ2V0Iik7CisgICAgICBpZiAoIW9wdGlvbnMuaGFuZGxlTW91c2VFdmVudHMpIG1h
cmtlci53aWRnZXROb2RlLmlnbm9yZUV2ZW50cyA9IHRydWU7CisgICAgICBpZiAob3B0aW9ucy5p
bnNlcnRMZWZ0KSBtYXJrZXIud2lkZ2V0Tm9kZS5pbnNlcnRMZWZ0ID0gdHJ1ZTsKKyAgICB9Cisg
ICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHsKKyAgICAgIGlmIChjb25mbGljdGluZ0NvbGxhcHNl
ZFJhbmdlKGRvYywgZnJvbS5saW5lLCBmcm9tLCB0bywgbWFya2VyKSB8fAorICAgICAgICAgIGZy
b20ubGluZSAhPSB0by5saW5lICYmIGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCB0by5s
aW5lLCBmcm9tLCB0bywgbWFya2VyKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnNlcnRp
bmcgY29sbGFwc2VkIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25l
Iik7CisgICAgICBzYXdDb2xsYXBzZWRTcGFucyA9IHRydWU7CiAgICAgfQotICAgIGlmIChtYXJr
ZXIuY29sbGFwc2VkKSBzYXdDb2xsYXBzZWRTcGFucyA9IHRydWU7CgogICAgIGlmIChtYXJrZXIu
YWRkVG9IaXN0b3J5KQotICAgICAgYWRkVG9IaXN0b3J5KGRvYywge2Zyb206IGZyb20sIHRvOiB0
bywgb3JpZ2luOiAibWFya1RleHQifSwKLSAgICAgICAgICAgICAgICAgICB7aGVhZDogZG9jLnNl
bC5oZWFkLCBhbmNob3I6IGRvYy5zZWwuYW5jaG9yfSwgTmFOKTsKKyAgICAgIGFkZENoYW5nZVRv
SGlzdG9yeShkb2MsIHtmcm9tOiBmcm9tLCB0bzogdG8sIG9yaWdpbjogIm1hcmtUZXh0In0sIGRv
Yy5zZWwsIE5hTik7CgotICAgIHZhciBjdXJMaW5lID0gZnJvbS5saW5lLCBzaXplID0gMCwgY29s
bGFwc2VkQXRTdGFydCwgY29sbGFwc2VkQXRFbmQsIGNtID0gZG9jLmNtLCB1cGRhdGVNYXhMaW5l
OworICAgIHZhciBjdXJMaW5lID0gZnJvbS5saW5lLCBjbSA9IGRvYy5jbSwgdXBkYXRlTWF4TGlu
ZTsKICAgICBkb2MuaXRlcihjdXJMaW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewot
ICAgICAgaWYgKGNtICYmIG1hcmtlci5jb2xsYXBzZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBw
aW5nICYmIHZpc3VhbExpbmUoZG9jLCBsaW5lKSA9PSBjbS5kaXNwbGF5Lm1heExpbmUpCisgICAg
ICBpZiAoY20gJiYgbWFya2VyLmNvbGxhcHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcg
JiYgdmlzdWFsTGluZShsaW5lKSA9PSBjbS5kaXNwbGF5Lm1heExpbmUpCiAgICAgICAgIHVwZGF0
ZU1heExpbmUgPSB0cnVlOwotICAgICAgdmFyIHNwYW4gPSB7ZnJvbTogbnVsbCwgdG86IG51bGws
IG1hcmtlcjogbWFya2VyfTsKLSAgICAgIHNpemUgKz0gbGluZS50ZXh0Lmxlbmd0aDsKLSAgICAg
IGlmIChjdXJMaW5lID09IGZyb20ubGluZSkge3NwYW4uZnJvbSA9IGZyb20uY2g7IHNpemUgLT0g
ZnJvbS5jaDt9Ci0gICAgICBpZiAoY3VyTGluZSA9PSB0by5saW5lKSB7c3Bhbi50byA9IHRvLmNo
OyBzaXplIC09IGxpbmUudGV4dC5sZW5ndGggLSB0by5jaDt9Ci0gICAgICBpZiAobWFya2VyLmNv
bGxhcHNlZCkgewotICAgICAgICBpZiAoY3VyTGluZSA9PSB0by5saW5lKSBjb2xsYXBzZWRBdEVu
ZCA9IGNvbGxhcHNlZFNwYW5BdChsaW5lLCB0by5jaCk7Ci0gICAgICAgIGlmIChjdXJMaW5lID09
IGZyb20ubGluZSkgY29sbGFwc2VkQXRTdGFydCA9IGNvbGxhcHNlZFNwYW5BdChsaW5lLCBmcm9t
LmNoKTsKLSAgICAgICAgZWxzZSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOwotICAgICAgfQot
ICAgICAgYWRkTWFya2VkU3BhbihsaW5lLCBzcGFuKTsKKyAgICAgIGlmIChtYXJrZXIuY29sbGFw
c2VkICYmIGN1ckxpbmUgIT0gZnJvbS5saW5lKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOwor
ICAgICAgYWRkTWFya2VkU3BhbihsaW5lLCBuZXcgTWFya2VkU3BhbihtYXJrZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxpbmUgPT0gZnJvbS5saW5lID8g
ZnJvbS5jaCA6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGN1ckxpbmUgPT0gdG8ubGluZSA/IHRvLmNoIDogbnVsbCkpOwogICAgICAgKytjdXJMaW5lOwog
ICAgIH0pOworICAgIC8vIGxpbmVJc0hpZGRlbiBkZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiB0
aGUgc3BhbnMsIHNvIG5lZWRzIGEgc2Vjb25kIHBhc3MKICAgICBpZiAobWFya2VyLmNvbGxhcHNl
ZCkgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewogICAg
ICAgaWYgKGxpbmVJc0hpZGRlbihkb2MsIGxpbmUpKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDAp
OwogICAgIH0pOwpAQCAtMzkxMiwzMSArNTAyMSwzMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgICAgZG9jLmNsZWFySGlzdG9yeSgpOwogICAgIH0KICAgICBpZiAo
bWFya2VyLmNvbGxhcHNlZCkgewotICAgICAgaWYgKGNvbGxhcHNlZEF0U3RhcnQgIT0gY29sbGFw
c2VkQXRFbmQpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBt
YXJrZXIgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7Ci0gICAgICBtYXJrZXIuc2l6ZSA9
IHNpemU7CisgICAgICBtYXJrZXIuaWQgPSArK25leHRNYXJrZXJJZDsKICAgICAgIG1hcmtlci5h
dG9taWMgPSB0cnVlOwogICAgIH0KICAgICBpZiAoY20pIHsKKyAgICAgIC8vIFN5bmMgZWRpdG9y
IHN0YXRlCiAgICAgICBpZiAodXBkYXRlTWF4TGluZSkgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9
IHRydWU7Ci0gICAgICBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBtYXJrZXIudGl0bGUgfHwgbWFy
a2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jb2xsYXBzZWQpCisg
ICAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkKICAgICAgICAgcmVnQ2hhbmdlKGNtLCBmcm9tLmxp
bmUsIHRvLmxpbmUgKyAxKTsKLSAgICAgIGlmIChtYXJrZXIuYXRvbWljKSByZUNoZWNrU2VsZWN0
aW9uKGNtKTsKKyAgICAgIGVsc2UgaWYgKG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnRpdGxl
IHx8IG1hcmtlci5zdGFydFN0eWxlIHx8IG1hcmtlci5lbmRTdHlsZSkKKyAgICAgICAgZm9yICh2
YXIgaSA9IGZyb20ubGluZTsgaSA8PSB0by5saW5lOyBpKyspIHJlZ0xpbmVDaGFuZ2UoY20sIGks
ICJ0ZXh0Iik7CisgICAgICBpZiAobWFya2VyLmF0b21pYykgcmVDaGVja1NlbGVjdGlvbihjbS5k
b2MpOworICAgICAgc2lnbmFsTGF0ZXIoY20sICJtYXJrZXJBZGRlZCIsIGNtLCBtYXJrZXIpOwog
ICAgIH0KICAgICByZXR1cm4gbWFya2VyOwogICB9CgogICAvLyBTSEFSRUQgVEVYVE1BUktFUlMK
Ci0gIGZ1bmN0aW9uIFNoYXJlZFRleHRNYXJrZXIobWFya2VycywgcHJpbWFyeSkgeworICAvLyBB
IHNoYXJlZCBtYXJrZXIgc3BhbnMgbXVsdGlwbGUgbGlua2VkIGRvY3VtZW50cy4gSXQgaXMKKyAg
Ly8gaW1wbGVtZW50ZWQgYXMgYSBtZXRhLW1hcmtlci1vYmplY3QgY29udHJvbGxpbmcgbXVsdGlw
bGUgbm9ybWFsCisgIC8vIG1hcmtlcnMuCisgIHZhciBTaGFyZWRUZXh0TWFya2VyID0gQ29kZU1p
cnJvci5TaGFyZWRUZXh0TWFya2VyID0gZnVuY3Rpb24obWFya2VycywgcHJpbWFyeSkgewogICAg
IHRoaXMubWFya2VycyA9IG1hcmtlcnM7CiAgICAgdGhpcy5wcmltYXJ5ID0gcHJpbWFyeTsKLSAg
ICBmb3IgKHZhciBpID0gMCwgbWUgPSB0aGlzOyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSkgewor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSkKICAgICAgIG1hcmtl
cnNbaV0ucGFyZW50ID0gdGhpczsKLSAgICAgIG9uKG1hcmtlcnNbaV0sICJjbGVhciIsIGZ1bmN0
aW9uKCl7bWUuY2xlYXIoKTt9KTsKLSAgICB9Ci0gIH0KLSAgQ29kZU1pcnJvci5TaGFyZWRUZXh0
TWFya2VyID0gU2hhcmVkVGV4dE1hcmtlcjsKKyAgfTsKICAgZXZlbnRNaXhpbihTaGFyZWRUZXh0
TWFya2VyKTsKCiAgIFNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24o
KSB7CkBAIC0zOTQ2LDE3ICs1MDU3LDE3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgdGhpcy5tYXJrZXJzW2ldLmNsZWFyKCk7CiAgICAgc2lnbmFsTGF0ZXIodGhp
cywgImNsZWFyIik7CiAgIH07Ci0gIFNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoKTsKKyAgU2hhcmVkVGV4
dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHNpZGUsIGxpbmVPYmopIHsKKyAgICBy
ZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoc2lkZSwgbGluZU9iaik7CiAgIH07CgogICBmdW5jdGlv
biBtYXJrVGV4dFNoYXJlZChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7CiAgICAgb3B0
aW9ucyA9IGNvcHlPYmoob3B0aW9ucyk7CiAgICAgb3B0aW9ucy5zaGFyZWQgPSBmYWxzZTsKICAg
ICB2YXIgbWFya2VycyA9IFttYXJrVGV4dChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKV0s
IHByaW1hcnkgPSBtYXJrZXJzWzBdOwotICAgIHZhciB3aWRnZXQgPSBvcHRpb25zLnJlcGxhY2Vk
V2l0aDsKKyAgICB2YXIgd2lkZ2V0ID0gb3B0aW9ucy53aWRnZXROb2RlOwogICAgIGxpbmtlZERv
Y3MoZG9jLCBmdW5jdGlvbihkb2MpIHsKLSAgICAgIGlmICh3aWRnZXQpIG9wdGlvbnMucmVwbGFj
ZWRXaXRoID0gd2lkZ2V0LmNsb25lTm9kZSh0cnVlKTsKKyAgICAgIGlmICh3aWRnZXQpIG9wdGlv
bnMud2lkZ2V0Tm9kZSA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7CiAgICAgICBtYXJrZXJzLnB1
c2gobWFya1RleHQoZG9jLCBjbGlwUG9zKGRvYywgZnJvbSksIGNsaXBQb3MoZG9jLCB0byksIG9w
dGlvbnMsIHR5cGUpKTsKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5n
dGg7ICsraSkKICAgICAgICAgaWYgKGRvYy5saW5rZWRbaV0uaXNQYXJlbnQpIHJldHVybjsKQEAg
LTM5NjUsNjAgKzUwNzYsMTA0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIHJldHVybiBuZXcgU2hhcmVkVGV4dE1hcmtlcihtYXJrZXJzLCBwcmltYXJ5KTsKICAgfQoK
KyAgZnVuY3Rpb24gZmluZFNoYXJlZE1hcmtlcnMoZG9jKSB7CisgICAgcmV0dXJuIGRvYy5maW5k
TWFya3MoUG9zKGRvYy5maXJzdCwgMCksIGRvYy5jbGlwUG9zKFBvcyhkb2MubGFzdExpbmUoKSkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKG0pIHsgcmV0dXJuIG0ucGFyZW50
OyB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIGNvcHlTaGFyZWRNYXJrZXJzKGRvYywgbWFya2Vycykg
eworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgeworICAgICAg
dmFyIG1hcmtlciA9IG1hcmtlcnNbaV0sIHBvcyA9IG1hcmtlci5maW5kKCk7CisgICAgICB2YXIg
bUZyb20gPSBkb2MuY2xpcFBvcyhwb3MuZnJvbSksIG1UbyA9IGRvYy5jbGlwUG9zKHBvcy50byk7
CisgICAgICBpZiAoY21wKG1Gcm9tLCBtVG8pKSB7CisgICAgICAgIHZhciBzdWJNYXJrID0gbWFy
a1RleHQoZG9jLCBtRnJvbSwgbVRvLCBtYXJrZXIucHJpbWFyeSwgbWFya2VyLnByaW1hcnkudHlw
ZSk7CisgICAgICAgIG1hcmtlci5tYXJrZXJzLnB1c2goc3ViTWFyayk7CisgICAgICAgIHN1Yk1h
cmsucGFyZW50ID0gbWFya2VyOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGRl
dGFjaFNoYXJlZE1hcmtlcnMobWFya2VycykgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFy
a2Vycy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnNbaV0sIGxpbmtl
ZCA9IFttYXJrZXIucHJpbWFyeS5kb2NdOzsKKyAgICAgIGxpbmtlZERvY3MobWFya2VyLnByaW1h
cnkuZG9jLCBmdW5jdGlvbihkKSB7IGxpbmtlZC5wdXNoKGQpOyB9KTsKKyAgICAgIGZvciAodmFy
IGogPSAwOyBqIDwgbWFya2VyLm1hcmtlcnMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgdmFyIHN1
Yk1hcmtlciA9IG1hcmtlci5tYXJrZXJzW2pdOworICAgICAgICBpZiAoaW5kZXhPZihsaW5rZWQs
IHN1Yk1hcmtlci5kb2MpID09IC0xKSB7CisgICAgICAgICAgc3ViTWFya2VyLnBhcmVudCA9IG51
bGw7CisgICAgICAgICAgbWFya2VyLm1hcmtlcnMuc3BsaWNlKGotLSwgMSk7CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICB9CisgIH0KKwogICAvLyBURVhUTUFSS0VSIFNQQU5TCgorICBmdW5jdGlv
biBNYXJrZWRTcGFuKG1hcmtlciwgZnJvbSwgdG8pIHsKKyAgICB0aGlzLm1hcmtlciA9IG1hcmtl
cjsKKyAgICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG87CisgIH0KKworICAvLyBTZWFy
Y2ggYW4gYXJyYXkgb2Ygc3BhbnMgZm9yIGEgc3BhbiBtYXRjaGluZyB0aGUgZ2l2ZW4gbWFya2Vy
LgogICBmdW5jdGlvbiBnZXRNYXJrZWRTcGFuRm9yKHNwYW5zLCBtYXJrZXIpIHsKICAgICBpZiAo
c3BhbnMpIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHsKICAgICAgIHZh
ciBzcGFuID0gc3BhbnNbaV07CiAgICAgICBpZiAoc3Bhbi5tYXJrZXIgPT0gbWFya2VyKSByZXR1
cm4gc3BhbjsKICAgICB9CiAgIH0KKyAgLy8gUmVtb3ZlIGEgc3BhbiBmcm9tIGFuIGFycmF5LCBy
ZXR1cm5pbmcgdW5kZWZpbmVkIGlmIG5vIHNwYW5zIGFyZQorICAvLyBsZWZ0ICh3ZSBkb24ndCBz
dG9yZSBhcnJheXMgZm9yIGxpbmVzIHdpdGhvdXQgc3BhbnMpLgogICBmdW5jdGlvbiByZW1vdmVN
YXJrZWRTcGFuKHNwYW5zLCBzcGFuKSB7CiAgICAgZm9yICh2YXIgciwgaSA9IDA7IGkgPCBzcGFu
cy5sZW5ndGg7ICsraSkKICAgICAgIGlmIChzcGFuc1tpXSAhPSBzcGFuKSAociB8fCAociA9IFtd
KSkucHVzaChzcGFuc1tpXSk7CiAgICAgcmV0dXJuIHI7CiAgIH0KKyAgLy8gQWRkIGEgc3BhbiB0
byBhIGxpbmUuCiAgIGZ1bmN0aW9uIGFkZE1hcmtlZFNwYW4obGluZSwgc3BhbikgewogICAgIGxp
bmUubWFya2VkU3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zID8gbGluZS5tYXJrZWRTcGFucy5jb25j
YXQoW3NwYW5dKSA6IFtzcGFuXTsKICAgICBzcGFuLm1hcmtlci5hdHRhY2hMaW5lKGxpbmUpOwog
ICB9CgorICAvLyBVc2VkIGZvciB0aGUgYWxnb3JpdGhtIHRoYXQgYWRqdXN0cyBtYXJrZXJzIGZv
ciBhIGNoYW5nZSBpbiB0aGUKKyAgLy8gZG9jdW1lbnQuIFRoZXNlIGZ1bmN0aW9ucyBjdXQgYW4g
YXJyYXkgb2Ygc3BhbnMgYXQgYSBnaXZlbgorICAvLyBjaGFyYWN0ZXIgcG9zaXRpb24sIHJldHVy
bmluZyBhbiBhcnJheSBvZiByZW1haW5pbmcgY2h1bmtzIChvcgorICAvLyB1bmRlZmluZWQgaWYg
bm90aGluZyByZW1haW5zKS4KICAgZnVuY3Rpb24gbWFya2VkU3BhbnNCZWZvcmUob2xkLCBzdGFy
dENoLCBpc0luc2VydCkgewogICAgIGlmIChvbGQpIGZvciAodmFyIGkgPSAwLCBudzsgaSA8IG9s
ZC5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIHNwYW4gPSBvbGRbaV0sIG1hcmtlciA9IHNwYW4u
bWFya2VyOwogICAgICAgdmFyIHN0YXJ0c0JlZm9yZSA9IHNwYW4uZnJvbSA9PSBudWxsIHx8ICht
YXJrZXIuaW5jbHVzaXZlTGVmdCA/IHNwYW4uZnJvbSA8PSBzdGFydENoIDogc3Bhbi5mcm9tIDwg
c3RhcnRDaCk7Ci0gICAgICBpZiAoc3RhcnRzQmVmb3JlIHx8Ci0gICAgICAgICAgKG1hcmtlci5p
bmNsdXNpdmVMZWZ0ICYmIG1hcmtlci5pbmNsdXNpdmVSaWdodCB8fCBtYXJrZXIudHlwZSA9PSAi
Ym9va21hcmsiKSAmJgotICAgICAgICAgIHNwYW4uZnJvbSA9PSBzdGFydENoICYmICghaXNJbnNl
cnQgfHwgIXNwYW4ubWFya2VyLmluc2VydExlZnQpKSB7CisgICAgICBpZiAoc3RhcnRzQmVmb3Jl
IHx8IHNwYW4uZnJvbSA9PSBzdGFydENoICYmIG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYg
KCFpc0luc2VydCB8fCAhc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkpIHsKICAgICAgICAgdmFyIGVu
ZHNBZnRlciA9IHNwYW4udG8gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZVJpZ2h0ID8gc3Bh
bi50byA+PSBzdGFydENoIDogc3Bhbi50byA+IHN0YXJ0Q2gpOwotICAgICAgICAobncgfHwgKG53
ID0gW10pKS5wdXNoKHtmcm9tOiBzcGFuLmZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRvOiBlbmRzQWZ0ZXIgPyBudWxsIDogc3Bhbi50bywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFya2VyOiBtYXJrZXJ9KTsKKyAgICAgICAgKG53IHx8IChudyA9IFtd
KSkucHVzaChuZXcgTWFya2VkU3BhbihtYXJrZXIsIHNwYW4uZnJvbSwgZW5kc0FmdGVyID8gbnVs
bCA6IHNwYW4udG8pKTsKICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG53OwogICB9Ci0KICAg
ZnVuY3Rpb24gbWFya2VkU3BhbnNBZnRlcihvbGQsIGVuZENoLCBpc0luc2VydCkgewogICAgIGlm
IChvbGQpIGZvciAodmFyIGkgPSAwLCBudzsgaSA8IG9sZC5sZW5ndGg7ICsraSkgewogICAgICAg
dmFyIHNwYW4gPSBvbGRbaV0sIG1hcmtlciA9IHNwYW4ubWFya2VyOwogICAgICAgdmFyIGVuZHNB
ZnRlciA9IHNwYW4udG8gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZVJpZ2h0ID8gc3Bhbi50
byA+PSBlbmRDaCA6IHNwYW4udG8gPiBlbmRDaCk7Ci0gICAgICBpZiAoZW5kc0FmdGVyIHx8IG1h
cmtlci50eXBlID09ICJib29rbWFyayIgJiYgc3Bhbi5mcm9tID09IGVuZENoICYmICghaXNJbnNl
cnQgfHwgc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkpIHsKKyAgICAgIGlmIChlbmRzQWZ0ZXIgfHwg
c3Bhbi5mcm9tID09IGVuZENoICYmIG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYgKCFpc0lu
c2VydCB8fCBzcGFuLm1hcmtlci5pbnNlcnRMZWZ0KSkgewogICAgICAgICB2YXIgc3RhcnRzQmVm
b3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bhbi5m
cm9tIDw9IGVuZENoIDogc3Bhbi5mcm9tIDwgZW5kQ2gpOwotICAgICAgICAobncgfHwgKG53ID0g
W10pKS5wdXNoKHtmcm9tOiBzdGFydHNCZWZvcmUgPyBudWxsIDogc3Bhbi5mcm9tIC0gZW5kQ2gs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiBzcGFuLnRvID09IG51bGwgPyBu
dWxsIDogc3Bhbi50byAtIGVuZENoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXJrZXI6IG1hcmtlcn0pOworICAgICAgICAobncgfHwgKG53ID0gW10pKS5wdXNoKG5ldyBNYXJr
ZWRTcGFuKG1hcmtlciwgc3RhcnRzQmVmb3JlID8gbnVsbCA6IHNwYW4uZnJvbSAtIGVuZENoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4udG8gPT0g
bnVsbCA/IG51bGwgOiBzcGFuLnRvIC0gZW5kQ2gpKTsKICAgICAgIH0KICAgICB9CiAgICAgcmV0
dXJuIG53OwogICB9CgorICAvLyBHaXZlbiBhIGNoYW5nZSBvYmplY3QsIGNvbXB1dGUgdGhlIG5l
dyBzZXQgb2YgbWFya2VyIHNwYW5zIHRoYXQKKyAgLy8gY292ZXIgdGhlIGxpbmUgaW4gd2hpY2gg
dGhlIGNoYW5nZSB0b29rIHBsYWNlLiBSZW1vdmVzIHNwYW5zCisgIC8vIGVudGlyZWx5IHdpdGhp
biB0aGUgY2hhbmdlLCByZWNvbm5lY3RzIHNwYW5zIGJlbG9uZ2luZyB0byB0aGUKKyAgLy8gc2Ft
ZSBtYXJrZXIgdGhhdCBhcHBlYXIgb24gYm90aCBzaWRlcyBvZiB0aGUgY2hhbmdlLCBhbmQgY3V0
cyBvZmYKKyAgLy8gc3BhbnMgcGFydGlhbGx5IHdpdGhpbiB0aGUgY2hhbmdlLiBSZXR1cm5zIGFu
IGFycmF5IG9mIHNwYW4KKyAgLy8gYXJyYXlzIHdpdGggb25lIGVsZW1lbnQgZm9yIGVhY2ggbGlu
ZSBpbiAoYWZ0ZXIpIHRoZSBjaGFuZ2UuCiAgIGZ1bmN0aW9uIHN0cmV0Y2hTcGFuc092ZXJDaGFu
Z2UoZG9jLCBjaGFuZ2UpIHsKICAgICB2YXIgb2xkRmlyc3QgPSBpc0xpbmUoZG9jLCBjaGFuZ2Uu
ZnJvbS5saW5lKSAmJiBnZXRMaW5lKGRvYywgY2hhbmdlLmZyb20ubGluZSkubWFya2VkU3BhbnM7
CiAgICAgdmFyIG9sZExhc3QgPSBpc0xpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSkgJiYgZ2V0TGlu
ZShkb2MsIGNoYW5nZS50by5saW5lKS5tYXJrZWRTcGFuczsKICAgICBpZiAoIW9sZEZpcnN0ICYm
ICFvbGRMYXN0KSByZXR1cm4gbnVsbDsKCi0gICAgdmFyIHN0YXJ0Q2ggPSBjaGFuZ2UuZnJvbS5j
aCwgZW5kQ2ggPSBjaGFuZ2UudG8uY2gsIGlzSW5zZXJ0ID0gcG9zRXEoY2hhbmdlLmZyb20sIGNo
YW5nZS50byk7CisgICAgdmFyIHN0YXJ0Q2ggPSBjaGFuZ2UuZnJvbS5jaCwgZW5kQ2ggPSBjaGFu
Z2UudG8uY2gsIGlzSW5zZXJ0ID0gY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDA7CiAg
ICAgLy8gR2V0IHRoZSBzcGFucyB0aGF0ICdzdGljayBvdXQnIG9uIGJvdGggc2lkZXMKICAgICB2
YXIgZmlyc3QgPSBtYXJrZWRTcGFuc0JlZm9yZShvbGRGaXJzdCwgc3RhcnRDaCwgaXNJbnNlcnQp
OwogICAgIHZhciBsYXN0ID0gbWFya2VkU3BhbnNBZnRlcihvbGRMYXN0LCBlbmRDaCwgaXNJbnNl
cnQpOwpAQCAtNDA1MywxMyArNTIwOCw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgICB9CiAgICAgICB9CiAgICAgfQotICAgIGlmIChzYW1lTGluZSAmJiBmaXJz
dCkgewotICAgICAgLy8gTWFrZSBzdXJlIHdlIGRpZG4ndCBjcmVhdGUgYW55IHplcm8tbGVuZ3Ro
IHNwYW5zCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0Lmxlbmd0aDsgKytpKQotICAg
ICAgICBpZiAoZmlyc3RbaV0uZnJvbSAhPSBudWxsICYmIGZpcnN0W2ldLmZyb20gPT0gZmlyc3Rb
aV0udG8gJiYgZmlyc3RbaV0ubWFya2VyLnR5cGUgIT0gImJvb2ttYXJrIikKLSAgICAgICAgICBm
aXJzdC5zcGxpY2UoaS0tLCAxKTsKLSAgICAgIGlmICghZmlyc3QubGVuZ3RoKSBmaXJzdCA9IG51
bGw7Ci0gICAgfQorICAgIC8vIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgY3JlYXRlIGFueSB6ZXJvLWxl
bmd0aCBzcGFucworICAgIGlmIChmaXJzdCkgZmlyc3QgPSBjbGVhckVtcHR5U3BhbnMoZmlyc3Qp
OworICAgIGlmIChsYXN0ICYmIGxhc3QgIT0gZmlyc3QpIGxhc3QgPSBjbGVhckVtcHR5U3BhbnMo
bGFzdCk7CgogICAgIHZhciBuZXdNYXJrZXJzID0gW2ZpcnN0XTsKICAgICBpZiAoIXNhbWVMaW5l
KSB7CkBAIC00MDY4LDcgKzUyMTksNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICAgIGlmIChnYXAgPiAwICYmIGZpcnN0KQogICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGZpcnN0Lmxlbmd0aDsgKytpKQogICAgICAgICAgIGlmIChmaXJzdFtpXS50byA9PSBudWxs
KQotICAgICAgICAgICAgKGdhcE1hcmtlcnMgfHwgKGdhcE1hcmtlcnMgPSBbXSkpLnB1c2goe2Zy
b206IG51bGwsIHRvOiBudWxsLCBtYXJrZXI6IGZpcnN0W2ldLm1hcmtlcn0pOworICAgICAgICAg
ICAgKGdhcE1hcmtlcnMgfHwgKGdhcE1hcmtlcnMgPSBbXSkpLnB1c2gobmV3IE1hcmtlZFNwYW4o
Zmlyc3RbaV0ubWFya2VyLCBudWxsLCBudWxsKSk7CiAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGdhcDsgKytpKQogICAgICAgICBuZXdNYXJrZXJzLnB1c2goZ2FwTWFya2Vycyk7CiAgICAgICBu
ZXdNYXJrZXJzLnB1c2gobGFzdCk7CkBAIC00MDc2LDYgKzUyMjcsMjIgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIG5ld01hcmtlcnM7CiAgIH0KCisgIC8v
IFJlbW92ZSBzcGFucyB0aGF0IGFyZSBlbXB0eSBhbmQgZG9uJ3QgaGF2ZSBhIGNsZWFyV2hlbkVt
cHR5CisgIC8vIG9wdGlvbiBvZiBmYWxzZS4KKyAgZnVuY3Rpb24gY2xlYXJFbXB0eVNwYW5zKHNw
YW5zKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgeworICAg
ICAgdmFyIHNwYW4gPSBzcGFuc1tpXTsKKyAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCAmJiBz
cGFuLmZyb20gPT0gc3Bhbi50byAmJiBzcGFuLm1hcmtlci5jbGVhcldoZW5FbXB0eSAhPT0gZmFs
c2UpCisgICAgICAgIHNwYW5zLnNwbGljZShpLS0sIDEpOworICAgIH0KKyAgICBpZiAoIXNwYW5z
Lmxlbmd0aCkgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIHNwYW5zOworICB9CisKKyAgLy8gVXNl
ZCBmb3IgdW4vcmUtZG9pbmcgY2hhbmdlcyBmcm9tIHRoZSBoaXN0b3J5LiBDb21iaW5lcyB0aGUK
KyAgLy8gcmVzdWx0IG9mIGNvbXB1dGluZyB0aGUgZXhpc3Rpbmcgc3BhbnMgd2l0aCB0aGUgc2V0
IG9mIHNwYW5zIHRoYXQKKyAgLy8gZXhpc3RlZCBpbiB0aGUgaGlzdG9yeSAoc28gdGhhdCBkZWxl
dGluZyBhcm91bmQgYSBzcGFuIGFuZCB0aGVuCisgIC8vIHVuZG9pbmcgYnJpbmdzIGJhY2sgdGhl
IHNwYW4pLgogICBmdW5jdGlvbiBtZXJnZU9sZFNwYW5zKGRvYywgY2hhbmdlKSB7CiAgICAgdmFy
IG9sZCA9IGdldE9sZFNwYW5zKGRvYywgY2hhbmdlKTsKICAgICB2YXIgc3RyZXRjaGVkID0gc3Ry
ZXRjaFNwYW5zT3ZlckNoYW5nZShkb2MsIGNoYW5nZSk7CkBAIC00MDk4LDYgKzUyNjUsNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gb2xkOwogICB9Cgor
ICAvLyBVc2VkIHRvICdjbGlwJyBvdXQgcmVhZE9ubHkgcmFuZ2VzIHdoZW4gbWFraW5nIGEgY2hh
bmdlLgogICBmdW5jdGlvbiByZW1vdmVSZWFkT25seVJhbmdlcyhkb2MsIGZyb20sIHRvKSB7CiAg
ICAgdmFyIG1hcmtlcnMgPSBudWxsOwogICAgIGRvYy5pdGVyKGZyb20ubGluZSwgdG8ubGluZSAr
IDEsIGZ1bmN0aW9uKGxpbmUpIHsKQEAgLTQxMTAsMTQgKzUyNzgsMTQgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKCFtYXJrZXJzKSByZXR1cm4gbnVsbDsKICAg
ICB2YXIgcGFydHMgPSBbe2Zyb206IGZyb20sIHRvOiB0b31dOwogICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIG1rID0gbWFya2Vyc1tpXSwg
bSA9IG1rLmZpbmQoKTsKKyAgICAgIHZhciBtayA9IG1hcmtlcnNbaV0sIG0gPSBtay5maW5kKDAp
OwogICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJ0cy5sZW5ndGg7ICsraikgewogICAgICAg
ICB2YXIgcCA9IHBhcnRzW2pdOwotICAgICAgICBpZiAocG9zTGVzcyhwLnRvLCBtLmZyb20pIHx8
IHBvc0xlc3MobS50bywgcC5mcm9tKSkgY29udGludWU7Ci0gICAgICAgIHZhciBuZXdQYXJ0cyA9
IFtqLCAxXTsKLSAgICAgICAgaWYgKHBvc0xlc3MocC5mcm9tLCBtLmZyb20pIHx8ICFtay5pbmNs
dXNpdmVMZWZ0ICYmIHBvc0VxKHAuZnJvbSwgbS5mcm9tKSkKKyAgICAgICAgaWYgKGNtcChwLnRv
LCBtLmZyb20pIDwgMCB8fCBjbXAocC5mcm9tLCBtLnRvKSA+IDApIGNvbnRpbnVlOworICAgICAg
ICB2YXIgbmV3UGFydHMgPSBbaiwgMV0sIGRmcm9tID0gY21wKHAuZnJvbSwgbS5mcm9tKSwgZHRv
ID0gY21wKHAudG8sIG0udG8pOworICAgICAgICBpZiAoZGZyb20gPCAwIHx8ICFtay5pbmNsdXNp
dmVMZWZ0ICYmICFkZnJvbSkKICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKHtmcm9tOiBwLmZyb20s
IHRvOiBtLmZyb219KTsKLSAgICAgICAgaWYgKHBvc0xlc3MobS50bywgcC50bykgfHwgIW1rLmlu
Y2x1c2l2ZVJpZ2h0ICYmIHBvc0VxKHAudG8sIG0udG8pKQorICAgICAgICBpZiAoZHRvID4gMCB8
fCAhbWsuaW5jbHVzaXZlUmlnaHQgJiYgIWR0bykKICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKHtm
cm9tOiBtLnRvLCB0bzogcC50b30pOwogICAgICAgICBwYXJ0cy5zcGxpY2UuYXBwbHkocGFydHMs
IG5ld1BhcnRzKTsKICAgICAgICAgaiArPSBuZXdQYXJ0cy5sZW5ndGggLSAxOwpAQCAtNDEyNiw3
MSArNTI5NCwxNDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0
dXJuIHBhcnRzOwogICB9CgotICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXQobGluZSwgY2gpIHsK
KyAgLy8gQ29ubmVjdCBvciBkaXNjb25uZWN0IHNwYW5zIGZyb20gYSBsaW5lLgorICBmdW5jdGlv
biBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKSB7CisgICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRT
cGFuczsKKyAgICBpZiAoIXNwYW5zKSByZXR1cm47CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
cGFucy5sZW5ndGg7ICsraSkKKyAgICAgIHNwYW5zW2ldLm1hcmtlci5kZXRhY2hMaW5lKGxpbmUp
OworICAgIGxpbmUubWFya2VkU3BhbnMgPSBudWxsOworICB9CisgIGZ1bmN0aW9uIGF0dGFjaE1h
cmtlZFNwYW5zKGxpbmUsIHNwYW5zKSB7CisgICAgaWYgKCFzcGFucykgcmV0dXJuOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpCisgICAgICBzcGFuc1tpXS5tYXJr
ZXIuYXR0YWNoTGluZShsaW5lKTsKKyAgICBsaW5lLm1hcmtlZFNwYW5zID0gc3BhbnM7CisgIH0K
KworICAvLyBIZWxwZXJzIHVzZWQgd2hlbiBjb21wdXRpbmcgd2hpY2ggb3ZlcmxhcHBpbmcgY29s
bGFwc2VkIHNwYW4KKyAgLy8gY291bnRzIGFzIHRoZSBsYXJnZXIgb25lLgorICBmdW5jdGlvbiBl
eHRyYUxlZnQobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IC0xIDogMDsg
fQorICBmdW5jdGlvbiBleHRyYVJpZ2h0KG1hcmtlcikgeyByZXR1cm4gbWFya2VyLmluY2x1c2l2
ZVJpZ2h0ID8gMSA6IDA7IH0KKworICAvLyBSZXR1cm5zIGEgbnVtYmVyIGluZGljYXRpbmcgd2hp
Y2ggb2YgdHdvIG92ZXJsYXBwaW5nIGNvbGxhcHNlZAorICAvLyBzcGFucyBpcyBsYXJnZXIgKGFu
ZCB0aHVzIGluY2x1ZGVzIHRoZSBvdGhlcikuIEZhbGxzIGJhY2sgdG8KKyAgLy8gY29tcGFyaW5n
IGlkcyB3aGVuIHRoZSBzcGFucyBjb3ZlciBleGFjdGx5IHRoZSBzYW1lIHJhbmdlLgorICBmdW5j
dGlvbiBjb21wYXJlQ29sbGFwc2VkTWFya2VycyhhLCBiKSB7CisgICAgdmFyIGxlbkRpZmYgPSBh
LmxpbmVzLmxlbmd0aCAtIGIubGluZXMubGVuZ3RoOworICAgIGlmIChsZW5EaWZmICE9IDApIHJl
dHVybiBsZW5EaWZmOworICAgIHZhciBhUG9zID0gYS5maW5kKCksIGJQb3MgPSBiLmZpbmQoKTsK
KyAgICB2YXIgZnJvbUNtcCA9IGNtcChhUG9zLmZyb20sIGJQb3MuZnJvbSkgfHwgZXh0cmFMZWZ0
KGEpIC0gZXh0cmFMZWZ0KGIpOworICAgIGlmIChmcm9tQ21wKSByZXR1cm4gLWZyb21DbXA7Cisg
ICAgdmFyIHRvQ21wID0gY21wKGFQb3MudG8sIGJQb3MudG8pIHx8IGV4dHJhUmlnaHQoYSkgLSBl
eHRyYVJpZ2h0KGIpOworICAgIGlmICh0b0NtcCkgcmV0dXJuIHRvQ21wOworICAgIHJldHVybiBi
LmlkIC0gYS5pZDsKKyAgfQorCisgIC8vIEZpbmQgb3V0IHdoZXRoZXIgYSBsaW5lIGVuZHMgb3Ig
c3RhcnRzIGluIGEgY29sbGFwc2VkIHNwYW4uIElmCisgIC8vIHNvLCByZXR1cm4gdGhlIG1hcmtl
ciBmb3IgdGhhdCBzcGFuLgorICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIHN0
YXJ0KSB7CiAgICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYmIGxpbmUubWFya2VkU3Bh
bnMsIGZvdW5kOwogICAgIGlmIChzcHMpIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IHNwcy5sZW5n
dGg7ICsraSkgewogICAgICAgc3AgPSBzcHNbaV07Ci0gICAgICBpZiAoIXNwLm1hcmtlci5jb2xs
YXBzZWQpIGNvbnRpbnVlOwotICAgICAgaWYgKChzcC5mcm9tID09IG51bGwgfHwgc3AuZnJvbSA8
IGNoKSAmJgotICAgICAgICAgIChzcC50byA9PSBudWxsIHx8IHNwLnRvID4gY2gpICYmCi0gICAg
ICAgICAgKCFmb3VuZCB8fCBmb3VuZC53aWR0aCA8IHNwLm1hcmtlci53aWR0aCkpCisgICAgICBp
ZiAoc3AubWFya2VyLmNvbGxhcHNlZCAmJiAoc3RhcnQgPyBzcC5mcm9tIDogc3AudG8pID09IG51
bGwgJiYKKyAgICAgICAgICAoIWZvdW5kIHx8IGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGZvdW5k
LCBzcC5tYXJrZXIpIDwgMCkpCiAgICAgICAgIGZvdW5kID0gc3AubWFya2VyOwogICAgIH0KICAg
ICByZXR1cm4gZm91bmQ7CiAgIH0KLSAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0U3RhcnQobGlu
ZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0KGxpbmUsIC0xKTsgfQotICBmdW5jdGlvbiBjb2xs
YXBzZWRTcGFuQXRFbmQobGluZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0KGxpbmUsIGxpbmUu
dGV4dC5sZW5ndGggKyAxKTsgfQorICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5l
KSB7IHJldHVybiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIHRydWUpOyB9CisgIGZ1bmN0aW9u
IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSB7IHJldHVybiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxp
bmUsIGZhbHNlKTsgfQorCisgIC8vIFRlc3Qgd2hldGhlciB0aGVyZSBleGlzdHMgYSBjb2xsYXBz
ZWQgc3BhbiB0aGF0IHBhcnRpYWxseQorICAvLyBvdmVybGFwcyAoY292ZXJzIHRoZSBzdGFydCBv
ciBlbmQsIGJ1dCBub3QgYm90aCkgb2YgYSBuZXcgc3Bhbi4KKyAgLy8gU3VjaCBvdmVybGFwIGlz
IG5vdCBhbGxvd2VkLgorICBmdW5jdGlvbiBjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywg
bGluZU5vLCBmcm9tLCB0bywgbWFya2VyKSB7CisgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywg
bGluZU5vKTsKKyAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRT
cGFuczsKKyAgICBpZiAoc3BzKSBmb3IgKHZhciBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSkg
eworICAgICAgdmFyIHNwID0gc3BzW2ldOworICAgICAgaWYgKCFzcC5tYXJrZXIuY29sbGFwc2Vk
KSBjb250aW51ZTsKKyAgICAgIHZhciBmb3VuZCA9IHNwLm1hcmtlci5maW5kKDApOworICAgICAg
dmFyIGZyb21DbXAgPSBjbXAoZm91bmQuZnJvbSwgZnJvbSkgfHwgZXh0cmFMZWZ0KHNwLm1hcmtl
cikgLSBleHRyYUxlZnQobWFya2VyKTsKKyAgICAgIHZhciB0b0NtcCA9IGNtcChmb3VuZC50bywg
dG8pIHx8IGV4dHJhUmlnaHQoc3AubWFya2VyKSAtIGV4dHJhUmlnaHQobWFya2VyKTsKKyAgICAg
IGlmIChmcm9tQ21wID49IDAgJiYgdG9DbXAgPD0gMCB8fCBmcm9tQ21wIDw9IDAgJiYgdG9DbXAg
Pj0gMCkgY29udGludWU7CisgICAgICBpZiAoZnJvbUNtcCA8PSAwICYmIChjbXAoZm91bmQudG8s
IGZyb20pIHx8IGV4dHJhUmlnaHQoc3AubWFya2VyKSAtIGV4dHJhTGVmdChtYXJrZXIpKSA+IDAg
fHwKKyAgICAgICAgICBmcm9tQ21wID49IDAgJiYgKGNtcChmb3VuZC5mcm9tLCB0bykgfHwgZXh0
cmFMZWZ0KHNwLm1hcmtlcikgLSBleHRyYVJpZ2h0KG1hcmtlcikpIDwgMCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICB9CgotICBmdW5jdGlvbiB2aXN1YWxMaW5lKGRvYywgbGluZSkg
eworICAvLyBBIHZpc3VhbCBsaW5lIGlzIGEgbGluZSBhcyBkcmF3biBvbiB0aGUgc2NyZWVuLiBG
b2xkaW5nLCBmb3IKKyAgLy8gZXhhbXBsZSwgY2FuIGNhdXNlIG11bHRpcGxlIGxvZ2ljYWwgbGlu
ZXMgdG8gYXBwZWFyIG9uIHRoZSBzYW1lCisgIC8vIHZpc3VhbCBsaW5lLiBUaGlzIGZpbmRzIHRo
ZSBzdGFydCBvZiB0aGUgdmlzdWFsIGxpbmUgdGhhdCB0aGUKKyAgLy8gZ2l2ZW4gbGluZSBpcyBw
YXJ0IG9mICh1c3VhbGx5IHRoYXQgaXMgdGhlIGxpbmUgaXRzZWxmKS4KKyAgZnVuY3Rpb24gdmlz
dWFsTGluZShsaW5lKSB7CiAgICAgdmFyIG1lcmdlZDsKICAgICB3aGlsZSAobWVyZ2VkID0gY29s
bGFwc2VkU3BhbkF0U3RhcnQobGluZSkpCi0gICAgICBsaW5lID0gZ2V0TGluZShkb2MsIG1lcmdl
ZC5maW5kKCkuZnJvbS5saW5lKTsKKyAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgtMSwgdHJ1ZSku
bGluZTsKICAgICByZXR1cm4gbGluZTsKICAgfQoKKyAgLy8gUmV0dXJucyBhbiBhcnJheSBvZiBs
b2dpY2FsIGxpbmVzIHRoYXQgY29udGludWUgdGhlIHZpc3VhbCBsaW5lCisgIC8vIHN0YXJ0ZWQg
YnkgdGhlIGFyZ3VtZW50LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG5vIHN1Y2ggbGluZXMu
CisgIGZ1bmN0aW9uIHZpc3VhbExpbmVDb250aW51ZWQobGluZSkgeworICAgIHZhciBtZXJnZWQs
IGxpbmVzOworICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkpIHsK
KyAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lOworICAgICAgKGxpbmVzIHx8
IChsaW5lcyA9IFtdKSkucHVzaChsaW5lKTsKKyAgICB9CisgICAgcmV0dXJuIGxpbmVzOworICB9
CisKKyAgLy8gR2V0IHRoZSBsaW5lIG51bWJlciBvZiB0aGUgc3RhcnQgb2YgdGhlIHZpc3VhbCBs
aW5lIHRoYXQgdGhlCisgIC8vIGdpdmVuIGxpbmUgbnVtYmVyIGlzIHBhcnQgb2YuCisgIGZ1bmN0
aW9uIHZpc3VhbExpbmVObyhkb2MsIGxpbmVOKSB7CisgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRv
YywgbGluZU4pLCB2aXMgPSB2aXN1YWxMaW5lKGxpbmUpOworICAgIGlmIChsaW5lID09IHZpcykg
cmV0dXJuIGxpbmVOOworICAgIHJldHVybiBsaW5lTm8odmlzKTsKKyAgfQorICAvLyBHZXQgdGhl
IGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgbmV4dCB2aXN1YWwgbGluZSBhZnRlcgor
ICAvLyB0aGUgZ2l2ZW4gbGluZS4KKyAgZnVuY3Rpb24gdmlzdWFsTGluZUVuZE5vKGRvYywgbGlu
ZU4pIHsKKyAgICBpZiAobGluZU4gPiBkb2MubGFzdExpbmUoKSkgcmV0dXJuIGxpbmVOOworICAg
IHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGxpbmVOKSwgbWVyZ2VkOworICAgIGlmICghbGluZUlz
SGlkZGVuKGRvYywgbGluZSkpIHJldHVybiBsaW5lTjsKKyAgICB3aGlsZSAobWVyZ2VkID0gY29s
bGFwc2VkU3BhbkF0RW5kKGxpbmUpKQorICAgICAgbGluZSA9IG1lcmdlZC5maW5kKDEsIHRydWUp
LmxpbmU7CisgICAgcmV0dXJuIGxpbmVObyhsaW5lKSArIDE7CisgIH0KKworICAvLyBDb21wdXRl
IHdoZXRoZXIgYSBsaW5lIGlzIGhpZGRlbi4gTGluZXMgY291bnQgYXMgaGlkZGVuIHdoZW4gdGhl
eQorICAvLyBhcmUgcGFydCBvZiBhIHZpc3VhbCBsaW5lIHRoYXQgc3RhcnRzIHdpdGggYW5vdGhl
ciBsaW5lLCBvciB3aGVuCisgIC8vIHRoZXkgYXJlIGVudGlyZWx5IGNvdmVyZWQgYnkgY29sbGFw
c2VkLCBub24td2lkZ2V0IHNwYW4uCiAgIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbihkb2MsIGxpbmUp
IHsKICAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFuczsK
ICAgICBpZiAoc3BzKSBmb3IgKHZhciBzcCwgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHsK
ICAgICAgIHNwID0gc3BzW2ldOwogICAgICAgaWYgKCFzcC5tYXJrZXIuY29sbGFwc2VkKSBjb250
aW51ZTsKICAgICAgIGlmIChzcC5mcm9tID09IG51bGwpIHJldHVybiB0cnVlOwotICAgICAgaWYg
KHNwLm1hcmtlci5yZXBsYWNlZFdpdGgpIGNvbnRpbnVlOworICAgICAgaWYgKHNwLm1hcmtlci53
aWRnZXROb2RlKSBjb250aW51ZTsKICAgICAgIGlmIChzcC5mcm9tID09IDAgJiYgc3AubWFya2Vy
LmluY2x1c2l2ZUxlZnQgJiYgbGluZUlzSGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgfQogICBmdW5jdGlvbiBsaW5lSXNIaWRkZW5Jbm5l
cihkb2MsIGxpbmUsIHNwYW4pIHsKICAgICBpZiAoc3Bhbi50byA9PSBudWxsKSB7Ci0gICAgICB2
YXIgZW5kID0gc3Bhbi5tYXJrZXIuZmluZCgpLnRvLCBlbmRMaW5lID0gZ2V0TGluZShkb2MsIGVu
ZC5saW5lKTsKLSAgICAgIHJldHVybiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGVuZExpbmUsIGdl
dE1hcmtlZFNwYW5Gb3IoZW5kTGluZS5tYXJrZWRTcGFucywgc3Bhbi5tYXJrZXIpKTsKKyAgICAg
IHZhciBlbmQgPSBzcGFuLm1hcmtlci5maW5kKDEsIHRydWUpOworICAgICAgcmV0dXJuIGxpbmVJ
c0hpZGRlbklubmVyKGRvYywgZW5kLmxpbmUsIGdldE1hcmtlZFNwYW5Gb3IoZW5kLmxpbmUubWFy
a2VkU3BhbnMsIHNwYW4ubWFya2VyKSk7CiAgICAgfQogICAgIGlmIChzcGFuLm1hcmtlci5pbmNs
dXNpdmVSaWdodCAmJiBzcGFuLnRvID09IGxpbmUudGV4dC5sZW5ndGgpCiAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBmb3IgKHZhciBzcCwgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0
aDsgKytpKSB7CiAgICAgICBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV07Ci0gICAgICBpZiAoc3Au
bWFya2VyLmNvbGxhcHNlZCAmJiAhc3AubWFya2VyLnJlcGxhY2VkV2l0aCAmJiBzcC5mcm9tID09
IHNwYW4udG8gJiYKKyAgICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmICFzcC5tYXJrZXIu
d2lkZ2V0Tm9kZSAmJiBzcC5mcm9tID09IHNwYW4udG8gJiYKKyAgICAgICAgICAoc3AudG8gPT0g
bnVsbCB8fCBzcC50byAhPSBzcGFuLmZyb20pICYmCiAgICAgICAgICAgKHNwLm1hcmtlci5pbmNs
dXNpdmVMZWZ0IHx8IHNwYW4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSAmJgogICAgICAgICAgIGxp
bmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKSByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0K
Ci0gIGZ1bmN0aW9uIGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpIHsKLSAgICB2YXIgc3BhbnMgPSBs
aW5lLm1hcmtlZFNwYW5zOwotICAgIGlmICghc3BhbnMpIHJldHVybjsKLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKQotICAgICAgc3BhbnNbaV0ubWFya2VyLmRldGFj
aExpbmUobGluZSk7Ci0gICAgbGluZS5tYXJrZWRTcGFucyA9IG51bGw7Ci0gIH0KLQotICBmdW5j
dGlvbiBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBzcGFucykgewotICAgIGlmICghc3BhbnMpIHJl
dHVybjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKQotICAgICAg
c3BhbnNbaV0ubWFya2VyLmF0dGFjaExpbmUobGluZSk7Ci0gICAgbGluZS5tYXJrZWRTcGFucyA9
IHNwYW5zOwotICB9Ci0KICAgLy8gTElORSBXSURHRVRTCgorICAvLyBMaW5lIHdpZGdldHMgYXJl
IGJsb2NrIGVsZW1lbnRzIGRpc3BsYXllZCBhYm92ZSBvciBiZWxvdyBhIGxpbmUuCisKICAgdmFy
IExpbmVXaWRnZXQgPSBDb2RlTWlycm9yLkxpbmVXaWRnZXQgPSBmdW5jdGlvbihjbSwgbm9kZSwg
b3B0aW9ucykgewogICAgIGlmIChvcHRpb25zKSBmb3IgKHZhciBvcHQgaW4gb3B0aW9ucykgaWYg
KG9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0KSkKICAgICAgIHRoaXNbb3B0XSA9IG9wdGlvbnNb
b3B0XTsKQEAgLTQxOTgsMzggKzU0NDMsMzkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgdGhpcy5ub2RlID0gbm9kZTsKICAgfTsKICAgZXZlbnRNaXhpbihMaW5lV2lk
Z2V0KTsKLSAgZnVuY3Rpb24gd2lkZ2V0T3BlcmF0aW9uKGYpIHsKLSAgICByZXR1cm4gZnVuY3Rp
b24oKSB7Ci0gICAgICB2YXIgd2l0aE9wID0gIXRoaXMuY20uY3VyT3A7Ci0gICAgICBpZiAod2l0
aE9wKSBzdGFydE9wZXJhdGlvbih0aGlzLmNtKTsKLSAgICAgIHRyeSB7dmFyIHJlc3VsdCA9IGYu
YXBwbHkodGhpcywgYXJndW1lbnRzKTt9Ci0gICAgICBmaW5hbGx5IHtpZiAod2l0aE9wKSBlbmRP
cGVyYXRpb24odGhpcy5jbSk7fQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OworCisgIGZ1
bmN0aW9uIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIGRpZmYpIHsKKyAg
ICBpZiAoaGVpZ2h0QXRMaW5lKGxpbmUpIDwgKChjbS5jdXJPcCAmJiBjbS5jdXJPcC5zY3JvbGxU
b3ApIHx8IGNtLmRvYy5zY3JvbGxUb3ApKQorICAgICAgYWRkVG9TY3JvbGxQb3MoY20sIG51bGws
IGRpZmYpOwogICB9Ci0gIExpbmVXaWRnZXQucHJvdG90eXBlLmNsZWFyID0gd2lkZ2V0T3BlcmF0
aW9uKGZ1bmN0aW9uKCkgewotICAgIHZhciB3cyA9IHRoaXMubGluZS53aWRnZXRzLCBubyA9IGxp
bmVObyh0aGlzLmxpbmUpOworCisgIExpbmVXaWRnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rp
b24oKSB7CisgICAgdmFyIGNtID0gdGhpcy5jbSwgd3MgPSB0aGlzLmxpbmUud2lkZ2V0cywgbGlu
ZSA9IHRoaXMubGluZSwgbm8gPSBsaW5lTm8obGluZSk7CiAgICAgaWYgKG5vID09IG51bGwgfHwg
IXdzKSByZXR1cm47CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3cy5sZW5ndGg7ICsraSkgaWYg
KHdzW2ldID09IHRoaXMpIHdzLnNwbGljZShpLS0sIDEpOwotICAgIGlmICghd3MubGVuZ3RoKSB0
aGlzLmxpbmUud2lkZ2V0cyA9IG51bGw7Ci0gICAgdmFyIGFib3ZlVmlzaWJsZSA9IGhlaWdodEF0
TGluZSh0aGlzLmNtLCB0aGlzLmxpbmUpIDwgdGhpcy5jbS5kb2Muc2Nyb2xsVG9wOwotICAgIHVw
ZGF0ZUxpbmVIZWlnaHQodGhpcy5saW5lLCBNYXRoLm1heCgwLCB0aGlzLmxpbmUuaGVpZ2h0IC0g
d2lkZ2V0SGVpZ2h0KHRoaXMpKSk7Ci0gICAgaWYgKGFib3ZlVmlzaWJsZSkgYWRkVG9TY3JvbGxQ
b3ModGhpcy5jbSwgMCwgLXRoaXMuaGVpZ2h0KTsKLSAgICByZWdDaGFuZ2UodGhpcy5jbSwgbm8s
IG5vICsgMSk7Ci0gIH0pOwotICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jaGFuZ2VkID0gd2lkZ2V0
T3BlcmF0aW9uKGZ1bmN0aW9uKCkgewotICAgIHZhciBvbGRIID0gdGhpcy5oZWlnaHQ7CisgICAg
aWYgKCF3cy5sZW5ndGgpIGxpbmUud2lkZ2V0cyA9IG51bGw7CisgICAgdmFyIGhlaWdodCA9IHdp
ZGdldEhlaWdodCh0aGlzKTsKKyAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKKyAgICAgIGFk
anVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIC1oZWlnaHQpOworICAgICAgcmVn
TGluZUNoYW5nZShjbSwgbm8sICJ3aWRnZXQiKTsKKyAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGlu
ZSwgTWF0aC5tYXgoMCwgbGluZS5oZWlnaHQgLSBoZWlnaHQpKTsKKyAgICB9KTsKKyAgfTsKKyAg
TGluZVdpZGdldC5wcm90b3R5cGUuY2hhbmdlZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBvbGRI
ID0gdGhpcy5oZWlnaHQsIGNtID0gdGhpcy5jbSwgbGluZSA9IHRoaXMubGluZTsKICAgICB0aGlz
LmhlaWdodCA9IG51bGw7CiAgICAgdmFyIGRpZmYgPSB3aWRnZXRIZWlnaHQodGhpcykgLSBvbGRI
OwogICAgIGlmICghZGlmZikgcmV0dXJuOwotICAgIHVwZGF0ZUxpbmVIZWlnaHQodGhpcy5saW5l
LCB0aGlzLmxpbmUuaGVpZ2h0ICsgZGlmZik7Ci0gICAgdmFyIG5vID0gbGluZU5vKHRoaXMubGlu
ZSk7Ci0gICAgcmVnQ2hhbmdlKHRoaXMuY20sIG5vLCBubyArIDEpOwotICB9KTsKKyAgICBydW5J
bk9wKGNtLCBmdW5jdGlvbigpIHsKKyAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsK
KyAgICAgIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIGRpZmYpOworICAg
ICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhlaWdodCArIGRpZmYpOworICAgIH0pOwor
ICB9OwoKICAgZnVuY3Rpb24gd2lkZ2V0SGVpZ2h0KHdpZGdldCkgewogICAgIGlmICh3aWRnZXQu
aGVpZ2h0ICE9IG51bGwpIHJldHVybiB3aWRnZXQuaGVpZ2h0OwotICAgIGlmICghd2lkZ2V0Lm5v
ZGUucGFyZW50Tm9kZSB8fCB3aWRnZXQubm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlICE9IDEpCisg
ICAgaWYgKCFjb250YWlucyhkb2N1bWVudC5ib2R5LCB3aWRnZXQubm9kZSkpCiAgICAgICByZW1v
dmVDaGlsZHJlbkFuZEFkZCh3aWRnZXQuY20uZGlzcGxheS5tZWFzdXJlLCBlbHQoImRpdiIsIFt3
aWRnZXQubm9kZV0sIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmUiKSk7CiAgICAgcmV0dXJuIHdp
ZGdldC5oZWlnaHQgPSB3aWRnZXQubm9kZS5vZmZzZXRIZWlnaHQ7CiAgIH0KQEAgLTQyMzcsMTUg
KzU0ODMsMTYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9u
IGFkZExpbmVXaWRnZXQoY20sIGhhbmRsZSwgbm9kZSwgb3B0aW9ucykgewogICAgIHZhciB3aWRn
ZXQgPSBuZXcgTGluZVdpZGdldChjbSwgbm9kZSwgb3B0aW9ucyk7CiAgICAgaWYgKHdpZGdldC5u
b0hTY3JvbGwpIGNtLmRpc3BsYXkuYWxpZ25XaWRnZXRzID0gdHJ1ZTsKLSAgICBjaGFuZ2VMaW5l
KGNtLCBoYW5kbGUsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICBjaGFuZ2VMaW5lKGNtLCBoYW5kbGUs
ICJ3aWRnZXQiLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICB2YXIgd2lkZ2V0cyA9IGxpbmUud2lk
Z2V0cyB8fCAobGluZS53aWRnZXRzID0gW10pOwogICAgICAgaWYgKHdpZGdldC5pbnNlcnRBdCA9
PSBudWxsKSB3aWRnZXRzLnB1c2god2lkZ2V0KTsKICAgICAgIGVsc2Ugd2lkZ2V0cy5zcGxpY2Uo
TWF0aC5taW4od2lkZ2V0cy5sZW5ndGggLSAxLCBNYXRoLm1heCgwLCB3aWRnZXQuaW5zZXJ0QXQp
KSwgMCwgd2lkZ2V0KTsKICAgICAgIHdpZGdldC5saW5lID0gbGluZTsKLSAgICAgIGlmICghbGlu
ZUlzSGlkZGVuKGNtLmRvYywgbGluZSkgfHwgd2lkZ2V0LnNob3dJZkhpZGRlbikgewotICAgICAg
ICB2YXIgYWJvdmVWaXNpYmxlID0gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lKSA8IGNtLmRvYy5zY3Jv
bGxUb3A7CisgICAgICBpZiAoIWxpbmVJc0hpZGRlbihjbS5kb2MsIGxpbmUpKSB7CisgICAgICAg
IHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUobGluZSkgPCBjbS5kb2Muc2Nyb2xsVG9w
OwogICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgd2lkZ2V0SGVp
Z2h0KHdpZGdldCkpOwotICAgICAgICBpZiAoYWJvdmVWaXNpYmxlKSBhZGRUb1Njcm9sbFBvcyhj
bSwgMCwgd2lkZ2V0LmhlaWdodCk7CisgICAgICAgIGlmIChhYm92ZVZpc2libGUpIGFkZFRvU2Ny
b2xsUG9zKGNtLCBudWxsLCB3aWRnZXQuaGVpZ2h0KTsKKyAgICAgICAgY20uY3VyT3AuZm9yY2VV
cGRhdGUgPSB0cnVlOwogICAgICAgfQogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CkBAIC00
MjY0LDYgKzU1MTEsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZXZl
bnRNaXhpbihMaW5lKTsKICAgTGluZS5wcm90b3R5cGUubGluZU5vID0gZnVuY3Rpb24oKSB7IHJl
dHVybiBsaW5lTm8odGhpcyk7IH07CgorICAvLyBDaGFuZ2UgdGhlIGNvbnRlbnQgKHRleHQsIG1h
cmtlcnMpIG9mIGEgbGluZS4gQXV0b21hdGljYWxseQorICAvLyBpbnZhbGlkYXRlcyBjYWNoZWQg
aW5mb3JtYXRpb24gYW5kIHRyaWVzIHRvIHJlLWVzdGltYXRlIHRoZQorICAvLyBsaW5lJ3MgaGVp
Z2h0LgogICBmdW5jdGlvbiB1cGRhdGVMaW5lKGxpbmUsIHRleHQsIG1hcmtlZFNwYW5zLCBlc3Rp
bWF0ZUhlaWdodCkgewogICAgIGxpbmUudGV4dCA9IHRleHQ7CiAgICAgaWYgKGxpbmUuc3RhdGVB
ZnRlcikgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsKQEAgLTQyNzUsMjAgKzU1MjUsNDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGVzdEhlaWdodCAhPSBsaW5l
LmhlaWdodCkgdXBkYXRlTGluZUhlaWdodChsaW5lLCBlc3RIZWlnaHQpOwogICB9CgorICAvLyBE
ZXRhY2ggYSBsaW5lIGZyb20gdGhlIGRvY3VtZW50IHRyZWUgYW5kIGl0cyBtYXJrZXJzLgogICBm
dW5jdGlvbiBjbGVhblVwTGluZShsaW5lKSB7CiAgICAgbGluZS5wYXJlbnQgPSBudWxsOwogICAg
IGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpOwogICB9CgotICAvLyBSdW4gdGhlIGdpdmVuIG1vZGUn
cyBwYXJzZXIgb3ZlciBhIGxpbmUsIHVwZGF0ZSB0aGUgc3R5bGVzCi0gIC8vIGFycmF5LCB3aGlj
aCBjb250YWlucyBhbHRlcm5hdGluZyBmcmFnbWVudHMgb2YgdGV4dCBhbmQgQ1NTCi0gIC8vIGNs
YXNzZXMuCi0gIGZ1bmN0aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUsIHN0YXRlLCBmLCBmb3Jj
ZVRvRW5kKSB7CisgIGZ1bmN0aW9uIGV4dHJhY3RMaW5lQ2xhc3Nlcyh0eXBlLCBvdXRwdXQpIHsK
KyAgICBpZiAodHlwZSkgZm9yICg7OykgeworICAgICAgdmFyIGxpbmVDbGFzcyA9IHR5cGUubWF0
Y2goLyg/Ol58XHMrKWxpbmUtKGJhY2tncm91bmQtKT8oXFMrKS8pOworICAgICAgaWYgKCFsaW5l
Q2xhc3MpIGJyZWFrOworICAgICAgdHlwZSA9IHR5cGUuc2xpY2UoMCwgbGluZUNsYXNzLmluZGV4
KSArIHR5cGUuc2xpY2UobGluZUNsYXNzLmluZGV4ICsgbGluZUNsYXNzWzBdLmxlbmd0aCk7Cisg
ICAgICB2YXIgcHJvcCA9IGxpbmVDbGFzc1sxXSA/ICJiZ0NsYXNzIiA6ICJ0ZXh0Q2xhc3MiOwor
ICAgICAgaWYgKG91dHB1dFtwcm9wXSA9PSBudWxsKQorICAgICAgICBvdXRwdXRbcHJvcF0gPSBs
aW5lQ2xhc3NbMl07CisgICAgICBlbHNlIGlmICghKG5ldyBSZWdFeHAoIig/Ol58XHMpIiArIGxp
bmVDbGFzc1syXSArICIoPzokfFxzKSIpKS50ZXN0KG91dHB1dFtwcm9wXSkpCisgICAgICAgIG91
dHB1dFtwcm9wXSArPSAiICIgKyBsaW5lQ2xhc3NbMl07CisgICAgfQorICAgIHJldHVybiB0eXBl
OworICB9CisKKyAgZnVuY3Rpb24gY2FsbEJsYW5rTGluZShtb2RlLCBzdGF0ZSkgeworICAgIGlm
IChtb2RlLmJsYW5rTGluZSkgcmV0dXJuIG1vZGUuYmxhbmtMaW5lKHN0YXRlKTsKKyAgICBpZiAo
IW1vZGUuaW5uZXJNb2RlKSByZXR1cm47CisgICAgdmFyIGlubmVyID0gQ29kZU1pcnJvci5pbm5l
ck1vZGUobW9kZSwgc3RhdGUpOworICAgIGlmIChpbm5lci5tb2RlLmJsYW5rTGluZSkgcmV0dXJu
IGlubmVyLm1vZGUuYmxhbmtMaW5lKGlubmVyLnN0YXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIHJl
YWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgdmFyIHN0eWxlID0gbW9kZS50b2tl
bihzdHJlYW0sIHN0YXRlKTsKKyAgICBpZiAoc3RyZWFtLnBvcyA8PSBzdHJlYW0uc3RhcnQpCisg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIk1vZGUgIiArIG1vZGUubmFtZSArICIgZmFpbGVkIHRvIGFk
dmFuY2Ugc3RyZWFtLiIpOworICAgIHJldHVybiBzdHlsZTsKKyAgfQorCisgIC8vIFJ1biB0aGUg
Z2l2ZW4gbW9kZSdzIHBhcnNlciBvdmVyIGEgbGluZSwgY2FsbGluZyBmIGZvciBlYWNoIHRva2Vu
LgorICBmdW5jdGlvbiBydW5Nb2RlKGNtLCB0ZXh0LCBtb2RlLCBzdGF0ZSwgZiwgbGluZUNsYXNz
ZXMsIGZvcmNlVG9FbmQpIHsKICAgICB2YXIgZmxhdHRlblNwYW5zID0gbW9kZS5mbGF0dGVuU3Bh
bnM7CiAgICAgaWYgKGZsYXR0ZW5TcGFucyA9PSBudWxsKSBmbGF0dGVuU3BhbnMgPSBjbS5vcHRp
b25zLmZsYXR0ZW5TcGFuczsKICAgICB2YXIgY3VyU3RhcnQgPSAwLCBjdXJTdHlsZSA9IG51bGw7
CiAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0aW9ucy50YWJT
aXplKSwgc3R5bGU7Ci0gICAgaWYgKHRleHQgPT0gIiIgJiYgbW9kZS5ibGFua0xpbmUpIG1vZGUu
YmxhbmtMaW5lKHN0YXRlKTsKKyAgICBpZiAodGV4dCA9PSAiIikgZXh0cmFjdExpbmVDbGFzc2Vz
KGNhbGxCbGFua0xpbmUobW9kZSwgc3RhdGUpLCBsaW5lQ2xhc3Nlcyk7CiAgICAgd2hpbGUgKCFz
dHJlYW0uZW9sKCkpIHsKICAgICAgIGlmIChzdHJlYW0ucG9zID4gY20ub3B0aW9ucy5tYXhIaWdo
bGlnaHRMZW5ndGgpIHsKICAgICAgICAgZmxhdHRlblNwYW5zID0gZmFsc2U7CkBAIC00Mjk2LDcg
KzU1NzMsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHN0
cmVhbS5wb3MgPSB0ZXh0Lmxlbmd0aDsKICAgICAgICAgc3R5bGUgPSBudWxsOwogICAgICAgfSBl
bHNlIHsKLSAgICAgICAgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOworICAgICAg
ICBzdHlsZSA9IGV4dHJhY3RMaW5lQ2xhc3NlcyhyZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0
ZSksIGxpbmVDbGFzc2VzKTsKKyAgICAgIH0KKyAgICAgIGlmIChjbS5vcHRpb25zLmFkZE1vZGVD
bGFzcykgeworICAgICAgICB2YXIgbU5hbWUgPSBDb2RlTWlycm9yLmlubmVyTW9kZShtb2RlLCBz
dGF0ZSkubW9kZS5uYW1lOworICAgICAgICBpZiAobU5hbWUpIHN0eWxlID0gIm0tIiArIChzdHls
ZSA/IG1OYW1lICsgIiAiICsgc3R5bGUgOiBtTmFtZSk7CiAgICAgICB9CiAgICAgICBpZiAoIWZs
YXR0ZW5TcGFucyB8fCBjdXJTdHlsZSAhPSBzdHlsZSkgewogICAgICAgICBpZiAoY3VyU3RhcnQg
PCBzdHJlYW0uc3RhcnQpIGYoc3RyZWFtLnN0YXJ0LCBjdXJTdHlsZSk7CkBAIC00MzEyLDE0ICs1
NTkzLDE4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAgfQoK
KyAgLy8gQ29tcHV0ZSBhIHN0eWxlIGFycmF5IChhbiBhcnJheSBzdGFydGluZyB3aXRoIGEgbW9k
ZSBnZW5lcmF0aW9uCisgIC8vIC0tIGZvciBpbnZhbGlkYXRpb24gLS0gZm9sbG93ZWQgYnkgcGFp
cnMgb2YgZW5kIHBvc2l0aW9ucyBhbmQKKyAgLy8gc3R5bGUgc3RyaW5ncyksIHdoaWNoIGlzIHVz
ZWQgdG8gaGlnaGxpZ2h0IHRoZSB0b2tlbnMgb24gdGhlCisgIC8vIGxpbmUuCiAgIGZ1bmN0aW9u
IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRlLCBmb3JjZVRvRW5kKSB7CiAgICAgLy8gQSBz
dHlsZXMgYXJyYXkgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbnVtYmVyIGlkZW50aWZ5aW5nIHRoZQog
ICAgIC8vIG1vZGUvb3ZlcmxheXMgdGhhdCBpdCBpcyBiYXNlZCBvbiAoZm9yIGVhc3kgaW52YWxp
ZGF0aW9uKS4KLSAgICB2YXIgc3QgPSBbY20uc3RhdGUubW9kZUdlbl07CisgICAgdmFyIHN0ID0g
W2NtLnN0YXRlLm1vZGVHZW5dLCBsaW5lQ2xhc3NlcyA9IHt9OwogICAgIC8vIENvbXB1dGUgdGhl
IGJhc2UgYXJyYXkgb2Ygc3R5bGVzCiAgICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBjbS5kb2Mu
bW9kZSwgc3RhdGUsIGZ1bmN0aW9uKGVuZCwgc3R5bGUpIHsKICAgICAgIHN0LnB1c2goZW5kLCBz
dHlsZSk7Ci0gICAgfSwgZm9yY2VUb0VuZCk7CisgICAgfSwgbGluZUNsYXNzZXMsIGZvcmNlVG9F
bmQpOwoKICAgICAvLyBSdW4gb3ZlcmxheXMsIGFkanVzdCBzdHlsZSBhcnJheS4KICAgICBmb3Ig
KHZhciBvID0gMDsgbyA8IGNtLnN0YXRlLm92ZXJsYXlzLmxlbmd0aDsgKytvKSB7CkBAIC00MzQ0
LDk2ICs1NjI5LDk1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAg
ICAgICAgc3Rbc3RhcnQrMV0gPSBjdXIgPyBjdXIgKyAiICIgKyBzdHlsZSA6IHN0eWxlOwogICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgfSk7CisgICAgICB9LCBsaW5lQ2xhc3Nlcyk7CiAg
ICAgfQoKLSAgICByZXR1cm4gc3Q7CisgICAgcmV0dXJuIHtzdHlsZXM6IHN0LCBjbGFzc2VzOiBs
aW5lQ2xhc3Nlcy5iZ0NsYXNzIHx8IGxpbmVDbGFzc2VzLnRleHRDbGFzcyA/IGxpbmVDbGFzc2Vz
IDogbnVsbH07CiAgIH0KCiAgIGZ1bmN0aW9uIGdldExpbmVTdHlsZXMoY20sIGxpbmUpIHsKLSAg
ICBpZiAoIWxpbmUuc3R5bGVzIHx8IGxpbmUuc3R5bGVzWzBdICE9IGNtLnN0YXRlLm1vZGVHZW4p
Ci0gICAgICBsaW5lLnN0eWxlcyA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIGxpbmUuc3RhdGVB
ZnRlciA9IGdldFN0YXRlQmVmb3JlKGNtLCBsaW5lTm8obGluZSkpKTsKKyAgICBpZiAoIWxpbmUu
c3R5bGVzIHx8IGxpbmUuc3R5bGVzWzBdICE9IGNtLnN0YXRlLm1vZGVHZW4pIHsKKyAgICAgIHZh
ciByZXN1bHQgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBsaW5lLnN0YXRlQWZ0ZXIgPSBnZXRT
dGF0ZUJlZm9yZShjbSwgbGluZU5vKGxpbmUpKSk7CisgICAgICBsaW5lLnN0eWxlcyA9IHJlc3Vs
dC5zdHlsZXM7CisgICAgICBpZiAocmVzdWx0LmNsYXNzZXMpIGxpbmUuc3R5bGVDbGFzc2VzID0g
cmVzdWx0LmNsYXNzZXM7CisgICAgICBlbHNlIGlmIChsaW5lLnN0eWxlQ2xhc3NlcykgbGluZS5z
dHlsZUNsYXNzZXMgPSBudWxsOworICAgIH0KICAgICByZXR1cm4gbGluZS5zdHlsZXM7CiAgIH0K
CiAgIC8vIExpZ2h0d2VpZ2h0IGZvcm0gb2YgaGlnaGxpZ2h0IC0tIHByb2NlZWQgb3ZlciB0aGlz
IGxpbmUgYW5kCi0gIC8vIHVwZGF0ZSBzdGF0ZSwgYnV0IGRvbid0IHNhdmUgYSBzdHlsZSBhcnJh
eS4KKyAgLy8gdXBkYXRlIHN0YXRlLCBidXQgZG9uJ3Qgc2F2ZSBhIHN0eWxlIGFycmF5LiBVc2Vk
IGZvciBsaW5lcyB0aGF0CisgIC8vIGFyZW4ndCBjdXJyZW50bHkgdmlzaWJsZS4KICAgZnVuY3Rp
b24gcHJvY2Vzc0xpbmUoY20sIHRleHQsIHN0YXRlLCBzdGFydEF0KSB7CiAgICAgdmFyIG1vZGUg
PSBjbS5kb2MubW9kZTsKICAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBj
bS5vcHRpb25zLnRhYlNpemUpOwogICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3MgPSBzdGFy
dEF0IHx8IDA7Ci0gICAgaWYgKHRleHQgPT0gIiIgJiYgbW9kZS5ibGFua0xpbmUpIG1vZGUuYmxh
bmtMaW5lKHN0YXRlKTsKKyAgICBpZiAodGV4dCA9PSAiIikgY2FsbEJsYW5rTGluZShtb2RlLCBz
dGF0ZSk7CiAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLnBvcyA8PSBjbS5vcHRp
b25zLm1heEhpZ2hsaWdodExlbmd0aCkgewotICAgICAgbW9kZS50b2tlbihzdHJlYW0sIHN0YXRl
KTsKKyAgICAgIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlKTsKICAgICAgIHN0cmVhbS5z
dGFydCA9IHN0cmVhbS5wb3M7CiAgICAgfQogICB9CgotICB2YXIgc3R5bGVUb0NsYXNzQ2FjaGUg
PSB7fTsKLSAgZnVuY3Rpb24gaW50ZXJwcmV0VG9rZW5TdHlsZShzdHlsZSwgYnVpbGRlcikgewot
ICAgIGlmICghc3R5bGUpIHJldHVybiBudWxsOwotICAgIGZvciAoOzspIHsKLSAgICAgIHZhciBs
aW5lQ2xhc3MgPSBzdHlsZS5tYXRjaCgvKD86XnxccylsaW5lLShiYWNrZ3JvdW5kLSk/KFxTKykv
KTsKLSAgICAgIGlmICghbGluZUNsYXNzKSBicmVhazsKLSAgICAgIHN0eWxlID0gc3R5bGUuc2xp
Y2UoMCwgbGluZUNsYXNzLmluZGV4KSArIHN0eWxlLnNsaWNlKGxpbmVDbGFzcy5pbmRleCArIGxp
bmVDbGFzc1swXS5sZW5ndGgpOwotICAgICAgdmFyIHByb3AgPSBsaW5lQ2xhc3NbMV0gPyAiYmdD
bGFzcyIgOiAidGV4dENsYXNzIjsKLSAgICAgIGlmIChidWlsZGVyW3Byb3BdID09IG51bGwpCi0g
ICAgICAgIGJ1aWxkZXJbcHJvcF0gPSBsaW5lQ2xhc3NbMl07Ci0gICAgICBlbHNlIGlmICghKG5l
dyBSZWdFeHAoIig/Ol58XHMpIiArIGxpbmVDbGFzc1syXSArICIoPzokfFxzKSIpKS50ZXN0KGJ1
aWxkZXJbcHJvcF0pKQotICAgICAgICBidWlsZGVyW3Byb3BdICs9ICIgIiArIGxpbmVDbGFzc1sy
XTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0eWxlVG9DbGFzc0NhY2hlW3N0eWxlXSB8fAotICAgICAg
KHN0eWxlVG9DbGFzc0NhY2hlW3N0eWxlXSA9ICJjbS0iICsgc3R5bGUucmVwbGFjZSgvICsvZywg
IiBjbS0iKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBidWlsZExpbmVDb250ZW50KGNtLCByZWFsTGlu
ZSwgbWVhc3VyZSwgY29weVdpZGdldHMpIHsKLSAgICB2YXIgbWVyZ2VkLCBsaW5lID0gcmVhbExp
bmUsIGVtcHR5ID0gdHJ1ZTsKLSAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3Rh
cnQobGluZSkpCi0gICAgICBsaW5lID0gZ2V0TGluZShjbS5kb2MsIG1lcmdlZC5maW5kKCkuZnJv
bS5saW5lKTsKLQotICAgIHZhciBidWlsZGVyID0ge3ByZTogZWx0KCJwcmUiKSwgY29sOiAwLCBw
b3M6IDAsCi0gICAgICAgICAgICAgICAgICAgbWVhc3VyZTogbnVsbCwgbWVhc3VyZWRTb21ldGhp
bmc6IGZhbHNlLCBjbTogY20sCi0gICAgICAgICAgICAgICAgICAgY29weVdpZGdldHM6IGNvcHlX
aWRnZXRzfTsKLQotICAgIGRvIHsKLSAgICAgIGlmIChsaW5lLnRleHQpIGVtcHR5ID0gZmFsc2U7
Ci0gICAgICBidWlsZGVyLm1lYXN1cmUgPSBsaW5lID09IHJlYWxMaW5lICYmIG1lYXN1cmU7Cisg
IC8vIENvbnZlcnQgYSBzdHlsZSBhcyByZXR1cm5lZCBieSBhIG1vZGUgKGVpdGhlciBudWxsLCBv
ciBhIHN0cmluZworICAvLyBjb250YWluaW5nIG9uZSBvciBtb3JlIHN0eWxlcykgdG8gYSBDU1Mg
c3R5bGUuIFRoaXMgaXMgY2FjaGVkLAorICAvLyBhbmQgYWxzbyBsb29rcyBmb3IgbGluZS13aWRl
IHN0eWxlcy4KKyAgdmFyIHN0eWxlVG9DbGFzc0NhY2hlID0ge30sIHN0eWxlVG9DbGFzc0NhY2hl
V2l0aE1vZGUgPSB7fTsKKyAgZnVuY3Rpb24gaW50ZXJwcmV0VG9rZW5TdHlsZShzdHlsZSwgb3B0
aW9ucykgeworICAgIGlmICghc3R5bGUgfHwgL15ccyokLy50ZXN0KHN0eWxlKSkgcmV0dXJuIG51
bGw7CisgICAgdmFyIGNhY2hlID0gb3B0aW9ucy5hZGRNb2RlQ2xhc3MgPyBzdHlsZVRvQ2xhc3ND
YWNoZVdpdGhNb2RlIDogc3R5bGVUb0NsYXNzQ2FjaGU7CisgICAgcmV0dXJuIGNhY2hlW3N0eWxl
XSB8fAorICAgICAgKGNhY2hlW3N0eWxlXSA9IHN0eWxlLnJlcGxhY2UoL1xTKy9nLCAiY20tJCYi
KSk7CisgIH0KKworICAvLyBSZW5kZXIgdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4
dCBvZiBhIGxpbmUuIEFsc28gYnVpbGRzCisgIC8vIHVwIGEgJ2xpbmUgbWFwJywgd2hpY2ggcG9p
bnRzIGF0IHRoZSBET00gbm9kZXMgdGhhdCByZXByZXNlbnQKKyAgLy8gc3BlY2lmaWMgc3RyZXRj
aGVzIG9mIHRleHQsIGFuZCBpcyB1c2VkIGJ5IHRoZSBtZWFzdXJpbmcgY29kZS4KKyAgLy8gVGhl
IHJldHVybmVkIG9iamVjdCBjb250YWlucyB0aGUgRE9NIG5vZGUsIHRoaXMgbWFwLCBhbmQKKyAg
Ly8gaW5mb3JtYXRpb24gYWJvdXQgbGluZS13aWRlIHN0eWxlcyB0aGF0IHdlcmUgc2V0IGJ5IHRo
ZSBtb2RlLgorICBmdW5jdGlvbiBidWlsZExpbmVDb250ZW50KGNtLCBsaW5lVmlldykgeworICAg
IC8vIFRoZSBwYWRkaW5nLXJpZ2h0IGZvcmNlcyB0aGUgZWxlbWVudCB0byBoYXZlIGEgJ2JvcmRl
cicsIHdoaWNoCisgICAgLy8gaXMgbmVlZGVkIG9uIFdlYmtpdCB0byBiZSBhYmxlIHRvIGdldCBs
aW5lLWxldmVsIGJvdW5kaW5nCisgICAgLy8gcmVjdGFuZ2xlcyBmb3IgaXQgKGluIG1lYXN1cmVD
aGFyKS4KKyAgICB2YXIgY29udGVudCA9IGVsdCgic3BhbiIsIG51bGwsIG51bGwsIHdlYmtpdCA/
ICJwYWRkaW5nLXJpZ2h0OiAuMXB4IiA6IG51bGwpOworICAgIHZhciBidWlsZGVyID0ge3ByZTog
ZWx0KCJwcmUiLCBbY29udGVudF0pLCBjb250ZW50OiBjb250ZW50LCBjb2w6IDAsIHBvczogMCwg
Y206IGNtfTsKKyAgICBsaW5lVmlldy5tZWFzdXJlID0ge307CisKKyAgICAvLyBJdGVyYXRlIG92
ZXIgdGhlIGxvZ2ljYWwgbGluZXMgdGhhdCBtYWtlIHVwIHRoaXMgdmlzdWFsIGxpbmUuCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPD0gKGxpbmVWaWV3LnJlc3QgPyBsaW5lVmlldy5yZXN0Lmxlbmd0
aCA6IDApOyBpKyspIHsKKyAgICAgIHZhciBsaW5lID0gaSA/IGxpbmVWaWV3LnJlc3RbaSAtIDFd
IDogbGluZVZpZXcubGluZSwgb3JkZXI7CiAgICAgICBidWlsZGVyLnBvcyA9IDA7Ci0gICAgICBi
dWlsZGVyLmFkZFRva2VuID0gYnVpbGRlci5tZWFzdXJlID8gYnVpbGRUb2tlbk1lYXN1cmUgOiBi
dWlsZFRva2VuOworICAgICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW47CisgICAgICAv
LyBPcHRpb25hbGx5IHdpcmUgaW4gc29tZSBoYWNrcyBpbnRvIHRoZSB0b2tlbi1yZW5kZXJpbmcK
KyAgICAgIC8vIGFsZ29yaXRobSwgdG8gZGVhbCB3aXRoIGJyb3dzZXIgcXVpcmtzLgogICAgICAg
aWYgKChpZSB8fCB3ZWJraXQpICYmIGNtLmdldE9wdGlvbigibGluZVdyYXBwaW5nIikpCiAgICAg
ICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZFRva2VuU3BsaXRTcGFjZXMoYnVpbGRlci5hZGRU
b2tlbik7Ci0gICAgICB2YXIgbmV4dCA9IGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIs
IGdldExpbmVTdHlsZXMoY20sIGxpbmUpKTsKLSAgICAgIGlmIChtZWFzdXJlICYmIGxpbmUgPT0g
cmVhbExpbmUgJiYgIWJ1aWxkZXIubWVhc3VyZWRTb21ldGhpbmcpIHsKLSAgICAgICAgbWVhc3Vy
ZVswXSA9IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxh
eS5tZWFzdXJlKSk7Ci0gICAgICAgIGJ1aWxkZXIubWVhc3VyZWRTb21ldGhpbmcgPSB0cnVlOwot
ICAgICAgfQotICAgICAgaWYgKG5leHQpIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbmV4dC50by5s
aW5lKTsKLSAgICB9IHdoaWxlIChuZXh0KTsKLQotICAgIGlmIChtZWFzdXJlICYmICFidWlsZGVy
Lm1lYXN1cmVkU29tZXRoaW5nICYmICFtZWFzdXJlWzBdKQotICAgICAgbWVhc3VyZVswXSA9IGJ1
aWxkZXIucHJlLmFwcGVuZENoaWxkKGVtcHR5ID8gZWx0KCJzcGFuIiwgIlx1MDBhMCIpIDogemVy
b1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKTsKLSAgICBpZiAoIWJ1aWxkZXIucHJl
LmZpcnN0Q2hpbGQgJiYgIWxpbmVJc0hpZGRlbihjbS5kb2MsIHJlYWxMaW5lKSkKLSAgICAgIGJ1
aWxkZXIucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTAwYTAiKSk7
Ci0KLSAgICB2YXIgb3JkZXI7Ci0gICAgLy8gV29yayBhcm91bmQgcHJvYmxlbSB3aXRoIHRoZSBy
ZXBvcnRlZCBkaW1lbnNpb25zIG9mIHNpbmdsZS1jaGFyCi0gICAgLy8gZGlyZWN0aW9uIHNwYW5z
IG9uIElFIChpc3N1ZSAjMTEyOSkuIFNlZSBhbHNvIHRoZSBjb21tZW50IGluCi0gICAgLy8gY3Vy
c29yQ29vcmRzLgotICAgIGlmIChtZWFzdXJlICYmIChpZSB8fCBpZV9ndDEwKSAmJiAob3JkZXIg
PSBnZXRPcmRlcihsaW5lKSkpIHsKLSAgICAgIHZhciBsID0gb3JkZXIubGVuZ3RoIC0gMTsKLSAg
ICAgIGlmIChvcmRlcltsXS5mcm9tID09IG9yZGVyW2xdLnRvKSAtLWw7Ci0gICAgICB2YXIgbGFz
dCA9IG9yZGVyW2xdLCBwcmV2ID0gb3JkZXJbbCAtIDFdOwotICAgICAgaWYgKGxhc3QuZnJvbSAr
IDEgPT0gbGFzdC50byAmJiBwcmV2ICYmIGxhc3QubGV2ZWwgPCBwcmV2LmxldmVsKSB7Ci0gICAg
ICAgIHZhciBzcGFuID0gbWVhc3VyZVtidWlsZGVyLnBvcyAtIDFdOwotICAgICAgICBpZiAoc3Bh
bikgc3Bhbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzcGFuLm1lYXN1cmVSaWdodCA9IHplcm9X
aWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5uZXh0U2libGluZyk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgdmFyIHRleHRDbGFzcyA9IGJ1aWxkZXIudGV4dENsYXNzID8gYnVpbGRlci50ZXh0
Q2xhc3MgKyAiICIgKyAocmVhbExpbmUudGV4dENsYXNzIHx8ICIiKSA6IHJlYWxMaW5lLnRleHRD
bGFzczsKLSAgICBpZiAodGV4dENsYXNzKSBidWlsZGVyLnByZS5jbGFzc05hbWUgPSB0ZXh0Q2xh
c3M7Ci0KLSAgICBzaWduYWwoY20sICJyZW5kZXJMaW5lIiwgY20sIHJlYWxMaW5lLCBidWlsZGVy
LnByZSk7CisgICAgICBpZiAoaGFzQmFkQmlkaVJlY3RzKGNtLmRpc3BsYXkubWVhc3VyZSkgJiYg
KG9yZGVyID0gZ2V0T3JkZXIobGluZSkpKQorICAgICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVp
bGRUb2tlbkJhZEJpZGkoYnVpbGRlci5hZGRUb2tlbiwgb3JkZXIpOworICAgICAgYnVpbGRlci5t
YXAgPSBbXTsKKyAgICAgIGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIsIGdldExpbmVT
dHlsZXMoY20sIGxpbmUpKTsKKyAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3NlcykgeworICAgICAg
ICBpZiAobGluZS5zdHlsZUNsYXNzZXMuYmdDbGFzcykKKyAgICAgICAgICBidWlsZGVyLmJnQ2xh
c3MgPSBqb2luQ2xhc3NlcyhsaW5lLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzLCBidWlsZGVyLmJnQ2xh
c3MgfHwgIiIpOworICAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMudGV4dENsYXNzKQorICAg
ICAgICAgIGJ1aWxkZXIudGV4dENsYXNzID0gam9pbkNsYXNzZXMobGluZS5zdHlsZUNsYXNzZXMu
dGV4dENsYXNzLCBidWlsZGVyLnRleHRDbGFzcyB8fCAiIik7CisgICAgICB9CisKKyAgICAgIC8v
IEVuc3VyZSBhdCBsZWFzdCBhIHNpbmdsZSBub2RlIGlzIHByZXNlbnQsIGZvciBtZWFzdXJpbmcu
CisgICAgICBpZiAoYnVpbGRlci5tYXAubGVuZ3RoID09IDApCisgICAgICAgIGJ1aWxkZXIubWFw
LnB1c2goMCwgMCwgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHplcm9XaWR0aEVsZW1lbnQo
Y20uZGlzcGxheS5tZWFzdXJlKSkpOworCisgICAgICAvLyBTdG9yZSB0aGUgbWFwIGFuZCBhIGNh
Y2hlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgbG9naWNhbCBsaW5lCisgICAgICBpZiAoaSA9PSAw
KSB7CisgICAgICAgIGxpbmVWaWV3Lm1lYXN1cmUubWFwID0gYnVpbGRlci5tYXA7CisgICAgICAg
IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGUgPSB7fTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIChs
aW5lVmlldy5tZWFzdXJlLm1hcHMgfHwgKGxpbmVWaWV3Lm1lYXN1cmUubWFwcyA9IFtdKSkucHVz
aChidWlsZGVyLm1hcCk7CisgICAgICAgIChsaW5lVmlldy5tZWFzdXJlLmNhY2hlcyB8fCAobGlu
ZVZpZXcubWVhc3VyZS5jYWNoZXMgPSBbXSkpLnB1c2goe30pOworICAgICAgfQorICAgIH0KKwor
ICAgIHNpZ25hbChjbSwgInJlbmRlckxpbmUiLCBjbSwgbGluZVZpZXcubGluZSwgYnVpbGRlci5w
cmUpOwogICAgIHJldHVybiBidWlsZGVyOwogICB9CgpAQCAtNDQ0MywxMiArNTcyNywxNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gdG9rZW47CiAgIH0K
CisgIC8vIEJ1aWxkIHVwIHRoZSBET00gcmVwcmVzZW50YXRpb24gZm9yIGEgc2luZ2xlIHRva2Vu
LCBhbmQgYWRkIGl0IHRvCisgIC8vIHRoZSBsaW5lIG1hcC4gVGFrZXMgY2FyZSB0byByZW5kZXIg
c3BlY2lhbCBjaGFyYWN0ZXJzIHNlcGFyYXRlbHkuCiAgIGZ1bmN0aW9uIGJ1aWxkVG9rZW4oYnVp
bGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSkgewogICAgIGlm
ICghdGV4dCkgcmV0dXJuOwotICAgIHZhciBzcGVjaWFsID0gYnVpbGRlci5jbS5vcHRpb25zLnNw
ZWNpYWxDaGFyczsKKyAgICB2YXIgc3BlY2lhbCA9IGJ1aWxkZXIuY20ub3B0aW9ucy5zcGVjaWFs
Q2hhcnMsIG11c3RXcmFwID0gZmFsc2U7CiAgICAgaWYgKCFzcGVjaWFsLnRlc3QodGV4dCkpIHsK
ICAgICAgIGJ1aWxkZXIuY29sICs9IHRleHQubGVuZ3RoOwogICAgICAgdmFyIGNvbnRlbnQgPSBk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTsKKyAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVp
bGRlci5wb3MsIGJ1aWxkZXIucG9zICsgdGV4dC5sZW5ndGgsIGNvbnRlbnQpOworICAgICAgaWYg
KGllX3VwdG84KSBtdXN0V3JhcCA9IHRydWU7CisgICAgICBidWlsZGVyLnBvcyArPSB0ZXh0Lmxl
bmd0aDsKICAgICB9IGVsc2UgewogICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVE
b2N1bWVudEZyYWdtZW50KCksIHBvcyA9IDA7CiAgICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNDQ1
Niw1NyArNTc0NSwzOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
ICAgdmFyIG0gPSBzcGVjaWFsLmV4ZWModGV4dCk7CiAgICAgICAgIHZhciBza2lwcGVkID0gbSA/
IG0uaW5kZXggLSBwb3MgOiB0ZXh0Lmxlbmd0aCAtIHBvczsKICAgICAgICAgaWYgKHNraXBwZWQp
IHsKLSAgICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHRleHQuc2xpY2UocG9zLCBwb3MgKyBza2lwcGVkKSkpOworICAgICAgICAgIHZhciB0eHQgPSBk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0LnNsaWNlKHBvcywgcG9zICsgc2tpcHBlZCkpOwor
ICAgICAgICAgIGlmIChpZV91cHRvOCkgY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBb
dHh0XSkpOworICAgICAgICAgIGVsc2UgY29udGVudC5hcHBlbmRDaGlsZCh0eHQpOworICAgICAg
ICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgc2tpcHBlZCwg
dHh0KTsKICAgICAgICAgICBidWlsZGVyLmNvbCArPSBza2lwcGVkOworICAgICAgICAgIGJ1aWxk
ZXIucG9zICs9IHNraXBwZWQ7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtKSBicmVhazsKICAg
ICAgICAgcG9zICs9IHNraXBwZWQgKyAxOwogICAgICAgICBpZiAobVswXSA9PSAiXHQiKSB7CiAg
ICAgICAgICAgdmFyIHRhYlNpemUgPSBidWlsZGVyLmNtLm9wdGlvbnMudGFiU2l6ZSwgdGFiV2lk
dGggPSB0YWJTaXplIC0gYnVpbGRlci5jb2wgJSB0YWJTaXplOwotICAgICAgICAgIGNvbnRlbnQu
YXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgc3BhY2VTdHIodGFiV2lkdGgpLCAiY20tdGFiIikpOwor
ICAgICAgICAgIHZhciB0eHQgPSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIHNwYWNl
U3RyKHRhYldpZHRoKSwgImNtLXRhYiIpKTsKICAgICAgICAgICBidWlsZGVyLmNvbCArPSB0YWJX
aWR0aDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB2YXIgdG9rZW4gPSBidWlsZGVyLmNt
Lm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcihtWzBdKTsKLSAgICAgICAgICBjb250ZW50
LmFwcGVuZENoaWxkKHRva2VuKTsKKyAgICAgICAgICB2YXIgdHh0ID0gYnVpbGRlci5jbS5vcHRp
b25zLnNwZWNpYWxDaGFyUGxhY2Vob2xkZXIobVswXSk7CisgICAgICAgICAgaWYgKGllX3VwdG84
KSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIFt0eHRdKSk7CisgICAgICAgICAgZWxz
ZSBjb250ZW50LmFwcGVuZENoaWxkKHR4dCk7CiAgICAgICAgICAgYnVpbGRlci5jb2wgKz0gMTsK
ICAgICAgICAgfQorICAgICAgICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVy
LnBvcyArIDEsIHR4dCk7CisgICAgICAgIGJ1aWxkZXIucG9zKys7CiAgICAgICB9CiAgICAgfQot
ICAgIGlmIChzdHlsZSB8fCBzdGFydFN0eWxlIHx8IGVuZFN0eWxlIHx8IGJ1aWxkZXIubWVhc3Vy
ZSkgeworICAgIGlmIChzdHlsZSB8fCBzdGFydFN0eWxlIHx8IGVuZFN0eWxlIHx8IG11c3RXcmFw
KSB7CiAgICAgICB2YXIgZnVsbFN0eWxlID0gc3R5bGUgfHwgIiI7CiAgICAgICBpZiAoc3RhcnRT
dHlsZSkgZnVsbFN0eWxlICs9IHN0YXJ0U3R5bGU7CiAgICAgICBpZiAoZW5kU3R5bGUpIGZ1bGxT
dHlsZSArPSBlbmRTdHlsZTsKICAgICAgIHZhciB0b2tlbiA9IGVsdCgic3BhbiIsIFtjb250ZW50
XSwgZnVsbFN0eWxlKTsKICAgICAgIGlmICh0aXRsZSkgdG9rZW4udGl0bGUgPSB0aXRsZTsKLSAg
ICAgIHJldHVybiBidWlsZGVyLnByZS5hcHBlbmRDaGlsZCh0b2tlbik7Ci0gICAgfQotICAgIGJ1
aWxkZXIucHJlLmFwcGVuZENoaWxkKGNvbnRlbnQpOwotICB9Ci0KLSAgZnVuY3Rpb24gYnVpbGRU
b2tlbk1lYXN1cmUoYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlKSB7
Ci0gICAgdmFyIHdyYXBwaW5nID0gYnVpbGRlci5jbS5vcHRpb25zLmxpbmVXcmFwcGluZzsKLSAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBjaCA9
IHRleHQuY2hhckF0KGkpLCBzdGFydCA9IGkgPT0gMDsKLSAgICAgIGlmIChjaCA+PSAiXHVkODAw
IiAmJiBjaCA8ICJcdWRiZmYiICYmIGkgPCB0ZXh0Lmxlbmd0aCAtIDEpIHsKLSAgICAgICAgY2gg
PSB0ZXh0LnNsaWNlKGksIGkgKyAyKTsKLSAgICAgICAgKytpOwotICAgICAgfSBlbHNlIGlmIChp
ICYmIHdyYXBwaW5nICYmIHNwYW5BZmZlY3RzV3JhcHBpbmcodGV4dCwgaSkpIHsKLSAgICAgICAg
YnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZWx0KCJ3YnIiKSk7Ci0gICAgICB9Ci0gICAgICB2YXIg
b2xkID0gYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXTsKLSAgICAgIHZhciBzcGFuID0gYnVp
bGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXSA9Ci0gICAgICAgIGJ1aWxkVG9rZW4oYnVpbGRlciwg
Y2gsIHN0eWxlLAotICAgICAgICAgICAgICAgICAgIHN0YXJ0ICYmIHN0YXJ0U3R5bGUsIGkgPT0g
dGV4dC5sZW5ndGggLSAxICYmIGVuZFN0eWxlKTsKLSAgICAgIGlmIChvbGQpIHNwYW4ubGVmdFNp
ZGUgPSBvbGQubGVmdFNpZGUgfHwgb2xkOwotICAgICAgLy8gSW4gSUUgc2luZ2xlLXNwYWNlIG5v
ZGVzIHdyYXAgZGlmZmVyZW50bHkgdGhhbiBzcGFjZXMKLSAgICAgIC8vIGVtYmVkZGVkIGluIGxh
cmdlciB0ZXh0IG5vZGVzLCBleGNlcHQgd2hlbiBzZXQgdG8KLSAgICAgIC8vIHdoaXRlLXNwYWNl
OiBub3JtYWwgKGlzc3VlICMxMjY4KS4KLSAgICAgIGlmIChpZSAmJiB3cmFwcGluZyAmJiBjaCA9
PSAiICIgJiYgaSAmJiAhL1xzLy50ZXN0KHRleHQuY2hhckF0KGkgLSAxKSkgJiYKLSAgICAgICAg
ICBpIDwgdGV4dC5sZW5ndGggLSAxICYmICEvXHMvLnRlc3QodGV4dC5jaGFyQXQoaSArIDEpKSkK
LSAgICAgICAgc3Bhbi5zdHlsZS53aGl0ZVNwYWNlID0gIm5vcm1hbCI7Ci0gICAgICBidWlsZGVy
LnBvcyArPSBjaC5sZW5ndGg7CisgICAgICByZXR1cm4gYnVpbGRlci5jb250ZW50LmFwcGVuZENo
aWxkKHRva2VuKTsKICAgICB9Ci0gICAgaWYgKHRleHQubGVuZ3RoKSBidWlsZGVyLm1lYXN1cmVk
U29tZXRoaW5nID0gdHJ1ZTsKKyAgICBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY29udGVu
dCk7CiAgIH0KCiAgIGZ1bmN0aW9uIGJ1aWxkVG9rZW5TcGxpdFNwYWNlcyhpbm5lcikgewpAQCAt
NDUxNywyOSArNTc4NywzNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgIHJldHVybiBvdXQ7CiAgICAgfQogICAgIHJldHVybiBmdW5jdGlvbihidWlsZGVyLCB0ZXh0
LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlKSB7Ci0gICAgICByZXR1cm4gaW5u
ZXIoYnVpbGRlciwgdGV4dC5yZXBsYWNlKC8gezMsfS9nLCBzcGxpdCksIHN0eWxlLCBzdGFydFN0
eWxlLCBlbmRTdHlsZSwgdGl0bGUpOworICAgICAgaW5uZXIoYnVpbGRlciwgdGV4dC5yZXBsYWNl
KC8gezMsfS9nLCBzcGxpdCksIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUpOwog
ICAgIH07CiAgIH0KCi0gIGZ1bmN0aW9uIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCBzaXpl
LCBtYXJrZXIsIGlnbm9yZVdpZGdldCkgewotICAgIHZhciB3aWRnZXQgPSAhaWdub3JlV2lkZ2V0
ICYmIG1hcmtlci5yZXBsYWNlZFdpdGg7Ci0gICAgaWYgKHdpZGdldCkgewotICAgICAgaWYgKGJ1
aWxkZXIuY29weVdpZGdldHMpIHdpZGdldCA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7Ci0gICAg
ICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZCh3aWRnZXQpOwotICAgICAgaWYgKGJ1aWxkZXIubWVh
c3VyZSkgewotICAgICAgICBpZiAoc2l6ZSkgewotICAgICAgICAgIGJ1aWxkZXIubWVhc3VyZVti
dWlsZGVyLnBvc10gPSB3aWRnZXQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdmFyIGVs
dCA9IHplcm9XaWR0aEVsZW1lbnQoYnVpbGRlci5jbS5kaXNwbGF5Lm1lYXN1cmUpOwotICAgICAg
ICAgIGlmIChtYXJrZXIudHlwZSA9PSAiYm9va21hcmsiICYmICFtYXJrZXIuaW5zZXJ0TGVmdCkK
LSAgICAgICAgICAgIGJ1aWxkZXIubWVhc3VyZVtidWlsZGVyLnBvc10gPSBidWlsZGVyLnByZS5h
cHBlbmRDaGlsZChlbHQpOwotICAgICAgICAgIGVsc2UgaWYgKGJ1aWxkZXIubWVhc3VyZVtidWls
ZGVyLnBvc10pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXSA9IGJ1aWxkZXIucHJlLmluc2VydEJlZm9y
ZShlbHQsIHdpZGdldCk7CisgIC8vIFdvcmsgYXJvdW5kIG5vbnNlbnNlIGRpbWVuc2lvbnMgYmVp
bmcgcmVwb3J0ZWQgZm9yIHN0cmV0Y2hlcyBvZgorICAvLyByaWdodC10by1sZWZ0IHRleHQuCisg
IGZ1bmN0aW9uIGJ1aWxkVG9rZW5CYWRCaWRpKGlubmVyLCBvcmRlcikgeworICAgIHJldHVybiBm
dW5jdGlvbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxl
KSB7CisgICAgICBzdHlsZSA9IHN0eWxlID8gc3R5bGUgKyAiIGNtLWZvcmNlLWJvcmRlciIgOiAi
Y20tZm9yY2UtYm9yZGVyIjsKKyAgICAgIHZhciBzdGFydCA9IGJ1aWxkZXIucG9zLCBlbmQgPSBz
dGFydCArIHRleHQubGVuZ3RoOworICAgICAgZm9yICg7OykgeworICAgICAgICAvLyBGaW5kIHRo
ZSBwYXJ0IHRoYXQgb3ZlcmxhcHMgd2l0aCB0aGUgc3RhcnQgb2YgdGhpcyB0ZXh0CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICB2YXIg
cGFydCA9IG9yZGVyW2ldOworICAgICAgICAgIGlmIChwYXJ0LnRvID4gc3RhcnQgJiYgcGFydC5m
cm9tIDw9IHN0YXJ0KSBicmVhazsKICAgICAgICAgfQotICAgICAgICBidWlsZGVyLm1lYXN1cmVk
U29tZXRoaW5nID0gdHJ1ZTsKKyAgICAgICAgaWYgKHBhcnQudG8gPj0gZW5kKSByZXR1cm4gaW5u
ZXIoYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSk7Cisg
ICAgICAgIGlubmVyKGJ1aWxkZXIsIHRleHQuc2xpY2UoMCwgcGFydC50byAtIHN0YXJ0KSwgc3R5
bGUsIHN0YXJ0U3R5bGUsIG51bGwsIHRpdGxlKTsKKyAgICAgICAgc3RhcnRTdHlsZSA9IG51bGw7
CisgICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKHBhcnQudG8gLSBzdGFydCk7CisgICAgICAgIHN0
YXJ0ID0gcGFydC50bzsKICAgICAgIH0KKyAgICB9OworICB9CisKKyAgZnVuY3Rpb24gYnVpbGRD
b2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUsIG1hcmtlciwgaWdub3JlV2lkZ2V0KSB7CisgICAg
dmFyIHdpZGdldCA9ICFpZ25vcmVXaWRnZXQgJiYgbWFya2VyLndpZGdldE5vZGU7CisgICAgaWYg
KHdpZGdldCkgeworICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5w
b3MgKyBzaXplLCB3aWRnZXQpOworICAgICAgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHdp
ZGdldCk7CiAgICAgfQogICAgIGJ1aWxkZXIucG9zICs9IHNpemU7CiAgIH0KQEAgLTQ1NTAsNyAr
NTgyNyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBzcGFu
cyA9IGxpbmUubWFya2VkU3BhbnMsIGFsbFRleHQgPSBsaW5lLnRleHQsIGF0ID0gMDsKICAgICBp
ZiAoIXNwYW5zKSB7CiAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHN0eWxlcy5sZW5ndGg7IGkr
PTIpCi0gICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgYWxsVGV4dC5zbGljZShhdCwg
YXQgPSBzdHlsZXNbaV0pLCBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpKzFdLCBidWlsZGVy
KSk7CisgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgYWxsVGV4dC5zbGljZShhdCwg
YXQgPSBzdHlsZXNbaV0pLCBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpKzFdLCBidWlsZGVy
LmNtLm9wdGlvbnMpKTsKICAgICAgIHJldHVybjsKICAgICB9CgpAQCAtNDU2OSwxNyArNTg0Niwx
NyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGlmICht
LnN0YXJ0U3R5bGUgJiYgc3AuZnJvbSA9PSBwb3MpIHNwYW5TdGFydFN0eWxlICs9ICIgIiArIG0u
c3RhcnRTdHlsZTsKICAgICAgICAgICAgIGlmIChtLmVuZFN0eWxlICYmIHNwLnRvID09IG5leHRD
aGFuZ2UpIHNwYW5FbmRTdHlsZSArPSAiICIgKyBtLmVuZFN0eWxlOwogICAgICAgICAgICAgaWYg
KG0udGl0bGUgJiYgIXRpdGxlKSB0aXRsZSA9IG0udGl0bGU7Ci0gICAgICAgICAgICBpZiAobS5j
b2xsYXBzZWQgJiYgKCFjb2xsYXBzZWQgfHwgY29sbGFwc2VkLm1hcmtlci5zaXplIDwgbS5zaXpl
KSkKKyAgICAgICAgICAgIGlmIChtLmNvbGxhcHNlZCAmJiAoIWNvbGxhcHNlZCB8fCBjb21wYXJl
Q29sbGFwc2VkTWFya2Vycyhjb2xsYXBzZWQubWFya2VyLCBtKSA8IDApKQogICAgICAgICAgICAg
ICBjb2xsYXBzZWQgPSBzcDsKICAgICAgICAgICB9IGVsc2UgaWYgKHNwLmZyb20gPiBwb3MgJiYg
bmV4dENoYW5nZSA+IHNwLmZyb20pIHsKICAgICAgICAgICAgIG5leHRDaGFuZ2UgPSBzcC5mcm9t
OwogICAgICAgICAgIH0KLSAgICAgICAgICBpZiAobS50eXBlID09ICJib29rbWFyayIgJiYgc3Au
ZnJvbSA9PSBwb3MgJiYgbS5yZXBsYWNlZFdpdGgpIGZvdW5kQm9va21hcmtzLnB1c2gobSk7Cisg
ICAgICAgICAgaWYgKG0udHlwZSA9PSAiYm9va21hcmsiICYmIHNwLmZyb20gPT0gcG9zICYmIG0u
d2lkZ2V0Tm9kZSkgZm91bmRCb29rbWFya3MucHVzaChtKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoY29sbGFwc2VkICYmIChjb2xsYXBzZWQuZnJvbSB8fCAwKSA9PSBwb3MpIHsKLSAgICAgICAg
ICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgKGNvbGxhcHNlZC50byA9PSBudWxsID8gbGVu
IDogY29sbGFwc2VkLnRvKSAtIHBvcywKKyAgICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVp
bGRlciwgKGNvbGxhcHNlZC50byA9PSBudWxsID8gbGVuICsgMSA6IGNvbGxhcHNlZC50bykgLSBw
b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZC5tYXJrZXIsIGNvbGxh
cHNlZC5mcm9tID09IG51bGwpOwotICAgICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gbnVsbCkg
cmV0dXJuIGNvbGxhcHNlZC5tYXJrZXIuZmluZCgpOworICAgICAgICAgIGlmIChjb2xsYXBzZWQu
dG8gPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICghY29sbGFwc2VkICYm
IGZvdW5kQm9va21hcmtzLmxlbmd0aCkgZm9yICh2YXIgaiA9IDA7IGogPCBmb3VuZEJvb2ttYXJr
cy5sZW5ndGg7ICsraikKICAgICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgMCwg
Zm91bmRCb29rbWFya3Nbal0pOwpAQCAtNDYwMCwxNCArNTg3NywyMyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICBzcGFuU3RhcnRTdHlsZSA9ICIiOwogICAg
ICAgICB9CiAgICAgICAgIHRleHQgPSBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0eWxlc1tpKytd
KTsKLSAgICAgICAgc3R5bGUgPSBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpKytdLCBidWls
ZGVyKTsKKyAgICAgICAgc3R5bGUgPSBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpKytdLCBi
dWlsZGVyLmNtLm9wdGlvbnMpOwogICAgICAgfQogICAgIH0KICAgfQoKICAgLy8gRE9DVU1FTlQg
REFUQSBTVFJVQ1RVUkUKCi0gIGZ1bmN0aW9uIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgbWFya2Vk
U3BhbnMsIHNlbEFmdGVyLCBlc3RpbWF0ZUhlaWdodCkgeworICAvLyBCeSBkZWZhdWx0LCB1cGRh
dGVzIHRoYXQgc3RhcnQgYW5kIGVuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZQorICAvLyBh
cmUgdHJlYXRlZCBzcGVjaWFsbHksIGluIG9yZGVyIHRvIG1ha2UgdGhlIGFzc29jaWF0aW9uIG9m
IGxpbmUKKyAgLy8gd2lkZ2V0cyBhbmQgbWFya2VyIGVsZW1lbnRzIHdpdGggdGhlIHRleHQgYmVo
YXZlIG1vcmUgaW50dWl0aXZlLgorICBmdW5jdGlvbiBpc1dob2xlTGluZVVwZGF0ZShkb2MsIGNo
YW5nZSkgeworICAgIHJldHVybiBjaGFuZ2UuZnJvbS5jaCA9PSAwICYmIGNoYW5nZS50by5jaCA9
PSAwICYmIGxzdChjaGFuZ2UudGV4dCkgPT0gIiIgJiYKKyAgICAgICghZG9jLmNtIHx8IGRvYy5j
bS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSk7CisgIH0KKworICAvLyBQZXJmb3JtIGEg
Y2hhbmdlIG9uIHRoZSBkb2N1bWVudCBkYXRhIHN0cnVjdHVyZS4KKyAgZnVuY3Rpb24gdXBkYXRl
RG9jKGRvYywgY2hhbmdlLCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWlnaHQpIHsKICAgICBmdW5j
dGlvbiBzcGFuc0ZvcihuKSB7cmV0dXJuIG1hcmtlZFNwYW5zID8gbWFya2VkU3BhbnNbbl0gOiBu
dWxsO30KICAgICBmdW5jdGlvbiB1cGRhdGUobGluZSwgdGV4dCwgc3BhbnMpIHsKICAgICAgIHVw
ZGF0ZUxpbmUobGluZSwgdGV4dCwgc3BhbnMsIGVzdGltYXRlSGVpZ2h0KTsKQEAgLTQ2MTgsMTIg
KzU5MDQsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGZp
cnN0TGluZSA9IGdldExpbmUoZG9jLCBmcm9tLmxpbmUpLCBsYXN0TGluZSA9IGdldExpbmUoZG9j
LCB0by5saW5lKTsKICAgICB2YXIgbGFzdFRleHQgPSBsc3QodGV4dCksIGxhc3RTcGFucyA9IHNw
YW5zRm9yKHRleHQubGVuZ3RoIC0gMSksIG5saW5lcyA9IHRvLmxpbmUgLSBmcm9tLmxpbmU7Cgot
ICAgIC8vIEZpcnN0IGFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmUKLSAgICBpZiAoZnJvbS5jaCA9
PSAwICYmIHRvLmNoID09IDAgJiYgbGFzdFRleHQgPT0gIiIgJiYKLSAgICAgICAgKCFkb2MuY20g
fHwgZG9jLmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKSkgeworICAgIC8vIEFkanVz
dCB0aGUgbGluZSBzdHJ1Y3R1cmUKKyAgICBpZiAoaXNXaG9sZUxpbmVVcGRhdGUoZG9jLCBjaGFu
Z2UpKSB7CiAgICAgICAvLyBUaGlzIGlzIGEgd2hvbGUtbGluZSByZXBsYWNlLiBUcmVhdGVkIHNw
ZWNpYWxseSB0byBtYWtlCiAgICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3YXkg
dGhleSBhcmUgc3VwcG9zZWQgdG8uCi0gICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRleHQubGVu
Z3RoIC0gMSwgYWRkZWQgPSBbXTsgaSA8IGU7ICsraSkKKyAgICAgIGZvciAodmFyIGkgPSAwLCBh
ZGRlZCA9IFtdOyBpIDwgdGV4dC5sZW5ndGggLSAxOyArK2kpCiAgICAgICAgIGFkZGVkLnB1c2go
bmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7CiAgICAgICB1
cGRhdGUobGFzdExpbmUsIGxhc3RMaW5lLnRleHQsIGxhc3RTcGFucyk7CiAgICAgICBpZiAobmxp
bmVzKSBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzKTsKQEAgLTQ2MzIsNyArNTkxNyw3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKHRleHQubGVuZ3Ro
ID09IDEpIHsKICAgICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2Uo
MCwgZnJvbS5jaCkgKyBsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFz
dFNwYW5zKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAodmFyIGFkZGVkID0gW10sIGkg
PSAxLCBlID0gdGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQorICAgICAgICBmb3IgKHZhciBh
ZGRlZCA9IFtdLCBpID0gMTsgaSA8IHRleHQubGVuZ3RoIC0gMTsgKytpKQogICAgICAgICAgIGFk
ZGVkLnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7
CiAgICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUobGFzdFRleHQgKyBmaXJzdExpbmUudGV4dC5z
bGljZSh0by5jaCksIGxhc3RTcGFucywgZXN0aW1hdGVIZWlnaHQpKTsKICAgICAgICAgdXBkYXRl
KGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdLCBz
cGFuc0ZvcigwKSk7CkBAIC00NjQ0LDIwICs1OTI5LDMyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgIH0gZWxzZSB7CiAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJz
dExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNwYW5zRm9yKDApKTsKICAg
ICAgIHVwZGF0ZShsYXN0TGluZSwgbGFzdFRleHQgKyBsYXN0TGluZS50ZXh0LnNsaWNlKHRvLmNo
KSwgbGFzdFNwYW5zKTsKLSAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gdGV4dC5sZW5ndGggLSAx
LCBhZGRlZCA9IFtdOyBpIDwgZTsgKytpKQorICAgICAgZm9yICh2YXIgaSA9IDEsIGFkZGVkID0g
W107IGkgPCB0ZXh0Lmxlbmd0aCAtIDE7ICsraSkKICAgICAgICAgYWRkZWQucHVzaChuZXcgTGlu
ZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKICAgICAgIGlmIChubGlu
ZXMgPiAxKSBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcyAtIDEpOwogICAgICAgZG9j
Lmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7CiAgICAgfQoKICAgICBzaWduYWxMYXRlcihk
b2MsICJjaGFuZ2UiLCBkb2MsIGNoYW5nZSk7Ci0gICAgc2V0U2VsZWN0aW9uKGRvYywgc2VsQWZ0
ZXIuYW5jaG9yLCBzZWxBZnRlci5oZWFkLCBudWxsLCB0cnVlKTsKICAgfQoKKyAgLy8gVGhlIGRv
Y3VtZW50IGlzIHJlcHJlc2VudGVkIGFzIGEgQlRyZWUgY29uc2lzdGluZyBvZiBsZWF2ZXMsIHdp
dGgKKyAgLy8gY2h1bmsgb2YgbGluZXMgaW4gdGhlbSwgYW5kIGJyYW5jaGVzLCB3aXRoIHVwIHRv
IHRlbiBsZWF2ZXMgb3IKKyAgLy8gb3RoZXIgYnJhbmNoIG5vZGVzIGJlbG93IHRoZW0uIFRoZSB0
b3Agbm9kZSBpcyBhbHdheXMgYSBicmFuY2gKKyAgLy8gbm9kZSwgYW5kIGlzIHRoZSBkb2N1bWVu
dCBvYmplY3QgaXRzZWxmIChtZWFuaW5nIGl0IGhhcworICAvLyBhZGRpdGlvbmFsIG1ldGhvZHMg
YW5kIHByb3BlcnRpZXMpLgorICAvLworICAvLyBBbGwgbm9kZXMgaGF2ZSBwYXJlbnQgbGlua3Mu
IFRoZSB0cmVlIGlzIHVzZWQgYm90aCB0byBnbyBmcm9tCisgIC8vIGxpbmUgbnVtYmVycyB0byBs
aW5lIG9iamVjdHMsIGFuZCB0byBnbyBmcm9tIG9iamVjdHMgdG8gbnVtYmVycy4KKyAgLy8gSXQg
YWxzbyBpbmRleGVzIGJ5IGhlaWdodCwgYW5kIGlzIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIGhl
aWdodAorICAvLyBhbmQgbGluZSBvYmplY3QsIGFuZCB0byBmaW5kIHRoZSB0b3RhbCBoZWlnaHQg
b2YgdGhlIGRvY3VtZW50LgorICAvLworICAvLyBTZWUgYWxzbyBodHRwOi8vbWFyaWpuaGF2ZXJi
ZWtlLm5sL2Jsb2cvY29kZW1pcnJvci1saW5lLXRyZWUuaHRtbAorCiAgIGZ1bmN0aW9uIExlYWZD
aHVuayhsaW5lcykgewogICAgIHRoaXMubGluZXMgPSBsaW5lczsKICAgICB0aGlzLnBhcmVudCA9
IG51bGw7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5lcy5sZW5ndGgsIGhlaWdodCA9IDA7
IGkgPCBlOyArK2kpIHsKKyAgICBmb3IgKHZhciBpID0gMCwgaGVpZ2h0ID0gMDsgaSA8IGxpbmVz
Lmxlbmd0aDsgKytpKSB7CiAgICAgICBsaW5lc1tpXS5wYXJlbnQgPSB0aGlzOwogICAgICAgaGVp
Z2h0ICs9IGxpbmVzW2ldLmhlaWdodDsKICAgICB9CkBAIC00NjY2LDYgKzU5NjMsNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKCiAgIExlYWZDaHVuay5wcm90b3R5cGUgPSB7
CiAgICAgY2h1bmtTaXplOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMubGluZXMubGVuZ3RoOyB9
LAorICAgIC8vIFJlbW92ZSB0aGUgbiBsaW5lcyBhdCBvZmZzZXQgJ2F0Jy4KICAgICByZW1vdmVJ
bm5lcjogZnVuY3Rpb24oYXQsIG4pIHsKICAgICAgIGZvciAodmFyIGkgPSBhdCwgZSA9IGF0ICsg
bjsgaSA8IGU7ICsraSkgewogICAgICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07CkBAIC00
Njc1LDE0ICs1OTczLDE4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgfQogICAgICAgdGhpcy5saW5lcy5zcGxpY2UoYXQsIG4pOwogICAgIH0sCisgICAgLy8gSGVs
cGVyIHVzZWQgdG8gY29sbGFwc2UgYSBzbWFsbCBicmFuY2ggaW50byBhIHNpbmdsZSBsZWFmLgog
ICAgIGNvbGxhcHNlOiBmdW5jdGlvbihsaW5lcykgewotICAgICAgbGluZXMuc3BsaWNlLmFwcGx5
KGxpbmVzLCBbbGluZXMubGVuZ3RoLCAwXS5jb25jYXQodGhpcy5saW5lcykpOworICAgICAgbGlu
ZXMucHVzaC5hcHBseShsaW5lcywgdGhpcy5saW5lcyk7CiAgICAgfSwKKyAgICAvLyBJbnNlcnQg
dGhlIGdpdmVuIGFycmF5IG9mIGxpbmVzIGF0IG9mZnNldCAnYXQnLCBjb3VudCB0aGVtIGFzCisg
ICAgLy8gaGF2aW5nIHRoZSBnaXZlbiBoZWlnaHQuCiAgICAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9u
KGF0LCBsaW5lcywgaGVpZ2h0KSB7CiAgICAgICB0aGlzLmhlaWdodCArPSBoZWlnaHQ7CiAgICAg
ICB0aGlzLmxpbmVzID0gdGhpcy5saW5lcy5zbGljZSgwLCBhdCkuY29uY2F0KGxpbmVzKS5jb25j
YXQodGhpcy5saW5lcy5zbGljZShhdCkpOwotICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5l
cy5sZW5ndGg7IGkgPCBlOyArK2kpIGxpbmVzW2ldLnBhcmVudCA9IHRoaXM7CisgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSBsaW5lc1tpXS5wYXJlbnQgPSB0aGlz
OwogICAgIH0sCisgICAgLy8gVXNlZCB0byBpdGVyYXRlIG92ZXIgYSBwYXJ0IG9mIHRoZSB0cmVl
LgogICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHsKICAgICAgIGZvciAodmFyIGUgPSBh
dCArIG47IGF0IDwgZTsgKythdCkKICAgICAgICAgaWYgKG9wKHRoaXMubGluZXNbYXRdKSkgcmV0
dXJuIHRydWU7CkBAIC00NjkyLDcgKzU5OTQsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgZnVuY3Rpb24gQnJhbmNoQ2h1bmsoY2hpbGRyZW4pIHsKICAgICB0aGlzLmNo
aWxkcmVuID0gY2hpbGRyZW47CiAgICAgdmFyIHNpemUgPSAwLCBoZWlnaHQgPSAwOwotICAgIGZv
ciAodmFyIGkgPSAwLCBlID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIGNoID0g
Y2hpbGRyZW5baV07CiAgICAgICBzaXplICs9IGNoLmNodW5rU2l6ZSgpOyBoZWlnaHQgKz0gY2gu
aGVpZ2h0OwogICAgICAgY2gucGFyZW50ID0gdGhpczsKQEAgLTQ3MTcsNyArNjAxOSwxMCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICBhdCA9IDA7CiAgICAg
ICAgIH0gZWxzZSBhdCAtPSBzejsKICAgICAgIH0KLSAgICAgIGlmICh0aGlzLnNpemUgLSBuIDwg
MjUpIHsKKyAgICAgIC8vIElmIHRoZSByZXN1bHQgaXMgc21hbGxlciB0aGFuIDI1IGxpbmVzLCBl
bnN1cmUgdGhhdCBpdCBpcyBhCisgICAgICAvLyBzaW5nbGUgbGVhZiBub2RlLgorICAgICAgaWYg
KHRoaXMuc2l6ZSAtIG4gPCAyNSAmJgorICAgICAgICAgICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+
IDEgfHwgISh0aGlzLmNoaWxkcmVuWzBdIGluc3RhbmNlb2YgTGVhZkNodW5rKSkpIHsKICAgICAg
ICAgdmFyIGxpbmVzID0gW107CiAgICAgICAgIHRoaXMuY29sbGFwc2UobGluZXMpOwogICAgICAg
ICB0aGlzLmNoaWxkcmVuID0gW25ldyBMZWFmQ2h1bmsobGluZXMpXTsKQEAgLTQ3MjUsMTIgKzYw
MzAsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB9CiAgICAg
fSwKICAgICBjb2xsYXBzZTogZnVuY3Rpb24obGluZXMpIHsKLSAgICAgIGZvciAodmFyIGkgPSAw
LCBlID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHRoaXMuY2hpbGRyZW5baV0u
Y29sbGFwc2UobGluZXMpOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVu
Lmxlbmd0aDsgKytpKSB0aGlzLmNoaWxkcmVuW2ldLmNvbGxhcHNlKGxpbmVzKTsKICAgICB9LAog
ICAgIGluc2VydElubmVyOiBmdW5jdGlvbihhdCwgbGluZXMsIGhlaWdodCkgewogICAgICAgdGhp
cy5zaXplICs9IGxpbmVzLmxlbmd0aDsKICAgICAgIHRoaXMuaGVpZ2h0ICs9IGhlaWdodDsKLSAg
ICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kp
IHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkg
ewogICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5r
U2l6ZSgpOwogICAgICAgICBpZiAoYXQgPD0gc3opIHsKICAgICAgICAgICBjaGlsZC5pbnNlcnRJ
bm5lcihhdCwgbGluZXMsIGhlaWdodCk7CkBAIC00NzQ5LDYgKzYwNTQsNyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgYXQgLT0gc3o7CiAgICAgICB9CiAgICAg
fSwKKyAgICAvLyBXaGVuIGEgbm9kZSBoYXMgZ3Jvd24sIGNoZWNrIHdoZXRoZXIgaXQgc2hvdWxk
IGJlIHNwbGl0LgogICAgIG1heWJlU3BpbGw6IGZ1bmN0aW9uKCkgewogICAgICAgaWYgKHRoaXMu
Y2hpbGRyZW4ubGVuZ3RoIDw9IDEwKSByZXR1cm47CiAgICAgICB2YXIgbWUgPSB0aGlzOwpAQCAt
NDc3MSw3ICs2MDc3LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICBtZS5wYXJlbnQubWF5YmVTcGlsbCgpOwogICAgIH0sCiAgICAgaXRlck46IGZ1bmN0aW9uKGF0
LCBuLCBvcCkgewotICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0
aDsgaSA8IGU7ICsraSkgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVu
Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6
ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAgIGlmIChhdCA8IHN6KSB7CiAgICAgICAgICAg
dmFyIHVzZWQgPSBNYXRoLm1pbihuLCBzeiAtIGF0KTsKQEAgLTQ3OTIsNDMgKzYwOTgsNTIgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdGhpcy5maXJzdCA9IGZpcnN0
TGluZTsKICAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsTGVmdCA9IDA7CiAgICAgdGhp
cy5jYW50RWRpdCA9IGZhbHNlOwotICAgIHRoaXMuaGlzdG9yeSA9IG1ha2VIaXN0b3J5KCk7CiAg
ICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSAxOwogICAgIHRoaXMuZnJvbnRpZXIgPSBmaXJzdExp
bmU7CiAgICAgdmFyIHN0YXJ0ID0gUG9zKGZpcnN0TGluZSwgMCk7Ci0gICAgdGhpcy5zZWwgPSB7
ZnJvbTogc3RhcnQsIHRvOiBzdGFydCwgaGVhZDogc3RhcnQsIGFuY2hvcjogc3RhcnQsIHNoaWZ0
OiBmYWxzZSwgZXh0ZW5kOiBmYWxzZSwgZ29hbENvbHVtbjogbnVsbH07CisgICAgdGhpcy5zZWwg
PSBzaW1wbGVTZWxlY3Rpb24oc3RhcnQpOworICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIaXN0b3J5
KG51bGwpOwogICAgIHRoaXMuaWQgPSArK25leHREb2NJZDsKICAgICB0aGlzLm1vZGVPcHRpb24g
PSBtb2RlOwoKICAgICBpZiAodHlwZW9mIHRleHQgPT0gInN0cmluZyIpIHRleHQgPSBzcGxpdExp
bmVzKHRleHQpOwotICAgIHVwZGF0ZURvYyh0aGlzLCB7ZnJvbTogc3RhcnQsIHRvOiBzdGFydCwg
dGV4dDogdGV4dH0sIG51bGwsIHtoZWFkOiBzdGFydCwgYW5jaG9yOiBzdGFydH0pOworICAgIHVw
ZGF0ZURvYyh0aGlzLCB7ZnJvbTogc3RhcnQsIHRvOiBzdGFydCwgdGV4dDogdGV4dH0pOworICAg
IHNldFNlbGVjdGlvbih0aGlzLCBzaW1wbGVTZWxlY3Rpb24oc3RhcnQpLCBzZWxfZG9udFNjcm9s
bCk7CiAgIH07CgogICBEb2MucHJvdG90eXBlID0gY3JlYXRlT2JqKEJyYW5jaENodW5rLnByb3Rv
dHlwZSwgewogICAgIGNvbnN0cnVjdG9yOiBEb2MsCisgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBk
b2N1bWVudC4gU3VwcG9ydHMgdHdvIGZvcm1zIC0tIHdpdGggb25seSBvbmUKKyAgICAvLyBhcmd1
bWVudCwgaXQgY2FsbHMgdGhhdCBmb3IgZWFjaCBsaW5lIGluIHRoZSBkb2N1bWVudC4gV2l0aAor
ICAgIC8vIHRocmVlLCBpdCBpdGVyYXRlcyBvdmVyIHRoZSByYW5nZSBnaXZlbiBieSB0aGUgZmly
c3QgdHdvICh3aXRoCisgICAgLy8gdGhlIHNlY29uZCBiZWluZyBub24taW5jbHVzaXZlKS4KICAg
ICBpdGVyOiBmdW5jdGlvbihmcm9tLCB0bywgb3ApIHsKICAgICAgIGlmIChvcCkgdGhpcy5pdGVy
Tihmcm9tIC0gdGhpcy5maXJzdCwgdG8gLSBmcm9tLCBvcCk7CiAgICAgICBlbHNlIHRoaXMuaXRl
ck4odGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSwgZnJvbSk7CiAgICAgfSwKCisg
ICAgLy8gTm9uLXB1YmxpYyBpbnRlcmZhY2UgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgbGluZXMu
CiAgICAgaW5zZXJ0OiBmdW5jdGlvbihhdCwgbGluZXMpIHsKICAgICAgIHZhciBoZWlnaHQgPSAw
OwotICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5lcy5sZW5ndGg7IGkgPCBlOyArK2kpIGhl
aWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVz
Lmxlbmd0aDsgKytpKSBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0OwogICAgICAgdGhpcy5pbnNl
cnRJbm5lcihhdCAtIHRoaXMuZmlyc3QsIGxpbmVzLCBoZWlnaHQpOwogICAgIH0sCiAgICAgcmVt
b3ZlOiBmdW5jdGlvbihhdCwgbikgeyB0aGlzLnJlbW92ZUlubmVyKGF0IC0gdGhpcy5maXJzdCwg
bik7IH0sCgorICAgIC8vIEZyb20gaGVyZSwgdGhlIG1ldGhvZHMgYXJlIHBhcnQgb2YgdGhlIHB1
YmxpYyBpbnRlcmZhY2UuIE1vc3QKKyAgICAvLyBhcmUgYWxzbyBhdmFpbGFibGUgZnJvbSBDb2Rl
TWlycm9yIChlZGl0b3IpIGluc3RhbmNlcy4KKwogICAgIGdldFZhbHVlOiBmdW5jdGlvbihsaW5l
U2VwKSB7CiAgICAgICB2YXIgbGluZXMgPSBnZXRMaW5lcyh0aGlzLCB0aGlzLmZpcnN0LCB0aGlz
LmZpcnN0ICsgdGhpcy5zaXplKTsKICAgICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkgcmV0dXJu
IGxpbmVzOwogICAgICAgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCAiXG4iKTsKICAgICB9
LAotICAgIHNldFZhbHVlOiBmdW5jdGlvbihjb2RlKSB7CisgICAgc2V0VmFsdWU6IGRvY01ldGhv
ZE9wKGZ1bmN0aW9uKGNvZGUpIHsKICAgICAgIHZhciB0b3AgPSBQb3ModGhpcy5maXJzdCwgMCks
IGxhc3QgPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMTsKICAgICAgIG1ha2VDaGFuZ2UodGhp
cywge2Zyb206IHRvcCwgdG86IFBvcyhsYXN0LCBnZXRMaW5lKHRoaXMsIGxhc3QpLnRleHQubGVu
Z3RoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHNwbGl0TGluZXMoY29kZSksIG9y
aWdpbjogInNldFZhbHVlIn0sCi0gICAgICAgICAgICAgICAgIHtoZWFkOiB0b3AsIGFuY2hvcjog
dG9wfSwgdHJ1ZSk7Ci0gICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHNwbGl0
TGluZXMoY29kZSksIG9yaWdpbjogInNldFZhbHVlIn0sIHRydWUpOworICAgICAgc2V0U2VsZWN0
aW9uKHRoaXMsIHNpbXBsZVNlbGVjdGlvbih0b3ApKTsKKyAgICB9KSwKICAgICByZXBsYWNlUmFu
Z2U6IGZ1bmN0aW9uKGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pIHsKICAgICAgIGZyb20gPSBjbGlw
UG9zKHRoaXMsIGZyb20pOwogICAgICAgdG8gPSB0byA/IGNsaXBQb3ModGhpcywgdG8pIDogZnJv
bTsKQEAgLTQ4NDEsMjEgKzYxNTYsMTMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgfSwKCiAgICAgZ2V0TGluZTogZnVuY3Rpb24obGluZSkge3ZhciBsID0gdGhpcy5n
ZXRMaW5lSGFuZGxlKGxpbmUpOyByZXR1cm4gbCAmJiBsLnRleHQ7fSwKLSAgICBzZXRMaW5lOiBm
dW5jdGlvbihsaW5lLCB0ZXh0KSB7Ci0gICAgICBpZiAoaXNMaW5lKHRoaXMsIGxpbmUpKQotICAg
ICAgICByZXBsYWNlUmFuZ2UodGhpcywgdGV4dCwgUG9zKGxpbmUsIDApLCBjbGlwUG9zKHRoaXMs
IFBvcyhsaW5lKSkpOwotICAgIH0sCi0gICAgcmVtb3ZlTGluZTogZnVuY3Rpb24obGluZSkgewot
ICAgICAgaWYgKGxpbmUpIHJlcGxhY2VSYW5nZSh0aGlzLCAiIiwgY2xpcFBvcyh0aGlzLCBQb3Mo
bGluZSAtIDEpKSwgY2xpcFBvcyh0aGlzLCBQb3MobGluZSkpKTsKLSAgICAgIGVsc2UgcmVwbGFj
ZVJhbmdlKHRoaXMsICIiLCBQb3MoMCwgMCksIGNsaXBQb3ModGhpcywgUG9zKDEsIDApKSk7Ci0g
ICAgfSwKCiAgICAgZ2V0TGluZUhhbmRsZTogZnVuY3Rpb24obGluZSkge2lmIChpc0xpbmUodGhp
cywgbGluZSkpIHJldHVybiBnZXRMaW5lKHRoaXMsIGxpbmUpO30sCiAgICAgZ2V0TGluZU51bWJl
cjogZnVuY3Rpb24obGluZSkge3JldHVybiBsaW5lTm8obGluZSk7fSwKCiAgICAgZ2V0TGluZUhh
bmRsZVZpc3VhbFN0YXJ0OiBmdW5jdGlvbihsaW5lKSB7CiAgICAgICBpZiAodHlwZW9mIGxpbmUg
PT0gIm51bWJlciIpIGxpbmUgPSBnZXRMaW5lKHRoaXMsIGxpbmUpOwotICAgICAgcmV0dXJuIHZp
c3VhbExpbmUodGhpcywgbGluZSk7CisgICAgICByZXR1cm4gdmlzdWFsTGluZShsaW5lKTsKICAg
ICB9LAoKICAgICBsaW5lQ291bnQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnNpemU7fSwKQEAg
LTQ4NjUsNDcgKzYxNzIsMTAzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIGNsaXBQb3M6IGZ1bmN0aW9uKHBvcykge3JldHVybiBjbGlwUG9zKHRoaXMsIHBvcyk7fSwK
CiAgICAgZ2V0Q3Vyc29yOiBmdW5jdGlvbihzdGFydCkgewotICAgICAgdmFyIHNlbCA9IHRoaXMu
c2VsLCBwb3M7Ci0gICAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA9PSAiaGVhZCIpIHBv
cyA9IHNlbC5oZWFkOwotICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gImFuY2hvciIpIHBvcyA9IHNl
bC5hbmNob3I7Ci0gICAgICBlbHNlIGlmIChzdGFydCA9PSAiZW5kIiB8fCBzdGFydCA9PT0gZmFs
c2UpIHBvcyA9IHNlbC50bzsKLSAgICAgIGVsc2UgcG9zID0gc2VsLmZyb207Ci0gICAgICByZXR1
cm4gY29weVBvcyhwb3MpOworICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZWwucHJpbWFyeSgpLCBw
b3M7CisgICAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA9PSAiaGVhZCIpIHBvcyA9IHJh
bmdlLmhlYWQ7CisgICAgICBlbHNlIGlmIChzdGFydCA9PSAiYW5jaG9yIikgcG9zID0gcmFuZ2Uu
YW5jaG9yOworICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gImVuZCIgfHwgc3RhcnQgPT0gInRvIiB8
fCBzdGFydCA9PT0gZmFsc2UpIHBvcyA9IHJhbmdlLnRvKCk7CisgICAgICBlbHNlIHBvcyA9IHJh
bmdlLmZyb20oKTsKKyAgICAgIHJldHVybiBwb3M7CiAgICAgfSwKLSAgICBzb21ldGhpbmdTZWxl
Y3RlZDogZnVuY3Rpb24oKSB7cmV0dXJuICFwb3NFcSh0aGlzLnNlbC5oZWFkLCB0aGlzLnNlbC5h
bmNob3IpO30sCisgICAgbGlzdFNlbGVjdGlvbnM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5z
ZWwucmFuZ2VzOyB9LAorICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHtyZXR1cm4g
dGhpcy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKTt9LAoKLSAgICBzZXRDdXJzb3I6IGRvY09wZXJh
dGlvbihmdW5jdGlvbihsaW5lLCBjaCwgZXh0ZW5kKSB7Ci0gICAgICB2YXIgcG9zID0gY2xpcFBv
cyh0aGlzLCB0eXBlb2YgbGluZSA9PSAibnVtYmVyIiA/IFBvcyhsaW5lLCBjaCB8fCAwKSA6IGxp
bmUpOwotICAgICAgaWYgKGV4dGVuZCkgZXh0ZW5kU2VsZWN0aW9uKHRoaXMsIHBvcyk7Ci0gICAg
ICBlbHNlIHNldFNlbGVjdGlvbih0aGlzLCBwb3MsIHBvcyk7CisgICAgc2V0Q3Vyc29yOiBkb2NN
ZXRob2RPcChmdW5jdGlvbihsaW5lLCBjaCwgb3B0aW9ucykgeworICAgICAgc2V0U2ltcGxlU2Vs
ZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgdHlwZW9mIGxpbmUgPT0gIm51bWJlciIgPyBQb3Mo
bGluZSwgY2ggfHwgMCkgOiBsaW5lKSwgbnVsbCwgb3B0aW9ucyk7CisgICAgfSksCisgICAgc2V0
U2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbihhbmNob3IsIGhlYWQsIG9wdGlvbnMpIHsK
KyAgICAgIHNldFNpbXBsZVNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGFuY2hvciksIGNs
aXBQb3ModGhpcywgaGVhZCB8fCBhbmNob3IpLCBvcHRpb25zKTsKKyAgICB9KSwKKyAgICBleHRl
bmRTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhlYWQsIG90aGVyLCBvcHRpb25zKSB7
CisgICAgICBleHRlbmRTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCBoZWFkKSwgb3RoZXIg
JiYgY2xpcFBvcyh0aGlzLCBvdGhlciksIG9wdGlvbnMpOworICAgIH0pLAorICAgIGV4dGVuZFNl
bGVjdGlvbnM6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhlYWRzLCBvcHRpb25zKSB7CisgICAgICBl
eHRlbmRTZWxlY3Rpb25zKHRoaXMsIGNsaXBQb3NBcnJheSh0aGlzLCBoZWFkcywgb3B0aW9ucykp
OwogICAgIH0pLAotICAgIHNldFNlbGVjdGlvbjogZG9jT3BlcmF0aW9uKGZ1bmN0aW9uKGFuY2hv
ciwgaGVhZCwgYmlhcykgewotICAgICAgc2V0U2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywg
YW5jaG9yKSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvciksIGJpYXMpOworICAgIGV4dGVu
ZFNlbGVjdGlvbnNCeTogZG9jTWV0aG9kT3AoZnVuY3Rpb24oZiwgb3B0aW9ucykgeworICAgICAg
ZXh0ZW5kU2VsZWN0aW9ucyh0aGlzLCBtYXAodGhpcy5zZWwucmFuZ2VzLCBmKSwgb3B0aW9ucyk7
CiAgICAgfSksCi0gICAgZXh0ZW5kU2VsZWN0aW9uOiBkb2NPcGVyYXRpb24oZnVuY3Rpb24oZnJv
bSwgdG8sIGJpYXMpIHsKLSAgICAgIGV4dGVuZFNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKHRoaXMs
IGZyb20pLCB0byAmJiBjbGlwUG9zKHRoaXMsIHRvKSwgYmlhcyk7CisgICAgc2V0U2VsZWN0aW9u
czogZG9jTWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2VzLCBwcmltYXJ5LCBvcHRpb25zKSB7CisgICAg
ICBpZiAoIXJhbmdlcy5sZW5ndGgpIHJldHVybjsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBvdXQg
PSBbXTsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdl
KGNsaXBQb3ModGhpcywgcmFuZ2VzW2ldLmFuY2hvciksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGlwUG9zKHRoaXMsIHJhbmdlc1tpXS5oZWFkKSk7CisgICAgICBpZiAocHJpbWFyeSA9
PSBudWxsKSBwcmltYXJ5ID0gTWF0aC5taW4ocmFuZ2VzLmxlbmd0aCAtIDEsIHRoaXMuc2VsLnBy
aW1JbmRleCk7CisgICAgICBzZXRTZWxlY3Rpb24odGhpcywgbm9ybWFsaXplU2VsZWN0aW9uKG91
dCwgcHJpbWFyeSksIG9wdGlvbnMpOworICAgIH0pLAorICAgIGFkZFNlbGVjdGlvbjogZG9jTWV0
aG9kT3AoZnVuY3Rpb24oYW5jaG9yLCBoZWFkLCBvcHRpb25zKSB7CisgICAgICB2YXIgcmFuZ2Vz
ID0gdGhpcy5zZWwucmFuZ2VzLnNsaWNlKDApOworICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdl
KGNsaXBQb3ModGhpcywgYW5jaG9yKSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvcikpKTsK
KyAgICAgIHNldFNlbGVjdGlvbih0aGlzLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLCByYW5n
ZXMubGVuZ3RoIC0gMSksIG9wdGlvbnMpOwogICAgIH0pLAoKLSAgICBnZXRTZWxlY3Rpb246IGZ1
bmN0aW9uKGxpbmVTZXApIHtyZXR1cm4gdGhpcy5nZXRSYW5nZSh0aGlzLnNlbC5mcm9tLCB0aGlz
LnNlbC50bywgbGluZVNlcCk7fSwKLSAgICByZXBsYWNlU2VsZWN0aW9uOiBmdW5jdGlvbihjb2Rl
LCBjb2xsYXBzZSwgb3JpZ2luKSB7Ci0gICAgICBtYWtlQ2hhbmdlKHRoaXMsIHtmcm9tOiB0aGlz
LnNlbC5mcm9tLCB0bzogdGhpcy5zZWwudG8sIHRleHQ6IHNwbGl0TGluZXMoY29kZSksIG9yaWdp
bjogb3JpZ2lufSwgY29sbGFwc2UgfHwgImFyb3VuZCIpOworICAgIGdldFNlbGVjdGlvbjogZnVu
Y3Rpb24obGluZVNlcCkgeworICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlcywgbGlu
ZXM7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAg
ICAgICB2YXIgc2VsID0gZ2V0QmV0d2Vlbih0aGlzLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNb
aV0udG8oKSk7CisgICAgICAgIGxpbmVzID0gbGluZXMgPyBsaW5lcy5jb25jYXQoc2VsKSA6IHNl
bDsKKyAgICAgIH0KKyAgICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzOwor
ICAgICAgZWxzZSByZXR1cm4gbGluZXMuam9pbihsaW5lU2VwIHx8ICJcbiIpOworICAgIH0sCisg
ICAgZ2V0U2VsZWN0aW9uczogZnVuY3Rpb24obGluZVNlcCkgeworICAgICAgdmFyIHBhcnRzID0g
W10sIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlczsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBzZWwgPSBnZXRCZXR3ZWVuKHRoaXMs
IHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tpXS50bygpKTsKKyAgICAgICAgaWYgKGxpbmVTZXAg
IT09IGZhbHNlKSBzZWwgPSBzZWwuam9pbihsaW5lU2VwIHx8ICJcbiIpOworICAgICAgICBwYXJ0
c1tpXSA9IHNlbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBwYXJ0czsKKyAgICB9LAorICAgIHJl
cGxhY2VTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGNvZGUsIGNvbGxhcHNlLCBvcmln
aW4pIHsKKyAgICAgIHZhciBkdXAgPSBbXTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKQorICAgICAgICBkdXBbaV0gPSBjb2RlOworICAgICAg
dGhpcy5yZXBsYWNlU2VsZWN0aW9ucyhkdXAsIGNvbGxhcHNlLCBvcmlnaW4gfHwgIitpbnB1dCIp
OworICAgIH0pLAorICAgIHJlcGxhY2VTZWxlY3Rpb25zOiBmdW5jdGlvbihjb2RlLCBjb2xsYXBz
ZSwgb3JpZ2luKSB7CisgICAgICB2YXIgY2hhbmdlcyA9IFtdLCBzZWwgPSB0aGlzLnNlbDsKKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAg
ICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldOworICAgICAgICBjaGFuZ2VzW2ldID0ge2Zyb206
IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCksIHRleHQ6IHNwbGl0TGluZXMoY29kZVtpXSks
IG9yaWdpbjogb3JpZ2lufTsKKyAgICAgIH0KKyAgICAgIHZhciBuZXdTZWwgPSBjb2xsYXBzZSAm
JiBjb2xsYXBzZSAhPSAiZW5kIiAmJiBjb21wdXRlUmVwbGFjZWRTZWwodGhpcywgY2hhbmdlcywg
Y29sbGFwc2UpOworICAgICAgZm9yICh2YXIgaSA9IGNoYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAw
OyBpLS0pCisgICAgICAgIG1ha2VDaGFuZ2UodGhpcywgY2hhbmdlc1tpXSk7CisgICAgICBpZiAo
bmV3U2VsKSBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeSh0aGlzLCBuZXdTZWwpOworICAgICAg
ZWxzZSBpZiAodGhpcy5jbSkgZW5zdXJlQ3Vyc29yVmlzaWJsZSh0aGlzLmNtKTsKICAgICB9LAot
ICAgIHVuZG86IGRvY09wZXJhdGlvbihmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3Rvcnko
dGhpcywgInVuZG8iKTt9KSwKLSAgICByZWRvOiBkb2NPcGVyYXRpb24oZnVuY3Rpb24oKSB7bWFr
ZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJyZWRvIik7fSksCisgICAgdW5kbzogZG9jTWV0aG9k
T3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJ1bmRvIik7fSksCisg
ICAgcmVkbzogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRo
aXMsICJyZWRvIik7fSksCisgICAgdW5kb1NlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24o
KSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJ1bmRvIiwgdHJ1ZSk7fSksCisgICAgcmVk
b1NlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5
KHRoaXMsICJyZWRvIiwgdHJ1ZSk7fSksCgotICAgIHNldEV4dGVuZGluZzogZnVuY3Rpb24odmFs
KSB7dGhpcy5zZWwuZXh0ZW5kID0gdmFsO30sCisgICAgc2V0RXh0ZW5kaW5nOiBmdW5jdGlvbih2
YWwpIHt0aGlzLmV4dGVuZCA9IHZhbDt9LAorICAgIGdldEV4dGVuZGluZzogZnVuY3Rpb24oKSB7
cmV0dXJuIHRoaXMuZXh0ZW5kO30sCgogICAgIGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHsKLSAg
ICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5OwotICAgICAgcmV0dXJuIHt1bmRvOiBoaXN0LmRv
bmUubGVuZ3RoLCByZWRvOiBoaXN0LnVuZG9uZS5sZW5ndGh9OworICAgICAgdmFyIGhpc3QgPSB0
aGlzLmhpc3RvcnksIGRvbmUgPSAwLCB1bmRvbmUgPSAwOworICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBoaXN0LmRvbmUubGVuZ3RoOyBpKyspIGlmICghaGlzdC5kb25lW2ldLnJhbmdlcykgKytk
b25lOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaXN0LnVuZG9uZS5sZW5ndGg7IGkrKykg
aWYgKCFoaXN0LnVuZG9uZVtpXS5yYW5nZXMpICsrdW5kb25lOworICAgICAgcmV0dXJuIHt1bmRv
OiBkb25lLCByZWRvOiB1bmRvbmV9OwogICAgIH0sCi0gICAgY2xlYXJIaXN0b3J5OiBmdW5jdGlv
bigpIHt0aGlzLmhpc3RvcnkgPSBtYWtlSGlzdG9yeSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlv
bik7fSwKKyAgICBjbGVhckhpc3Rvcnk6IGZ1bmN0aW9uKCkge3RoaXMuaGlzdG9yeSA9IG5ldyBI
aXN0b3J5KHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKTt9LAoKICAgICBtYXJrQ2xlYW46IGZ1
bmN0aW9uKCkgewotICAgICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSB0aGlzLmNoYW5nZUdlbmVy
YXRpb24oKTsKKyAgICAgIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gdGhpcy5jaGFuZ2VHZW5lcmF0
aW9uKHRydWUpOwogICAgIH0sCi0gICAgY2hhbmdlR2VuZXJhdGlvbjogZnVuY3Rpb24oKSB7Ci0g
ICAgICB0aGlzLmhpc3RvcnkubGFzdE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW4gPSBudWxs
OworICAgIGNoYW5nZUdlbmVyYXRpb246IGZ1bmN0aW9uKGZvcmNlU3BsaXQpIHsKKyAgICAgIGlm
IChmb3JjZVNwbGl0KQorICAgICAgICB0aGlzLmhpc3RvcnkubGFzdE9wID0gdGhpcy5oaXN0b3J5
Lmxhc3RPcmlnaW4gPSBudWxsOwogICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9u
OwogICAgIH0sCiAgICAgaXNDbGVhbjogZnVuY3Rpb24gKGdlbikgewpAQCAtNDkxNyw5ICs2Mjgw
LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgIHVu
ZG9uZTogY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkudW5kb25lKX07CiAgICAgfSwKICAg
ICBzZXRIaXN0b3J5OiBmdW5jdGlvbihoaXN0RGF0YSkgewotICAgICAgdmFyIGhpc3QgPSB0aGlz
Lmhpc3RvcnkgPSBtYWtlSGlzdG9yeSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7Ci0gICAg
ICBoaXN0LmRvbmUgPSBoaXN0RGF0YS5kb25lLnNsaWNlKDApOwotICAgICAgaGlzdC51bmRvbmUg
PSBoaXN0RGF0YS51bmRvbmUuc2xpY2UoMCk7CisgICAgICB2YXIgaGlzdCA9IHRoaXMuaGlzdG9y
eSA9IG5ldyBIaXN0b3J5KHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKTsKKyAgICAgIGhpc3Qu
ZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXkoaGlzdERhdGEuZG9uZS5zbGljZSgwKSwgbnVsbCwgdHJ1
ZSk7CisgICAgICBoaXN0LnVuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXkoaGlzdERhdGEudW5kb25l
LnNsaWNlKDApLCBudWxsLCB0cnVlKTsKICAgICB9LAoKICAgICBtYXJrVGV4dDogZnVuY3Rpb24o
ZnJvbSwgdG8sIG9wdGlvbnMpIHsKQEAgLTQ5MjcsNyArNjI5MCw4IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0sCiAgICAgc2V0Qm9va21hcms6IGZ1bmN0aW9uKHBv
cywgb3B0aW9ucykgewogICAgICAgdmFyIHJlYWxPcHRzID0ge3JlcGxhY2VkV2l0aDogb3B0aW9u
cyAmJiAob3B0aW9ucy5ub2RlVHlwZSA9PSBudWxsID8gb3B0aW9ucy53aWRnZXQgOiBvcHRpb25z
KSwKLSAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRMZWZ0OiBvcHRpb25zICYmIG9wdGlvbnMu
aW5zZXJ0TGVmdH07CisgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGVmdDogb3B0aW9ucyAm
JiBvcHRpb25zLmluc2VydExlZnQsCisgICAgICAgICAgICAgICAgICAgICAgY2xlYXJXaGVuRW1w
dHk6IGZhbHNlLCBzaGFyZWQ6IG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFyZWR9OwogICAgICAgcG9z
ID0gY2xpcFBvcyh0aGlzLCBwb3MpOwogICAgICAgcmV0dXJuIG1hcmtUZXh0KHRoaXMsIHBvcywg
cG9zLCByZWFsT3B0cywgImJvb2ttYXJrIik7CiAgICAgfSwKQEAgLTQ5NDIsNiArNjMwNiwyMyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIH0KICAgICAgIHJldHVy
biBtYXJrZXJzOwogICAgIH0sCisgICAgZmluZE1hcmtzOiBmdW5jdGlvbihmcm9tLCB0bywgZmls
dGVyKSB7CisgICAgICBmcm9tID0gY2xpcFBvcyh0aGlzLCBmcm9tKTsgdG8gPSBjbGlwUG9zKHRo
aXMsIHRvKTsKKyAgICAgIHZhciBmb3VuZCA9IFtdLCBsaW5lTm8gPSBmcm9tLmxpbmU7CisgICAg
ICB0aGlzLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgeworICAg
ICAgICB2YXIgc3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zOworICAgICAgICBpZiAoc3BhbnMpIGZv
ciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICB2YXIgc3Bh
biA9IHNwYW5zW2ldOworICAgICAgICAgIGlmICghKGxpbmVObyA9PSBmcm9tLmxpbmUgJiYgZnJv
bS5jaCA+IHNwYW4udG8gfHwKKyAgICAgICAgICAgICAgICBzcGFuLmZyb20gPT0gbnVsbCAmJiBs
aW5lTm8gIT0gZnJvbS5saW5lfHwKKyAgICAgICAgICAgICAgICBsaW5lTm8gPT0gdG8ubGluZSAm
JiBzcGFuLmZyb20gPiB0by5jaCkgJiYKKyAgICAgICAgICAgICAgKCFmaWx0ZXIgfHwgZmlsdGVy
KHNwYW4ubWFya2VyKSkpCisgICAgICAgICAgICBmb3VuZC5wdXNoKHNwYW4ubWFya2VyLnBhcmVu
dCB8fCBzcGFuLm1hcmtlcik7CisgICAgICAgIH0KKyAgICAgICAgKytsaW5lTm87CisgICAgICB9
KTsKKyAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9LAogICAgIGdldEFsbE1hcmtzOiBmdW5jdGlv
bigpIHsKICAgICAgIHZhciBtYXJrZXJzID0gW107CiAgICAgICB0aGlzLml0ZXIoZnVuY3Rpb24o
bGluZSkgewpAQCAtNDk3NSw4ICs2MzU2LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgY29weTogZnVuY3Rpb24oY29weUhpc3RvcnkpIHsKICAgICAgIHZhciBkb2Mg
PSBuZXcgRG9jKGdldExpbmVzKHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNp
emUpLCB0aGlzLm1vZGVPcHRpb24sIHRoaXMuZmlyc3QpOwogICAgICAgZG9jLnNjcm9sbFRvcCA9
IHRoaXMuc2Nyb2xsVG9wOyBkb2Muc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDsKLSAgICAg
IGRvYy5zZWwgPSB7ZnJvbTogdGhpcy5zZWwuZnJvbSwgdG86IHRoaXMuc2VsLnRvLCBoZWFkOiB0
aGlzLnNlbC5oZWFkLCBhbmNob3I6IHRoaXMuc2VsLmFuY2hvciwKLSAgICAgICAgICAgICAgICAg
c2hpZnQ6IHRoaXMuc2VsLnNoaWZ0LCBleHRlbmQ6IGZhbHNlLCBnb2FsQ29sdW1uOiB0aGlzLnNl
bC5nb2FsQ29sdW1ufTsKKyAgICAgIGRvYy5zZWwgPSB0aGlzLnNlbDsKKyAgICAgIGRvYy5leHRl
bmQgPSBmYWxzZTsKICAgICAgIGlmIChjb3B5SGlzdG9yeSkgewogICAgICAgICBkb2MuaGlzdG9y
eS51bmRvRGVwdGggPSB0aGlzLmhpc3RvcnkudW5kb0RlcHRoOwogICAgICAgICBkb2Muc2V0SGlz
dG9yeSh0aGlzLmdldEhpc3RvcnkoKSk7CkBAIC00OTkzLDYgKzYzNzQsNyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGlmIChvcHRpb25zLnNoYXJlZEhpc3QpIGNv
cHkuaGlzdG9yeSA9IHRoaXMuaGlzdG9yeTsKICAgICAgICh0aGlzLmxpbmtlZCB8fCAodGhpcy5s
aW5rZWQgPSBbXSkpLnB1c2goe2RvYzogY29weSwgc2hhcmVkSGlzdDogb3B0aW9ucy5zaGFyZWRI
aXN0fSk7CiAgICAgICBjb3B5LmxpbmtlZCA9IFt7ZG9jOiB0aGlzLCBpc1BhcmVudDogdHJ1ZSwg
c2hhcmVkSGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fV07CisgICAgICBjb3B5U2hhcmVkTWFya2Vy
cyhjb3B5LCBmaW5kU2hhcmVkTWFya2Vycyh0aGlzKSk7CiAgICAgICByZXR1cm4gY29weTsKICAg
ICB9LAogICAgIHVubGlua0RvYzogZnVuY3Rpb24ob3RoZXIpIHsKQEAgLTUwMDIsMTMgKzYzODQs
MTQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChsaW5r
LmRvYyAhPSBvdGhlcikgY29udGludWU7CiAgICAgICAgIHRoaXMubGlua2VkLnNwbGljZShpLCAx
KTsKICAgICAgICAgb3RoZXIudW5saW5rRG9jKHRoaXMpOworICAgICAgICBkZXRhY2hTaGFyZWRN
YXJrZXJzKGZpbmRTaGFyZWRNYXJrZXJzKHRoaXMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9
CiAgICAgICAvLyBJZiB0aGUgaGlzdG9yaWVzIHdlcmUgc2hhcmVkLCBzcGxpdCB0aGVtIGFnYWlu
CiAgICAgICBpZiAob3RoZXIuaGlzdG9yeSA9PSB0aGlzLmhpc3RvcnkpIHsKICAgICAgICAgdmFy
IHNwbGl0SWRzID0gW290aGVyLmlkXTsKICAgICAgICAgbGlua2VkRG9jcyhvdGhlciwgZnVuY3Rp
b24oZG9jKSB7c3BsaXRJZHMucHVzaChkb2MuaWQpO30sIHRydWUpOwotICAgICAgICBvdGhlci5o
aXN0b3J5ID0gbWFrZUhpc3RvcnkoKTsKKyAgICAgICAgb3RoZXIuaGlzdG9yeSA9IG5ldyBIaXN0
b3J5KG51bGwpOwogICAgICAgICBvdGhlci5oaXN0b3J5LmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5
KHRoaXMuaGlzdG9yeS5kb25lLCBzcGxpdElkcyk7CiAgICAgICAgIG90aGVyLmhpc3RvcnkudW5k
b25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkudW5kb25lLCBzcGxpdElkcyk7CiAg
ICAgICB9CkBAIC01MDE5LDkgKzY0MDIsMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgZ2V0RWRpdG9yOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5jbTt9CiAgIH0p
OwoKKyAgLy8gUHVibGljIGFsaWFzLgogICBEb2MucHJvdG90eXBlLmVhY2hMaW5lID0gRG9jLnBy
b3RvdHlwZS5pdGVyOwoKLSAgLy8gVGhlIERvYyBtZXRob2RzIHRoYXQgc2hvdWxkIGJlIGF2YWls
YWJsZSBvbiBDb2RlTWlycm9yIGluc3RhbmNlcworICAvLyBTZXQgdXAgbWV0aG9kcyBvbiBDb2Rl
TWlycm9yJ3MgcHJvdG90eXBlIHRvIHJlZGlyZWN0IHRvIHRoZSBlZGl0b3IncyBkb2N1bWVudC4K
ICAgdmFyIGRvbnREZWxlZ2F0ZSA9ICJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3Ii
LnNwbGl0KCIgIik7CiAgIGZvciAodmFyIHByb3AgaW4gRG9jLnByb3RvdHlwZSkgaWYgKERvYy5w
cm90b3R5cGUuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgaW5kZXhPZihkb250RGVsZWdhdGUsIHBy
b3ApIDwgMCkKICAgICBDb2RlTWlycm9yLnByb3RvdHlwZVtwcm9wXSA9IChmdW5jdGlvbihtZXRo
b2QpIHsKQEAgLTUwMzAsNiArNjQxNCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewoKICAgZXZlbnRNaXhpbihEb2MpOwoKKyAgLy8gQ2FsbCBmIGZvciBhbGwgbGlua2VkIGRv
Y3VtZW50cy4KICAgZnVuY3Rpb24gbGlua2VkRG9jcyhkb2MsIGYsIHNoYXJlZEhpc3RPbmx5KSB7
CiAgICAgZnVuY3Rpb24gcHJvcGFnYXRlKGRvYywgc2tpcCwgc2hhcmVkSGlzdCkgewogICAgICAg
aWYgKGRvYy5saW5rZWQpIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsr
aSkgewpAQCAtNTA0NCwyMiArNjQyOSwyNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBwcm9wYWdhdGUoZG9jLCBudWxsLCB0cnVlKTsKICAgfQoKKyAgLy8gQXR0YWNo
IGEgZG9jdW1lbnQgdG8gYW4gZWRpdG9yLgogICBmdW5jdGlvbiBhdHRhY2hEb2MoY20sIGRvYykg
ewogICAgIGlmIChkb2MuY20pIHRocm93IG5ldyBFcnJvcigiVGhpcyBkb2N1bWVudCBpcyBhbHJl
YWR5IGluIHVzZS4iKTsKICAgICBjbS5kb2MgPSBkb2M7CiAgICAgZG9jLmNtID0gY207CiAgICAg
ZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSk7CiAgICAgbG9hZE1vZGUoY20pOwotICAgIGlmICghY20u
b3B0aW9ucy5saW5lV3JhcHBpbmcpIGNvbXB1dGVNYXhMZW5ndGgoY20pOworICAgIGlmICghY20u
b3B0aW9ucy5saW5lV3JhcHBpbmcpIGZpbmRNYXhMaW5lKGNtKTsKICAgICBjbS5vcHRpb25zLm1v
ZGUgPSBkb2MubW9kZU9wdGlvbjsKICAgICByZWdDaGFuZ2UoY20pOwogICB9CgogICAvLyBMSU5F
IFVUSUxJVElFUwoKLSAgZnVuY3Rpb24gZ2V0TGluZShjaHVuaywgbikgewotICAgIG4gLT0gY2h1
bmsuZmlyc3Q7Ci0gICAgd2hpbGUgKCFjaHVuay5saW5lcykgeworICAvLyBGaW5kIHRoZSBsaW5l
IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIG51bWJlci4KKyAgZnVuY3Rp
b24gZ2V0TGluZShkb2MsIG4pIHsKKyAgICBuIC09IGRvYy5maXJzdDsKKyAgICBpZiAobiA8IDAg
fHwgbiA+PSBkb2Muc2l6ZSkgdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyBsaW5lICIgKyAo
biArIGRvYy5maXJzdCkgKyAiIGluIHRoZSBkb2N1bWVudC4iKTsKKyAgICBmb3IgKHZhciBjaHVu
ayA9IGRvYzsgIWNodW5rLmxpbmVzOykgewogICAgICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHsK
ICAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtT
aXplKCk7CiAgICAgICAgIGlmIChuIDwgc3opIHsgY2h1bmsgPSBjaGlsZDsgYnJlYWs7IH0KQEAg
LTUwNjksNiArNjQ1Nyw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IHJldHVybiBjaHVuay5saW5lc1tuXTsKICAgfQoKKyAgLy8gR2V0IHRoZSBwYXJ0IG9mIGEgZG9j
dW1lbnQgYmV0d2VlbiB0d28gcG9zaXRpb25zLCBhcyBhbiBhcnJheSBvZgorICAvLyBzdHJpbmdz
LgogICBmdW5jdGlvbiBnZXRCZXR3ZWVuKGRvYywgc3RhcnQsIGVuZCkgewogICAgIHZhciBvdXQg
PSBbXSwgbiA9IHN0YXJ0LmxpbmU7CiAgICAgZG9jLml0ZXIoc3RhcnQubGluZSwgZW5kLmxpbmUg
KyAxLCBmdW5jdGlvbihsaW5lKSB7CkBAIC01MDgwLDE3ICs2NDcwLDIyIEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0pOwogICAgIHJldHVybiBvdXQ7CiAgIH0KKyAg
Ly8gR2V0IHRoZSBsaW5lcyBiZXR3ZWVuIGZyb20gYW5kIHRvLCBhcyBhcnJheSBvZiBzdHJpbmdz
LgogICBmdW5jdGlvbiBnZXRMaW5lcyhkb2MsIGZyb20sIHRvKSB7CiAgICAgdmFyIG91dCA9IFtd
OwogICAgIGRvYy5pdGVyKGZyb20sIHRvLCBmdW5jdGlvbihsaW5lKSB7IG91dC5wdXNoKGxpbmUu
dGV4dCk7IH0pOwogICAgIHJldHVybiBvdXQ7CiAgIH0KCisgIC8vIFVwZGF0ZSB0aGUgaGVpZ2h0
IG9mIGEgbGluZSwgcHJvcGFnYXRpbmcgdGhlIGhlaWdodCBjaGFuZ2UKKyAgLy8gdXB3YXJkcyB0
byBwYXJlbnQgbm9kZXMuCiAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgaGVpZ2h0
KSB7CiAgICAgdmFyIGRpZmYgPSBoZWlnaHQgLSBsaW5lLmhlaWdodDsKLSAgICBmb3IgKHZhciBu
ID0gbGluZTsgbjsgbiA9IG4ucGFyZW50KSBuLmhlaWdodCArPSBkaWZmOworICAgIGlmIChkaWZm
KSBmb3IgKHZhciBuID0gbGluZTsgbjsgbiA9IG4ucGFyZW50KSBuLmhlaWdodCArPSBkaWZmOwog
ICB9CgorICAvLyBHaXZlbiBhIGxpbmUgb2JqZWN0LCBmaW5kIGl0cyBsaW5lIG51bWJlciBieSB3
YWxraW5nIHVwIHRocm91Z2gKKyAgLy8gaXRzIHBhcmVudCBsaW5rcy4KICAgZnVuY3Rpb24gbGlu
ZU5vKGxpbmUpIHsKICAgICBpZiAobGluZS5wYXJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAg
ICAgdmFyIGN1ciA9IGxpbmUucGFyZW50LCBubyA9IGluZGV4T2YoY3VyLmxpbmVzLCBsaW5lKTsK
QEAgLTUxMDMsMTAgKzY0OTgsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgcmV0dXJuIG5vICsgY3VyLmZpcnN0OwogICB9CgorICAvLyBGaW5kIHRoZSBsaW5lIGF0
IHRoZSBnaXZlbiB2ZXJ0aWNhbCBwb3NpdGlvbiwgdXNpbmcgdGhlIGhlaWdodAorICAvLyBpbmZv
cm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgdHJlZS4KICAgZnVuY3Rpb24gbGluZUF0SGVpZ2h0KGNo
dW5rLCBoKSB7CiAgICAgdmFyIG4gPSBjaHVuay5maXJzdDsKICAgICBvdXRlcjogZG8gewotICAg
ICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaHVuay5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kp
IHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyArK2kp
IHsKICAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIGNoID0gY2hpbGQuaGVp
Z2h0OwogICAgICAgICBpZiAoaCA8IGNoKSB7IGNodW5rID0gY2hpbGQ7IGNvbnRpbnVlIG91dGVy
OyB9CiAgICAgICAgIGggLT0gY2g7CkBAIC01MTE0LDcgKzY1MTEsNyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIH0KICAgICAgIHJldHVybiBuOwogICAgIH0gd2hp
bGUgKCFjaHVuay5saW5lcyk7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaHVuay5saW5lcy5s
ZW5ndGg7IGkgPCBlOyArK2kpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rLmxpbmVz
Lmxlbmd0aDsgKytpKSB7CiAgICAgICB2YXIgbGluZSA9IGNodW5rLmxpbmVzW2ldLCBsaCA9IGxp
bmUuaGVpZ2h0OwogICAgICAgaWYgKGggPCBsaCkgYnJlYWs7CiAgICAgICBoIC09IGxoOwpAQCAt
NTEyMiw4ICs2NTE5LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IHJldHVybiBuICsgaTsKICAgfQoKLSAgZnVuY3Rpb24gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lT2Jq
KSB7Ci0gICAgbGluZU9iaiA9IHZpc3VhbExpbmUoY20uZG9jLCBsaW5lT2JqKTsKKworICAvLyBG
aW5kIHRoZSBoZWlnaHQgYWJvdmUgdGhlIGdpdmVuIGxpbmUuCisgIGZ1bmN0aW9uIGhlaWdodEF0
TGluZShsaW5lT2JqKSB7CisgICAgbGluZU9iaiA9IHZpc3VhbExpbmUobGluZU9iaik7CgogICAg
IHZhciBoID0gMCwgY2h1bmsgPSBsaW5lT2JqLnBhcmVudDsKICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNodW5rLmxpbmVzLmxlbmd0aDsgKytpKSB7CkBAIC01MTQxLDYgKzY1NDAsOSBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gaDsKICAgfQoKKyAgLy8g
R2V0IHRoZSBiaWRpIG9yZGVyaW5nIGZvciB0aGUgZ2l2ZW4gbGluZSAoYW5kIGNhY2hlIGl0KS4g
UmV0dXJucworICAvLyBmYWxzZSBmb3IgbGluZXMgdGhhdCBhcmUgZnVsbHkgbGVmdC10by1yaWdo
dCwgYW5kIGFuIGFycmF5IG9mCisgIC8vIEJpZGlTcGFuIG9iamVjdHMgb3RoZXJ3aXNlLgogICBm
dW5jdGlvbiBnZXRPcmRlcihsaW5lKSB7CiAgICAgdmFyIG9yZGVyID0gbGluZS5vcmRlcjsKICAg
ICBpZiAob3JkZXIgPT0gbnVsbCkgb3JkZXIgPSBsaW5lLm9yZGVyID0gYmlkaU9yZGVyaW5nKGxp
bmUudGV4dCk7CkBAIC01MTQ5LDUwICs2NTUxLDcwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewoKICAgLy8gSElTVE9SWQoKLSAgZnVuY3Rpb24gbWFrZUhpc3Rvcnkoc3RhcnRH
ZW4pIHsKLSAgICByZXR1cm4gewotICAgICAgLy8gQXJyYXlzIG9mIGhpc3RvcnkgZXZlbnRzLiBE
b2luZyBzb21ldGhpbmcgYWRkcyBhbiBldmVudCB0bwotICAgICAgLy8gZG9uZSBhbmQgY2xlYXJz
IHVuZG8uIFVuZG9pbmcgbW92ZXMgZXZlbnRzIGZyb20gZG9uZSB0bwotICAgICAgLy8gdW5kb25l
LCByZWRvaW5nIG1vdmVzIHRoZW0gaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4KLSAgICAgIGRvbmU6
IFtdLCB1bmRvbmU6IFtdLCB1bmRvRGVwdGg6IEluZmluaXR5LAotICAgICAgLy8gVXNlZCB0byB0
cmFjayB3aGVuIGNoYW5nZXMgY2FuIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIHVuZG8KLSAgICAg
IC8vIGV2ZW50Ci0gICAgICBsYXN0VGltZTogMCwgbGFzdE9wOiBudWxsLCBsYXN0T3JpZ2luOiBu
dWxsLAotICAgICAgLy8gVXNlZCBieSB0aGUgaXNDbGVhbigpIG1ldGhvZAotICAgICAgZ2VuZXJh
dGlvbjogc3RhcnRHZW4gfHwgMSwgbWF4R2VuZXJhdGlvbjogc3RhcnRHZW4gfHwgMQotICAgIH07
Ci0gIH0KLQotICBmdW5jdGlvbiBhdHRhY2hMb2NhbFNwYW5zKGRvYywgY2hhbmdlLCBmcm9tLCB0
bykgewotICAgIHZhciBleGlzdGluZyA9IGNoYW5nZVsic3BhbnNfIiArIGRvYy5pZF0sIG4gPSAw
OwotICAgIGRvYy5pdGVyKE1hdGgubWF4KGRvYy5maXJzdCwgZnJvbSksIE1hdGgubWluKGRvYy5m
aXJzdCArIGRvYy5zaXplLCB0byksIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIGlmIChsaW5lLm1h
cmtlZFNwYW5zKQotICAgICAgICAoZXhpc3RpbmcgfHwgKGV4aXN0aW5nID0gY2hhbmdlWyJzcGFu
c18iICsgZG9jLmlkXSA9IHt9KSlbbl0gPSBsaW5lLm1hcmtlZFNwYW5zOwotICAgICAgKytuOwot
ICAgIH0pOwotICB9Ci0KKyAgZnVuY3Rpb24gSGlzdG9yeShzdGFydEdlbikgeworICAgIC8vIEFy
cmF5cyBvZiBjaGFuZ2UgZXZlbnRzIGFuZCBzZWxlY3Rpb25zLiBEb2luZyBzb21ldGhpbmcgYWRk
cyBhbgorICAgIC8vIGV2ZW50IHRvIGRvbmUgYW5kIGNsZWFycyB1bmRvLiBVbmRvaW5nIG1vdmVz
IGV2ZW50cyBmcm9tIGRvbmUKKyAgICAvLyB0byB1bmRvbmUsIHJlZG9pbmcgbW92ZXMgdGhlbSBp
biB0aGUgb3RoZXIgZGlyZWN0aW9uLgorICAgIHRoaXMuZG9uZSA9IFtdOyB0aGlzLnVuZG9uZSA9
IFtdOworICAgIHRoaXMudW5kb0RlcHRoID0gSW5maW5pdHk7CisgICAgLy8gVXNlZCB0byB0cmFj
ayB3aGVuIGNoYW5nZXMgY2FuIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIHVuZG8KKyAgICAvLyBl
dmVudAorICAgIHRoaXMubGFzdE1vZFRpbWUgPSB0aGlzLmxhc3RTZWxUaW1lID0gMDsKKyAgICB0
aGlzLmxhc3RPcCA9IG51bGw7CisgICAgdGhpcy5sYXN0T3JpZ2luID0gdGhpcy5sYXN0U2VsT3Jp
Z2luID0gbnVsbDsKKyAgICAvLyBVc2VkIGJ5IHRoZSBpc0NsZWFuKCkgbWV0aG9kCisgICAgdGhp
cy5nZW5lcmF0aW9uID0gdGhpcy5tYXhHZW5lcmF0aW9uID0gc3RhcnRHZW4gfHwgMTsKKyAgfQor
CisgIC8vIENyZWF0ZSBhIGhpc3RvcnkgY2hhbmdlIGV2ZW50IGZyb20gYW4gdXBkYXRlRG9jLXN0
eWxlIGNoYW5nZQorICAvLyBvYmplY3QuCiAgIGZ1bmN0aW9uIGhpc3RvcnlDaGFuZ2VGcm9tQ2hh
bmdlKGRvYywgY2hhbmdlKSB7Ci0gICAgdmFyIGZyb20gPSB7IGxpbmU6IGNoYW5nZS5mcm9tLmxp
bmUsIGNoOiBjaGFuZ2UuZnJvbS5jaCB9OwotICAgIHZhciBoaXN0Q2hhbmdlID0ge2Zyb206IGZy
b20sIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKSwgdGV4dDogZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5m
cm9tLCBjaGFuZ2UudG8pfTsKKyAgICB2YXIgaGlzdENoYW5nZSA9IHtmcm9tOiBjb3B5UG9zKGNo
YW5nZS5mcm9tKSwgdG86IGNoYW5nZUVuZChjaGFuZ2UpLCB0ZXh0OiBnZXRCZXR3ZWVuKGRvYywg
Y2hhbmdlLmZyb20sIGNoYW5nZS50byl9OwogICAgIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0
Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpOwogICAgIGxpbmtl
ZERvY3MoZG9jLCBmdW5jdGlvbihkb2MpIHthdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlzdENoYW5n
ZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTt9LCB0cnVlKTsKICAgICBy
ZXR1cm4gaGlzdENoYW5nZTsKICAgfQoKLSAgZnVuY3Rpb24gYWRkVG9IaXN0b3J5KGRvYywgY2hh
bmdlLCBzZWxBZnRlciwgb3BJZCkgeworICAvLyBQb3AgYWxsIHNlbGVjdGlvbiBldmVudHMgb2Zm
IHRoZSBlbmQgb2YgYSBoaXN0b3J5IGFycmF5LiBTdG9wIGF0CisgIC8vIGEgY2hhbmdlIGV2ZW50
LgorICBmdW5jdGlvbiBjbGVhclNlbGVjdGlvbkV2ZW50cyhhcnJheSkgeworICAgIHdoaWxlIChh
cnJheS5sZW5ndGgpIHsKKyAgICAgIHZhciBsYXN0ID0gbHN0KGFycmF5KTsKKyAgICAgIGlmIChs
YXN0LnJhbmdlcykgYXJyYXkucG9wKCk7CisgICAgICBlbHNlIGJyZWFrOworICAgIH0KKyAgfQor
CisgIC8vIEZpbmQgdGhlIHRvcCBjaGFuZ2UgZXZlbnQgaW4gdGhlIGhpc3RvcnkuIFBvcCBvZmYg
c2VsZWN0aW9uCisgIC8vIGV2ZW50cyB0aGF0IGFyZSBpbiB0aGUgd2F5LgorICBmdW5jdGlvbiBs
YXN0Q2hhbmdlRXZlbnQoaGlzdCwgZm9yY2UpIHsKKyAgICBpZiAoZm9yY2UpIHsKKyAgICAgIGNs
ZWFyU2VsZWN0aW9uRXZlbnRzKGhpc3QuZG9uZSk7CisgICAgICByZXR1cm4gbHN0KGhpc3QuZG9u
ZSk7CisgICAgfSBlbHNlIGlmIChoaXN0LmRvbmUubGVuZ3RoICYmICFsc3QoaGlzdC5kb25lKS5y
YW5nZXMpIHsKKyAgICAgIHJldHVybiBsc3QoaGlzdC5kb25lKTsKKyAgICB9IGVsc2UgaWYgKGhp
c3QuZG9uZS5sZW5ndGggPiAxICYmICFoaXN0LmRvbmVbaGlzdC5kb25lLmxlbmd0aCAtIDJdLnJh
bmdlcykgeworICAgICAgaGlzdC5kb25lLnBvcCgpOworICAgICAgcmV0dXJuIGxzdChoaXN0LmRv
bmUpOworICAgIH0KKyAgfQorCisgIC8vIFJlZ2lzdGVyIGEgY2hhbmdlIGluIHRoZSBoaXN0b3J5
LiBNZXJnZXMgY2hhbmdlcyB0aGF0IGFyZSB3aXRoaW4KKyAgLy8gYSBzaW5nbGUgb3BlcmF0aW9u
LCBvcmUgYXJlIGNsb3NlIHRvZ2V0aGVyIHdpdGggYW4gb3JpZ2luIHRoYXQKKyAgLy8gYWxsb3dz
IG1lcmdpbmcgKHN0YXJ0aW5nIHdpdGggIisiKSBpbnRvIGEgc2luZ2xlIGV2ZW50LgorICBmdW5j
dGlvbiBhZGRDaGFuZ2VUb0hpc3RvcnkoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBvcElkKSB7CiAg
ICAgdmFyIGhpc3QgPSBkb2MuaGlzdG9yeTsKICAgICBoaXN0LnVuZG9uZS5sZW5ndGggPSAwOwot
ICAgIHZhciB0aW1lID0gK25ldyBEYXRlLCBjdXIgPSBsc3QoaGlzdC5kb25lKTsKKyAgICB2YXIg
dGltZSA9ICtuZXcgRGF0ZSwgY3VyOwoKLSAgICBpZiAoY3VyICYmCi0gICAgICAgIChoaXN0Lmxh
c3RPcCA9PSBvcElkIHx8CisgICAgaWYgKChoaXN0Lmxhc3RPcCA9PSBvcElkIHx8CiAgICAgICAg
ICBoaXN0Lmxhc3RPcmlnaW4gPT0gY2hhbmdlLm9yaWdpbiAmJiBjaGFuZ2Uub3JpZ2luICYmCi0g
ICAgICAgICAoKGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09ICIrIiAmJiBkb2MuY20gJiYgaGlz
dC5sYXN0VGltZSA+IHRpbWUgLSBkb2MuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheSkgfHwK
LSAgICAgICAgICBjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKiIpKSkgeworICAgICAgICAg
KChjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKyIgJiYgZG9jLmNtICYmIGhpc3QubGFzdE1v
ZFRpbWUgPiB0aW1lIC0gZG9jLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXkpIHx8CisgICAg
ICAgICAgY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gIioiKSkgJiYKKyAgICAgICAgKGN1ciA9
IGxhc3RDaGFuZ2VFdmVudChoaXN0LCBoaXN0Lmxhc3RPcCA9PSBvcElkKSkpIHsKICAgICAgIC8v
IE1lcmdlIHRoaXMgY2hhbmdlIGludG8gdGhlIGxhc3QgZXZlbnQKICAgICAgIHZhciBsYXN0ID0g
bHN0KGN1ci5jaGFuZ2VzKTsKLSAgICAgIGlmIChwb3NFcShjaGFuZ2UuZnJvbSwgY2hhbmdlLnRv
KSAmJiBwb3NFcShjaGFuZ2UuZnJvbSwgbGFzdC50bykpIHsKKyAgICAgIGlmIChjbXAoY2hhbmdl
LmZyb20sIGNoYW5nZS50bykgPT0gMCAmJiBjbXAoY2hhbmdlLmZyb20sIGxhc3QudG8pID09IDAp
IHsKICAgICAgICAgLy8gT3B0aW1pemVkIGNhc2UgZm9yIHNpbXBsZSBpbnNlcnRpb24gLS0gZG9u
J3Qgd2FudCB0byBhZGQKICAgICAgICAgLy8gbmV3IGNoYW5nZXNldHMgZm9yIGV2ZXJ5IGNoYXJh
Y3RlciB0eXBlZAogICAgICAgICBsYXN0LnRvID0gY2hhbmdlRW5kKGNoYW5nZSk7CkBAIC01MjAw
LDIzICs2NjIyLDgxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAg
ICAvLyBBZGQgbmV3IHN1Yi1ldmVudAogICAgICAgICBjdXIuY2hhbmdlcy5wdXNoKGhpc3RvcnlD
aGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7CiAgICAgICB9Ci0gICAgICBjdXIuYW5jaG9y
QWZ0ZXIgPSBzZWxBZnRlci5hbmNob3I7IGN1ci5oZWFkQWZ0ZXIgPSBzZWxBZnRlci5oZWFkOwog
ICAgIH0gZWxzZSB7CiAgICAgICAvLyBDYW4gbm90IGJlIG1lcmdlZCwgc3RhcnQgYSBuZXcgZXZl
bnQuCisgICAgICB2YXIgYmVmb3JlID0gbHN0KGhpc3QuZG9uZSk7CisgICAgICBpZiAoIWJlZm9y
ZSB8fCAhYmVmb3JlLnJhbmdlcykKKyAgICAgICAgcHVzaFNlbGVjdGlvblRvSGlzdG9yeShkb2Mu
c2VsLCBoaXN0LmRvbmUpOwogICAgICAgY3VyID0ge2NoYW5nZXM6IFtoaXN0b3J5Q2hhbmdlRnJv
bUNoYW5nZShkb2MsIGNoYW5nZSldLAotICAgICAgICAgICAgIGdlbmVyYXRpb246IGhpc3QuZ2Vu
ZXJhdGlvbiwKLSAgICAgICAgICAgICBhbmNob3JCZWZvcmU6IGRvYy5zZWwuYW5jaG9yLCBoZWFk
QmVmb3JlOiBkb2Muc2VsLmhlYWQsCi0gICAgICAgICAgICAgYW5jaG9yQWZ0ZXI6IHNlbEFmdGVy
LmFuY2hvciwgaGVhZEFmdGVyOiBzZWxBZnRlci5oZWFkfTsKKyAgICAgICAgICAgICBnZW5lcmF0
aW9uOiBoaXN0LmdlbmVyYXRpb259OwogICAgICAgaGlzdC5kb25lLnB1c2goY3VyKTsKLSAgICAg
IGhpc3QuZ2VuZXJhdGlvbiA9ICsraGlzdC5tYXhHZW5lcmF0aW9uOwotICAgICAgd2hpbGUgKGhp
c3QuZG9uZS5sZW5ndGggPiBoaXN0LnVuZG9EZXB0aCkKKyAgICAgIHdoaWxlIChoaXN0LmRvbmUu
bGVuZ3RoID4gaGlzdC51bmRvRGVwdGgpIHsKICAgICAgICAgaGlzdC5kb25lLnNoaWZ0KCk7Cisg
ICAgICAgIGlmICghaGlzdC5kb25lWzBdLnJhbmdlcykgaGlzdC5kb25lLnNoaWZ0KCk7CisgICAg
ICB9CiAgICAgfQotICAgIGhpc3QubGFzdFRpbWUgPSB0aW1lOworICAgIGhpc3QuZG9uZS5wdXNo
KHNlbEFmdGVyKTsKKyAgICBoaXN0LmdlbmVyYXRpb24gPSArK2hpc3QubWF4R2VuZXJhdGlvbjsK
KyAgICBoaXN0Lmxhc3RNb2RUaW1lID0gaGlzdC5sYXN0U2VsVGltZSA9IHRpbWU7CisgICAgaGlz
dC5sYXN0T3AgPSBvcElkOworICAgIGhpc3QubGFzdE9yaWdpbiA9IGhpc3QubGFzdFNlbE9yaWdp
biA9IGNoYW5nZS5vcmlnaW47CisKKyAgICBpZiAoIWxhc3QpIHNpZ25hbChkb2MsICJoaXN0b3J5
QWRkZWQiKTsKKyAgfQorCisgIGZ1bmN0aW9uIHNlbGVjdGlvbkV2ZW50Q2FuQmVNZXJnZWQoZG9j
LCBvcmlnaW4sIHByZXYsIHNlbCkgeworICAgIHZhciBjaCA9IG9yaWdpbi5jaGFyQXQoMCk7Cisg
ICAgcmV0dXJuIGNoID09ICIqIiB8fAorICAgICAgY2ggPT0gIisiICYmCisgICAgICBwcmV2LnJh
bmdlcy5sZW5ndGggPT0gc2VsLnJhbmdlcy5sZW5ndGggJiYKKyAgICAgIHByZXYuc29tZXRoaW5n
U2VsZWN0ZWQoKSA9PSBzZWwuc29tZXRoaW5nU2VsZWN0ZWQoKSAmJgorICAgICAgbmV3IERhdGUg
LSBkb2MuaGlzdG9yeS5sYXN0U2VsVGltZSA8PSAoZG9jLmNtID8gZG9jLmNtLm9wdGlvbnMuaGlz
dG9yeUV2ZW50RGVsYXkgOiA1MDApOworICB9CisKKyAgLy8gQ2FsbGVkIHdoZW5ldmVyIHRoZSBz
ZWxlY3Rpb24gY2hhbmdlcywgc2V0cyB0aGUgbmV3IHNlbGVjdGlvbiBhcworICAvLyB0aGUgcGVu
ZGluZyBzZWxlY3Rpb24gaW4gdGhlIGhpc3RvcnksIGFuZCBwdXNoZXMgdGhlIG9sZCBwZW5kaW5n
CisgIC8vIHNlbGVjdGlvbiBpbnRvIHRoZSAnZG9uZScgYXJyYXkgd2hlbiBpdCB3YXMgc2lnbmlm
aWNhbnRseQorICAvLyBkaWZmZXJlbnQgKGluIG51bWJlciBvZiBzZWxlY3RlZCByYW5nZXMsIGVt
cHRpbmVzcywgb3IgdGltZSkuCisgIGZ1bmN0aW9uIGFkZFNlbGVjdGlvblRvSGlzdG9yeShkb2Ms
IHNlbCwgb3BJZCwgb3B0aW9ucykgeworICAgIHZhciBoaXN0ID0gZG9jLmhpc3RvcnksIG9yaWdp
biA9IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmlnaW47CisKKyAgICAvLyBBIG5ldyBldmVudCBpcyBz
dGFydGVkIHdoZW4gdGhlIHByZXZpb3VzIG9yaWdpbiBkb2VzIG5vdCBtYXRjaAorICAgIC8vIHRo
ZSBjdXJyZW50LCBvciB0aGUgb3JpZ2lucyBkb24ndCBhbGxvdyBtYXRjaGluZy4gT3JpZ2lucwor
ICAgIC8vIHN0YXJ0aW5nIHdpdGggKiBhcmUgYWx3YXlzIG1lcmdlZCwgdGhvc2Ugc3RhcnRpbmcg
d2l0aCArIGFyZQorICAgIC8vIG1lcmdlZCB3aGVuIHNpbWlsYXIgYW5kIGNsb3NlIHRvZ2V0aGVy
IGluIHRpbWUuCisgICAgaWYgKG9wSWQgPT0gaGlzdC5sYXN0T3AgfHwKKyAgICAgICAgKG9yaWdp
biAmJiBoaXN0Lmxhc3RTZWxPcmlnaW4gPT0gb3JpZ2luICYmCisgICAgICAgICAoaGlzdC5sYXN0
TW9kVGltZSA9PSBoaXN0Lmxhc3RTZWxUaW1lICYmIGhpc3QubGFzdE9yaWdpbiA9PSBvcmlnaW4g
fHwKKyAgICAgICAgICBzZWxlY3Rpb25FdmVudENhbkJlTWVyZ2VkKGRvYywgb3JpZ2luLCBsc3Qo
aGlzdC5kb25lKSwgc2VsKSkpKQorICAgICAgaGlzdC5kb25lW2hpc3QuZG9uZS5sZW5ndGggLSAx
XSA9IHNlbDsKKyAgICBlbHNlCisgICAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbCwgaGlz
dC5kb25lKTsKKworICAgIGhpc3QubGFzdFNlbFRpbWUgPSArbmV3IERhdGU7CisgICAgaGlzdC5s
YXN0U2VsT3JpZ2luID0gb3JpZ2luOwogICAgIGhpc3QubGFzdE9wID0gb3BJZDsKLSAgICBoaXN0
Lmxhc3RPcmlnaW4gPSBjaGFuZ2Uub3JpZ2luOworICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMu
Y2xlYXJSZWRvICE9PSBmYWxzZSkKKyAgICAgIGNsZWFyU2VsZWN0aW9uRXZlbnRzKGhpc3QudW5k
b25lKTsKKyAgfQorCisgIGZ1bmN0aW9uIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsLCBkZXN0
KSB7CisgICAgdmFyIHRvcCA9IGxzdChkZXN0KTsKKyAgICBpZiAoISh0b3AgJiYgdG9wLnJhbmdl
cyAmJiB0b3AuZXF1YWxzKHNlbCkpKQorICAgICAgZGVzdC5wdXNoKHNlbCk7CisgIH0KKworICAv
LyBVc2VkIHRvIHN0b3JlIG1hcmtlZCBzcGFuIGluZm9ybWF0aW9uIGluIHRoZSBoaXN0b3J5Lgor
ICBmdW5jdGlvbiBhdHRhY2hMb2NhbFNwYW5zKGRvYywgY2hhbmdlLCBmcm9tLCB0bykgeworICAg
IHZhciBleGlzdGluZyA9IGNoYW5nZVsic3BhbnNfIiArIGRvYy5pZF0sIG4gPSAwOworICAgIGRv
Yy5pdGVyKE1hdGgubWF4KGRvYy5maXJzdCwgZnJvbSksIE1hdGgubWluKGRvYy5maXJzdCArIGRv
Yy5zaXplLCB0byksIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIGlmIChsaW5lLm1hcmtlZFNwYW5z
KQorICAgICAgICAoZXhpc3RpbmcgfHwgKGV4aXN0aW5nID0gY2hhbmdlWyJzcGFuc18iICsgZG9j
LmlkXSA9IHt9KSlbbl0gPSBsaW5lLm1hcmtlZFNwYW5zOworICAgICAgKytuOworICAgIH0pOwog
ICB9CgorICAvLyBXaGVuIHVuL3JlLWRvaW5nIHJlc3RvcmVzIHRleHQgY29udGFpbmluZyBtYXJr
ZWQgc3BhbnMsIHRob3NlCisgIC8vIHRoYXQgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgY2xlYXJlZCBz
aG91bGQgbm90IGJlIHJlc3RvcmVkLgogICBmdW5jdGlvbiByZW1vdmVDbGVhcmVkU3BhbnMoc3Bh
bnMpIHsKICAgICBpZiAoIXNwYW5zKSByZXR1cm4gbnVsbDsKICAgICBmb3IgKHZhciBpID0gMCwg
b3V0OyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHsKQEAgLTUyMjYsNiArNjcwNiw3IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiAhb3V0ID8gc3BhbnMgOiBv
dXQubGVuZ3RoID8gb3V0IDogbnVsbDsKICAgfQoKKyAgLy8gUmV0cmlldmUgYW5kIGZpbHRlciB0
aGUgb2xkIG1hcmtlZCBzcGFucyBzdG9yZWQgaW4gYSBjaGFuZ2UgZXZlbnQuCiAgIGZ1bmN0aW9u
IGdldE9sZFNwYW5zKGRvYywgY2hhbmdlKSB7CiAgICAgdmFyIGZvdW5kID0gY2hhbmdlWyJzcGFu
c18iICsgZG9jLmlkXTsKICAgICBpZiAoIWZvdW5kKSByZXR1cm4gbnVsbDsKQEAgLTUyMzYsMTEg
KzY3MTcsMTUgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CgogICAvLyBVc2Vk
IGJvdGggdG8gcHJvdmlkZSBhIEpTT04tc2FmZSBvYmplY3QgaW4gLmdldEhpc3RvcnksIGFuZCwg
d2hlbgogICAvLyBkZXRhY2hpbmcgYSBkb2N1bWVudCwgdG8gc3BsaXQgdGhlIGhpc3RvcnkgaW4g
dHdvCi0gIGZ1bmN0aW9uIGNvcHlIaXN0b3J5QXJyYXkoZXZlbnRzLCBuZXdHcm91cCkgeworICBm
dW5jdGlvbiBjb3B5SGlzdG9yeUFycmF5KGV2ZW50cywgbmV3R3JvdXAsIGluc3RhbnRpYXRlU2Vs
KSB7CiAgICAgZm9yICh2YXIgaSA9IDAsIGNvcHkgPSBbXTsgaSA8IGV2ZW50cy5sZW5ndGg7ICsr
aSkgewotICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2ldLCBjaGFuZ2VzID0gZXZlbnQuY2hhbmdl
cywgbmV3Q2hhbmdlcyA9IFtdOwotICAgICAgY29weS5wdXNoKHtjaGFuZ2VzOiBuZXdDaGFuZ2Vz
LCBhbmNob3JCZWZvcmU6IGV2ZW50LmFuY2hvckJlZm9yZSwgaGVhZEJlZm9yZTogZXZlbnQuaGVh
ZEJlZm9yZSwKLSAgICAgICAgICAgICAgICAgYW5jaG9yQWZ0ZXI6IGV2ZW50LmFuY2hvckFmdGVy
LCBoZWFkQWZ0ZXI6IGV2ZW50LmhlYWRBZnRlcn0pOworICAgICAgdmFyIGV2ZW50ID0gZXZlbnRz
W2ldOworICAgICAgaWYgKGV2ZW50LnJhbmdlcykgeworICAgICAgICBjb3B5LnB1c2goaW5zdGFu
dGlhdGVTZWwgPyBTZWxlY3Rpb24ucHJvdG90eXBlLmRlZXBDb3B5LmNhbGwoZXZlbnQpIDogZXZl
bnQpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIHZhciBjaGFuZ2VzID0gZXZl
bnQuY2hhbmdlcywgbmV3Q2hhbmdlcyA9IFtdOworICAgICAgY29weS5wdXNoKHtjaGFuZ2VzOiBu
ZXdDaGFuZ2VzfSk7CiAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoYW5nZXMubGVuZ3RoOyAr
K2opIHsKICAgICAgICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbal0sIG07CiAgICAgICAgIG5ld0No
YW5nZXMucHVzaCh7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBjaGFuZ2UudG8sIHRleHQ6IGNoYW5n
ZS50ZXh0fSk7CkBAIC01MjU3LDcgKzY3NDIsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKCiAgIC8vIFJlYmFzaW5nL3Jlc2V0dGluZyBoaXN0b3J5IHRvIGRlYWwgd2l0aCBl
eHRlcm5hbGx5LXNvdXJjZWQgY2hhbmdlcwoKLSAgZnVuY3Rpb24gcmViYXNlSGlzdFNlbChwb3Ms
IGZyb20sIHRvLCBkaWZmKSB7CisgIGZ1bmN0aW9uIHJlYmFzZUhpc3RTZWxTaW5nbGUocG9zLCBm
cm9tLCB0bywgZGlmZikgewogICAgIGlmICh0byA8IHBvcy5saW5lKSB7CiAgICAgICBwb3MubGlu
ZSArPSBkaWZmOwogICAgIH0gZWxzZSBpZiAoZnJvbSA8IHBvcy5saW5lKSB7CkBAIC01Mjc2LDI4
ICs2NzYxLDI3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlv
biByZWJhc2VIaXN0QXJyYXkoYXJyYXksIGZyb20sIHRvLCBkaWZmKSB7CiAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIHN1YiA9IGFycmF5W2ld
LCBvayA9IHRydWU7CisgICAgICBpZiAoc3ViLnJhbmdlcykgeworICAgICAgICBpZiAoIXN1Yi5j
b3BpZWQpIHsgc3ViID0gYXJyYXlbaV0gPSBzdWIuZGVlcENvcHkoKTsgc3ViLmNvcGllZCA9IHRy
dWU7IH0KKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdWIucmFuZ2VzLmxlbmd0aDsgaisr
KSB7CisgICAgICAgICAgcmViYXNlSGlzdFNlbFNpbmdsZShzdWIucmFuZ2VzW2pdLmFuY2hvciwg
ZnJvbSwgdG8sIGRpZmYpOworICAgICAgICAgIHJlYmFzZUhpc3RTZWxTaW5nbGUoc3ViLnJhbmdl
c1tqXS5oZWFkLCBmcm9tLCB0bywgZGlmZik7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7
CisgICAgICB9CiAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1Yi5jaGFuZ2VzLmxlbmd0aDsg
KytqKSB7CiAgICAgICAgIHZhciBjdXIgPSBzdWIuY2hhbmdlc1tqXTsKLSAgICAgICAgaWYgKCFz
dWIuY29waWVkKSB7IGN1ci5mcm9tID0gY29weVBvcyhjdXIuZnJvbSk7IGN1ci50byA9IGNvcHlQ
b3MoY3VyLnRvKTsgfQogICAgICAgICBpZiAodG8gPCBjdXIuZnJvbS5saW5lKSB7Ci0gICAgICAg
ICAgY3VyLmZyb20ubGluZSArPSBkaWZmOwotICAgICAgICAgIGN1ci50by5saW5lICs9IGRpZmY7
CisgICAgICAgICAgY3VyLmZyb20gPSBQb3MoY3VyLmZyb20ubGluZSArIGRpZmYsIGN1ci5mcm9t
LmNoKTsKKyAgICAgICAgICBjdXIudG8gPSBQb3MoY3VyLnRvLmxpbmUgKyBkaWZmLCBjdXIudG8u
Y2gpOwogICAgICAgICB9IGVsc2UgaWYgKGZyb20gPD0gY3VyLnRvLmxpbmUpIHsKICAgICAgICAg
ICBvayA9IGZhbHNlOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICB9Ci0gICAg
ICBpZiAoIXN1Yi5jb3BpZWQpIHsKLSAgICAgICAgc3ViLmFuY2hvckJlZm9yZSA9IGNvcHlQb3Mo
c3ViLmFuY2hvckJlZm9yZSk7IHN1Yi5oZWFkQmVmb3JlID0gY29weVBvcyhzdWIuaGVhZEJlZm9y
ZSk7Ci0gICAgICAgIHN1Yi5hbmNob3JBZnRlciA9IGNvcHlQb3Moc3ViLmFuY2hvckFmdGVyKTsg
c3ViLnJlYWRBZnRlciA9IGNvcHlQb3Moc3ViLmhlYWRBZnRlcik7Ci0gICAgICAgIHN1Yi5jb3Bp
ZWQgPSB0cnVlOwotICAgICAgfQogICAgICAgaWYgKCFvaykgewogICAgICAgICBhcnJheS5zcGxp
Y2UoMCwgaSArIDEpOwogICAgICAgICBpID0gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
YmFzZUhpc3RTZWwoc3ViLmFuY2hvckJlZm9yZSk7IHJlYmFzZUhpc3RTZWwoc3ViLmhlYWRCZWZv
cmUpOwotICAgICAgICByZWJhc2VIaXN0U2VsKHN1Yi5hbmNob3JBZnRlcik7IHJlYmFzZUhpc3RT
ZWwoc3ViLmhlYWRBZnRlcik7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC01MzA4LDMwICs2Nzky
LDIzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJlYmFzZUhpc3RB
cnJheShoaXN0LnVuZG9uZSwgZnJvbSwgdG8sIGRpZmYpOwogICB9CgotICAvLyBFVkVOVCBPUEVS
QVRPUlMKKyAgLy8gRVZFTlQgVVRJTElUSUVTCgotICBmdW5jdGlvbiBzdG9wTWV0aG9kKCkge2Vf
c3RvcCh0aGlzKTt9Ci0gIC8vIEVuc3VyZSBhbiBldmVudCBoYXMgYSBzdG9wIG1ldGhvZC4KLSAg
ZnVuY3Rpb24gYWRkU3RvcChldmVudCkgewotICAgIGlmICghZXZlbnQuc3RvcCkgZXZlbnQuc3Rv
cCA9IHN0b3BNZXRob2Q7Ci0gICAgcmV0dXJuIGV2ZW50OwotICB9CisgIC8vIER1ZSB0byB0aGUg
ZmFjdCB0aGF0IHdlIHN0aWxsIHN1cHBvcnQganVyYXNzaWMgSUUgdmVyc2lvbnMsIHNvbWUKKyAg
Ly8gY29tcGF0aWJpbGl0eSB3cmFwcGVycyBhcmUgbmVlZGVkLgoKLSAgZnVuY3Rpb24gZV9wcmV2
ZW50RGVmYXVsdChlKSB7CisgIHZhciBlX3ByZXZlbnREZWZhdWx0ID0gQ29kZU1pcnJvci5lX3By
ZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oZSkgewogICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSBl
LnByZXZlbnREZWZhdWx0KCk7CiAgICAgZWxzZSBlLnJldHVyblZhbHVlID0gZmFsc2U7Ci0gIH0K
LSAgZnVuY3Rpb24gZV9zdG9wUHJvcGFnYXRpb24oZSkgeworICB9OworICB2YXIgZV9zdG9wUHJv
cGFnYXRpb24gPSBDb2RlTWlycm9yLmVfc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oZSkgewog
ICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICBlbHNl
IGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKLSAgfQorICB9OwogICBmdW5jdGlvbiBlX2RlZmF1bHRQ
cmV2ZW50ZWQoZSkgewogICAgIHJldHVybiBlLmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IGUu
ZGVmYXVsdFByZXZlbnRlZCA6IGUucmV0dXJuVmFsdWUgPT0gZmFsc2U7CiAgIH0KLSAgZnVuY3Rp
b24gZV9zdG9wKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihlKTt9
Ci0gIENvZGVNaXJyb3IuZV9zdG9wID0gZV9zdG9wOwotICBDb2RlTWlycm9yLmVfcHJldmVudERl
ZmF1bHQgPSBlX3ByZXZlbnREZWZhdWx0OwotICBDb2RlTWlycm9yLmVfc3RvcFByb3BhZ2F0aW9u
ID0gZV9zdG9wUHJvcGFnYXRpb247CisgIHZhciBlX3N0b3AgPSBDb2RlTWlycm9yLmVfc3RvcCA9
IGZ1bmN0aW9uKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihlKTt9
OwoKICAgZnVuY3Rpb24gZV90YXJnZXQoZSkge3JldHVybiBlLnRhcmdldCB8fCBlLnNyY0VsZW1l
bnQ7fQogICBmdW5jdGlvbiBlX2J1dHRvbihlKSB7CkBAIC01MzQ3LDcgKzY4MjQsMTAgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CgogICAvLyBFVkVOVCBIQU5ETElORwoKLSAg
ZnVuY3Rpb24gb24oZW1pdHRlciwgdHlwZSwgZikgeworICAvLyBMaWdodHdlaWdodCBldmVudCBm
cmFtZXdvcmsuIG9uL29mZiBhbHNvIHdvcmsgb24gRE9NIG5vZGVzLAorICAvLyByZWdpc3Rlcmlu
ZyBuYXRpdmUgRE9NIGhhbmRsZXJzLgorCisgIHZhciBvbiA9IENvZGVNaXJyb3Iub24gPSBmdW5j
dGlvbihlbWl0dGVyLCB0eXBlLCBmKSB7CiAgICAgaWYgKGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5l
cikKICAgICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmLCBmYWxzZSk7CiAgICAg
ZWxzZSBpZiAoZW1pdHRlci5hdHRhY2hFdmVudCkKQEAgLTUzNTcsOSArNjgzNyw5IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIGFyciA9IG1hcFt0eXBlXSB8
fCAobWFwW3R5cGVdID0gW10pOwogICAgICAgYXJyLnB1c2goZik7CiAgICAgfQotICB9CisgIH07
CgotICBmdW5jdGlvbiBvZmYoZW1pdHRlciwgdHlwZSwgZikgeworICB2YXIgb2ZmID0gQ29kZU1p
cnJvci5vZmYgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlLCBmKSB7CiAgICAgaWYgKGVtaXR0ZXIu
cmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0
eXBlLCBmLCBmYWxzZSk7CiAgICAgZWxzZSBpZiAoZW1pdHRlci5kZXRhY2hFdmVudCkKQEAgLTUz
NzAsMTUgKzY4NTAsMjIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkKICAgICAgICAgaWYgKGFycltp
XSA9PSBmKSB7IGFyci5zcGxpY2UoaSwgMSk7IGJyZWFrOyB9CiAgICAgfQotICB9CisgIH07Cgot
ICBmdW5jdGlvbiBzaWduYWwoZW1pdHRlciwgdHlwZSAvKiwgdmFsdWVzLi4uKi8pIHsKKyAgdmFy
IHNpZ25hbCA9IENvZGVNaXJyb3Iuc2lnbmFsID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSAvKiwg
dmFsdWVzLi4uKi8pIHsKICAgICB2YXIgYXJyID0gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRl
ci5faGFuZGxlcnNbdHlwZV07CiAgICAgaWYgKCFhcnIpIHJldHVybjsKICAgICB2YXIgYXJncyA9
IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CiAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIGFycltpXS5hcHBseShudWxsLCBhcmdzKTsKLSAg
fQorICB9OwoKKyAgLy8gT2Z0ZW4sIHdlIHdhbnQgdG8gc2lnbmFsIGV2ZW50cyBhdCBhIHBvaW50
IHdoZXJlIHdlIGFyZSBpbiB0aGUKKyAgLy8gbWlkZGxlIG9mIHNvbWUgd29yaywgYnV0IGRvbid0
IHdhbnQgdGhlIGhhbmRsZXIgdG8gc3RhcnQgY2FsbGluZworICAvLyBvdGhlciBtZXRob2RzIG9u
IHRoZSBlZGl0b3IsIHdoaWNoIG1pZ2h0IGJlIGluIGFuIGluY29uc2lzdGVudAorICAvLyBzdGF0
ZSBvciBzaW1wbHkgbm90IGV4cGVjdCBhbnkgb3RoZXIgZXZlbnRzIHRvIGhhcHBlbi4KKyAgLy8g
c2lnbmFsTGF0ZXIgbG9va3Mgd2hldGhlciB0aGVyZSBhcmUgYW55IGhhbmRsZXJzLCBhbmQgc2No
ZWR1bGVzCisgIC8vIHRoZW0gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbGFzdCBvcGVyYXRpb24g
ZW5kcywgb3IsIGlmIG5vCisgIC8vIG9wZXJhdGlvbiBpcyBhY3RpdmUsIHdoZW4gYSB0aW1lb3V0
IGZpcmVzLgogICB2YXIgZGVsYXllZENhbGxiYWNrcywgZGVsYXllZENhbGxiYWNrRGVwdGggPSAw
OwogICBmdW5jdGlvbiBzaWduYWxMYXRlcihlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykg
ewogICAgIHZhciBhcnIgPSBlbWl0dGVyLl9oYW5kbGVycyAmJiBlbWl0dGVyLl9oYW5kbGVyc1t0
eXBlXTsKQEAgLTUzOTQsMTEgKzY4ODEsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICAgIGRlbGF5ZWRDYWxsYmFja3MucHVzaChibmQoYXJyW2ldKSk7CiAgIH0KCi0g
IGZ1bmN0aW9uIHNpZ25hbERPTUV2ZW50KGNtLCBlLCBvdmVycmlkZSkgewotICAgIHNpZ25hbChj
bSwgb3ZlcnJpZGUgfHwgZS50eXBlLCBjbSwgZSk7Ci0gICAgcmV0dXJuIGVfZGVmYXVsdFByZXZl
bnRlZChlKSB8fCBlLmNvZGVtaXJyb3JJZ25vcmU7Ci0gIH0KLQogICBmdW5jdGlvbiBmaXJlRGVs
YXllZCgpIHsKICAgICAtLWRlbGF5ZWRDYWxsYmFja0RlcHRoOwogICAgIHZhciBkZWxheWVkID0g
ZGVsYXllZENhbGxiYWNrczsKQEAgLTU0MDYsMTMgKzY4ODgsMjEgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxheWVkLmxlbmd0
aDsgKytpKSBkZWxheWVkW2ldKCk7CiAgIH0KCisgIC8vIFRoZSBET00gZXZlbnRzIHRoYXQgQ29k
ZU1pcnJvciBoYW5kbGVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5CisgIC8vIHJlZ2lzdGVyaW5nIGEg
KG5vbi1ET00pIGhhbmRsZXIgb24gdGhlIGVkaXRvciBmb3IgdGhlIGV2ZW50IG5hbWUsCisgIC8v
IGFuZCBwcmV2ZW50RGVmYXVsdC1pbmcgdGhlIGV2ZW50IGluIHRoYXQgaGFuZGxlci4KKyAgZnVu
Y3Rpb24gc2lnbmFsRE9NRXZlbnQoY20sIGUsIG92ZXJyaWRlKSB7CisgICAgc2lnbmFsKGNtLCBv
dmVycmlkZSB8fCBlLnR5cGUsIGNtLCBlKTsKKyAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVk
KGUpIHx8IGUuY29kZW1pcnJvcklnbm9yZTsKKyAgfQorCiAgIGZ1bmN0aW9uIGhhc0hhbmRsZXIo
ZW1pdHRlciwgdHlwZSkgewogICAgIHZhciBhcnIgPSBlbWl0dGVyLl9oYW5kbGVycyAmJiBlbWl0
dGVyLl9oYW5kbGVyc1t0eXBlXTsKICAgICByZXR1cm4gYXJyICYmIGFyci5sZW5ndGggPiAwOwog
ICB9CgotICBDb2RlTWlycm9yLm9uID0gb247IENvZGVNaXJyb3Iub2ZmID0gb2ZmOyBDb2RlTWly
cm9yLnNpZ25hbCA9IHNpZ25hbDsKLQorICAvLyBBZGQgb24gYW5kIG9mZiBtZXRob2RzIHRvIGEg
Y29uc3RydWN0b3IncyBwcm90b3R5cGUsIHRvIG1ha2UKKyAgLy8gcmVnaXN0ZXJpbmcgZXZlbnRz
IG9uIHN1Y2ggb2JqZWN0cyBtb3JlIGNvbnZlbmllbnQuCiAgIGZ1bmN0aW9uIGV2ZW50TWl4aW4o
Y3RvcikgewogICAgIGN0b3IucHJvdG90eXBlLm9uID0gZnVuY3Rpb24odHlwZSwgZikge29uKHRo
aXMsIHR5cGUsIGYpO307CiAgICAgY3Rvci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24odHlwZSwg
Zikge29mZih0aGlzLCB0eXBlLCBmKTt9OwpAQCAtNTQyNywyMyArNjkxNyw0NyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gaGFuZGxpbmcgdGhpcycuCiAgIHZhciBQ
YXNzID0gQ29kZU1pcnJvci5QYXNzID0ge3RvU3RyaW5nOiBmdW5jdGlvbigpe3JldHVybiAiQ29k
ZU1pcnJvci5QYXNzIjt9fTsKCisgIC8vIFJldXNlZCBvcHRpb24gb2JqZWN0cyBmb3Igc2V0U2Vs
ZWN0aW9uICYgZnJpZW5kcworICB2YXIgc2VsX2RvbnRTY3JvbGwgPSB7c2Nyb2xsOiBmYWxzZX0s
IHNlbF9tb3VzZSA9IHtvcmlnaW46ICIqbW91c2UifSwgc2VsX21vdmUgPSB7b3JpZ2luOiAiK21v
dmUifTsKKwogICBmdW5jdGlvbiBEZWxheWVkKCkge3RoaXMuaWQgPSBudWxsO30KLSAgRGVsYXll
ZC5wcm90b3R5cGUgPSB7c2V0OiBmdW5jdGlvbihtcywgZikge2NsZWFyVGltZW91dCh0aGlzLmlk
KTsgdGhpcy5pZCA9IHNldFRpbWVvdXQoZiwgbXMpO319OworICBEZWxheWVkLnByb3RvdHlwZS5z
ZXQgPSBmdW5jdGlvbihtcywgZikgeworICAgIGNsZWFyVGltZW91dCh0aGlzLmlkKTsKKyAgICB0
aGlzLmlkID0gc2V0VGltZW91dChmLCBtcyk7CisgIH07CgogICAvLyBDb3VudHMgdGhlIGNvbHVt
biBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC4KICAgLy8gVXNl
ZCBtb3N0bHkgdG8gZmluZCBpbmRlbnRhdGlvbi4KLSAgZnVuY3Rpb24gY291bnRDb2x1bW4oc3Ry
aW5nLCBlbmQsIHRhYlNpemUsIHN0YXJ0SW5kZXgsIHN0YXJ0VmFsdWUpIHsKKyAgdmFyIGNvdW50
Q29sdW1uID0gQ29kZU1pcnJvci5jb3VudENvbHVtbiA9IGZ1bmN0aW9uKHN0cmluZywgZW5kLCB0
YWJTaXplLCBzdGFydEluZGV4LCBzdGFydFZhbHVlKSB7CiAgICAgaWYgKGVuZCA9PSBudWxsKSB7
CiAgICAgICBlbmQgPSBzdHJpbmcuc2VhcmNoKC9bXlxzXHUwMGEwXS8pOwogICAgICAgaWYgKGVu
ZCA9PSAtMSkgZW5kID0gc3RyaW5nLmxlbmd0aDsKICAgICB9Ci0gICAgZm9yICh2YXIgaSA9IHN0
YXJ0SW5kZXggfHwgMCwgbiA9IHN0YXJ0VmFsdWUgfHwgMDsgaSA8IGVuZDsgKytpKSB7Ci0gICAg
ICBpZiAoc3RyaW5nLmNoYXJBdChpKSA9PSAiXHQiKSBuICs9IHRhYlNpemUgLSAobiAlIHRhYlNp
emUpOwotICAgICAgZWxzZSArK247CisgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwg
biA9IHN0YXJ0VmFsdWUgfHwgMDs7KSB7CisgICAgICB2YXIgbmV4dFRhYiA9IHN0cmluZy5pbmRl
eE9mKCJcdCIsIGkpOworICAgICAgaWYgKG5leHRUYWIgPCAwIHx8IG5leHRUYWIgPj0gZW5kKQor
ICAgICAgICByZXR1cm4gbiArIChlbmQgLSBpKTsKKyAgICAgIG4gKz0gbmV4dFRhYiAtIGk7Cisg
ICAgICBuICs9IHRhYlNpemUgLSAobiAlIHRhYlNpemUpOworICAgICAgaSA9IG5leHRUYWIgKyAx
OworICAgIH0KKyAgfTsKKworICAvLyBUaGUgaW52ZXJzZSBvZiBjb3VudENvbHVtbiAtLSBmaW5k
IHRoZSBvZmZzZXQgdGhhdCBjb3JyZXNwb25kcyB0bworICAvLyBhIHBhcnRpY3VsYXIgY29sdW1u
LgorICBmdW5jdGlvbiBmaW5kQ29sdW1uKHN0cmluZywgZ29hbCwgdGFiU2l6ZSkgeworICAgIGZv
ciAodmFyIHBvcyA9IDAsIGNvbCA9IDA7OykgeworICAgICAgdmFyIG5leHRUYWIgPSBzdHJpbmcu
aW5kZXhPZigiXHQiLCBwb3MpOworICAgICAgaWYgKG5leHRUYWIgPT0gLTEpIG5leHRUYWIgPSBz
dHJpbmcubGVuZ3RoOworICAgICAgdmFyIHNraXBwZWQgPSBuZXh0VGFiIC0gcG9zOworICAgICAg
aWYgKG5leHRUYWIgPT0gc3RyaW5nLmxlbmd0aCB8fCBjb2wgKyBza2lwcGVkID49IGdvYWwpCisg
ICAgICAgIHJldHVybiBwb3MgKyBNYXRoLm1pbihza2lwcGVkLCBnb2FsIC0gY29sKTsKKyAgICAg
IGNvbCArPSBuZXh0VGFiIC0gcG9zOworICAgICAgY29sICs9IHRhYlNpemUgLSAoY29sICUgdGFi
U2l6ZSk7CisgICAgICBwb3MgPSBuZXh0VGFiICsgMTsKKyAgICAgIGlmIChjb2wgPj0gZ29hbCkg
cmV0dXJuIHBvczsKICAgICB9Ci0gICAgcmV0dXJuIG47CiAgIH0KLSAgQ29kZU1pcnJvci5jb3Vu
dENvbHVtbiA9IGNvdW50Q29sdW1uOwoKICAgdmFyIHNwYWNlU3RycyA9IFsiIl07CiAgIGZ1bmN0
aW9uIHNwYWNlU3RyKG4pIHsKQEAgLTU0NTQsNjAgKzY5NjgsNjkgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CgogICBmdW5jdGlvbiBsc3QoYXJyKSB7IHJldHVybiBhcnJbYXJy
Lmxlbmd0aC0xXTsgfQoKLSAgZnVuY3Rpb24gc2VsZWN0SW5wdXQobm9kZSkgewotICAgIGlmIChp
b3MpIHsgLy8gTW9iaWxlIFNhZmFyaSBhcHBhcmVudGx5IGhhcyBhIGJ1ZyB3aGVyZSBzZWxlY3Qo
KSBpcyBicm9rZW4uCi0gICAgICBub2RlLnNlbGVjdGlvblN0YXJ0ID0gMDsKLSAgICAgIG5vZGUu
c2VsZWN0aW9uRW5kID0gbm9kZS52YWx1ZS5sZW5ndGg7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8v
IFN1cHByZXNzIG15c3RlcmlvdXMgSUUxMCBlcnJvcnMKLSAgICAgIHRyeSB7IG5vZGUuc2VsZWN0
KCk7IH0KLSAgICAgIGNhdGNoKF9lKSB7fQotICAgIH0KLSAgfQorICB2YXIgc2VsZWN0SW5wdXQg
PSBmdW5jdGlvbihub2RlKSB7IG5vZGUuc2VsZWN0KCk7IH07CisgIGlmIChpb3MpIC8vIE1vYmls
ZSBTYWZhcmkgYXBwYXJlbnRseSBoYXMgYSBidWcgd2hlcmUgc2VsZWN0KCkgaXMgYnJva2VuLgor
ICAgIHNlbGVjdElucHV0ID0gZnVuY3Rpb24obm9kZSkgeyBub2RlLnNlbGVjdGlvblN0YXJ0ID0g
MDsgbm9kZS5zZWxlY3Rpb25FbmQgPSBub2RlLnZhbHVlLmxlbmd0aDsgfTsKKyAgZWxzZSBpZiAo
aWUpIC8vIFN1cHByZXNzIG15c3RlcmlvdXMgSUUxMCBlcnJvcnMKKyAgICBzZWxlY3RJbnB1dCA9
IGZ1bmN0aW9uKG5vZGUpIHsgdHJ5IHsgbm9kZS5zZWxlY3QoKTsgfSBjYXRjaChfZSkge30gfTsK
Ci0gIGZ1bmN0aW9uIGluZGV4T2YoY29sbGVjdGlvbiwgZWx0KSB7Ci0gICAgaWYgKGNvbGxlY3Rp
b24uaW5kZXhPZikgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihlbHQpOwotICAgIGZvciAodmFy
IGkgPSAwLCBlID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBlOyArK2kpCi0gICAgICBpZiAoY29s
bGVjdGlvbltpXSA9PSBlbHQpIHJldHVybiBpOworICBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCBl
bHQpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKQorICAgICAg
aWYgKGFycmF5W2ldID09IGVsdCkgcmV0dXJuIGk7CiAgICAgcmV0dXJuIC0xOwogICB9CisgIGlm
IChbXS5pbmRleE9mKSBpbmRleE9mID0gZnVuY3Rpb24oYXJyYXksIGVsdCkgeyByZXR1cm4gYXJy
YXkuaW5kZXhPZihlbHQpOyB9OworICBmdW5jdGlvbiBtYXAoYXJyYXksIGYpIHsKKyAgICB2YXIg
b3V0ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgb3V0
W2ldID0gZihhcnJheVtpXSwgaSk7CisgICAgcmV0dXJuIG91dDsKKyAgfQorICBpZiAoW10ubWFw
KSBtYXAgPSBmdW5jdGlvbihhcnJheSwgZikgeyByZXR1cm4gYXJyYXkubWFwKGYpOyB9OwoKICAg
ZnVuY3Rpb24gY3JlYXRlT2JqKGJhc2UsIHByb3BzKSB7Ci0gICAgZnVuY3Rpb24gT2JqKCkge30K
LSAgICBPYmoucHJvdG90eXBlID0gYmFzZTsKLSAgICB2YXIgaW5zdCA9IG5ldyBPYmooKTsKKyAg
ICB2YXIgaW5zdDsKKyAgICBpZiAoT2JqZWN0LmNyZWF0ZSkgeworICAgICAgaW5zdCA9IE9iamVj
dC5jcmVhdGUoYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBjdG9yID0gZnVuY3Rpb24o
KSB7fTsKKyAgICAgIGN0b3IucHJvdG90eXBlID0gYmFzZTsKKyAgICAgIGluc3QgPSBuZXcgY3Rv
cigpOworICAgIH0KICAgICBpZiAocHJvcHMpIGNvcHlPYmoocHJvcHMsIGluc3QpOwogICAgIHJl
dHVybiBpbnN0OwotICB9CisgIH07CgotICBmdW5jdGlvbiBjb3B5T2JqKG9iaiwgdGFyZ2V0KSB7
CisgIGZ1bmN0aW9uIGNvcHlPYmoob2JqLCB0YXJnZXQsIG92ZXJ3cml0ZSkgewogICAgIGlmICgh
dGFyZ2V0KSB0YXJnZXQgPSB7fTsKLSAgICBmb3IgKHZhciBwcm9wIGluIG9iaikgaWYgKG9iai5o
YXNPd25Qcm9wZXJ0eShwcm9wKSkgdGFyZ2V0W3Byb3BdID0gb2JqW3Byb3BdOworICAgIGZvciAo
dmFyIHByb3AgaW4gb2JqKQorICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiAo
b3ZlcndyaXRlICE9PSBmYWxzZSB8fCAhdGFyZ2V0Lmhhc093blByb3BlcnR5KHByb3ApKSkKKyAg
ICAgICAgdGFyZ2V0W3Byb3BdID0gb2JqW3Byb3BdOwogICAgIHJldHVybiB0YXJnZXQ7CiAgIH0K
Ci0gIGZ1bmN0aW9uIGVtcHR5QXJyYXkoc2l6ZSkgewotICAgIGZvciAodmFyIGEgPSBbXSwgaSA9
IDA7IGkgPCBzaXplOyArK2kpIGEucHVzaCh1bmRlZmluZWQpOwotICAgIHJldHVybiBhOwotICB9
Ci0KICAgZnVuY3Rpb24gYmluZChmKSB7CiAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwogICAgIHJldHVybiBmdW5jdGlvbigpe3JldHVybiBm
LmFwcGx5KG51bGwsIGFyZ3MpO307CiAgIH0KCi0gIHZhciBub25BU0NJSVNpbmdsZUNhc2VXb3Jk
Q2hhciA9IC9bXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1
OWZjY1x1YWMwMC1cdWQ3YWZdLzsKLSAgZnVuY3Rpb24gaXNXb3JkQ2hhcihjaCkgeworICB2YXIg
bm9uQVNDSUlTaW5nbGVDYXNlV29yZENoYXIgPSAvW1x1MDBkZlx1MzA0MC1cdTMwOWZcdTMwYTAt
XHUzMGZmXHUzNDAwLVx1NGRiNVx1NGUwMC1cdTlmY2NcdWFjMDAtXHVkN2FmXS87CisgIHZhciBp
c1dvcmRDaGFyID0gQ29kZU1pcnJvci5pc1dvcmRDaGFyID0gZnVuY3Rpb24oY2gpIHsKICAgICBy
ZXR1cm4gL1x3Ly50ZXN0KGNoKSB8fCBjaCA+ICJceDgwIiAmJgogICAgICAgKGNoLnRvVXBwZXJD
YXNlKCkgIT0gY2gudG9Mb3dlckNhc2UoKSB8fCBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhci50
ZXN0KGNoKSk7Ci0gIH0KKyAgfTsKCiAgIGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7CiAgICAgZm9y
ICh2YXIgbiBpbiBvYmopIGlmIChvYmouaGFzT3duUHJvcGVydHkobikgJiYgb2JqW25dKSByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KCi0gIHZhciBpc0V4dGVuZGluZ0NoYXIg
PSAvW1x1MDMwMC1cdTAzNkZcdTA0ODMtXHUwNDg3XHUwNDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRc
dTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0LVx1MDVDNVx1MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEIt
XHUwNjVGXHUwNjcwXHUwNkQ2LVx1MDZEQ1x1MDZERi1cdTA2RTRcdTA2RTctXHUwNkU4XHUwNkVB
LVx1MDZFRFx1QTY2Rlx1MURDMOKAk1x1MURGRlx1MjBEMOKAk1x1MjBGRlx1QTY3MC1cdUE2NzJc
dUE2NzQtXHVBNjdEXHVBNjlGXHVkYzAwLVx1ZGZmZlx1RkUyMOKAk1x1RkUyRl0vOworICAvLyBF
eHRlbmRpbmcgdW5pY29kZSBjaGFyYWN0ZXJzLiBBIHNlcmllcyBvZiBhIG5vbi1leHRlbmRpbmcg
Y2hhciArCisgIC8vIGFueSBudW1iZXIgb2YgZXh0ZW5kaW5nIGNoYXJzIGlzIHRyZWF0ZWQgYXMg
YSBzaW5nbGUgdW5pdCBhcyBmYXIKKyAgLy8gYXMgZWRpdGluZyBhbmQgbWVhc3VyaW5nIGlzIGNv
bmNlcm5lZC4gVGhpcyBpcyBub3QgZnVsbHkgY29ycmVjdCwKKyAgLy8gc2luY2Ugc29tZSBzY3Jp
cHRzL2ZvbnRzL2Jyb3dzZXJzIGFsc28gdHJlYXQgb3RoZXIgY29uZmlndXJhdGlvbnMKKyAgLy8g
b2YgY29kZSBwb2ludHMgYXMgYSBncm91cC4KKyAgdmFyIGV4dGVuZGluZ0NoYXJzID0gL1tcdTAz
MDAtXHUwMzZmXHUwNDgzLVx1MDQ4OVx1MDU5MS1cdTA1YmRcdTA1YmZcdTA1YzFcdTA1YzJcdTA1
YzRcdTA1YzVcdTA1YzdcdTA2MTAtXHUwNjFhXHUwNjRiLVx1MDY1ZVx1MDY3MFx1MDZkNi1cdTA2
ZGNcdTA2ZGUtXHUwNmU0XHUwNmU3XHUwNmU4XHUwNmVhLVx1MDZlZFx1MDcxMVx1MDczMC1cdTA3
NGFcdTA3YTYtXHUwN2IwXHUwN2ViLVx1MDdmM1x1MDgxNi1cdTA4MTlcdTA4MWItXHUwODIzXHUw
ODI1LVx1MDgyN1x1MDgyOS1cdTA4MmRcdTA5MDAtXHUwOTAyXHUwOTNjXHUwOTQxLVx1MDk0OFx1
MDk0ZFx1MDk1MS1cdTA5NTVcdTA5NjJcdTA5NjNcdTA5ODFcdTA5YmNcdTA5YmVcdTA5YzEtXHUw
OWM0XHUwOWNkXHUwOWQ3XHUwOWUyXHUwOWUzXHUwYTAxXHUwYTAyXHUwYTNjXHUwYTQxXHUwYTQy
XHUwYTQ3XHUwYTQ4XHUwYTRiLVx1MGE0ZFx1MGE1MVx1MGE3MFx1MGE3MVx1MGE3NVx1MGE4MVx1
MGE4Mlx1MGFiY1x1MGFjMS1cdTBhYzVcdTBhYzdcdTBhYzhcdTBhY2RcdTBhZTJcdTBhZTNcdTBi
MDFcdTBiM2NcdTBiM2VcdTBiM2ZcdTBiNDEtXHUwYjQ0XHUwYjRkXHUwYjU2XHUwYjU3XHUwYjYy
XHUwYjYzXHUwYjgyXHUwYmJlXHUwYmMwXHUwYmNkXHUwYmQ3XHUwYzNlLVx1MGM0MFx1MGM0Ni1c
dTBjNDhcdTBjNGEtXHUwYzRkXHUwYzU1XHUwYzU2XHUwYzYyXHUwYzYzXHUwY2JjXHUwY2JmXHUw
Y2MyXHUwY2M2XHUwY2NjXHUwY2NkXHUwY2Q1XHUwY2Q2XHUwY2UyXHUwY2UzXHUwZDNlXHUwZDQx
LVx1MGQ0NFx1MGQ0ZFx1MGQ1N1x1MGQ2Mlx1MGQ2M1x1MGRjYVx1MGRjZlx1MGRkMi1cdTBkZDRc
dTBkZDZcdTBkZGZcdTBlMzFcdTBlMzQtXHUwZTNhXHUwZTQ3LVx1MGU0ZVx1MGViMVx1MGViNC1c
dTBlYjlcdTBlYmJcdTBlYmNcdTBlYzgtXHUwZWNkXHUwZjE4XHUwZjE5XHUwZjM1XHUwZjM3XHUw
ZjM5XHUwZjcxLVx1MGY3ZVx1MGY4MC1cdTBmODRcdTBmODZcdTBmODdcdTBmOTAtXHUwZjk3XHUw
Zjk5LVx1MGZiY1x1MGZjNlx1MTAyZC1cdTEwMzBcdTEwMzItXHUxMDM3XHUxMDM5XHUxMDNhXHUx
MDNkXHUxMDNlXHUxMDU4XHUxMDU5XHUxMDVlLVx1MTA2MFx1MTA3MS1cdTEwNzRcdTEwODJcdTEw
ODVcdTEwODZcdTEwOGRcdTEwOWRcdTEzNWZcdTE3MTItXHUxNzE0XHUxNzMyLVx1MTczNFx1MTc1
Mlx1MTc1M1x1MTc3Mlx1MTc3M1x1MTdiNy1cdTE3YmRcdTE3YzZcdTE3YzktXHUxN2QzXHUxN2Rk
XHUxODBiLVx1MTgwZFx1MThhOVx1MTkyMC1cdTE5MjJcdTE5MjdcdTE5MjhcdTE5MzJcdTE5Mzkt
XHUxOTNiXHUxYTE3XHUxYTE4XHUxYTU2XHUxYTU4LVx1MWE1ZVx1MWE2MFx1MWE2Mlx1MWE2NS1c
dTFhNmNcdTFhNzMtXHUxYTdjXHUxYTdmXHUxYjAwLVx1MWIwM1x1MWIzNFx1MWIzNi1cdTFiM2Fc
dTFiM2NcdTFiNDJcdTFiNmItXHUxYjczXHUxYjgwXHUxYjgxXHUxYmEyLVx1MWJhNVx1MWJhOFx1
MWJhOVx1MWMyYy1cdTFjMzNcdTFjMzZcdTFjMzdcdTFjZDAtXHUxY2QyXHUxY2Q0LVx1MWNlMFx1
MWNlMi1cdTFjZThcdTFjZWRcdTFkYzAtXHUxZGU2XHUxZGZkLVx1MWRmZlx1MjAwY1x1MjAwZFx1
MjBkMC1cdTIwZjBcdTJjZWYtXHUyY2YxXHUyZGUwLVx1MmRmZlx1MzAyYS1cdTMwMmZcdTMwOTlc
dTMwOWFcdWE2NmYtXHVhNjcyXHVhNjdjXHVhNjdkXHVhNmYwXHVhNmYxXHVhODAyXHVhODA2XHVh
ODBiXHVhODI1XHVhODI2XHVhOGM0XHVhOGUwLVx1YThmMVx1YTkyNi1cdWE5MmRcdWE5NDctXHVh
OTUxXHVhOTgwLVx1YTk4Mlx1YTliM1x1YTliNi1cdWE5YjlcdWE5YmNcdWFhMjktXHVhYTJlXHVh
YTMxXHVhYTMyXHVhYTM1XHVhYTM2XHVhYTQzXHVhYTRjXHVhYWIwXHVhYWIyLVx1YWFiNFx1YWFi
N1x1YWFiOFx1YWFiZVx1YWFiZlx1YWFjMVx1YWJlNVx1YWJlOFx1YWJlZFx1ZGMwMC1cdWRmZmZc
dWZiMWVcdWZlMDAtXHVmZTBmXHVmZTIwLVx1ZmUyNlx1ZmY5ZVx1ZmY5Zl0vOworICBmdW5jdGlv
biBpc0V4dGVuZGluZ0NoYXIoY2gpIHsgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkgPj0gNzY4ICYm
IGV4dGVuZGluZ0NoYXJzLnRlc3QoY2gpOyB9CgogICAvLyBET00gVVRJTElUSUVTCgpAQCAtNTUx
NSwxMSArNzAzOCwyNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB2
YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsKICAgICBpZiAoY2xhc3NOYW1lKSBl
LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKICAgICBpZiAoc3R5bGUpIGUuc3R5bGUuY3NzVGV4dCA9
IHN0eWxlOwotICAgIGlmICh0eXBlb2YgY29udGVudCA9PSAic3RyaW5nIikgc2V0VGV4dENvbnRl
bnQoZSwgY29udGVudCk7CisgICAgaWYgKHR5cGVvZiBjb250ZW50ID09ICJzdHJpbmciKSBlLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnQpKTsKICAgICBlbHNlIGlm
IChjb250ZW50KSBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyArK2kpIGUuYXBw
ZW5kQ2hpbGQoY29udGVudFtpXSk7CiAgICAgcmV0dXJuIGU7CiAgIH0KCisgIHZhciByYW5nZTsK
KyAgaWYgKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSByYW5nZSA9IGZ1bmN0aW9uKG5vZGUsIHN0YXJ0
LCBlbmQpIHsKKyAgICB2YXIgciA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgci5zZXRF
bmQobm9kZSwgZW5kKTsKKyAgICByLnNldFN0YXJ0KG5vZGUsIHN0YXJ0KTsKKyAgICByZXR1cm4g
cjsKKyAgfTsKKyAgZWxzZSByYW5nZSA9IGZ1bmN0aW9uKG5vZGUsIHN0YXJ0LCBlbmQpIHsKKyAg
ICB2YXIgciA9IGRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7CisgICAgci5tb3ZlVG9F
bGVtZW50VGV4dChub2RlLnBhcmVudE5vZGUpOworICAgIHIuY29sbGFwc2UodHJ1ZSk7CisgICAg
ci5tb3ZlRW5kKCJjaGFyYWN0ZXIiLCBlbmQpOworICAgIHIubW92ZVN0YXJ0KCJjaGFyYWN0ZXIi
LCBzdGFydCk7CisgICAgcmV0dXJuIHI7CisgIH07CisKICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRy
ZW4oZSkgewogICAgIGZvciAodmFyIGNvdW50ID0gZS5jaGlsZE5vZGVzLmxlbmd0aDsgY291bnQg
PiAwOyAtLWNvdW50KQogICAgICAgZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpOwpAQCAtNTUz
MCwxNyArNzA2OSwzNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBy
ZXR1cm4gcmVtb3ZlQ2hpbGRyZW4ocGFyZW50KS5hcHBlbmRDaGlsZChlKTsKICAgfQoKLSAgZnVu
Y3Rpb24gc2V0VGV4dENvbnRlbnQoZSwgc3RyKSB7Ci0gICAgaWYgKGllX2x0OSkgewotICAgICAg
ZS5pbm5lckhUTUwgPSAiIjsKLSAgICAgIGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoc3RyKSk7Ci0gICAgfSBlbHNlIGUudGV4dENvbnRlbnQgPSBzdHI7CisgIGZ1bmN0aW9u
IGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHsKKyAgICBpZiAocGFyZW50LmNvbnRhaW5zKQorICAg
ICAgcmV0dXJuIHBhcmVudC5jb250YWlucyhjaGlsZCk7CisgICAgd2hpbGUgKGNoaWxkID0gY2hp
bGQucGFyZW50Tm9kZSkKKyAgICAgIGlmIChjaGlsZCA9PSBwYXJlbnQpIHJldHVybiB0cnVlOwog
ICB9CgotICBmdW5jdGlvbiBnZXRSZWN0KG5vZGUpIHsKLSAgICByZXR1cm4gbm9kZS5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKTsKKyAgZnVuY3Rpb24gYWN0aXZlRWx0KCkgeyByZXR1cm4gZG9jdW1l
bnQuYWN0aXZlRWxlbWVudDsgfQorICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBJRSB0aHJvd3MgdW5z
cGVjaWZpZWQgZXJyb3Igd2hlbiB0b3VjaGluZworICAvLyBkb2N1bWVudC5hY3RpdmVFbGVtZW50
IGluIHNvbWUgY2FzZXMgKGR1cmluZyBsb2FkaW5nLCBpbiBpZnJhbWUpCisgIGlmIChpZV91cHRv
MTApIGFjdGl2ZUVsdCA9IGZ1bmN0aW9uKCkgeworICAgIHRyeSB7IHJldHVybiBkb2N1bWVudC5h
Y3RpdmVFbGVtZW50OyB9CisgICAgY2F0Y2goZSkgeyByZXR1cm4gZG9jdW1lbnQuYm9keTsgfQor
ICB9OworCisgIGZ1bmN0aW9uIGNsYXNzVGVzdChjbHMpIHsgcmV0dXJuIG5ldyBSZWdFeHAoIlxc
YiIgKyBjbHMgKyAiXFxiXFxzKiIpOyB9CisgIGZ1bmN0aW9uIHJtQ2xhc3Mobm9kZSwgY2xzKSB7
CisgICAgdmFyIHRlc3QgPSBjbGFzc1Rlc3QoY2xzKTsKKyAgICBpZiAodGVzdC50ZXN0KG5vZGUu
Y2xhc3NOYW1lKSkgbm9kZS5jbGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZS5yZXBsYWNlKHRlc3Qs
ICIiKTsKKyAgfQorICBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbHMpIHsKKyAgICBpZiAoIWNs
YXNzVGVzdChjbHMpLnRlc3Qobm9kZS5jbGFzc05hbWUpKSBub2RlLmNsYXNzTmFtZSArPSAiICIg
KyBjbHM7CisgIH0KKyAgZnVuY3Rpb24gam9pbkNsYXNzZXMoYSwgYikgeworICAgIHZhciBhcyA9
IGEuc3BsaXQoIiAiKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzLmxlbmd0aDsgaSsrKQor
ICAgICAgaWYgKGFzW2ldICYmICFjbGFzc1Rlc3QoYXNbaV0pLnRlc3QoYikpIGIgKz0gIiAiICsg
YXNbaV07CisgICAgcmV0dXJuIGI7CiAgIH0KLSAgQ29kZU1pcnJvci5yZXBsYWNlR2V0UmVjdCA9
IGZ1bmN0aW9uKGYpIHsgZ2V0UmVjdCA9IGY7IH07CgogICAvLyBGRUFUVVJFIERFVEVDVElPTgoK
QEAgLTU1NDgsNDMgKzcxMDUsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgIHZhciBkcmFnQW5kRHJvcCA9IGZ1bmN0aW9uKCkgewogICAgIC8vIFRoZXJlIGlzICpzb21l
KiBraW5kIG9mIGRyYWctYW5kLWRyb3Agc3VwcG9ydCBpbiBJRTYtOCwgYnV0IEkKICAgICAvLyBj
b3VsZG4ndCBnZXQgaXQgdG8gd29yayB5ZXQuCi0gICAgaWYgKGllX2x0OSkgcmV0dXJuIGZhbHNl
OworICAgIGlmIChpZV91cHRvOCkgcmV0dXJuIGZhbHNlOwogICAgIHZhciBkaXYgPSBlbHQoJ2Rp
dicpOwogICAgIHJldHVybiAiZHJhZ2dhYmxlIiBpbiBkaXYgfHwgImRyYWdEcm9wIiBpbiBkaXY7
CiAgIH0oKTsKCi0gIC8vIEZvciBhIHJlYXNvbiBJIGhhdmUgeWV0IHRvIGZpZ3VyZSBvdXQsIHNv
bWUgYnJvd3NlcnMgZGlzYWxsb3cKLSAgLy8gd29yZCB3cmFwcGluZyBiZXR3ZWVuIGNlcnRhaW4g
Y2hhcmFjdGVycyAqb25seSogaWYgYSBuZXcgaW5saW5lCi0gIC8vIGVsZW1lbnQgaXMgc3RhcnRl
ZCBiZXR3ZWVuIHRoZW0uIFRoaXMgbWFrZXMgaXQgaGFyZCB0byByZWxpYWJseQotICAvLyBtZWFz
dXJlIHRoZSBwb3NpdGlvbiBvZiB0aGluZ3MsIHNpbmNlIHRoYXQgcmVxdWlyZXMgaW5zZXJ0aW5n
IGFuCi0gIC8vIGV4dHJhIHNwYW4uIFRoaXMgdGVycmlibHkgZnJhZ2lsZSBzZXQgb2YgdGVzdHMg
bWF0Y2hlcyB0aGUKLSAgLy8gY2hhcmFjdGVyIGNvbWJpbmF0aW9ucyB0aGF0IHN1ZmZlciBmcm9t
IHRoaXMgcGhlbm9tZW5vbiBvbiB0aGUKLSAgLy8gdmFyaW91cyBicm93c2Vycy4KLSAgZnVuY3Rp
b24gc3BhbkFmZmVjdHNXcmFwcGluZygpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gIGlmIChnZWNrbykg
Ly8gT25seSBmb3IgIiQnIgotICAgIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSBmdW5jdGlvbihzdHIs
IGkpIHsKLSAgICAgIHJldHVybiBzdHIuY2hhckNvZGVBdChpIC0gMSkgPT0gMzYgJiYgc3RyLmNo
YXJDb2RlQXQoaSkgPT0gMzk7Ci0gICAgfTsKLSAgZWxzZSBpZiAoc2FmYXJpICYmICEvVmVyc2lv
blwvKFs2LTldfFxkXGQpXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpCi0gICAgc3BhbkFm
ZmVjdHNXcmFwcGluZyA9IGZ1bmN0aW9uKHN0ciwgaSkgewotICAgICAgdmFyIHJlc3VsdCA9IC9c
LVteIFwtP118XD9bXiAhXCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHN0ci5zbGljZShpIC0g
MSwgaSArIDEpKTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLSAgZWxzZSBpZiAod2Vi
a2l0ICYmIC9DaHJvbWVcLyg/OjI5fFszLTldXGR8XGRcZFxkKVwuLy50ZXN0KG5hdmlnYXRvci51
c2VyQWdlbnQpKQotICAgIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSBmdW5jdGlvbihzdHIsIGkpIHsK
LSAgICAgIHZhciBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSAtIDEpOwotICAgICAgcmV0dXJuIGNv
ZGUgPj0gODIwOCAmJiBjb2RlIDw9IDgyMTI7Ci0gICAgfTsKLSAgZWxzZSBpZiAod2Via2l0KQot
ICAgIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSBmdW5jdGlvbihzdHIsIGkpIHsKLSAgICAgIGlmIChp
ID4gMSAmJiBzdHIuY2hhckNvZGVBdChpIC0gMSkgPT0gNDUpIHsKLSAgICAgICAgaWYgKC9cdy8u
dGVzdChzdHIuY2hhckF0KGkgLSAyKSkgJiYgL1teXC0/XC5dLy50ZXN0KHN0ci5jaGFyQXQoaSkp
KSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGkgPiAyICYmIC9bXGRcLixdLy50ZXN0KHN0ci5j
aGFyQXQoaSAtIDIpKSAmJiAvW1xkXC4sXS8udGVzdChzdHIuY2hhckF0KGkpKSkgcmV0dXJuIGZh
bHNlOwotICAgICAgfQotICAgICAgdmFyIHJlc3VsdCA9IC9bfiEjJSYqKT0rfVxdXFx8XCJcLj4s
OjtdWyh7WzxdfC1bXlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89
K3tbfD48XXzigKZbXHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHN0ci5zbGljZShpIC0gMSwg
aSArIDEpKTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLQogICB2YXIga25vd25TY3Jv
bGxiYXJXaWR0aDsKICAgZnVuY3Rpb24gc2Nyb2xsYmFyV2lkdGgobWVhc3VyZSkgewogICAgIGlm
IChrbm93blNjcm9sbGJhcldpZHRoICE9IG51bGwpIHJldHVybiBrbm93blNjcm9sbGJhcldpZHRo
OwpAQCAtNTYwMSwxNSArNzEyNiwyNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICAgIHZhciB0ZXN0ID0gZWx0KCJzcGFuIiwgIlx1MjAwYiIpOwogICAgICAgcmVtb3Zl
Q2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZWx0KCJzcGFuIiwgW3Rlc3QsIGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCJ4IildKSk7CiAgICAgICBpZiAobWVhc3VyZS5maXJzdENoaWxkLm9mZnNldEhl
aWdodCAhPSAwKQotICAgICAgICB6d3NwU3VwcG9ydGVkID0gdGVzdC5vZmZzZXRXaWR0aCA8PSAx
ICYmIHRlc3Qub2Zmc2V0SGVpZ2h0ID4gMiAmJiAhaWVfbHQ4OworICAgICAgICB6d3NwU3VwcG9y
dGVkID0gdGVzdC5vZmZzZXRXaWR0aCA8PSAxICYmIHRlc3Qub2Zmc2V0SGVpZ2h0ID4gMiAmJiAh
aWVfdXB0bzc7CiAgICAgfQogICAgIGlmICh6d3NwU3VwcG9ydGVkKSByZXR1cm4gZWx0KCJzcGFu
IiwgIlx1MjAwYiIpOwogICAgIGVsc2UgcmV0dXJuIGVsdCgic3BhbiIsICJcdTAwYTAiLCBudWxs
LCAiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgi
KTsKICAgfQoKKyAgLy8gRmVhdHVyZS1kZXRlY3QgSUUncyBjcnVtbXkgY2xpZW50IHJlY3QgcmVw
b3J0aW5nIGZvciBiaWRpIHRleHQKKyAgdmFyIGJhZEJpZGlSZWN0czsKKyAgZnVuY3Rpb24gaGFz
QmFkQmlkaVJlY3RzKG1lYXN1cmUpIHsKKyAgICBpZiAoYmFkQmlkaVJlY3RzICE9IG51bGwpIHJl
dHVybiBiYWRCaWRpUmVjdHM7CisgICAgdmFyIHR4dCA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1l
YXN1cmUsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJBXHUwNjJlQSIpKTsKKyAgICB2YXIgcjAg
PSByYW5nZSh0eHQsIDAsIDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIGlmIChyMC5s
ZWZ0ID09IHIwLnJpZ2h0KSByZXR1cm4gZmFsc2U7CisgICAgdmFyIHIxID0gcmFuZ2UodHh0LCAx
LCAyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICByZXR1cm4gYmFkQmlkaVJlY3RzID0g
KHIxLnJpZ2h0IC0gcjAucmlnaHQgPCAzKTsKKyAgfQorCiAgIC8vIFNlZSBpZiAiIi5zcGxpdCBp
cyB0aGUgYnJva2VuIElFIHZlcnNpb24sIGlmIHNvLCBwcm92aWRlIGFuCiAgIC8vIGFsdGVybmF0
aXZlIHdheSB0byBzcGxpdCBsaW5lcy4KLSAgdmFyIHNwbGl0TGluZXMgPSAiXG5cbmIiLnNwbGl0
KC9cbi8pLmxlbmd0aCAhPSAzID8gZnVuY3Rpb24oc3RyaW5nKSB7CisgIHZhciBzcGxpdExpbmVz
ID0gQ29kZU1pcnJvci5zcGxpdExpbmVzID0gIlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGggIT0g
MyA/IGZ1bmN0aW9uKHN0cmluZykgewogICAgIHZhciBwb3MgPSAwLCByZXN1bHQgPSBbXSwgbCA9
IHN0cmluZy5sZW5ndGg7CiAgICAgd2hpbGUgKHBvcyA8PSBsKSB7CiAgICAgICB2YXIgbmwgPSBz
dHJpbmcuaW5kZXhPZigiXG4iLCBwb3MpOwpAQCAtNTYyNiw3ICs3MTYyLDYgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiAgIH0g
OiBmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcuc3BsaXQoL1xyXG4/fFxuLyk7fTsKLSAg
Q29kZU1pcnJvci5zcGxpdExpbmVzID0gc3BsaXRMaW5lczsKCiAgIHZhciBoYXNTZWxlY3Rpb24g
PSB3aW5kb3cuZ2V0U2VsZWN0aW9uID8gZnVuY3Rpb24odGUpIHsKICAgICB0cnkgeyByZXR1cm4g
dGUuc2VsZWN0aW9uU3RhcnQgIT0gdGUuc2VsZWN0aW9uRW5kOyB9CkBAIC01NjQyLDIyICs3MTc3
LDIyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBlID0gZWx0
KCJkaXYiKTsKICAgICBpZiAoIm9uY29weSIgaW4gZSkgcmV0dXJuIHRydWU7CiAgICAgZS5zZXRB
dHRyaWJ1dGUoIm9uY29weSIsICJyZXR1cm47Iik7Ci0gICAgcmV0dXJuIHR5cGVvZiBlLm9uY29w
eSA9PSAnZnVuY3Rpb24nOworICAgIHJldHVybiB0eXBlb2YgZS5vbmNvcHkgPT0gImZ1bmN0aW9u
IjsKICAgfSkoKTsKCi0gIC8vIEtFWSBOQU1JTkcKKyAgLy8gS0VZIE5BTUVTCgogICB2YXIga2V5
TmFtZXMgPSB7MzogIkVudGVyIiwgODogIkJhY2tzcGFjZSIsIDk6ICJUYWIiLCAxMzogIkVudGVy
IiwgMTY6ICJTaGlmdCIsIDE3OiAiQ3RybCIsIDE4OiAiQWx0IiwKICAgICAgICAgICAgICAgICAg
IDE5OiAiUGF1c2UiLCAyMDogIkNhcHNMb2NrIiwgMjc6ICJFc2MiLCAzMjogIlNwYWNlIiwgMzM6
ICJQYWdlVXAiLCAzNDogIlBhZ2VEb3duIiwgMzU6ICJFbmQiLAogICAgICAgICAgICAgICAgICAg
MzY6ICJIb21lIiwgMzc6ICJMZWZ0IiwgMzg6ICJVcCIsIDM5OiAiUmlnaHQiLCA0MDogIkRvd24i
LCA0NDogIlByaW50U2NybiIsIDQ1OiAiSW5zZXJ0IiwKLSAgICAgICAgICAgICAgICAgIDQ2OiAi
RGVsZXRlIiwgNTk6ICI7IiwgOTE6ICJNb2QiLCA5MjogIk1vZCIsIDkzOiAiTW9kIiwgMTA5OiAi
LSIsIDEwNzogIj0iLCAxMjc6ICJEZWxldGUiLAotICAgICAgICAgICAgICAgICAgMTg2OiAiOyIs
IDE4NzogIj0iLCAxODg6ICIsIiwgMTg5OiAiLSIsIDE5MDogIi4iLCAxOTE6ICIvIiwgMTkyOiAi
YCIsIDIxOTogIlsiLCAyMjA6ICJcXCIsCi0gICAgICAgICAgICAgICAgICAyMjE6ICJdIiwgMjIy
OiAiJyIsIDYzMjc2OiAiUGFnZVVwIiwgNjMyNzc6ICJQYWdlRG93biIsIDYzMjc1OiAiRW5kIiwg
NjMyNzM6ICJIb21lIiwKLSAgICAgICAgICAgICAgICAgIDYzMjM0OiAiTGVmdCIsIDYzMjMyOiAi
VXAiLCA2MzIzNTogIlJpZ2h0IiwgNjMyMzM6ICJEb3duIiwgNjMzMDI6ICJJbnNlcnQiLCA2MzI3
MjogIkRlbGV0ZSJ9OworICAgICAgICAgICAgICAgICAgNDY6ICJEZWxldGUiLCA1OTogIjsiLCA2
MTogIj0iLCA5MTogIk1vZCIsIDkyOiAiTW9kIiwgOTM6ICJNb2QiLCAxMDc6ICI9IiwgMTA5OiAi
LSIsIDEyNzogIkRlbGV0ZSIsCisgICAgICAgICAgICAgICAgICAxNzM6ICItIiwgMTg2OiAiOyIs
IDE4NzogIj0iLCAxODg6ICIsIiwgMTg5OiAiLSIsIDE5MDogIi4iLCAxOTE6ICIvIiwgMTkyOiAi
YCIsIDIxOTogIlsiLCAyMjA6ICJcXCIsCisgICAgICAgICAgICAgICAgICAyMjE6ICJdIiwgMjIy
OiAiJyIsIDYzMjMyOiAiVXAiLCA2MzIzMzogIkRvd24iLCA2MzIzNDogIkxlZnQiLCA2MzIzNTog
IlJpZ2h0IiwgNjMyNzI6ICJEZWxldGUiLAorICAgICAgICAgICAgICAgICAgNjMyNzM6ICJIb21l
IiwgNjMyNzU6ICJFbmQiLCA2MzI3NjogIlBhZ2VVcCIsIDYzMjc3OiAiUGFnZURvd24iLCA2MzMw
MjogIkluc2VydCJ9OwogICBDb2RlTWlycm9yLmtleU5hbWVzID0ga2V5TmFtZXM7CiAgIChmdW5j
dGlvbigpIHsKICAgICAvLyBOdW1iZXIga2V5cwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7
IGkrKykga2V5TmFtZXNbaSArIDQ4XSA9IFN0cmluZyhpKTsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwOyBpKyspIGtleU5hbWVzW2kgKyA0OF0gPSBrZXlOYW1lc1tpICsgOTZdID0gU3RyaW5n
KGkpOwogICAgIC8vIEFscGhhYmV0aWMga2V5cwogICAgIGZvciAodmFyIGkgPSA2NTsgaSA8PSA5
MDsgaSsrKSBrZXlOYW1lc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7CiAgICAgLy8gRnVu
Y3Rpb24ga2V5cwpAQCAtNTY5MSwxOSArNzIyNiwyMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKCiAgIGZ1bmN0aW9uIGxpbmVTdGFydChjbSwgbGluZU4pIHsKICAgICB2YXIg
bGluZSA9IGdldExpbmUoY20uZG9jLCBsaW5lTik7Ci0gICAgdmFyIHZpc3VhbCA9IHZpc3VhbExp
bmUoY20uZG9jLCBsaW5lKTsKKyAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZShsaW5lKTsKICAg
ICBpZiAodmlzdWFsICE9IGxpbmUpIGxpbmVOID0gbGluZU5vKHZpc3VhbCk7CiAgICAgdmFyIG9y
ZGVyID0gZ2V0T3JkZXIodmlzdWFsKTsKICAgICB2YXIgY2ggPSAhb3JkZXIgPyAwIDogb3JkZXJb
MF0ubGV2ZWwgJSAyID8gbGluZVJpZ2h0KHZpc3VhbCkgOiBsaW5lTGVmdCh2aXN1YWwpOwogICAg
IHJldHVybiBQb3MobGluZU4sIGNoKTsKICAgfQogICBmdW5jdGlvbiBsaW5lRW5kKGNtLCBsaW5l
TikgewotICAgIHZhciBtZXJnZWQsIGxpbmU7Ci0gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNl
ZFNwYW5BdEVuZChsaW5lID0gZ2V0TGluZShjbS5kb2MsIGxpbmVOKSkpCi0gICAgICBsaW5lTiA9
IG1lcmdlZC5maW5kKCkudG8ubGluZTsKKyAgICB2YXIgbWVyZ2VkLCBsaW5lID0gZ2V0TGluZShj
bS5kb2MsIGxpbmVOKTsKKyAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxp
bmUpKSB7CisgICAgICBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGluZTsKKyAgICAgIGxp
bmVOID0gbnVsbDsKKyAgICB9CiAgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7CiAgICAg
dmFyIGNoID0gIW9yZGVyID8gbGluZS50ZXh0Lmxlbmd0aCA6IG9yZGVyWzBdLmxldmVsICUgMiA/
IGxpbmVMZWZ0KGxpbmUpIDogbGluZVJpZ2h0KGxpbmUpOwotICAgIHJldHVybiBQb3MobGluZU4s
IGNoKTsKKyAgICByZXR1cm4gUG9zKGxpbmVOID09IG51bGwgPyBsaW5lTm8obGluZSkgOiBsaW5l
TiwgY2gpOwogICB9CgogICBmdW5jdGlvbiBjb21wYXJlQmlkaUxldmVsKG9yZGVyLCBhLCBiKSB7
CkBAIC01NzE0LDM4ICs3MjUxLDM3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICB9CiAgIHZhciBiaWRpT3RoZXI7CiAgIGZ1bmN0aW9uIGdldEJpZGlQYXJ0QXQob3JkZXIs
IHBvcykgeworICAgIGJpZGlPdGhlciA9IG51bGw7CiAgICAgZm9yICh2YXIgaSA9IDAsIGZvdW5k
OyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBjdXIgPSBvcmRlcltpXTsKLSAg
ICAgIGlmIChjdXIuZnJvbSA8IHBvcyAmJiBjdXIudG8gPiBwb3MpIHsgYmlkaU90aGVyID0gbnVs
bDsgcmV0dXJuIGk7IH0KLSAgICAgIGlmIChjdXIuZnJvbSA9PSBwb3MgfHwgY3VyLnRvID09IHBv
cykgeworICAgICAgaWYgKGN1ci5mcm9tIDwgcG9zICYmIGN1ci50byA+IHBvcykgcmV0dXJuIGk7
CisgICAgICBpZiAoKGN1ci5mcm9tID09IHBvcyB8fCBjdXIudG8gPT0gcG9zKSkgewogICAgICAg
ICBpZiAoZm91bmQgPT0gbnVsbCkgewogICAgICAgICAgIGZvdW5kID0gaTsKICAgICAgICAgfSBl
bHNlIGlmIChjb21wYXJlQmlkaUxldmVsKG9yZGVyLCBjdXIubGV2ZWwsIG9yZGVyW2ZvdW5kXS5s
ZXZlbCkpIHsKLSAgICAgICAgICBiaWRpT3RoZXIgPSBmb3VuZDsKKyAgICAgICAgICBpZiAoY3Vy
LmZyb20gIT0gY3VyLnRvKSBiaWRpT3RoZXIgPSBmb3VuZDsKICAgICAgICAgICByZXR1cm4gaTsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBiaWRpT3RoZXIgPSBpOworICAgICAgICAgIGlm
IChjdXIuZnJvbSAhPSBjdXIudG8pIGJpZGlPdGhlciA9IGk7CiAgICAgICAgICAgcmV0dXJuIGZv
dW5kOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQotICAgIGJpZGlPdGhlciA9IG51bGw7CiAg
ICAgcmV0dXJuIGZvdW5kOwogICB9CgogICBmdW5jdGlvbiBtb3ZlSW5MaW5lKGxpbmUsIHBvcywg
ZGlyLCBieVVuaXQpIHsKICAgICBpZiAoIWJ5VW5pdCkgcmV0dXJuIHBvcyArIGRpcjsKICAgICBk
byBwb3MgKz0gZGlyOwotICAgIHdoaWxlIChwb3MgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhci50ZXN0
KGxpbmUudGV4dC5jaGFyQXQocG9zKSkpOworICAgIHdoaWxlIChwb3MgPiAwICYmIGlzRXh0ZW5k
aW5nQ2hhcihsaW5lLnRleHQuY2hhckF0KHBvcykpKTsKICAgICByZXR1cm4gcG9zOwogICB9Cgot
ICAvLyBUaGlzIGlzIHNvbWV3aGF0IGludm9sdmVkLiBJdCBpcyBuZWVkZWQgaW4gb3JkZXIgdG8g
bW92ZQotICAvLyAndmlzdWFsbHknIHRocm91Z2ggYmktZGlyZWN0aW9uYWwgdGV4dCAtLSBpLmUu
LCBwcmVzc2luZyBsZWZ0Ci0gIC8vIHNob3VsZCBtYWtlIHRoZSBjdXJzb3IgZ28gbGVmdCwgZXZl
biB3aGVuIGluIFJUTCB0ZXh0LiBUaGUKLSAgLy8gdHJpY2t5IHBhcnQgaXMgdGhlICdqdW1wcycs
IHdoZXJlIFJUTCBhbmQgTFRSIHRleHQgdG91Y2ggZWFjaAotICAvLyBvdGhlci4gVGhpcyBvZnRl
biByZXF1aXJlcyB0aGUgY3Vyc29yIG9mZnNldCB0byBtb3ZlIG1vcmUgdGhhbgotICAvLyBvbmUg
dW5pdCwgaW4gb3JkZXIgdG8gdmlzdWFsbHkgbW92ZSBvbmUgdW5pdC4KKyAgLy8gVGhpcyBpcyBu
ZWVkZWQgaW4gb3JkZXIgdG8gbW92ZSAndmlzdWFsbHknIHRocm91Z2ggYmktZGlyZWN0aW9uYWwK
KyAgLy8gdGV4dCAtLSBpLmUuLCBwcmVzc2luZyBsZWZ0IHNob3VsZCBtYWtlIHRoZSBjdXJzb3Ig
Z28gbGVmdCwgZXZlbgorICAvLyB3aGVuIGluIFJUTCB0ZXh0LiBUaGUgdHJpY2t5IHBhcnQgaXMg
dGhlICdqdW1wcycsIHdoZXJlIFJUTCBhbmQKKyAgLy8gTFRSIHRleHQgdG91Y2ggZWFjaCBvdGhl
ci4gVGhpcyBvZnRlbiByZXF1aXJlcyB0aGUgY3Vyc29yIG9mZnNldAorICAvLyB0byBtb3ZlIG1v
cmUgdGhhbiBvbmUgdW5pdCwgaW4gb3JkZXIgdG8gdmlzdWFsbHkgbW92ZSBvbmUgdW5pdC4KICAg
ZnVuY3Rpb24gbW92ZVZpc3VhbGx5KGxpbmUsIHN0YXJ0LCBkaXIsIGJ5VW5pdCkgewogICAgIHZh
ciBiaWRpID0gZ2V0T3JkZXIobGluZSk7CiAgICAgaWYgKCFiaWRpKSByZXR1cm4gbW92ZUxvZ2lj
YWxseShsaW5lLCBzdGFydCwgZGlyLCBieVVuaXQpOwpAQCAtNTc3MSw3ICs3MzA3LDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CgogICBmdW5jdGlvbiBtb3ZlTG9naWNhbGx5
KGxpbmUsIHN0YXJ0LCBkaXIsIGJ5VW5pdCkgewogICAgIHZhciB0YXJnZXQgPSBzdGFydCArIGRp
cjsKLSAgICBpZiAoYnlVbml0KSB3aGlsZSAodGFyZ2V0ID4gMCAmJiBpc0V4dGVuZGluZ0NoYXIu
dGVzdChsaW5lLnRleHQuY2hhckF0KHRhcmdldCkpKSB0YXJnZXQgKz0gZGlyOworICAgIGlmIChi
eVVuaXQpIHdoaWxlICh0YXJnZXQgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhcihsaW5lLnRleHQuY2hh
ckF0KHRhcmdldCkpKSB0YXJnZXQgKz0gZGlyOwogICAgIHJldHVybiB0YXJnZXQgPCAwIHx8IHRh
cmdldCA+IGxpbmUudGV4dC5sZW5ndGggPyBudWxsIDogdGFyZ2V0OwogICB9CgpAQCAtNTgwMCwx
NCArNzMzNiwxNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gb2Jq
ZWN0cykgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgb2NjdXIgdmlzdWFsbHkuCiAgIHZhciBi
aWRpT3JkZXJpbmcgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gQ2hhcmFjdGVyIHR5cGVzIGZvciBj
b2RlcG9pbnRzIDAgdG8gMHhmZgotICAgIHZhciBsb3dUeXBlcyA9ICJiYmJiYmJiYmJ0c3R3c2Ji
YmJiYmJiYmJiYmJic3NzdHdOTiUlJU5OTk5OTixOLE4xMTExMTExMTExTk5OTk5OTkxMTExMTExM
TExMTExMTExMTExMTExMTExMTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OYmJi
YmJic2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLE4lJSUlTk5OTkxOTk5OTiUlMTFOTE5OTjFM
Tk5OTk5MTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTExMTExMTExMTExMTExMTExMTExM
TExMTkxMTExMTExMIjsKKyAgICB2YXIgbG93VHlwZXMgPSAiYmJiYmJiYmJidHN0d3NiYmJiYmJi
YmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExM
TExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNi
YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5O
TExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE4i
OwogICAgIC8vIENoYXJhY3RlciB0eXBlcyBmb3IgY29kZXBvaW50cyAweDYwMCB0byAweDZmZgot
ICAgIHZhciBhcmFiaWNUeXBlcyA9ICJycnJycnJycnJycnIsck5ObW1tbW1tcnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbXJy
cnJycnJubm5ubm5ubm5uJW5ucnJybXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbU5tbW1tcnJycnJycnJycnJycnJycnJyIjsKKyAg
ICB2YXIgYXJhYmljVHlwZXMgPSAicnJycnJycnJycnJyLHJOTm1tbW1tbXJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1ycnJy
cnJybm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1ObW1tbSI7CiAgICAgZnVuY3Rpb24gY2hhclR5cGUo
Y29kZSkgewotICAgICAgaWYgKGNvZGUgPD0gMHhmZikgcmV0dXJuIGxvd1R5cGVzLmNoYXJBdChj
b2RlKTsKKyAgICAgIGlmIChjb2RlIDw9IDB4ZjcpIHJldHVybiBsb3dUeXBlcy5jaGFyQXQoY29k
ZSk7CiAgICAgICBlbHNlIGlmICgweDU5MCA8PSBjb2RlICYmIGNvZGUgPD0gMHg1ZjQpIHJldHVy
biAiUiI7Ci0gICAgICBlbHNlIGlmICgweDYwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHg2ZmYpIHJl
dHVybiBhcmFiaWNUeXBlcy5jaGFyQXQoY29kZSAtIDB4NjAwKTsKLSAgICAgIGVsc2UgaWYgKDB4
NzAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDhhYykgcmV0dXJuICJyIjsKKyAgICAgIGVsc2UgaWYg
KDB4NjAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDZlZCkgcmV0dXJuIGFyYWJpY1R5cGVzLmNoYXJB
dChjb2RlIC0gMHg2MDApOworICAgICAgZWxzZSBpZiAoMHg2ZWUgPD0gY29kZSAmJiBjb2RlIDw9
IDB4OGFjKSByZXR1cm4gInIiOworICAgICAgZWxzZSBpZiAoMHgyMDAwIDw9IGNvZGUgJiYgY29k
ZSA8PSAweDIwMGIpIHJldHVybiAidyI7CisgICAgICBlbHNlIGlmIChjb2RlID09IDB4MjAwYykg
cmV0dXJuICJiIjsKICAgICAgIGVsc2UgcmV0dXJuICJMIjsKICAgICB9CgpAQCAtNTgxNiw2ICs3
MzU0LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIC8vIEJyb3dz
ZXJzIHNlZW0gdG8gYWx3YXlzIHRyZWF0IHRoZSBib3VuZGFyaWVzIG9mIGJsb2NrIGVsZW1lbnRz
IGFzIGJlaW5nIEwuCiAgICAgdmFyIG91dGVyVHlwZSA9ICJMIjsKCisgICAgZnVuY3Rpb24gQmlk
aVNwYW4obGV2ZWwsIGZyb20sIHRvKSB7CisgICAgICB0aGlzLmxldmVsID0gbGV2ZWw7CisgICAg
ICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG87CisgICAgfQorCiAgICAgcmV0dXJuIGZ1
bmN0aW9uKHN0cikgewogICAgICAgaWYgKCFiaWRpUkUudGVzdChzdHIpKSByZXR1cm4gZmFsc2U7
CiAgICAgICB2YXIgbGVuID0gc3RyLmxlbmd0aCwgdHlwZXMgPSBbXTsKQEAgLTU4NjMsNyArNzQw
Niw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAodHlw
ZSA9PSAiLCIpIHR5cGVzW2ldID0gIk4iOwogICAgICAgICBlbHNlIGlmICh0eXBlID09ICIlIikg
ewogICAgICAgICAgIGZvciAodmFyIGVuZCA9IGkgKyAxOyBlbmQgPCBsZW4gJiYgdHlwZXNbZW5k
XSA9PSAiJSI7ICsrZW5kKSB7fQotICAgICAgICAgIHZhciByZXBsYWNlID0gKGkgJiYgdHlwZXNb
aS0xXSA9PSAiISIpIHx8IChlbmQgPCBsZW4gLSAxICYmIHR5cGVzW2VuZF0gPT0gIjEiKSA/ICIx
IiA6ICJOIjsKKyAgICAgICAgICB2YXIgcmVwbGFjZSA9IChpICYmIHR5cGVzW2ktMV0gPT0gIiEi
KSB8fCAoZW5kIDwgbGVuICYmIHR5cGVzW2VuZF0gPT0gIjEiKSA/ICIxIiA6ICJOIjsKICAgICAg
ICAgICBmb3IgKHZhciBqID0gaTsgaiA8IGVuZDsgKytqKSB0eXBlc1tqXSA9IHJlcGxhY2U7CiAg
ICAgICAgICAgaSA9IGVuZCAtIDE7CiAgICAgICAgIH0KQEAgLTU4ODgsNyArNzQzMSw3IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAoaXNOZXV0cmFsLnRl
c3QodHlwZXNbaV0pKSB7CiAgICAgICAgICAgZm9yICh2YXIgZW5kID0gaSArIDE7IGVuZCA8IGxl
biAmJiBpc05ldXRyYWwudGVzdCh0eXBlc1tlbmRdKTsgKytlbmQpIHt9CiAgICAgICAgICAgdmFy
IGJlZm9yZSA9IChpID8gdHlwZXNbaS0xXSA6IG91dGVyVHlwZSkgPT0gIkwiOwotICAgICAgICAg
IHZhciBhZnRlciA9IChlbmQgPCBsZW4gLSAxID8gdHlwZXNbZW5kXSA6IG91dGVyVHlwZSkgPT0g
IkwiOworICAgICAgICAgIHZhciBhZnRlciA9IChlbmQgPCBsZW4gPyB0eXBlc1tlbmRdIDogb3V0
ZXJUeXBlKSA9PSAiTCI7CiAgICAgICAgICAgdmFyIHJlcGxhY2UgPSBiZWZvcmUgfHwgYWZ0ZXIg
PyAiTCIgOiAiUiI7CiAgICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBlbmQ7ICsraikgdHlw
ZXNbal0gPSByZXBsYWNlOwogICAgICAgICAgIGkgPSBlbmQgLSAxOwpAQCAtNTkwNSwzMiArNzQ0
OCwzMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgaWYgKGNv
dW50c0FzTGVmdC50ZXN0KHR5cGVzW2ldKSkgewogICAgICAgICAgIHZhciBzdGFydCA9IGk7CiAg
ICAgICAgICAgZm9yICgrK2k7IGkgPCBsZW4gJiYgY291bnRzQXNMZWZ0LnRlc3QodHlwZXNbaV0p
OyArK2kpIHt9Ci0gICAgICAgICAgb3JkZXIucHVzaCh7ZnJvbTogc3RhcnQsIHRvOiBpLCBsZXZl
bDogMH0pOworICAgICAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKDAsIHN0YXJ0LCBpKSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgdmFyIHBvcyA9IGksIGF0ID0gb3JkZXIubGVu
Z3RoOwogICAgICAgICAgIGZvciAoKytpOyBpIDwgbGVuICYmIHR5cGVzW2ldICE9ICJMIjsgKytp
KSB7fQogICAgICAgICAgIGZvciAodmFyIGogPSBwb3M7IGogPCBpOykgewogICAgICAgICAgICAg
aWYgKGNvdW50c0FzTnVtLnRlc3QodHlwZXNbal0pKSB7Ci0gICAgICAgICAgICAgIGlmIChwb3Mg
PCBqKSBvcmRlci5zcGxpY2UoYXQsIDAsIHtmcm9tOiBwb3MsIHRvOiBqLCBsZXZlbDogMX0pOwor
ICAgICAgICAgICAgICBpZiAocG9zIDwgaikgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNw
YW4oMSwgcG9zLCBqKSk7CiAgICAgICAgICAgICAgIHZhciBuc3RhcnQgPSBqOwogICAgICAgICAg
ICAgICBmb3IgKCsrajsgaiA8IGkgJiYgY291bnRzQXNOdW0udGVzdCh0eXBlc1tqXSk7ICsraikg
e30KLSAgICAgICAgICAgICAgb3JkZXIuc3BsaWNlKGF0LCAwLCB7ZnJvbTogbnN0YXJ0LCB0bzog
aiwgbGV2ZWw6IDJ9KTsKKyAgICAgICAgICAgICAgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlk
aVNwYW4oMiwgbnN0YXJ0LCBqKSk7CiAgICAgICAgICAgICAgIHBvcyA9IGo7CiAgICAgICAgICAg
ICB9IGVsc2UgKytqOwogICAgICAgICAgIH0KLSAgICAgICAgICBpZiAocG9zIDwgaSkgb3JkZXIu
c3BsaWNlKGF0LCAwLCB7ZnJvbTogcG9zLCB0bzogaSwgbGV2ZWw6IDF9KTsKKyAgICAgICAgICBp
ZiAocG9zIDwgaSkgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4oMSwgcG9zLCBpKSk7
CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGlmIChvcmRlclswXS5sZXZlbCA9PSAxICYmICht
ID0gc3RyLm1hdGNoKC9eXHMrLykpKSB7CiAgICAgICAgIG9yZGVyWzBdLmZyb20gPSBtWzBdLmxl
bmd0aDsKLSAgICAgICAgb3JkZXIudW5zaGlmdCh7ZnJvbTogMCwgdG86IG1bMF0ubGVuZ3RoLCBs
ZXZlbDogMH0pOworICAgICAgICBvcmRlci51bnNoaWZ0KG5ldyBCaWRpU3BhbigwLCAwLCBtWzBd
Lmxlbmd0aCkpOwogICAgICAgfQogICAgICAgaWYgKGxzdChvcmRlcikubGV2ZWwgPT0gMSAmJiAo
bSA9IHN0ci5tYXRjaCgvXHMrJC8pKSkgewogICAgICAgICBsc3Qob3JkZXIpLnRvIC09IG1bMF0u
bGVuZ3RoOwotICAgICAgICBvcmRlci5wdXNoKHtmcm9tOiBsZW4gLSBtWzBdLmxlbmd0aCwgdG86
IGxlbiwgbGV2ZWw6IDB9KTsKKyAgICAgICAgb3JkZXIucHVzaChuZXcgQmlkaVNwYW4oMCwgbGVu
IC0gbVswXS5sZW5ndGgsIGxlbikpOwogICAgICAgfQogICAgICAgaWYgKG9yZGVyWzBdLmxldmVs
ICE9IGxzdChvcmRlcikubGV2ZWwpCi0gICAgICAgIG9yZGVyLnB1c2goe2Zyb206IGxlbiwgdG86
IGxlbiwgbGV2ZWw6IG9yZGVyWzBdLmxldmVsfSk7CisgICAgICAgIG9yZGVyLnB1c2gobmV3IEJp
ZGlTcGFuKG9yZGVyWzBdLmxldmVsLCBsZW4sIGxlbikpOwoKICAgICAgIHJldHVybiBvcmRlcjsK
ICAgICB9OwpAQCAtNTkzOCw3ICs3NDgxLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CgogICAvLyBUSEUgRU5ECgotICBDb2RlTWlycm9yLnZlcnNpb24gPSAiMy4yMC4wIjsK
KyAgQ29kZU1pcnJvci52ZXJzaW9uID0gIjQuMC40IjsKCiAgIHJldHVybiBDb2RlTWlycm9yOwot
fSkoKTsKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0
eVByaW50aW5nL2Nzcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmlu
dGluZy9jc3MuanMKaW5kZXggNzk5ZWExNi4uMzQyNjczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY3NzLmpzCkBAIC0xLDg5ICsxLDkxIEBA
Ci1Db2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29u
ZmlnKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKKyhmdW5jdGlvbihtb2QpIHsKKyAgaWYgKHR5cGVvZiBl
eHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1v
bkpTCisgICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikpOworICBlbHNlIGlm
ICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgLy8gQU1ECisgICAg
ZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBi
cm93c2VyIGVudgorICAgIG1vZChDb2RlTWlycm9yKTsKK30pKGZ1bmN0aW9uKENvZGVNaXJyb3Ip
IHsKKyJ1c2Ugc3RyaWN0IjsKCitDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIGlmICghcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5
d29yZHMpIHBhcnNlckNvbmZpZyA9IENvZGVNaXJyb3IucmVzb2x2ZU1vZGUoInRleHQvY3NzIik7
CgotICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0IHx8IGNvbmZpZy50YWJTaXpl
IHx8IDIsCi0gICAgICBob29rcyA9IHBhcnNlckNvbmZpZy5ob29rcyB8fCB7fSwKLSAgICAgIGF0
TWVkaWFUeXBlcyA9IHBhcnNlckNvbmZpZy5hdE1lZGlhVHlwZXMgfHwge30sCi0gICAgICBhdE1l
ZGlhRmVhdHVyZXMgPSBwYXJzZXJDb25maWcuYXRNZWRpYUZlYXR1cmVzIHx8IHt9LAorICB2YXIg
aW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LAorICAgICAgdG9rZW5Ib29rcyA9IHBhcnNl
ckNvbmZpZy50b2tlbkhvb2tzLAorICAgICAgbWVkaWFUeXBlcyA9IHBhcnNlckNvbmZpZy5tZWRp
YVR5cGVzIHx8IHt9LAorICAgICAgbWVkaWFGZWF0dXJlcyA9IHBhcnNlckNvbmZpZy5tZWRpYUZl
YXR1cmVzIHx8IHt9LAogICAgICAgcHJvcGVydHlLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5wcm9w
ZXJ0eUtleXdvcmRzIHx8IHt9LAorICAgICAgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzID0g
cGFyc2VyQ29uZmlnLm5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyB8fCB7fSwKICAgICAgIGNv
bG9yS2V5d29yZHMgPSBwYXJzZXJDb25maWcuY29sb3JLZXl3b3JkcyB8fCB7fSwKICAgICAgIHZh
bHVlS2V5d29yZHMgPSBwYXJzZXJDb25maWcudmFsdWVLZXl3b3JkcyB8fCB7fSwKLSAgICAgIGFs
bG93TmVzdGVkID0gISFwYXJzZXJDb25maWcuYWxsb3dOZXN0ZWQsCi0gICAgICB0eXBlID0gbnVs
bDsKKyAgICAgIGZvbnRQcm9wZXJ0aWVzID0gcGFyc2VyQ29uZmlnLmZvbnRQcm9wZXJ0aWVzIHx8
IHt9LAorICAgICAgYWxsb3dOZXN0ZWQgPSBwYXJzZXJDb25maWcuYWxsb3dOZXN0ZWQ7CgorICB2
YXIgdHlwZSwgb3ZlcnJpZGU7CiAgIGZ1bmN0aW9uIHJldChzdHlsZSwgdHApIHsgdHlwZSA9IHRw
OyByZXR1cm4gc3R5bGU7IH0KCisgIC8vIFRva2VuaXplcnMKKwogICBmdW5jdGlvbiB0b2tlbkJh
c2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7Ci0gICAgaWYg
KGhvb2tzW2NoXSkgewotICAgICAgLy8gcmVzdWx0WzBdIGlzIHN0eWxlIGFuZCByZXN1bHRbMV0g
aXMgdHlwZQotICAgICAgdmFyIHJlc3VsdCA9IGhvb2tzW2NoXShzdHJlYW0sIHN0YXRlKTsKKyAg
ICBpZiAodG9rZW5Ib29rc1tjaF0pIHsKKyAgICAgIHZhciByZXN1bHQgPSB0b2tlbkhvb2tzW2No
XShzdHJlYW0sIHN0YXRlKTsKICAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVz
dWx0OwogICAgIH0KLSAgICBpZiAoY2ggPT0gIkAiKSB7c3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwt
XS8pOyByZXR1cm4gcmV0KCJkZWYiLCBzdHJlYW0uY3VycmVudCgpKTt9Ci0gICAgZWxzZSBpZiAo
Y2ggPT0gIj0iKSByZXQobnVsbCwgImNvbXBhcmUiKTsKLSAgICBlbHNlIGlmICgoY2ggPT0gIn4i
IHx8IGNoID09ICJ8IikgJiYgc3RyZWFtLmVhdCgiPSIpKSByZXR1cm4gcmV0KG51bGwsICJjb21w
YXJlIik7Ci0gICAgZWxzZSBpZiAoY2ggPT0gIlwiIiB8fCBjaCA9PSAiJyIpIHsKKyAgICBpZiAo
Y2ggPT0gIkAiKSB7CisgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7CisgICAgICBy
ZXR1cm4gcmV0KCJkZWYiLCBzdHJlYW0uY3VycmVudCgpKTsKKyAgICB9IGVsc2UgaWYgKGNoID09
ICI9IiB8fCAoY2ggPT0gIn4iIHx8IGNoID09ICJ8IikgJiYgc3RyZWFtLmVhdCgiPSIpKSB7Cisg
ICAgICByZXR1cm4gcmV0KG51bGwsICJjb21wYXJlIik7CisgICAgfSBlbHNlIGlmIChjaCA9PSAi
XCIiIHx8IGNoID09ICInIikgewogICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhj
aCk7CiAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKGNoID09ICIjIikgeworICAgIH0gZWxzZSBpZiAoY2ggPT0gIiMiKSB7CiAg
ICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7CiAgICAgICByZXR1cm4gcmV0KCJhdG9t
IiwgImhhc2giKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY2ggPT0gIiEiKSB7CisgICAgfSBlbHNl
IGlmIChjaCA9PSAiISIpIHsKICAgICAgIHN0cmVhbS5tYXRjaCgvXlxzKlx3Ki8pOwogICAgICAg
cmV0dXJuIHJldCgia2V5d29yZCIsICJpbXBvcnRhbnQiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
L1xkLy50ZXN0KGNoKSB8fCBjaCA9PSAiLiIgJiYgc3RyZWFtLmVhdCgvXGQvKSkgeworICAgIH0g
ZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSB8fCBjaCA9PSAiLiIgJiYgc3RyZWFtLmVhdCgvXGQvKSkg
ewogICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHcuJV0vKTsKICAgICAgIHJldHVybiByZXQoIm51
bWJlciIsICJ1bml0Iik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNoID09PSAiLSIpIHsKLSAgICAg
IGlmICgvXGQvLnRlc3Qoc3RyZWFtLnBlZWsoKSkpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09PSAi
LSIpIHsKKyAgICAgIGlmICgvW1xkLl0vLnRlc3Qoc3RyZWFtLnBlZWsoKSkpIHsKICAgICAgICAg
c3RyZWFtLmVhdFdoaWxlKC9bXHcuJV0vKTsKICAgICAgICAgcmV0dXJuIHJldCgibnVtYmVyIiwg
InVuaXQiKTsKICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eW14tXSstLykpIHsKICAg
ICAgICAgcmV0dXJuIHJldCgibWV0YSIsICJtZXRhIik7CiAgICAgICB9Ci0gICAgfQotICAgIGVs
c2UgaWYgKC9bLCs+KlwvXS8udGVzdChjaCkpIHsKKyAgICB9IGVsc2UgaWYgKC9bLCs+KlwvXS8u
dGVzdChjaCkpIHsKICAgICAgIHJldHVybiByZXQobnVsbCwgInNlbGVjdC1vcCIpOwotICAgIH0K
LSAgICBlbHNlIGlmIChjaCA9PSAiLiIgJiYgc3RyZWFtLm1hdGNoKC9eLT9bX2Etel1bX2EtejAt
OS1dKi9pKSkgeworICAgIH0gZWxzZSBpZiAoY2ggPT0gIi4iICYmIHN0cmVhbS5tYXRjaCgvXi0/
W19hLXpdW19hLXowLTktXSovaSkpIHsKICAgICAgIHJldHVybiByZXQoInF1YWxpZmllciIsICJx
dWFsaWZpZXIiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY2ggPT0gIjoiKSB7Ci0gICAgICByZXR1
cm4gcmV0KCJvcGVyYXRvciIsIGNoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoL1s7e31cW1xdXChc
KV0vLnRlc3QoY2gpKSB7CisgICAgfSBlbHNlIGlmICgvWzo7e31cW1xdXChcKV0vLnRlc3QoY2gp
KSB7CiAgICAgICByZXR1cm4gcmV0KG51bGwsIGNoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY2gg
PT0gInUiICYmIHN0cmVhbS5tYXRjaCgicmwoIikpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICJ1
IiAmJiBzdHJlYW0ubWF0Y2goInJsKCIpKSB7CiAgICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAg
ICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblBhcmVudGhlc2l6ZWQ7Ci0gICAgICByZXR1cm4gcmV0
KCJwcm9wZXJ0eSIsICJ2YXJpYWJsZSIpOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICAgIHJldHVy
biByZXQoInByb3BlcnR5IiwgIndvcmQiKTsKKyAgICB9IGVsc2UgaWYgKC9bXHdcXFwtXS8udGVz
dChjaCkpIHsKICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKLSAgICAgIHJldHVy
biByZXQoInByb3BlcnR5IiwgInZhcmlhYmxlIik7CisgICAgICByZXR1cm4gcmV0KCJwcm9wZXJ0
eSIsICJ3b3JkIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiByZXQobnVsbCwgbnVsbCk7
CiAgICAgfQogICB9CgotICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSwgbm9uSW5jbHVzaXZl
KSB7CisgIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICAgcmV0dXJuIGZ1bmN0aW9u
KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIGNoOwogICAgICAg
d2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKLSAgICAgICAgaWYgKGNoID09
IHF1b3RlICYmICFlc2NhcGVkKQorICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgIWVzY2FwZWQp
IHsKKyAgICAgICAgICBpZiAocXVvdGUgPT0gIikiKSBzdHJlYW0uYmFja1VwKDEpOwogICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9
PSAiXFwiOwogICAgICAgfQotICAgICAgaWYgKCFlc2NhcGVkKSB7Ci0gICAgICAgIGlmIChub25J
bmNsdXNpdmUpIHN0cmVhbS5iYWNrVXAoMSk7Ci0gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9r
ZW5CYXNlOwotICAgICAgfQorICAgICAgaWYgKGNoID09IHF1b3RlIHx8ICFlc2NhcGVkICYmIHF1
b3RlICE9ICIpIikgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICAgcmV0dXJuIHJldCgic3Ry
aW5nIiwgInN0cmluZyIpOwogICAgIH07CiAgIH0KQEAgLTkxLDIxOCArOTMsMjUxIEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
ICAgZnVuY3Rpb24gdG9rZW5QYXJlbnRoZXNpemVkKHN0cmVhbSwgc3RhdGUpIHsKICAgICBzdHJl
YW0ubmV4dCgpOyAvLyBNdXN0IGJlICcoJwogICAgIGlmICghc3RyZWFtLm1hdGNoKC9ccypbXCJc
J10vLCBmYWxzZSkpCi0gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKCIpIiwgdHJ1
ZSk7CisgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKCIpIik7CiAgICAgZWxzZQot
ICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CisgICAgICBzdGF0ZS50b2tlbml6ZSA9
IG51bGw7CiAgICAgcmV0dXJuIHJldChudWxsLCAiKCIpOwogICB9CgorICAvLyBDb250ZXh0IG1h
bmFnZW1lbnQKKworICBmdW5jdGlvbiBDb250ZXh0KHR5cGUsIGluZGVudCwgcHJldikgeworICAg
IHRoaXMudHlwZSA9IHR5cGU7CisgICAgdGhpcy5pbmRlbnQgPSBpbmRlbnQ7CisgICAgdGhpcy5w
cmV2ID0gcHJldjsKKyAgfQorCisgIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0s
IHR5cGUpIHsKKyAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQodHlwZSwgc3RyZWFtLmlu
ZGVudGF0aW9uKCkgKyBpbmRlbnRVbml0LCBzdGF0ZS5jb250ZXh0KTsKKyAgICByZXR1cm4gdHlw
ZTsKKyAgfQorCisgIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKKyAgICBzdGF0ZS5jb250
ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2OworICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7
CisgIH0KKworICBmdW5jdGlvbiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICByZXR1
cm4gc3RhdGVzW3N0YXRlLmNvbnRleHQudHlwZV0odHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgIH0K
KyAgZnVuY3Rpb24gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCBuKSB7CisgICAgZm9y
ICh2YXIgaSA9IG4gfHwgMTsgaSA+IDA7IGktLSkKKyAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0
ZS5jb250ZXh0LnByZXY7CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7Cisg
IH0KKworICAvLyBQYXJzZXIKKworICBmdW5jdGlvbiB3b3JkQXNWYWx1ZShzdHJlYW0pIHsKKyAg
ICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTsKKyAgICBpZiAodmFs
dWVLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkKKyAgICAgIG92ZXJyaWRlID0gImF0b20i
OworICAgIGVsc2UgaWYgKGNvbG9yS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpCisgICAg
ICBvdmVycmlkZSA9ICJrZXl3b3JkIjsKKyAgICBlbHNlCisgICAgICBvdmVycmlkZSA9ICJ2YXJp
YWJsZSI7CisgIH0KKworICB2YXIgc3RhdGVzID0ge307CisKKyAgc3RhdGVzLnRvcCA9IGZ1bmN0
aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAieyIpIHsKKyAgICAg
IHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAiYmxvY2siKTsKKyAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gIn0iICYmIHN0YXRlLmNvbnRleHQucHJldikgeworICAgICAgcmV0dXJuIHBv
cENvbnRleHQoc3RhdGUpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiQG1lZGlhIikgeworICAg
ICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJtZWRpYSIpOworICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSAiQGZvbnQtZmFjZSIpIHsKKyAgICAgIHJldHVybiAiZm9udF9mYWNlX2Jl
Zm9yZSI7CisgICAgfSBlbHNlIGlmICgvXkAoLShtb3p8bXN8b3x3ZWJraXQpLSk/a2V5ZnJhbWVz
JC8udGVzdCh0eXBlKSkgeworICAgICAgcmV0dXJuICJrZXlmcmFtZXMiOworICAgIH0gZWxzZSBp
ZiAodHlwZSAmJiB0eXBlLmNoYXJBdCgwKSA9PSAiQCIpIHsKKyAgICAgIHJldHVybiBwdXNoQ29u
dGV4dChzdGF0ZSwgc3RyZWFtLCAiYXQiKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImhhc2gi
KSB7CisgICAgICBvdmVycmlkZSA9ICJidWlsdGluIjsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0g
IndvcmQiKSB7CisgICAgICBvdmVycmlkZSA9ICJ0YWciOworICAgIH0gZWxzZSBpZiAodHlwZSA9
PSAidmFyaWFibGUtZGVmaW5pdGlvbiIpIHsKKyAgICAgIHJldHVybiAibWF5YmVwcm9wIjsKKyAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gImludGVycG9sYXRpb24iKSB7CisgICAgICByZXR1cm4gcHVz
aENvbnRleHQoc3RhdGUsIHN0cmVhbSwgImludGVycG9sYXRpb24iKTsKKyAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gIjoiKSB7CisgICAgICByZXR1cm4gInBzZXVkbyI7CisgICAgfSBlbHNlIGlmIChh
bGxvd05lc3RlZCAmJiB0eXBlID09ICIoIikgeworICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0
YXRlLCBzdHJlYW0sICJwYXJhbXMiKTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQu
dHlwZTsKKyAgfTsKKworICBzdGF0ZXMuYmxvY2sgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0
YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CisgICAgICB2YXIgd29yZCA9IHN0cmVh
bS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgIGlmIChwcm9wZXJ0eUtleXdvcmRzLmhh
c093blByb3BlcnR5KHdvcmQpKSB7CisgICAgICAgIG92ZXJyaWRlID0gInByb3BlcnR5IjsKKyAg
ICAgICAgcmV0dXJuICJtYXliZXByb3AiOworICAgICAgfSBlbHNlIGlmIChub25TdGFuZGFyZFBy
b3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKKyAgICAgICAgb3ZlcnJpZGUg
PSAic3RyaW5nLTIiOworICAgICAgICByZXR1cm4gIm1heWJlcHJvcCI7CisgICAgICB9IGVsc2Ug
aWYgKGFsbG93TmVzdGVkKSB7CisgICAgICAgIG92ZXJyaWRlID0gc3RyZWFtLm1hdGNoKC9eXHMq
Oi8sIGZhbHNlKSA/ICJwcm9wZXJ0eSIgOiAidGFnIjsKKyAgICAgICAgcmV0dXJuICJibG9jayI7
CisgICAgICB9IGVsc2UgeworICAgICAgICBvdmVycmlkZSArPSAiIGVycm9yIjsKKyAgICAgICAg
cmV0dXJuICJtYXliZXByb3AiOworICAgICAgfQorICAgIH0gZWxzZSBpZiAodHlwZSA9PSAibWV0
YSIpIHsKKyAgICAgIHJldHVybiAiYmxvY2siOworICAgIH0gZWxzZSBpZiAoIWFsbG93TmVzdGVk
ICYmICh0eXBlID09ICJoYXNoIiB8fCB0eXBlID09ICJxdWFsaWZpZXIiKSkgeworICAgICAgb3Zl
cnJpZGUgPSAiZXJyb3IiOworICAgICAgcmV0dXJuICJibG9jayI7CisgICAgfSBlbHNlIHsKKyAg
ICAgIHJldHVybiBzdGF0ZXMudG9wKHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIH0KKyAgfTsK
KworICBzdGF0ZXMubWF5YmVwcm9wID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgewor
ICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJw
cm9wIik7CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgIH07CisKKyAg
c3RhdGVzLnByb3AgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5
cGUgPT0gIjsiKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gInsi
ICYmIGFsbG93TmVzdGVkKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInByb3BC
bG9jayIpOworICAgIGlmICh0eXBlID09ICJ9IiB8fCB0eXBlID09ICJ7IikgcmV0dXJuIHBvcEFu
ZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4g
cHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInBhcmVucyIpOworCisgICAgaWYgKHR5cGUgPT0g
Imhhc2giICYmICEvXiMoWzAtOWEtZkEtZl17M318WzAtOWEtZkEtZl17Nn0pJC8udGVzdChzdHJl
YW0uY3VycmVudCgpKSkgeworICAgICAgb3ZlcnJpZGUgKz0gIiBlcnJvciI7CisgICAgfSBlbHNl
IGlmICh0eXBlID09ICJ3b3JkIikgeworICAgICAgd29yZEFzVmFsdWUoc3RyZWFtKTsKKyAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gImludGVycG9sYXRpb24iKSB7CisgICAgICByZXR1cm4gcHVzaENv
bnRleHQoc3RhdGUsIHN0cmVhbSwgImludGVycG9sYXRpb24iKTsKKyAgICB9CisgICAgcmV0dXJu
ICJwcm9wIjsKKyAgfTsKKworICBzdGF0ZXMucHJvcEJsb2NrID0gZnVuY3Rpb24odHlwZSwgX3N0
cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAifSIpIHJldHVybiBwb3BDb250ZXh0KHN0
YXRlKTsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHsgb3ZlcnJpZGUgPSAicHJvcGVydHkiOyBy
ZXR1cm4gIm1heWJlcHJvcCI7IH0KKyAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlOworICB9
OworCisgIHN0YXRlcy5wYXJlbnMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Cisg
ICAgaWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBl
LCBzdHJlYW0sIHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAiKSIpIHJldHVybiBwb3BDb250ZXh0
KHN0YXRlKTsKKyAgICByZXR1cm4gInBhcmVucyI7CisgIH07CisKKyAgc3RhdGVzLnBzZXVkbyA9
IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAid29yZCIp
IHsKKyAgICAgIG92ZXJyaWRlID0gInZhcmlhYmxlLTMiOworICAgICAgcmV0dXJuIHN0YXRlLmNv
bnRleHQudHlwZTsKKyAgICB9CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7
CisgIH07CisKKyAgc3RhdGVzLm1lZGlhID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkg
eworICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0s
ICJtZWRpYV9wYXJlbnMiKTsKKyAgICBpZiAodHlwZSA9PSAifSIpIHJldHVybiBwb3BBbmRQYXNz
KHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIHBvcENv
bnRleHQoc3RhdGUpICYmIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIGFsbG93TmVzdGVkID8g
ImJsb2NrIiA6ICJ0b3AiKTsKKworICAgIGlmICh0eXBlID09ICJ3b3JkIikgeworICAgICAgdmFy
IHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7CisgICAgICBpZiAod29yZCA9
PSAib25seSIgfHwgd29yZCA9PSAibm90IiB8fCB3b3JkID09ICJhbmQiKQorICAgICAgICBvdmVy
cmlkZSA9ICJrZXl3b3JkIjsKKyAgICAgIGVsc2UgaWYgKG1lZGlhVHlwZXMuaGFzT3duUHJvcGVy
dHkod29yZCkpCisgICAgICAgIG92ZXJyaWRlID0gImF0dHJpYnV0ZSI7CisgICAgICBlbHNlIGlm
IChtZWRpYUZlYXR1cmVzLmhhc093blByb3BlcnR5KHdvcmQpKQorICAgICAgICBvdmVycmlkZSA9
ICJwcm9wZXJ0eSI7CisgICAgICBlbHNlCisgICAgICAgIG92ZXJyaWRlID0gImVycm9yIjsKKyAg
ICB9CisgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQudHlwZTsKKyAgfTsKKworICBzdGF0ZXMubWVk
aWFfcGFyZW5zID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICAgIGlmICh0eXBl
ID09ICIpIikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpOworICAgIGlmICh0eXBlID09ICJ7IiB8
fCB0eXBlID09ICJ9IikgcmV0dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSwgMik7
CisgICAgcmV0dXJuIHN0YXRlcy5tZWRpYSh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKKyAgfTsKKwor
ICBzdGF0ZXMuZm9udF9mYWNlX2JlZm9yZSA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUp
IHsKKyAgICBpZiAodHlwZSA9PSAieyIpCisgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUs
IHN0cmVhbSwgImZvbnRfZmFjZSIpOworICAgIHJldHVybiBwYXNzKHR5cGUsIHN0cmVhbSwgc3Rh
dGUpOworICB9OworCisgIHN0YXRlcy5mb250X2ZhY2UgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0s
IHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7
CisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CisgICAgICBpZiAoIWZvbnRQcm9wZXJ0aWVzLmhh
c093blByb3BlcnR5KHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSkpCisgICAgICAgIG92
ZXJyaWRlID0gImVycm9yIjsKKyAgICAgIGVsc2UKKyAgICAgICAgb3ZlcnJpZGUgPSAicHJvcGVy
dHkiOworICAgICAgcmV0dXJuICJtYXliZXByb3AiOworICAgIH0KKyAgICByZXR1cm4gImZvbnRf
ZmFjZSI7CisgIH07CisKKyAgc3RhdGVzLmtleWZyYW1lcyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVh
bSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHsgb3ZlcnJpZGUgPSAidmFyaWFi
bGUiOyByZXR1cm4gImtleWZyYW1lcyI7IH0KKyAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBw
dXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAidG9wIik7CisgICAgcmV0dXJuIHBhc3ModHlwZSwg
c3RyZWFtLCBzdGF0ZSk7CisgIH07CisKKyAgc3RhdGVzLmF0ID0gZnVuY3Rpb24odHlwZSwgc3Ry
ZWFtLCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIHBvcENvbnRleHQoc3Rh
dGUpOworICAgIGlmICh0eXBlID09ICJ7IiB8fCB0eXBlID09ICJ9IikgcmV0dXJuIHBvcEFuZFBh
c3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSBvdmVycmlk
ZSA9ICJ0YWciOworICAgIGVsc2UgaWYgKHR5cGUgPT0gImhhc2giKSBvdmVycmlkZSA9ICJidWls
dGluIjsKKyAgICByZXR1cm4gImF0IjsKKyAgfTsKKworICBzdGF0ZXMuaW50ZXJwb2xhdGlvbiA9
IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAifSIpIHJl
dHVybiBwb3BDb250ZXh0KHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAieyIgfHwgdHlwZSA9PSAi
OyIpIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIGlmICh0eXBl
ICE9ICJ2YXJpYWJsZSIpIG92ZXJyaWRlID0gImVycm9yIjsKKyAgICByZXR1cm4gImludGVycG9s
YXRpb24iOworICB9OworCisgIHN0YXRlcy5wYXJhbXMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0s
IHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIikiKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7
CisgICAgaWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQW5kUGFzcyh0
eXBlLCBzdHJlYW0sIHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHdvcmRBc1ZhbHVl
KHN0cmVhbSk7CisgICAgcmV0dXJuICJwYXJhbXMiOworICB9OworCiAgIHJldHVybiB7CiAgICAg
c3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewotICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9r
ZW5CYXNlLAotICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCi0gICAgICAgICAg
ICAgIHN0YWNrOiBbXSwKLSAgICAgICAgICAgICAgbGFzdFRva2VuOiBudWxsfTsKKyAgICAgIHJl
dHVybiB7dG9rZW5pemU6IG51bGwsCisgICAgICAgICAgICAgIHN0YXRlOiAidG9wIiwKKyAgICAg
ICAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoInRvcCIsIGJhc2UgfHwgMCwgbnVsbCl9Owog
ICAgIH0sCgogICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0KLSAgICAgIC8v
IFVzZSB0aGVzZSB0ZXJtcyB3aGVuIGFwcGxpY2FibGUgKHNlZSBodHRwOi8vd3d3LnhhbnRoaXIu
Y29tL2Jsb2cvYjRFNTApCi0gICAgICAvLwotICAgICAgLy8gcnVsZSoqIG9yICoqcnVsZXNldDoK
LSAgICAgIC8vIEEgc2VsZWN0b3IgKyBicmFjZXMgY29tYm8sIG9yIGFuIGF0LXJ1bGUuCi0gICAg
ICAvLwotICAgICAgLy8gZGVjbGFyYXRpb24gYmxvY2s6Ci0gICAgICAvLyBBIHNlcXVlbmNlIG9m
IGRlY2xhcmF0aW9ucy4KLSAgICAgIC8vCi0gICAgICAvLyBkZWNsYXJhdGlvbjoKLSAgICAgIC8v
IEEgcHJvcGVydHkgKyBjb2xvbiArIHZhbHVlIGNvbWJvLgotICAgICAgLy8KLSAgICAgIC8vIHBy
b3BlcnR5IHZhbHVlOgotICAgICAgLy8gVGhlIGVudGlyZSB2YWx1ZSBvZiBhIHByb3BlcnR5Lgot
ICAgICAgLy8KLSAgICAgIC8vIGNvbXBvbmVudCB2YWx1ZToKLSAgICAgIC8vIEEgc2luZ2xlIHBp
ZWNlIG9mIGEgcHJvcGVydHkgdmFsdWUuIExpa2UgdGhlIDVweCBpbgotICAgICAgLy8gdGV4dC1z
aGFkb3c6IDAgMCA1cHggYmx1ZTsuIENhbiBhbHNvIHJlZmVyIHRvIHRoaW5ncyB0aGF0IGFyZQot
ICAgICAgLy8gbXVsdGlwbGUgdGVybXMsIGxpa2UgdGhlIDEtNCB0ZXJtcyB0aGF0IG1ha2UgdXAg
dGhlIGJhY2tncm91bmQtc2l6ZQotICAgICAgLy8gcG9ydGlvbiBvZiB0aGUgYmFja2dyb3VuZCBz
aG9ydGhhbmQuCi0gICAgICAvLwotICAgICAgLy8gdGVybToKLSAgICAgIC8vIFRoZSBiYXNpYyB1
bml0IG9mIGF1dGhvci1mYWNpbmcgQ1NTLCBsaWtlIGEgc2luZ2xlIG51bWJlciAoNSksCi0gICAg
ICAvLyBkaW1lbnNpb24gKDVweCksIHN0cmluZyAoImZvbyIpLCBvciBmdW5jdGlvbi4gT2ZmaWNp
YWxseSBkZWZpbmVkCi0gICAgICAvLyAgYnkgdGhlIENTUyAyLjEgZ3JhbW1hciAobG9vayBmb3Ig
dGhlICd0ZXJtJyBwcm9kdWN0aW9uKQotICAgICAgLy8KLSAgICAgIC8vCi0gICAgICAvLyBzaW1w
bGUgc2VsZWN0b3I6Ci0gICAgICAvLyBBIHNpbmdsZSBhdG9taWMgc2VsZWN0b3IsIGxpa2UgYSB0
eXBlIHNlbGVjdG9yLCBhbiBhdHRyIHNlbGVjdG9yLCBhCi0gICAgICAvLyBjbGFzcyBzZWxlY3Rv
ciwgZXRjLgotICAgICAgLy8KLSAgICAgIC8vIGNvbXBvdW5kIHNlbGVjdG9yOgotICAgICAgLy8g
T25lIG9yIG1vcmUgc2ltcGxlIHNlbGVjdG9ycyB3aXRob3V0IGEgY29tYmluYXRvci4gZGl2LmV4
YW1wbGUgaXMKLSAgICAgIC8vIGNvbXBvdW5kLCBkaXYgPiAuZXhhbXBsZSBpcyBub3QuCi0gICAg
ICAvLwotICAgICAgLy8gY29tcGxleCBzZWxlY3RvcjoKLSAgICAgIC8vIE9uZSBvciBtb3JlIGNv
bXBvdW5kIHNlbGVjdG9ycyBjaGFpbmVkIHdpdGggY29tYmluYXRvcnMuCi0gICAgICAvLwotICAg
ICAgLy8gY29tYmluYXRvcjoKLSAgICAgIC8vIFRoZSBwYXJ0cyBvZiBzZWxlY3RvcnMgdGhhdCBl
eHByZXNzIHJlbGF0aW9uc2hpcHMuIFRoZXJlIGFyZSBmb3VyCi0gICAgICAvLyBjdXJyZW50bHkg
LSB0aGUgc3BhY2UgKGRlc2NlbmRhbnQgY29tYmluYXRvciksIHRoZSBncmVhdGVyLXRoYW4KLSAg
ICAgIC8vIGJyYWNrZXQgKGNoaWxkIGNvbWJpbmF0b3IpLCB0aGUgcGx1cyBzaWduIChuZXh0IHNp
YmxpbmcgY29tYmluYXRvciksCi0gICAgICAvLyBhbmQgdGhlIHRpbGRhIChmb2xsb3dpbmcgc2li
bGluZyBjb21iaW5hdG9yKS4KLSAgICAgIC8vCi0gICAgICAvLyBzZXF1ZW5jZSBvZiBzZWxlY3Rv
cnM6Ci0gICAgICAvLyBPbmUgb3IgbW9yZSBvZiB0aGUgbmFtZWQgdHlwZSBvZiBzZWxlY3RvciBj
aGFpbmVkIHdpdGggY29tbWFzLgotCi0gICAgICBzdGF0ZS50b2tlbml6ZSA9IHN0YXRlLnRva2Vu
aXplIHx8IHRva2VuQmFzZTsKLSAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSA9PSB0b2tlbkJhc2Ug
JiYgc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwotICAgICAgdmFyIHN0eWxlID0gc3Rh
dGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7Ci0gICAgICBpZiAoc3R5bGUgJiYgdHlwZW9mIHN0
eWxlICE9ICJzdHJpbmciKSBzdHlsZSA9IHJldChzdHlsZVswXSwgc3R5bGVbMV0pOwotCi0gICAg
ICAvLyBDaGFuZ2luZyBzdHlsZSByZXR1cm5lZCBiYXNlZCBvbiBjb250ZXh0Ci0gICAgICB2YXIg
Y29udGV4dCA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXTsKLSAgICAgIGlmIChz
dHlsZSA9PSAidmFyaWFibGUiKSB7Ci0gICAgICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZS1kZWZp
bml0aW9uIikgc3RhdGUuc3RhY2sucHVzaCgicHJvcGVydHlWYWx1ZSIpOwotICAgICAgICByZXR1
cm4gc3RhdGUubGFzdFRva2VuID0gInZhcmlhYmxlLTIiOwotICAgICAgfSBlbHNlIGlmIChzdHls
ZSA9PSAicHJvcGVydHkiKSB7Ci0gICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50
b0xvd2VyQ2FzZSgpOwotICAgICAgICBpZiAoY29udGV4dCA9PSAicHJvcGVydHlWYWx1ZSIpIHsK
LSAgICAgICAgICBpZiAodmFsdWVLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgewotICAg
ICAgICAgICAgc3R5bGUgPSAic3RyaW5nLTIiOwotICAgICAgICAgIH0gZWxzZSBpZiAoY29sb3JL
ZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgewotICAgICAgICAgICAgc3R5bGUgPSAia2V5
d29yZCI7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0eWxlID0gInZhcmlhYmxl
LTIiOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJydWxlIikg
ewotICAgICAgICAgIGlmICghcHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkg
ewotICAgICAgICAgICAgc3R5bGUgKz0gIiBlcnJvciI7Ci0gICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGNvbnRleHQgPT0gImJsb2NrIikgewotICAgICAgICAgIC8vIGlmIGEgdmFsdWUg
aXMgcHJlc2VudCBpbiBib3RoIHByb3BlcnR5LCB2YWx1ZSwgb3IgY29sb3IsIHRoZSBvcmRlcgot
ICAgICAgICAgIC8vIG9mIHByZWZlcmVuY2UgaXMgcHJvcGVydHkgLT4gY29sb3IgLT4gdmFsdWUK
LSAgICAgICAgICBpZiAocHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgewot
ICAgICAgICAgICAgc3R5bGUgPSAicHJvcGVydHkiOwotICAgICAgICAgIH0gZWxzZSBpZiAoY29s
b3JLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgewotICAgICAgICAgICAgc3R5bGUgPSAi
a2V5d29yZCI7Ci0gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUtleXdvcmRzLmhhc093blByb3Bl
cnR5KHdvcmQpKSB7Ci0gICAgICAgICAgICBzdHlsZSA9ICJzdHJpbmctMiI7Ci0gICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHN0eWxlID0gInRhZyI7Ci0gICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQgPT0gIkBtZWRpYXsiKSB7Ci0gICAgICAg
ICAgc3R5bGUgPSAidGFnIjsKLSAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJAbWVkaWEi
KSB7Ci0gICAgICAgICAgaWYgKGF0TWVkaWFUeXBlc1tzdHJlYW0uY3VycmVudCgpXSkgewotICAg
ICAgICAgICAgc3R5bGUgPSAiYXR0cmlidXRlIjsgLy8gS25vd24gYXR0cmlidXRlCi0gICAgICAg
ICAgfSBlbHNlIGlmICgvXihvbmx5fG5vdCkkLy50ZXN0KHdvcmQpKSB7Ci0gICAgICAgICAgICBz
dHlsZSA9ICJrZXl3b3JkIjsKLSAgICAgICAgICB9IGVsc2UgaWYgKHdvcmQgPT0gImFuZCIpIHsK
LSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gImFuZCIgaXMgb25seSBhbGxvd2VkIGlu
IEBtZWRpYVR5cGUKLSAgICAgICAgICB9IGVsc2UgaWYgKGF0TWVkaWFGZWF0dXJlcy5oYXNPd25Q
cm9wZXJ0eSh3b3JkKSkgewotICAgICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOyAvLyBLbm93biBw
cm9wZXJ0eSwgc2hvdWxkIGJlIGluIEBtZWRpYVR5cGUoCi0gICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFVua25vd24sIGV4cGVjdGluZyBrZXl3b3JkIG9yIGF0dHJpYnV0ZSwgYXNz
dW1pbmcgYXR0cmlidXRlCi0gICAgICAgICAgICBzdHlsZSA9ICJhdHRyaWJ1dGUgZXJyb3IiOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJAbWVkaWFUeXBlIikg
ewotICAgICAgICAgIGlmIChhdE1lZGlhVHlwZXMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAg
ICAgICAgICAgIHN0eWxlID0gImF0dHJpYnV0ZSI7Ci0gICAgICAgICAgfSBlbHNlIGlmICh3b3Jk
ID09ICJhbmQiKSB7Ci0gICAgICAgICAgICBzdHlsZSA9ICJvcGVyYXRvciI7Ci0gICAgICAgICAg
fSBlbHNlIGlmICgvXihvbmx5fG5vdCkkLy50ZXN0KHdvcmQpKSB7Ci0gICAgICAgICAgICBzdHls
ZSA9ICJlcnJvciI7IC8vIE9ubHkgYWxsb3dlZCBpbiBAbWVkaWEKLSAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gVW5rbm93biBhdHRyaWJ1dGUgb3IgcHJvcGVydHksIGJ1dCBleHBl
Y3RpbmcgcHJvcGVydHkgKHByZWNlZGVkCi0gICAgICAgICAgICAvLyBieSAiYW5kIikuIFNob3Vs
ZCBiZSBpbiBwYXJlbnRoZXNlcwotICAgICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOwotICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJAbWVkaWFUeXBlKCIpIHsKLSAg
ICAgICAgICBpZiAocHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgewotICAg
ICAgICAgICAgLy8gZG8gbm90aGluZywgcmVtYWlucyAicHJvcGVydHkiCi0gICAgICAgICAgfSBl
bHNlIGlmIChhdE1lZGlhVHlwZXMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAgICAgICAgICAg
IHN0eWxlID0gImVycm9yIjsgLy8gS25vd24gcHJvcGVydHksIHNob3VsZCBiZSBpbiBwYXJlbnRo
ZXNlcwotICAgICAgICAgIH0gZWxzZSBpZiAod29yZCA9PSAiYW5kIikgewotICAgICAgICAgICAg
c3R5bGUgPSAib3BlcmF0b3IiOwotICAgICAgICAgIH0gZWxzZSBpZiAoL14ob25seXxub3QpJC8u
dGVzdCh3b3JkKSkgewotICAgICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOyAvLyBPbmx5IGFsbG93
ZWQgaW4gQG1lZGlhCi0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0eWxlICs9ICIg
ZXJyb3IiOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJAaW1w
b3J0IikgewotICAgICAgICAgIHN0eWxlID0gInRhZyI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgc3R5bGUgPSAiZXJyb3IiOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKHN0eWxl
ID09ICJhdG9tIikgewotICAgICAgICBpZighY29udGV4dCB8fCBjb250ZXh0ID09ICJAbWVkaWF7
IiB8fCBjb250ZXh0ID09ICJibG9jayIpIHsKLSAgICAgICAgICBzdHlsZSA9ICJidWlsdGluIjsK
LSAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJwcm9wZXJ0eVZhbHVlIikgewotICAgICAg
ICAgIGlmICghL14jKFswLTlhLWZBLWZdezN9fFswLTlhLWZBLWZdezZ9KSQvLnRlc3Qoc3RyZWFt
LmN1cnJlbnQoKSkpIHsKLSAgICAgICAgICAgIHN0eWxlICs9ICIgZXJyb3IiOwotICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7Ci0gICAgICAg
IH0KLSAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhIiAmJiB0eXBlID09ICJ7Iikg
ewotICAgICAgICBzdHlsZSA9ICJlcnJvciI7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFB1c2gvcG9w
IGNvbnRleHQgc3RhY2sKLSAgICAgIGlmICh0eXBlID09ICJ7IikgewotICAgICAgICBpZiAoY29u
dGV4dCA9PSAiQG1lZGlhIiB8fCBjb250ZXh0ID09ICJAbWVkaWFUeXBlIikgewotICAgICAgICAg
IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXSA9ICJAbWVkaWF7IjsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICB2YXIgbmV3Q29udGV4dCA9IGFsbG93TmVzdGVk
ID8gImJsb2NrIiA6ICJydWxlIjsKLSAgICAgICAgICBzdGF0ZS5zdGFjay5wdXNoKG5ld0NvbnRl
eHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICJ9Iikgewot
ICAgICAgICBpZiAoY29udGV4dCA9PSAiaW50ZXJwb2xhdGlvbiIpIHN0eWxlID0gIm9wZXJhdG9y
IjsKLSAgICAgICAgLy8gUG9wIG9mZiBlbmQgb2YgYXJyYXkgdW50aWwgeyBpcyByZWFjaGVkCi0g
ICAgICAgIHdoaWxlKHN0YXRlLnN0YWNrLmxlbmd0aCl7Ci0gICAgICAgICAgdmFyIHJlbW92ZWQg
PSBzdGF0ZS5zdGFjay5wb3AoKTsKLSAgICAgICAgICBpZihyZW1vdmVkLmluZGV4T2YoInsiKSA+
IC0xIHx8IHJlbW92ZWQgPT0gImJsb2NrIiB8fCByZW1vdmVkID09ICJydWxlIil7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2Ug
aWYgKHR5cGUgPT0gImludGVycG9sYXRpb24iKSBzdGF0ZS5zdGFjay5wdXNoKCJpbnRlcnBvbGF0
aW9uIik7Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICJAbWVkaWEiKSBzdGF0ZS5zdGFjay5wdXNo
KCJAbWVkaWEiKTsKLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIkBpbXBvcnQiKSBzdGF0ZS5zdGFj
ay5wdXNoKCJAaW1wb3J0Iik7Ci0gICAgICBlbHNlIGlmIChjb250ZXh0ID09ICJAbWVkaWEiICYm
IC9cYihrZXl3b3JkfGF0dHJpYnV0ZSlcYi8udGVzdChzdHlsZSkpCi0gICAgICAgIHN0YXRlLnN0
YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXSA9ICJAbWVkaWFUeXBlIjsKLSAgICAgIGVsc2UgaWYg
KGNvbnRleHQgPT0gIkBtZWRpYVR5cGUiICYmIHN0cmVhbS5jdXJyZW50KCkgPT0gIiwiKQotICAg
ICAgICBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPSAiQG1lZGlhIjsKLSAgICAg
IGVsc2UgaWYgKHR5cGUgPT0gIigiKSB7Ci0gICAgICAgIGlmIChjb250ZXh0ID09ICJAbWVkaWEi
IHx8IGNvbnRleHQgPT0gIkBtZWRpYVR5cGUiKSB7Ci0gICAgICAgICAgLy8gTWFrZSBzdXJlIEBt
ZWRpYVR5cGUgaXMgdXNlZCB0byBhdm9pZCBlcnJvciBvbiB7Ci0gICAgICAgICAgc3RhdGUuc3Rh
Y2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID0gIkBtZWRpYVR5cGUiOwotICAgICAgICAgIHN0YXRl
LnN0YWNrLnB1c2goIkBtZWRpYVR5cGUoIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBzdGF0
ZS5zdGFjay5wdXNoKCIoIik7CisgICAgICBpZiAoIXN0YXRlLnRva2VuaXplICYmIHN0cmVhbS5l
YXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKKyAgICAgIHZhciBzdHlsZSA9IChzdGF0ZS50b2tlbml6
ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpOworICAgICAgaWYgKHN0eWxlICYmIHR5cGVv
ZiBzdHlsZSA9PSAib2JqZWN0IikgeworICAgICAgICB0eXBlID0gc3R5bGVbMV07CisgICAgICAg
IHN0eWxlID0gc3R5bGVbMF07CiAgICAgICB9Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICIpIikg
ewotICAgICAgICAvLyBQb3Agb2ZmIGVuZCBvZiBhcnJheSB1bnRpbCAoIGlzIHJlYWNoZWQKLSAg
ICAgICAgd2hpbGUoc3RhdGUuc3RhY2subGVuZ3RoKXsKLSAgICAgICAgICB2YXIgcmVtb3ZlZCA9
IHN0YXRlLnN0YWNrLnBvcCgpOwotICAgICAgICAgIGlmKHJlbW92ZWQuaW5kZXhPZigiKCIpID4g
LTEpewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICI6IiAmJiBzdGF0ZS5sYXN0VG9rZW4gPT0gInByb3Bl
cnR5Iikgc3RhdGUuc3RhY2sucHVzaCgicHJvcGVydHlWYWx1ZSIpOwotICAgICAgZWxzZSBpZiAo
Y29udGV4dCA9PSAicHJvcGVydHlWYWx1ZSIgJiYgdHlwZSA9PSAiOyIpIHN0YXRlLnN0YWNrLnBv
cCgpOwotICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAiQGltcG9ydCIgJiYgdHlwZSA9PSAiOyIp
IHN0YXRlLnN0YWNrLnBvcCgpOwotCi0gICAgICByZXR1cm4gc3RhdGUubGFzdFRva2VuID0gc3R5
bGU7CisgICAgICBvdmVycmlkZSA9IHN0eWxlOworICAgICAgc3RhdGUuc3RhdGUgPSBzdGF0ZXNb
c3RhdGUuc3RhdGVdKHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICAgICAgcmV0dXJuIG92ZXJyaWRl
OwogICAgIH0sCgogICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewotICAg
ICAgdmFyIG4gPSBzdGF0ZS5zdGFjay5sZW5ndGg7Ci0gICAgICBpZiAoL15cfS8udGVzdCh0ZXh0
QWZ0ZXIpKQotICAgICAgICBuIC09IHN0YXRlLnN0YWNrW24tMV0gPT0gInByb3BlcnR5VmFsdWUi
ID8gMiA6IDE7Ci0gICAgICByZXR1cm4gc3RhdGUuYmFzZUluZGVudCArIG4gKiBpbmRlbnRVbml0
OworICAgICAgdmFyIGN4ID0gc3RhdGUuY29udGV4dCwgY2ggPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFm
dGVyLmNoYXJBdCgwKTsKKyAgICAgIHZhciBpbmRlbnQgPSBjeC5pbmRlbnQ7CisgICAgICBpZiAo
Y3gudHlwZSA9PSAicHJvcCIgJiYgY2ggPT0gIn0iKSBjeCA9IGN4LnByZXY7CisgICAgICBpZiAo
Y3gucHJldiAmJgorICAgICAgICAgIChjaCA9PSAifSIgJiYgKGN4LnR5cGUgPT0gImJsb2NrIiB8
fCBjeC50eXBlID09ICJ0b3AiIHx8IGN4LnR5cGUgPT0gImludGVycG9sYXRpb24iIHx8IGN4LnR5
cGUgPT0gImZvbnRfZmFjZSIpIHx8CisgICAgICAgICAgIGNoID09ICIpIiAmJiAoY3gudHlwZSA9
PSAicGFyZW5zIiB8fCBjeC50eXBlID09ICJwYXJhbXMiIHx8IGN4LnR5cGUgPT0gIm1lZGlhX3Bh
cmVucyIpIHx8CisgICAgICAgICAgIGNoID09ICJ7IiAmJiAoY3gudHlwZSA9PSAiYXQiIHx8IGN4
LnR5cGUgPT0gIm1lZGlhIikpKSB7CisgICAgICAgIGluZGVudCA9IGN4LmluZGVudCAtIGluZGVu
dFVuaXQ7CisgICAgICAgIGN4ID0gY3gucHJldjsKKyAgICAgIH0KKyAgICAgIHJldHVybiBpbmRl
bnQ7CiAgICAgfSwKCiAgICAgZWxlY3RyaWNDaGFyczogIn0iLApAQCAtMzEyLDcgKzM0Nyw2IEBA
IENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgfTsKIH0pOwoKLShmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24ga2V5U2V0KGFycmF5
KSB7CiAgICAgdmFyIGtleXMgPSB7fTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxl
bmd0aDsgKytpKSB7CkBAIC0zMjEsMTIgKzM1NSwxMiBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgcmV0dXJuIGtleXM7
CiAgIH0KCi0gIHZhciBhdE1lZGlhVHlwZXMgPSBrZXlTZXQoWworICB2YXIgbWVkaWFUeXBlc18g
PSBbCiAgICAgImFsbCIsICJhdXJhbCIsICJicmFpbGxlIiwgImhhbmRoZWxkIiwgInByaW50Iiwg
InByb2plY3Rpb24iLCAic2NyZWVuIiwKICAgICAidHR5IiwgInR2IiwgImVtYm9zc2VkIgotICBd
KTsKKyAgXSwgbWVkaWFUeXBlcyA9IGtleVNldChtZWRpYVR5cGVzXyk7CgotICB2YXIgYXRNZWRp
YUZlYXR1cmVzID0ga2V5U2V0KFsKKyAgdmFyIG1lZGlhRmVhdHVyZXNfID0gWwogICAgICJ3aWR0
aCIsICJtaW4td2lkdGgiLCAibWF4LXdpZHRoIiwgImhlaWdodCIsICJtaW4taGVpZ2h0IiwgIm1h
eC1oZWlnaHQiLAogICAgICJkZXZpY2Utd2lkdGgiLCAibWluLWRldmljZS13aWR0aCIsICJtYXgt
ZGV2aWNlLXdpZHRoIiwgImRldmljZS1oZWlnaHQiLAogICAgICJtaW4tZGV2aWNlLWhlaWdodCIs
ICJtYXgtZGV2aWNlLWhlaWdodCIsICJhc3BlY3QtcmF0aW8iLApAQCAtMzM1LDE1ICszNjksMTUg
QEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNv
bmZpZykgewogICAgICJtYXgtY29sb3IiLCAiY29sb3ItaW5kZXgiLCAibWluLWNvbG9yLWluZGV4
IiwgIm1heC1jb2xvci1pbmRleCIsCiAgICAgIm1vbm9jaHJvbWUiLCAibWluLW1vbm9jaHJvbWUi
LCAibWF4LW1vbm9jaHJvbWUiLCAicmVzb2x1dGlvbiIsCiAgICAgIm1pbi1yZXNvbHV0aW9uIiwg
Im1heC1yZXNvbHV0aW9uIiwgInNjYW4iLCAiZ3JpZCIKLSAgXSk7CisgIF0sIG1lZGlhRmVhdHVy
ZXMgPSBrZXlTZXQobWVkaWFGZWF0dXJlc18pOwoKLSAgdmFyIHByb3BlcnR5S2V5d29yZHMgPSBr
ZXlTZXQoWworICB2YXIgcHJvcGVydHlLZXl3b3Jkc18gPSBbCiAgICAgImFsaWduLWNvbnRlbnQi
LCAiYWxpZ24taXRlbXMiLCAiYWxpZ24tc2VsZiIsICJhbGlnbm1lbnQtYWRqdXN0IiwKICAgICAi
YWxpZ25tZW50LWJhc2VsaW5lIiwgImFuY2hvci1wb2ludCIsICJhbmltYXRpb24iLCAiYW5pbWF0
aW9uLWRlbGF5IiwKLSAgICAiYW5pbWF0aW9uLWRpcmVjdGlvbiIsICJhbmltYXRpb24tZHVyYXRp
b24iLCAiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCIsCi0gICAgImFuaW1hdGlvbi1uYW1lIiwg
ImFuaW1hdGlvbi1wbGF5LXN0YXRlIiwgImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLAotICAg
ICJhcHBlYXJhbmNlIiwgImF6aW11dGgiLCAiYmFja2ZhY2UtdmlzaWJpbGl0eSIsICJiYWNrZ3Jv
dW5kIiwKLSAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IiwgImJhY2tncm91bmQtY2xpcCIsICJi
YWNrZ3JvdW5kLWNvbG9yIiwKKyAgICAiYW5pbWF0aW9uLWRpcmVjdGlvbiIsICJhbmltYXRpb24t
ZHVyYXRpb24iLCAiYW5pbWF0aW9uLWZpbGwtbW9kZSIsCisgICAgImFuaW1hdGlvbi1pdGVyYXRp
b24tY291bnQiLCAiYW5pbWF0aW9uLW5hbWUiLCAiYW5pbWF0aW9uLXBsYXktc3RhdGUiLAorICAg
ICJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwgImFwcGVhcmFuY2UiLCAiYXppbXV0aCIsICJi
YWNrZmFjZS12aXNpYmlsaXR5IiwKKyAgICAiYmFja2dyb3VuZCIsICJiYWNrZ3JvdW5kLWF0dGFj
aG1lbnQiLCAiYmFja2dyb3VuZC1jbGlwIiwgImJhY2tncm91bmQtY29sb3IiLAogICAgICJiYWNr
Z3JvdW5kLWltYWdlIiwgImJhY2tncm91bmQtb3JpZ2luIiwgImJhY2tncm91bmQtcG9zaXRpb24i
LAogICAgICJiYWNrZ3JvdW5kLXJlcGVhdCIsICJiYWNrZ3JvdW5kLXNpemUiLCAiYmFzZWxpbmUt
c2hpZnQiLCAiYmluZGluZyIsCiAgICAgImJsZWVkIiwgImJvb2ttYXJrLWxhYmVsIiwgImJvb2tt
YXJrLWxldmVsIiwgImJvb2ttYXJrLXN0YXRlIiwKQEAgLTM3NCwxMCArNDA4LDExIEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
ICAgICAiZm9udC1zdHJldGNoIiwgImZvbnQtc3R5bGUiLCAiZm9udC1zeW50aGVzaXMiLCAiZm9u
dC12YXJpYW50IiwKICAgICAiZm9udC12YXJpYW50LWFsdGVybmF0ZXMiLCAiZm9udC12YXJpYW50
LWNhcHMiLCAiZm9udC12YXJpYW50LWVhc3QtYXNpYW4iLAogICAgICJmb250LXZhcmlhbnQtbGln
YXR1cmVzIiwgImZvbnQtdmFyaWFudC1udW1lcmljIiwgImZvbnQtdmFyaWFudC1wb3NpdGlvbiIs
Ci0gICAgImZvbnQtd2VpZ2h0IiwgImdyaWQtY2VsbCIsICJncmlkLWNvbHVtbiIsICJncmlkLWNv
bHVtbi1hbGlnbiIsCi0gICAgImdyaWQtY29sdW1uLXNpemluZyIsICJncmlkLWNvbHVtbi1zcGFu
IiwgImdyaWQtY29sdW1ucyIsICJncmlkLWZsb3ciLAotICAgICJncmlkLXJvdyIsICJncmlkLXJv
dy1hbGlnbiIsICJncmlkLXJvdy1zaXppbmciLCAiZ3JpZC1yb3ctc3BhbiIsCi0gICAgImdyaWQt
cm93cyIsICJncmlkLXRlbXBsYXRlLWFyZWFzIiwgImhhbmdpbmctcHVuY3R1YXRpb24iLCAiaGVp
Z2h0IiwgImh5cGhlbnMiLAorICAgICJmb250LXdlaWdodCIsICJncmlkIiwgImdyaWQtYXJlYSIs
ICJncmlkLWF1dG8tY29sdW1ucyIsICJncmlkLWF1dG8tZmxvdyIsCisgICAgImdyaWQtYXV0by1w
b3NpdGlvbiIsICJncmlkLWF1dG8tcm93cyIsICJncmlkLWNvbHVtbiIsICJncmlkLWNvbHVtbi1l
bmQiLAorICAgICJncmlkLWNvbHVtbi1zdGFydCIsICJncmlkLXJvdyIsICJncmlkLXJvdy1lbmQi
LCAiZ3JpZC1yb3ctc3RhcnQiLAorICAgICJncmlkLXRlbXBsYXRlIiwgImdyaWQtdGVtcGxhdGUt
YXJlYXMiLCAiZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIiwKKyAgICAiZ3JpZC10ZW1wbGF0ZS1yb3dz
IiwgImhhbmdpbmctcHVuY3R1YXRpb24iLCAiaGVpZ2h0IiwgImh5cGhlbnMiLAogICAgICJpY29u
IiwgImltYWdlLW9yaWVudGF0aW9uIiwgImltYWdlLXJlbmRlcmluZyIsICJpbWFnZS1yZXNvbHV0
aW9uIiwKICAgICAiaW5saW5lLWJveC1hbGlnbiIsICJqdXN0aWZ5LWNvbnRlbnQiLCAibGVmdCIs
ICJsZXR0ZXItc3BhY2luZyIsCiAgICAgImxpbmUtYnJlYWsiLCAibGluZS1oZWlnaHQiLCAibGlu
ZS1zdGFja2luZyIsICJsaW5lLXN0YWNraW5nLXJ1YnkiLApAQCAtNDE0LDcgKzQ0OSw3IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKICAgICAidmVydGljYWwtYWxpZ24iLCAidmlzaWJpbGl0eSIsICJ2b2ljZS1iYWxhbmNlIiwg
InZvaWNlLWR1cmF0aW9uIiwKICAgICAidm9pY2UtZmFtaWx5IiwgInZvaWNlLXBpdGNoIiwgInZv
aWNlLXJhbmdlIiwgInZvaWNlLXJhdGUiLCAidm9pY2Utc3RyZXNzIiwKICAgICAidm9pY2Utdm9s
dW1lIiwgInZvbHVtZSIsICJ3aGl0ZS1zcGFjZSIsICJ3aWRvd3MiLCAid2lkdGgiLCAid29yZC1i
cmVhayIsCi0gICAgIndvcmQtc3BhY2luZyIsICJ3b3JkLXdyYXAiLCAiei1pbmRleCIsICJ6b29t
IiwKKyAgICAid29yZC1zcGFjaW5nIiwgIndvcmQtd3JhcCIsICJ6LWluZGV4IiwKICAgICAvLyBT
Vkctc3BlY2lmaWMKICAgICAiY2xpcC1wYXRoIiwgImNsaXAtcnVsZSIsICJtYXNrIiwgImVuYWJs
ZS1iYWNrZ3JvdW5kIiwgImZpbHRlciIsICJmbG9vZC1jb2xvciIsCiAgICAgImZsb29kLW9wYWNp
dHkiLCAibGlnaHRpbmctY29sb3IiLCAic3RvcC1jb2xvciIsICJzdG9wLW9wYWNpdHkiLCAicG9p
bnRlci1ldmVudHMiLApAQCAtNDI1LDkgKzQ2MCwxNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgInN0cm9rZS1taXRl
cmxpbWl0IiwgInN0cm9rZS1vcGFjaXR5IiwgInN0cm9rZS13aWR0aCIsICJ0ZXh0LXJlbmRlcmlu
ZyIsCiAgICAgImJhc2VsaW5lLXNoaWZ0IiwgImRvbWluYW50LWJhc2VsaW5lIiwgImdseXBoLW9y
aWVudGF0aW9uLWhvcml6b250YWwiLAogICAgICJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIs
ICJrZXJuaW5nIiwgInRleHQtYW5jaG9yIiwgIndyaXRpbmctbW9kZSIKLSAgXSk7CisgIF0sIHBy
b3BlcnR5S2V5d29yZHMgPSBrZXlTZXQocHJvcGVydHlLZXl3b3Jkc18pOwoKLSAgdmFyIGNvbG9y
S2V5d29yZHMgPSBrZXlTZXQoWworICB2YXIgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzID0g
WworICAgICJzY3JvbGxiYXItYXJyb3ctY29sb3IiLCAic2Nyb2xsYmFyLWJhc2UtY29sb3IiLCAi
c2Nyb2xsYmFyLWRhcmstc2hhZG93LWNvbG9yIiwKKyAgICAic2Nyb2xsYmFyLWZhY2UtY29sb3Ii
LCAic2Nyb2xsYmFyLWhpZ2hsaWdodC1jb2xvciIsICJzY3JvbGxiYXItc2hhZG93LWNvbG9yIiwK
KyAgICAic2Nyb2xsYmFyLTNkLWxpZ2h0LWNvbG9yIiwgInNjcm9sbGJhci10cmFjay1jb2xvciIs
ICJzaGFwZS1pbnNpZGUiLAorICAgICJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uIiwgInNlYXJj
aGZpZWxkLWRlY29yYXRpb24iLCAic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b24iLAorICAgICJz
ZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29yYXRpb24iLCAiem9vbSIKKyAgXSwgbm9uU3RhbmRhcmRQ
cm9wZXJ0eUtleXdvcmRzID0ga2V5U2V0KG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkcyk7CisK
KyAgdmFyIGNvbG9yS2V5d29yZHNfID0gWwogICAgICJhbGljZWJsdWUiLCAiYW50aXF1ZXdoaXRl
IiwgImFxdWEiLCAiYXF1YW1hcmluZSIsICJhenVyZSIsICJiZWlnZSIsCiAgICAgImJpc3F1ZSIs
ICJibGFjayIsICJibGFuY2hlZGFsbW9uZCIsICJibHVlIiwgImJsdWV2aW9sZXQiLCAiYnJvd24i
LAogICAgICJidXJseXdvb2QiLCAiY2FkZXRibHVlIiwgImNoYXJ0cmV1c2UiLCAiY2hvY29sYXRl
IiwgImNvcmFsIiwgImNvcm5mbG93ZXJibHVlIiwKQEAgLTQ1NCw5ICs0OTcsOSBAQCBDb2RlTWly
cm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAg
ICAgInNsYXRlYmx1ZSIsICJzbGF0ZWdyYXkiLCAic25vdyIsICJzcHJpbmdncmVlbiIsICJzdGVl
bGJsdWUiLCAidGFuIiwKICAgICAidGVhbCIsICJ0aGlzdGxlIiwgInRvbWF0byIsICJ0dXJxdW9p
c2UiLCAidmlvbGV0IiwgIndoZWF0IiwgIndoaXRlIiwKICAgICAid2hpdGVzbW9rZSIsICJ5ZWxs
b3ciLCAieWVsbG93Z3JlZW4iCi0gIF0pOworICBdLCBjb2xvcktleXdvcmRzID0ga2V5U2V0KGNv
bG9yS2V5d29yZHNfKTsKCi0gIHZhciB2YWx1ZUtleXdvcmRzID0ga2V5U2V0KFsKKyAgdmFyIHZh
bHVlS2V5d29yZHNfID0gWwogICAgICJhYm92ZSIsICJhYnNvbHV0ZSIsICJhY3RpdmVib3JkZXIi
LCAiYWN0aXZlY2FwdGlvbiIsICJhZmFyIiwKICAgICAiYWZ0ZXItd2hpdGUtc3BhY2UiLCAiYWhl
YWQiLCAiYWxpYXMiLCAiYWxsIiwgImFsbC1zY3JvbGwiLCAiYWx0ZXJuYXRlIiwKICAgICAiYWx3
YXlzIiwgImFtaGFyaWMiLCAiYW1oYXJpYy1hYmVnZWRlIiwgImFudGlhbGlhc2VkIiwgImFwcHdv
cmtzcGFjZSIsCkBAIC01MzksNyArNTgyLDE2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3Nz
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAidmlzaWJsZVN0cm9rZSIs
ICJ2aXN1YWwiLCAidy1yZXNpemUiLCAid2FpdCIsICJ3YXZlIiwgIndpZGVyIiwKICAgICAid2lu
ZG93IiwgIndpbmRvd2ZyYW1lIiwgIndpbmRvd3RleHQiLCAieC1sYXJnZSIsICJ4LXNtYWxsIiwg
InhvciIsCiAgICAgInh4LWxhcmdlIiwgInh4LXNtYWxsIgotICBdKTsKKyAgXSwgdmFsdWVLZXl3
b3JkcyA9IGtleVNldCh2YWx1ZUtleXdvcmRzXyk7CisKKyAgdmFyIGZvbnRQcm9wZXJ0aWVzXyA9
IFsKKyAgICAiZm9udC1mYW1pbHkiLCAic3JjIiwgInVuaWNvZGUtcmFuZ2UiLCAiZm9udC12YXJp
YW50IiwgImZvbnQtZmVhdHVyZS1zZXR0aW5ncyIsCisgICAgImZvbnQtc3RyZXRjaCIsICJmb250
LXdlaWdodCIsICJmb250LXN0eWxlIgorICBdLCBmb250UHJvcGVydGllcyA9IGtleVNldChmb250
UHJvcGVydGllc18pOworCisgIHZhciBhbGxXb3JkcyA9IG1lZGlhVHlwZXNfLmNvbmNhdChtZWRp
YUZlYXR1cmVzXykuY29uY2F0KHByb3BlcnR5S2V5d29yZHNfKQorICAgIC5jb25jYXQobm9uU3Rh
bmRhcmRQcm9wZXJ0eUtleXdvcmRzKS5jb25jYXQoY29sb3JLZXl3b3Jkc18pLmNvbmNhdCh2YWx1
ZUtleXdvcmRzXyk7CisgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoImhpbnRXb3JkcyIsICJj
c3MiLCBhbGxXb3Jkcyk7CgogICBmdW5jdGlvbiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUp
IHsKICAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CkBAIC01NTMsNjcgKzYwNSw5MCBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgICAgcmV0dXJuIFsiY29tbWVudCIsICJjb21tZW50Il07CiAgIH0KCisgIGZ1bmN0aW9u
IHRva2VuU0dNTENvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgeworICAgIGlmIChzdHJlYW0uc2tpcFRv
KCItLT4iKSkgeworICAgICAgc3RyZWFtLm1hdGNoKCItLT4iKTsKKyAgICAgIHN0YXRlLnRva2Vu
aXplID0gbnVsbDsKKyAgICB9IGVsc2UgeworICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOworICAg
IH0KKyAgICByZXR1cm4gWyJjb21tZW50IiwgImNvbW1lbnQiXTsKKyAgfQorCiAgIENvZGVNaXJy
b3IuZGVmaW5lTUlNRSgidGV4dC9jc3MiLCB7Ci0gICAgYXRNZWRpYVR5cGVzOiBhdE1lZGlhVHlw
ZXMsCi0gICAgYXRNZWRpYUZlYXR1cmVzOiBhdE1lZGlhRmVhdHVyZXMsCisgICAgbWVkaWFUeXBl
czogbWVkaWFUeXBlcywKKyAgICBtZWRpYUZlYXR1cmVzOiBtZWRpYUZlYXR1cmVzLAogICAgIHBy
b3BlcnR5S2V5d29yZHM6IHByb3BlcnR5S2V5d29yZHMsCisgICAgbm9uU3RhbmRhcmRQcm9wZXJ0
eUtleXdvcmRzOiBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMsCiAgICAgY29sb3JLZXl3b3Jk
czogY29sb3JLZXl3b3JkcywKICAgICB2YWx1ZUtleXdvcmRzOiB2YWx1ZUtleXdvcmRzLAotICAg
IGhvb2tzOiB7CisgICAgZm9udFByb3BlcnRpZXM6IGZvbnRQcm9wZXJ0aWVzLAorICAgIHRva2Vu
SG9va3M6IHsKICAgICAgICI8IjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgICBm
dW5jdGlvbiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKLSAgICAgICAgICB2YXIg
ZGFzaGVzID0gMCwgY2g7Ci0gICAgICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9
IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChkYXNoZXMgPj0gMiAmJiBjaCA9PSAiPiIpIHsKLSAg
ICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOwotICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRhc2hlcyA9IChjaCA9PSAiLSIpID8gZGFzaGVz
ICsgMSA6IDA7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBbImNvbW1lbnQiLCAiY29t
bWVudCJdOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdHJlYW0uZWF0KCIhIikpIHsKLSAgICAg
ICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU0dNTENvbW1lbnQ7Ci0gICAgICAgICAgcmV0dXJu
IHRva2VuU0dNTENvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KCFzdHJlYW0ubWF0Y2goIiEtLSIpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHN0YXRlLnRva2Vu
aXplID0gdG9rZW5TR01MQ29tbWVudDsKKyAgICAgICAgcmV0dXJuIHRva2VuU0dNTENvbW1lbnQo
c3RyZWFtLCBzdGF0ZSk7CiAgICAgICB9LAogICAgICAgIi8iOiBmdW5jdGlvbihzdHJlYW0sIHN0
YXRlKSB7Ci0gICAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKLSAgICAgICAgICBzdGF0ZS50
b2tlbml6ZSA9IHRva2VuQ0NvbW1lbnQ7Ci0gICAgICAgICAgcmV0dXJuIHRva2VuQ0NvbW1lbnQo
c3RyZWFtLCBzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoIXN0cmVhbS5lYXQoIioiKSkgcmV0dXJuIGZhbHNlOworICAgICAgICBzdGF0ZS50b2tl
bml6ZSA9IHRva2VuQ0NvbW1lbnQ7CisgICAgICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVh
bSwgc3RhdGUpOwogICAgICAgfQogICAgIH0sCiAgICAgbmFtZTogImNzcyIKICAgfSk7CgogICBD
b2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1zY3NzIiwgewotICAgIGF0TWVkaWFUeXBlczog
YXRNZWRpYVR5cGVzLAotICAgIGF0TWVkaWFGZWF0dXJlczogYXRNZWRpYUZlYXR1cmVzLAorICAg
IG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsCisgICAgbWVkaWFGZWF0dXJlczogbWVkaWFGZWF0dXJl
cywKICAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtleXdvcmRzLAorICAgIG5vblN0YW5k
YXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLAogICAgIGNv
bG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsCiAgICAgdmFsdWVLZXl3b3JkczogdmFsdWVLZXl3
b3JkcywKKyAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsCiAgICAgYWxsb3dOZXN0
ZWQ6IHRydWUsCi0gICAgaG9va3M6IHsKKyAgICB0b2tlbkhvb2tzOiB7CisgICAgICAiLyI6IGZ1
bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKKyAgICAgICAgaWYgKHN0cmVhbS5lYXQoIi8iKSkgewor
ICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKKyAgICAgICAgICByZXR1cm4gWyJjb21tZW50
IiwgImNvbW1lbnQiXTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKKyAg
ICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ0NvbW1lbnQ7CisgICAgICAgICAgcmV0dXJu
IHRva2VuQ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgcmV0dXJuIFsib3BlcmF0b3IiLCAib3BlcmF0b3IiXTsKKyAgICAgICAgfQorICAgICAgfSwK
ICAgICAgICI6IjogZnVuY3Rpb24oc3RyZWFtKSB7Ci0gICAgICAgIGlmIChzdHJlYW0ubWF0Y2go
L1xzKnsvKSkgeworICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ccyp7LykpCiAgICAgICAgICAg
cmV0dXJuIFtudWxsLCAieyJdOwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgIH0sCiAgICAgICAiJCI6IGZ1bmN0aW9uKHN0cmVhbSkgewogICAgICAgICBzdHJlYW0ubWF0
Y2goL15bXHctXSsvKTsKLSAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gIjoiKSB7Ci0gICAg
ICAgICAgcmV0dXJuIFsidmFyaWFibGUiLCAidmFyaWFibGUtZGVmaW5pdGlvbiJdOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBbInZhcmlhYmxlIiwgInZhcmlhYmxlIl07Ci0gICAgICB9LAot
ICAgICAgIiwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5z
dGFja1tzdGF0ZS5zdGFjay5sZW5ndGggLSAxXSA9PSAicHJvcGVydHlWYWx1ZSIgJiYgc3RyZWFt
Lm1hdGNoKC9eICpcJC8sIGZhbHNlKSkgewotICAgICAgICAgIHJldHVybiBbIm9wZXJhdG9yIiwg
IjsiXTsKLSAgICAgICAgfQorICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXHMqOi8sIGZhbHNl
KSkKKyAgICAgICAgICByZXR1cm4gWyJ2YXJpYWJsZS0yIiwgInZhcmlhYmxlLWRlZmluaXRpb24i
XTsKKyAgICAgICAgcmV0dXJuIFsidmFyaWFibGUtMiIsICJ2YXJpYWJsZSJdOwogICAgICAgfSwK
KyAgICAgICIjIjogZnVuY3Rpb24oc3RyZWFtKSB7CisgICAgICAgIGlmICghc3RyZWFtLmVhdCgi
eyIpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBbbnVsbCwgImludGVycG9sYXRpb24i
XTsKKyAgICAgIH0KKyAgICB9LAorICAgIG5hbWU6ICJjc3MiLAorICAgIGhlbHBlclR5cGU6ICJz
Y3NzIgorICB9KTsKKworICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1sZXNzIiwgewor
ICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsCisgICAgbWVkaWFGZWF0dXJlczogbWVkaWFGZWF0
dXJlcywKKyAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtleXdvcmRzLAorICAgIG5vblN0
YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLAorICAg
IGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsCisgICAgdmFsdWVLZXl3b3JkczogdmFsdWVL
ZXl3b3JkcywKKyAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsCisgICAgYWxsb3dO
ZXN0ZWQ6IHRydWUsCisgICAgdG9rZW5Ib29rczogewogICAgICAgIi8iOiBmdW5jdGlvbihzdHJl
YW0sIHN0YXRlKSB7CiAgICAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsKICAgICAgICAgICBz
dHJlYW0uc2tpcFRvRW5kKCk7CkBAIC02MjUsMTUgKzcwMCwxOSBAQCBDb2RlTWlycm9yLmRlZmlu
ZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICAgICAg
cmV0dXJuIFsib3BlcmF0b3IiLCAib3BlcmF0b3IiXTsKICAgICAgICAgfQogICAgICAgfSwKLSAg
ICAgICIjIjogZnVuY3Rpb24oc3RyZWFtKSB7Ci0gICAgICAgIGlmIChzdHJlYW0uZWF0KCJ7Iikp
IHsKLSAgICAgICAgICByZXR1cm4gWyJvcGVyYXRvciIsICJpbnRlcnBvbGF0aW9uIl07Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwotICAg
ICAgICAgIHJldHVybiBbImF0b20iLCAiaGFzaCJdOwotICAgICAgICB9CisgICAgICAiQCI6IGZ1
bmN0aW9uKHN0cmVhbSkgeworICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKGNoYXJzZXR8ZG9j
dW1lbnR8Zm9udC1mYWNlfGltcG9ydHwoLShtb3p8bXN8b3x3ZWJraXQpLSk/a2V5ZnJhbWVzfG1l
ZGlhfG5hbWVzcGFjZXxwYWdlfHN1cHBvcnRzKVxiLywgZmFsc2UpKSByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKKyAgICAgICAgaWYgKHN0cmVhbS5t
YXRjaCgvXlxzKjovLCBmYWxzZSkpCisgICAgICAgICAgcmV0dXJuIFsidmFyaWFibGUtMiIsICJ2
YXJpYWJsZS1kZWZpbml0aW9uIl07CisgICAgICAgIHJldHVybiBbInZhcmlhYmxlLTIiLCAidmFy
aWFibGUiXTsKKyAgICAgIH0sCisgICAgICAiJiI6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gWyJhdG9tIiwgImF0b20iXTsKICAgICAgIH0KICAgICB9LAotICAgIG5hbWU6ICJjc3MiCisg
ICAgbmFtZTogImNzcyIsCisgICAgaGVscGVyVHlwZTogImxlc3MiCiAgIH0pOwotfSkoKTsKKwor
fSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvamF2YXNjcmlwdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmlu
dGluZy9qYXZhc2NyaXB0LmpzCmluZGV4IGYyN2MwNjMuLjkzMThhYWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9qYXZhc2NyaXB0LmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9qYXZhc2NyaXB0
LmpzCkBAIC0xLDkgKzEsMjAgQEAKIC8vIFRPRE8gYWN0dWFsbHkgcmVjb2duaXplIHN5bnRheCBv
ZiBUeXBlU2NyaXB0IGNvbnN0cnVjdHMKCisoZnVuY3Rpb24obW9kKSB7CisgIGlmICh0eXBlb2Yg
ZXhwb3J0cyA9PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiKSAvLyBDb21t
b25KUworICAgIG1vZChyZXF1aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpKTsKKyAgZWxzZSBp
ZiAodHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAorICAg
IGRlZmluZShbIi4uLy4uL2xpYi9jb2RlbWlycm9yIl0sIG1vZCk7CisgIGVsc2UgLy8gUGxhaW4g
YnJvd3NlciBlbnYKKyAgICBtb2QoQ29kZU1pcnJvcik7Cit9KShmdW5jdGlvbihDb2RlTWlycm9y
KSB7CisidXNlIHN0cmljdCI7CisKIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIHZhciBpbmRlbnRVbml0ID0gY29u
ZmlnLmluZGVudFVuaXQ7CiAgIHZhciBzdGF0ZW1lbnRJbmRlbnQgPSBwYXJzZXJDb25maWcuc3Rh
dGVtZW50SW5kZW50OwotICB2YXIganNvbk1vZGUgPSBwYXJzZXJDb25maWcuanNvbjsKKyAgdmFy
IGpzb25sZE1vZGUgPSBwYXJzZXJDb25maWcuanNvbmxkOworICB2YXIganNvbk1vZGUgPSBwYXJz
ZXJDb25maWcuanNvbiB8fCBqc29ubGRNb2RlOwogICB2YXIgaXNUUyA9IHBhcnNlckNvbmZpZy50
eXBlc2NyaXB0OwoKICAgLy8gVG9rZW5pemVyCkBAIC0xNSw3ICsyNiw3IEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CgogICAgIHZhciBqc0tleXdvcmRzID0gewogICAgICAgImlmIjoga3coImlmIiksICJ3aGlsZSI6
IEEsICJ3aXRoIjogQSwgImVsc2UiOiBCLCAiZG8iOiBCLCAidHJ5IjogQiwgImZpbmFsbHkiOiBC
LAotICAgICAgInJldHVybiI6IEMsICJicmVhayI6IEMsICJjb250aW51ZSI6IEMsICJuZXciOiBD
LCAiZGVsZXRlIjogQywgInRocm93IjogQywKKyAgICAgICJyZXR1cm4iOiBDLCAiYnJlYWsiOiBD
LCAiY29udGludWUiOiBDLCAibmV3IjogQywgImRlbGV0ZSI6IEMsICJ0aHJvdyI6IEMsICJkZWJ1
Z2dlciI6IEMsCiAgICAgICAidmFyIjoga3coInZhciIpLCAiY29uc3QiOiBrdygidmFyIiksICJs
ZXQiOiBrdygidmFyIiksCiAgICAgICAiZnVuY3Rpb24iOiBrdygiZnVuY3Rpb24iKSwgImNhdGNo
Ijoga3coImNhdGNoIiksCiAgICAgICAiZm9yIjoga3coImZvciIpLCAic3dpdGNoIjoga3coInN3
aXRjaCIpLCAiY2FzZSI6IGt3KCJjYXNlIiksICJkZWZhdWx0Ijoga3coImRlZmF1bHQiKSwKQEAg
LTUzLDE1ICs2NCwxOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9KCk7CgogICB2YXIgaXNPcGVyYXRvckNo
YXIgPSAvWytcLSomJT08PiE/fH5eXS87CisgIHZhciBpc0pzb25sZEtleXdvcmQgPSAvXkAoY29u
dGV4dHxpZHx2YWx1ZXxsYW5ndWFnZXx0eXBlfGNvbnRhaW5lcnxsaXN0fHNldHxyZXZlcnNlfGlu
ZGV4fGJhc2V8dm9jYWJ8Z3JhcGgpIi87CgotICBmdW5jdGlvbiBuZXh0VW50aWxVbmVzY2FwZWQo
c3RyZWFtLCBlbmQpIHsKLSAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0OworICBmdW5jdGlv
biByZWFkUmVnZXhwKHN0cmVhbSkgeworICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGlu
U2V0ID0gZmFsc2U7CiAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkg
ewotICAgICAgaWYgKG5leHQgPT0gZW5kICYmICFlc2NhcGVkKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICBpZiAoIWVzY2FwZWQpIHsKKyAgICAgICAgaWYgKG5leHQgPT0gIi8iICYmICFp
blNldCkgcmV0dXJuOworICAgICAgICBpZiAobmV4dCA9PSAiWyIpIGluU2V0ID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZSBpZiAoaW5TZXQgJiYgbmV4dCA9PSAiXSIpIGluU2V0ID0gZmFsc2U7CisgICAg
ICB9CiAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgIH0KLSAg
ICByZXR1cm4gZXNjYXBlZDsKICAgfQoKICAgLy8gVXNlZCBhcyBzY3JhdGNoIHZhcmlhYmxlcyB0
byBjb21tdW5pY2F0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aG91dApAQCAtODMsNyArOTcsNyBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgIH0gZWxzZSBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkp
IHsKICAgICAgIHJldHVybiByZXQoY2gpOwogICAgIH0gZWxzZSBpZiAoY2ggPT0gIj0iICYmIHN0
cmVhbS5lYXQoIj4iKSkgewotICAgICAgcmV0dXJuIHJldCgiPT4iKTsKKyAgICAgIHJldHVybiBy
ZXQoIj0+IiwgIm9wZXJhdG9yIik7CiAgICAgfSBlbHNlIGlmIChjaCA9PSAiMCIgJiYgc3RyZWFt
LmVhdCgveC9pKSkgewogICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXGRhLWZdL2kpOwogICAgICAg
cmV0dXJuIHJldCgibnVtYmVyIiwgIm51bWJlciIpOwpAQCAtOTksMTIgKzExMywxMiBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNv
bmZpZykgewogICAgICAgICByZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKICAgICAg
IH0gZWxzZSBpZiAoc3RhdGUubGFzdFR5cGUgPT0gIm9wZXJhdG9yIiB8fCBzdGF0ZS5sYXN0VHlw
ZSA9PSAia2V5d29yZCBjIiB8fAogICAgICAgICAgICAgICAgc3RhdGUubGFzdFR5cGUgPT0gInNv
ZiIgfHwgL15bXFt7fVwoLDs6XSQvLnRlc3Qoc3RhdGUubGFzdFR5cGUpKSB7Ci0gICAgICAgIG5l
eHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sICIvIik7CisgICAgICAgIHJlYWRSZWdleHAoc3RyZWFt
KTsKICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bZ2lteV0vKTsgLy8gJ3knIGlzICJzdGlja3ki
IG9wdGlvbiBpbiBNb3ppbGxhCiAgICAgICAgIHJldHVybiByZXQoInJlZ2V4cCIsICJzdHJpbmct
MiIpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JD
aGFyKTsKLSAgICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCBudWxsLCBzdHJlYW0uY3VycmVu
dCgpKTsKKyAgICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCAib3BlcmF0b3IiLCBzdHJlYW0u
Y3VycmVudCgpKTsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGNoID09ICJgIikgewogICAgICAg
c3RhdGUudG9rZW5pemUgPSB0b2tlblF1YXNpOwpAQCAtMTE0LDcgKzEyOCw3IEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgICAgICByZXR1cm4gcmV0KCJlcnJvciIsICJlcnJvciIpOwogICAgIH0gZWxzZSBpZiAo
aXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHsKICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJh
dG9yQ2hhcik7Ci0gICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsIG51bGwsIHN0cmVhbS5jdXJy
ZW50KCkpOworICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCAib3BlcmF0b3IiLCBzdHJlYW0u
Y3VycmVudCgpKTsKICAgICB9IGVsc2UgewogICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9d
Lyk7CiAgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCksIGtub3duID0ga2V5d29yZHMu
cHJvcGVydHlJc0VudW1lcmFibGUod29yZCkgJiYga2V5d29yZHNbd29yZF07CkBAIC0xMjUsOCAr
MTM5LDE2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNv
bmZpZywgcGFyc2VyQ29uZmlnKSB7CgogICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewog
ICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0gICAgICBpZiAoIW5leHRVbnRp
bFVuZXNjYXBlZChzdHJlYW0sIHF1b3RlKSkKKyAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5l
eHQ7CisgICAgICBpZiAoanNvbmxkTW9kZSAmJiBzdHJlYW0ucGVlaygpID09ICJAIiAmJiBzdHJl
YW0ubWF0Y2goaXNKc29ubGRLZXl3b3JkKSl7CiAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9r
ZW5CYXNlOworICAgICAgICByZXR1cm4gcmV0KCJqc29ubGQta2V5d29yZCIsICJtZXRhIik7Cisg
ICAgICB9CisgICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7Cisg
ICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSBicmVhazsKKyAgICAgICAgZXNj
YXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKKyAgICAgIH0KKyAgICAgIGlmICghZXNj
YXBlZCkgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICByZXR1cm4gcmV0KCJzdHJp
bmciLCAic3RyaW5nIik7CiAgICAgfTsKICAgfQpAQCAtMTg5LDcgKzIxMSw3IEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CgogICAvLyBQYXJzZXIKCi0gIHZhciBhdG9taWNUeXBlcyA9IHsiYXRvbSI6IHRydWUsICJu
dW1iZXIiOiB0cnVlLCAidmFyaWFibGUiOiB0cnVlLCAic3RyaW5nIjogdHJ1ZSwgInJlZ2V4cCI6
IHRydWUsICJ0aGlzIjogdHJ1ZX07CisgIHZhciBhdG9taWNUeXBlcyA9IHsiYXRvbSI6IHRydWUs
ICJudW1iZXIiOiB0cnVlLCAidmFyaWFibGUiOiB0cnVlLCAic3RyaW5nIjogdHJ1ZSwgInJlZ2V4
cCI6IHRydWUsICJ0aGlzIjogdHJ1ZSwgImpzb25sZC1rZXl3b3JkIjogdHJ1ZX07CgogICBmdW5j
dGlvbiBKU0xleGljYWwoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYsIGluZm8p
IHsKICAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CkBAIC0yODksMTEgKzMxMSwxMiBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICBwb3BsZXgubGV4ID0gdHJ1ZTsKCiAgIGZ1bmN0aW9uIGV4cGVjdCh3YW50
ZWQpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24odHlwZSkgeworICAgIGZ1bmN0aW9uIGV4cCh0eXBl
KSB7CiAgICAgICBpZiAodHlwZSA9PSB3YW50ZWQpIHJldHVybiBjb250KCk7CiAgICAgICBlbHNl
IGlmICh3YW50ZWQgPT0gIjsiKSByZXR1cm4gcGFzcygpOwotICAgICAgZWxzZSByZXR1cm4gY29u
dChhcmd1bWVudHMuY2FsbGVlKTsKKyAgICAgIGVsc2UgcmV0dXJuIGNvbnQoZXhwKTsKICAgICB9
OworICAgIHJldHVybiBleHA7CiAgIH0KCiAgIGZ1bmN0aW9uIHN0YXRlbWVudCh0eXBlLCB2YWx1
ZSkgewpAQCAtMzAyLDkgKzMyNSwxMyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3Jp
cHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh0eXBlID09ICJr
ZXl3b3JkIGIiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHN0YXRlbWVudCwgcG9wbGV4
KTsKICAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgYmxvY2ss
IHBvcGxleCk7CiAgICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwotICAgIGlmICh0
eXBlID09ICJpZiIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwgc3Rh
dGVtZW50LCBwb3BsZXgsIG1heWJlZWxzZSk7CisgICAgaWYgKHR5cGUgPT0gImlmIikgeworICAg
ICAgaWYgKGN4LnN0YXRlLmxleGljYWwuaW5mbyA9PSAiZWxzZSIgJiYgY3guc3RhdGUuY2NbY3gu
c3RhdGUuY2MubGVuZ3RoIC0gMV0gPT0gcG9wbGV4KQorICAgICAgICBjeC5zdGF0ZS5jYy5wb3Ao
KSgpOworICAgICAgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBzdGF0
ZW1lbnQsIHBvcGxleCwgbWF5YmVlbHNlKTsKKyAgICB9CiAgICAgaWYgKHR5cGUgPT0gImZ1bmN0
aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOwotICAgIGlmICh0eXBlID09ICJmb3IiKSBy
ZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGZvcnNwZWMsIHBvcGxleCwgc3RhdGVtZW50LCBw
b3BsZXgpOworICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3Jt
IiksIGZvcnNwZWMsIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgICBpZiAodHlwZSA9PSAidmFyaWFi
bGUiKSByZXR1cm4gY29udChwdXNobGV4KCJzdGF0IiksIG1heWJlbGFiZWwpOwogICAgIGlmICh0
eXBlID09ICJzd2l0Y2giKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24s
IHB1c2hsZXgoIn0iLCAic3dpdGNoIiksIGV4cGVjdCgieyIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBibG9jaywgcG9wbGV4LCBwb3BsZXgpOwpAQCAtMzI3LDE4ICsz
NTQsMTggQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29u
ZmlnLCBwYXJzZXJDb25maWcpIHsKICAgZnVuY3Rpb24gZXhwcmVzc2lvbklubmVyKHR5cGUsIG5v
Q29tbWEpIHsKICAgICBpZiAoY3guc3RhdGUuZmF0QXJyb3dBdCA9PSBjeC5zdHJlYW0uc3RhcnQp
IHsKICAgICAgIHZhciBib2R5ID0gbm9Db21tYSA/IGFycm93Qm9keU5vQ29tbWEgOiBhcnJvd0Jv
ZHk7Ci0gICAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBjb21t
YXNlcChwYXR0ZXJuLCAiKSIpLCBleHBlY3QoIj0+IiksIGJvZHksIHBvcGNvbnRleHQpOworICAg
ICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNoY29udGV4dCwgcHVzaGxleCgiKSIp
LCBjb21tYXNlcChwYXR0ZXJuLCAiKSIpLCBwb3BsZXgsIGV4cGVjdCgiPT4iKSwgYm9keSwgcG9w
Y29udGV4dCk7CiAgICAgICBlbHNlIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHJldHVybiBwYXNz
KHB1c2hjb250ZXh0LCBwYXR0ZXJuLCBleHBlY3QoIj0+IiksIGJvZHksIHBvcGNvbnRleHQpOwog
ICAgIH0KCiAgICAgdmFyIG1heWJlb3AgPSBub0NvbW1hID8gbWF5YmVvcGVyYXRvck5vQ29tbWEg
OiBtYXliZW9wZXJhdG9yQ29tbWE7CiAgICAgaWYgKGF0b21pY1R5cGVzLmhhc093blByb3BlcnR5
KHR5cGUpKSByZXR1cm4gY29udChtYXliZW9wKTsKLSAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24i
KSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7CisgICAgaWYgKHR5cGUgPT0gImZ1bmN0aW9uIikg
cmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYsIG1heWJlb3ApOwogICAgIGlmICh0eXBlID09ICJrZXl3
b3JkIGMiKSByZXR1cm4gY29udChub0NvbW1hID8gbWF5YmVleHByZXNzaW9uTm9Db21tYSA6IG1h
eWJlZXhwcmVzc2lvbik7CiAgICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4
KCIpIiksIG1heWJlZXhwcmVzc2lvbiwgY29tcHJlaGVuc2lvbiwgZXhwZWN0KCIpIiksIHBvcGxl
eCwgbWF5YmVvcCk7CiAgICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIiB8fCB0eXBlID09ICJzcHJl
YWQiKSByZXR1cm4gY29udChub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9u
KTsKLSAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgZXhwcmVz
c2lvbk5vQ29tbWEsIG1heWJlQXJyYXlDb21wcmVoZW5zaW9uLCBwb3BsZXgsIG1heWJlb3ApOwot
ICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQoY29tbWFzZXAob2JqcHJvcCwgIn0iKSwg
bWF5YmVvcCk7CisgICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiks
IGFycmF5TGl0ZXJhbCwgcG9wbGV4LCBtYXliZW9wKTsKKyAgICBpZiAodHlwZSA9PSAieyIpIHJl
dHVybiBjb250Q29tbWFzZXAob2JqcHJvcCwgIn0iLCBudWxsLCBtYXliZW9wKTsKICAgICByZXR1
cm4gY29udCgpOwogICB9CiAgIGZ1bmN0aW9uIG1heWJlZXhwcmVzc2lvbih0eXBlKSB7CkBAIC0z
NjUsMTIgKzM5MiwxMSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIH0KICAgICBpZiAodHlwZSA9PSAicXVh
c2kiKSB7IGN4LmNjLnB1c2gobWUpOyByZXR1cm4gcXVhc2kodmFsdWUpOyB9CiAgICAgaWYgKHR5
cGUgPT0gIjsiKSByZXR1cm47Ci0gICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChjb21t
YXNlcChleHByZXNzaW9uTm9Db21tYSwgIikiLCAiY2FsbCIpLCBtZSk7CisgICAgaWYgKHR5cGUg
PT0gIigiKSByZXR1cm4gY29udENvbW1hc2VwKGV4cHJlc3Npb25Ob0NvbW1hLCAiKSIsICJjYWxs
IiwgbWUpOwogICAgIGlmICh0eXBlID09ICIuIikgcmV0dXJuIGNvbnQocHJvcGVydHksIG1lKTsK
ICAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgbWF5YmVleHBy
ZXNzaW9uLCBleHBlY3QoIl0iKSwgcG9wbGV4LCBtZSk7CiAgIH0KICAgZnVuY3Rpb24gcXVhc2ko
dmFsdWUpIHsKLSAgICBpZiAoIXZhbHVlKSBkZWJ1Z2dlcjsKICAgICBpZiAodmFsdWUuc2xpY2Uo
dmFsdWUubGVuZ3RoIC0gMikgIT0gIiR7IikgcmV0dXJuIGNvbnQoKTsKICAgICByZXR1cm4gY29u
dChleHByZXNzaW9uLCBjb250aW51ZVF1YXNpKTsKICAgfQpAQCAtNDAzLDcgKzQyOSw3IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2Vy
Q29uZmlnKSB7CiAgICAgICBjeC5tYXJrZWQgPSAicHJvcGVydHkiOwogICAgICAgaWYgKHZhbHVl
ID09ICJnZXQiIHx8IHZhbHVlID09ICJzZXQiKSByZXR1cm4gY29udChnZXR0ZXJTZXR0ZXIpOwog
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSAibnVtYmVyIiB8fCB0eXBlID09ICJzdHJpbmciKSB7Ci0g
ICAgICBjeC5tYXJrZWQgPSB0eXBlICsgIiBwcm9wZXJ0eSI7CisgICAgICBjeC5tYXJrZWQgPSBq
c29ubGRNb2RlID8gInByb3BlcnR5IiA6ICh0eXBlICsgIiBwcm9wZXJ0eSIpOwogICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSAiWyIpIHsKICAgICAgIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVj
dCgiXSIpLCBhZnRlcnByb3ApOwogICAgIH0KQEAgLTQxOCw3ICs0NDQsNyBAQCBDb2RlTWlycm9y
LmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykg
ewogICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEpOwog
ICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIHBhc3MoZnVuY3Rpb25kZWYpOwogICB9Ci0gIGZ1
bmN0aW9uIGNvbW1hc2VwKHdoYXQsIGVuZCwgaW5mbykgeworICBmdW5jdGlvbiBjb21tYXNlcCh3
aGF0LCBlbmQpIHsKICAgICBmdW5jdGlvbiBwcm9jZWVkKHR5cGUpIHsKICAgICAgIGlmICh0eXBl
ID09ICIsIikgewogICAgICAgICB2YXIgbGV4ID0gY3guc3RhdGUubGV4aWNhbDsKQEAgLTQzMCwx
MCArNDU2LDE0IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgfQogICAgIHJldHVybiBmdW5jdGlvbih0eXBl
KSB7CiAgICAgICBpZiAodHlwZSA9PSBlbmQpIHJldHVybiBjb250KCk7Ci0gICAgICBpZiAoaW5m
byA9PT0gZmFsc2UpIHJldHVybiBwYXNzKHdoYXQsIHByb2NlZWQpOwotICAgICAgcmV0dXJuIHBh
c3MocHVzaGxleChlbmQsIGluZm8pLCB3aGF0LCBwcm9jZWVkLCBwb3BsZXgpOworICAgICAgcmV0
dXJuIHBhc3Mod2hhdCwgcHJvY2VlZCk7CiAgICAgfTsKICAgfQorICBmdW5jdGlvbiBjb250Q29t
bWFzZXAod2hhdCwgZW5kLCBpbmZvKSB7CisgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBhcmd1bWVu
dHMubGVuZ3RoOyBpKyspCisgICAgICBjeC5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgcmV0
dXJuIGNvbnQocHVzaGxleChlbmQsIGluZm8pLCBjb21tYXNlcCh3aGF0LCBlbmQpLCBwb3BsZXgp
OworICB9CiAgIGZ1bmN0aW9uIGJsb2NrKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAifSIpIHJl
dHVybiBjb250KCk7CiAgICAgcmV0dXJuIHBhc3Moc3RhdGVtZW50LCBibG9jayk7CkBAIC00NDks
OCArNDc5LDggQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgfQogICBmdW5jdGlvbiBwYXR0ZXJuKHR5cGUsIHZh
bHVlKSB7CiAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgeyByZWdpc3Rlcih2YWx1ZSk7IHJl
dHVybiBjb250KCk7IH0KLSAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KGNvbW1hc2Vw
KHBhdHRlcm4sICJdIikpOwotICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQoY29tbWFz
ZXAocHJvcHBhdHRlcm4sICJ9IikpOworICAgIGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnRD
b21tYXNlcChwYXR0ZXJuLCAiXSIpOworICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnRD
b21tYXNlcChwcm9wcGF0dGVybiwgIn0iKTsKICAgfQogICBmdW5jdGlvbiBwcm9wcGF0dGVybih0
eXBlLCB2YWx1ZSkgewogICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIgJiYgIWN4LnN0cmVhbS5t
YXRjaCgvXlxzKjovLCBmYWxzZSkpIHsKQEAgLTQ2NywxMCArNDk3LDEwIEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udCh2YXJkZWYpOwogICB9CiAgIGZ1bmN0
aW9uIG1heWJlZWxzZSh0eXBlLCB2YWx1ZSkgewotICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGIi
ICYmIHZhbHVlID09ICJlbHNlIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBzdGF0ZW1l
bnQsIHBvcGxleCk7CisgICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYiIgJiYgdmFsdWUgPT0gImVs
c2UiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiwgImVsc2UiKSwgc3RhdGVtZW50LCBwb3Bs
ZXgpOwogICB9CiAgIGZ1bmN0aW9uIGZvcnNwZWModHlwZSkgewotICAgIGlmICh0eXBlID09ICIo
IikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBmb3JzcGVjMSwgZXhwZWN0KCIpIikpOworICAg
IGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBmb3JzcGVjMSwgZXhw
ZWN0KCIpIiksIHBvcGxleCk7CiAgIH0KICAgZnVuY3Rpb24gZm9yc3BlYzEodHlwZSkgewogICAg
IGlmICh0eXBlID09ICJ2YXIiKSByZXR1cm4gY29udCh2YXJkZWYsIGV4cGVjdCgiOyIpLCBmb3Jz
cGVjMik7CkBAIC00OTMsNyArNTIzLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2Ny
aXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgZnVuY3Rpb24gZnVuY3Rp
b25kZWYodHlwZSwgdmFsdWUpIHsKICAgICBpZiAodmFsdWUgPT0gIioiKSB7Y3gubWFya2VkID0g
ImtleXdvcmQiOyByZXR1cm4gY29udChmdW5jdGlvbmRlZik7fQogICAgIGlmICh0eXBlID09ICJ2
YXJpYWJsZSIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTt9Ci0g
ICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNoY29udGV4dCwgY29tbWFzZXAoZnVu
YXJnLCAiKSIpLCBzdGF0ZW1lbnQsIHBvcGNvbnRleHQpOworICAgIGlmICh0eXBlID09ICIoIikg
cmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIHB1c2hsZXgoIikiKSwgY29tbWFzZXAoZnVuYXJnLCAi
KSIpLCBwb3BsZXgsIHN0YXRlbWVudCwgcG9wY29udGV4dCk7CiAgIH0KICAgZnVuY3Rpb24gZnVu
YXJnKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAic3ByZWFkIikgcmV0dXJuIGNvbnQoZnVuYXJn
KTsKQEAgLTUwNiw3ICs1MzYsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh2YWx1ZSA9PSAiZXh0
ZW5kcyIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICB9CiAgIGZ1bmN0aW9uIG9iamxpdCh0
eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChjb21tYXNlcChvYmpwcm9w
LCAifSIpKTsKKyAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250Q29tbWFzZXAob2JqcHJv
cCwgIn0iKTsKICAgfQogICBmdW5jdGlvbiBhZnRlck1vZHVsZSh0eXBlLCB2YWx1ZSkgewogICAg
IGlmICh0eXBlID09ICJzdHJpbmciKSByZXR1cm4gY29udChzdGF0ZW1lbnQpOwpAQCAtNTIyLDE3
ICs1NTIsMjEgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICByZXR1cm4gcGFzcyhpbXBvcnRTcGVjLCBtYXli
ZUZyb20pOwogICB9CiAgIGZ1bmN0aW9uIGltcG9ydFNwZWModHlwZSwgdmFsdWUpIHsKLSAgICBp
ZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KGNvbW1hc2VwKGltcG9ydFNwZWMsICJ9IikpOwor
ICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnRDb21tYXNlcChpbXBvcnRTcGVjLCAifSIp
OwogICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHJlZ2lzdGVyKHZhbHVlKTsKICAgICByZXR1
cm4gY29udCgpOwogICB9CiAgIGZ1bmN0aW9uIG1heWJlRnJvbShfdHlwZSwgdmFsdWUpIHsKICAg
ICBpZiAodmFsdWUgPT0gImZyb20iKSB7IGN4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNv
bnQoZXhwcmVzc2lvbik7IH0KICAgfQorICBmdW5jdGlvbiBhcnJheUxpdGVyYWwodHlwZSkgewor
ICAgIGlmICh0eXBlID09ICJdIikgcmV0dXJuIGNvbnQoKTsKKyAgICByZXR1cm4gcGFzcyhleHBy
ZXNzaW9uTm9Db21tYSwgbWF5YmVBcnJheUNvbXByZWhlbnNpb24pOworICB9CiAgIGZ1bmN0aW9u
IG1heWJlQXJyYXlDb21wcmVoZW5zaW9uKHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAiZm9yIikg
cmV0dXJuIHBhc3MoY29tcHJlaGVuc2lvbik7Ci0gICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4g
Y29udChjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIl0iLCBmYWxzZSkpOwotICAgIHJldHVy
biBwYXNzKGNvbW1hc2VwKGV4cHJlc3Npb25Ob0NvbW1hLCAiXSIsIGZhbHNlKSk7CisgICAgaWYg
KHR5cGUgPT0gImZvciIpIHJldHVybiBwYXNzKGNvbXByZWhlbnNpb24sIGV4cGVjdCgiXSIpKTsK
KyAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KGNvbW1hc2VwKGV4cHJlc3Npb25Ob0Nv
bW1hLCAiXSIpKTsKKyAgICByZXR1cm4gcGFzcyhjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwg
Il0iKSk7CiAgIH0KICAgZnVuY3Rpb24gY29tcHJlaGVuc2lvbih0eXBlKSB7CiAgICAgaWYgKHR5
cGUgPT0gImZvciIpIHJldHVybiBjb250KGZvcnNwZWMsIGNvbXByZWhlbnNpb24pOwpAQCAtNTUy
LDcgKzU4Niw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICAgIGNvbnRleHQ6IHBhcnNlckNvbmZpZy5s
b2NhbFZhcnMgJiYge3ZhcnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnN9LAogICAgICAgICBpbmRl
bnRlZDogMAogICAgICAgfTsKLSAgICAgIGlmIChwYXJzZXJDb25maWcuZ2xvYmFsVmFycykgc3Rh
dGUuZ2xvYmFsVmFycyA9IHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzOworICAgICAgaWYgKHBhcnNl
ckNvbmZpZy5nbG9iYWxWYXJzICYmIHR5cGVvZiBwYXJzZXJDb25maWcuZ2xvYmFsVmFycyA9PSAi
b2JqZWN0IikKKyAgICAgICAgc3RhdGUuZ2xvYmFsVmFycyA9IHBhcnNlckNvbmZpZy5nbG9iYWxW
YXJzOwogICAgICAgcmV0dXJuIHN0YXRlOwogICAgIH0sCgpAQCAtNTc1LDcgKzYxMCw3IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2Vy
Q29uZmlnKSB7CiAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4g
MDsKICAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgw
KSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWw7CiAgICAgICAvLyBLbHVkZ2UgdG8gcHJldmVudCAn
bWF5YmVsc2UnIGZyb20gYmxvY2tpbmcgbGV4aWNhbCBzY29wZSBwb3BzCi0gICAgICBmb3IgKHZh
ciBpID0gc3RhdGUuY2MubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgIGlmICghL15c
cyplbHNlXGIvLnRlc3QodGV4dEFmdGVyKSkgZm9yICh2YXIgaSA9IHN0YXRlLmNjLmxlbmd0aCAt
IDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIHZhciBjID0gc3RhdGUuY2NbaV07CiAgICAgICAg
IGlmIChjID09IHBvcGxleCkgbGV4aWNhbCA9IGxleGljYWwucHJldjsKICAgICAgICAgZWxzZSBp
ZiAoYyAhPSBtYXliZWVsc2UpIGJyZWFrOwpAQCAtNjAzLDYgKzYzOCw3IEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgICAgZm9sZDogImJyYWNlIiwKCiAgICAgaGVscGVyVHlwZToganNvbk1vZGUgPyAianNvbiIg
OiAiamF2YXNjcmlwdCIsCisgICAganNvbmxkTW9kZToganNvbmxkTW9kZSwKICAgICBqc29uTW9k
ZToganNvbk1vZGUKICAgfTsKIH0pOwpAQCAtNjEzLDUgKzY0OSw4IEBAIENvZGVNaXJyb3IuZGVm
aW5lTUlNRSgiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CiBDb2RlTWly
cm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOwog
Q29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi9qc29uIiwge25hbWU6ICJqYXZhc2Ny
aXB0IiwganNvbjogdHJ1ZX0pOwogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94
LWpzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0cnVlfSk7CitDb2RlTWlycm9yLmRl
ZmluZU1JTUUoImFwcGxpY2F0aW9uL2xkK2pzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29u
bGQ6IHRydWV9KTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC90eXBlc2NyaXB0IiwgeyBu
YW1lOiAiamF2YXNjcmlwdCIsIHR5cGVzY3JpcHQ6IHRydWUgfSk7CiBDb2RlTWlycm9yLmRlZmlu
ZU1JTUUoImFwcGxpY2F0aW9uL3R5cGVzY3JpcHQiLCB7IG5hbWU6ICJqYXZhc2NyaXB0IiwgdHlw
ZXNjcmlwdDogdHJ1ZSB9KTsKKworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9CYXNlL01haW4uanMKaW5kZXggYzBlOGZiZC4uZDQwNjZjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwpAQCAtMTgy
Niw3ICsxODI2LDcgQEAgV2ViSW5zcGVjdG9yLmFkZFdpbmRvd0tleWRvd25MaXN0ZW5lciA9IGZ1
bmN0aW9uKGxpc3RlbmVyKQogewogICAgIGlmICh0eXBlb2YgbGlzdGVuZXIuaGFuZGxlS2V5ZG93
bkV2ZW50ICE9PSAiZnVuY3Rpb24iKQogICAgICAgICByZXR1cm47Ci0KKwogICAgIHRoaXMuX3dp
bmRvd0tleWRvd25MaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7CgogICAgIHRoaXMuX3VwZGF0ZVdp
bmRvd0tleWRvd25MaXN0ZW5lcigpOwpAQCAtMTgzNSw3ICsxODM1LDcgQEAgV2ViSW5zcGVjdG9y
LmFkZFdpbmRvd0tleWRvd25MaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKQogV2ViSW5zcGVj
dG9yLnJlbW92ZVdpbmRvd0tleWRvd25MaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKQogewog
ICAgIHRoaXMuX3dpbmRvd0tleWRvd25MaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKLQorCiAg
ICAgdGhpcy5fdXBkYXRlV2luZG93S2V5ZG93bkxpc3RlbmVyKCk7CiB9OwoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJy
b3JDb2xvckVkaXRpbmdDb250cm9sbGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckNvbG9yRWRpdGluZ0NvbnRyb2xsZXIuanMK
aW5kZXggZTBjMmU4YS4uOGUzMWMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckNvbG9yRWRpdGluZ0NvbnRyb2xs
ZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxl
cnMvQ29kZU1pcnJvckNvbG9yRWRpdGluZ0NvbnRyb2xsZXIuanMKQEAgLTMxLDcgKzMxLDcgQEAg
V2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVyID0gZnVuY3Rpb24o
Y29kZU1pcnJvciwgbWFya2VyKQogV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb2xvckVkaXRpbmdD
b250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVyLAogICAgIF9fcHJvdG9fXzogV2ViSW5zcGVj
dG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5wcm90b3R5cGUsCi0KKwogICAgIC8vIFB1
YmxpYwoKICAgICBnZXQgaW5pdGlhbFZhbHVlKCkKQEAgLTU3LDkgKzU3LDkgQEAgV2ViSW5zcGVj
dG9yLkNvZGVNaXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICB9
LAoKICAgICAvLyBQcml2YXRlCi0KKwogICAgIF9jb2xvclBpY2tlckNvbG9yQ2hhbmdlZDogZnVu
Y3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLnZhbHVlID0gZXZlbnQudGFyZ2V0LmNv
bG9yOwotICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWly
cm9yRWRpdGluZ0NvbnRyb2xsZXIuanMKaW5kZXggMzQyMjZhYi4uMDFiOTViZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1p
cnJvckVkaXRpbmdDb250cm9sbGVyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5qcwpAQCAt
MzcsMTkgKzM3LDE5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIg
PSBmdW5jdGlvbihjb2RlTWlycm9yLCBtYXJrZXIpCiAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLmlu
aXRpYWxWYWx1ZTsKCiAgICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dEVzYyA9IG5ldyBXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChudWxsLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5LZXkuRXNjYXBlKTsKLX0KK307CgogV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29u
dHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yRWRpdGluZ0NvbnRyb2xsZXIsCiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2Jq
ZWN0LnByb3RvdHlwZSwKLQorCiAgICAgLy8gUHVibGljCi0KKwogICAgIGdldCBtYXJrZXIoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX21hcmtlcjsKICAgICB9LAotCisKICAgICBnZXQg
cmFuZ2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3JhbmdlOwpAQCAtNTksNyArNTks
NyBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9
IHsKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTsKICAgICB9LAotCisKICAgICBz
ZXQgdmFsdWUodmFsdWUpCiAgICAgewogICAgICAgICB0aGlzLnRleHQgPSB2YWx1ZS50b1N0cmlu
ZygpOwpAQCAtODIsNyArODIsNyBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckVkaXRpbmdDb250
cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIHRvID0ge2xpbmU6IHRoaXMuX3Jhbmdl
LmVuZExpbmUsIGNoOiB0aGlzLl9yYW5nZS5lbmRDb2x1bW59OwogICAgICAgICByZXR1cm4gdGhp
cy5fY29kZU1pcnJvci5nZXRSYW5nZShmcm9tLCB0byk7CiAgICAgfSwKLQorCiAgICAgc2V0IHRl
eHQodGV4dCkKICAgICB7CiAgICAgICAgIHZhciBmcm9tID0ge2xpbmU6IHRoaXMuX3JhbmdlLnN0
YXJ0TGluZSwgY2g6IHRoaXMuX3JhbmdlLnN0YXJ0Q29sdW1ufTsKQEAgLTEwMCwxMyArMTAwLDEz
IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIucHJvdG90eXBlID0g
ewogICAgICAgICAvLyBJbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogICAgICAgICByZXR1cm4g
dGhpcy50ZXh0OwogICAgIH0sCi0KKwogICAgIGdldCBjc3NDbGFzc05hbWUoKQogICAgIHsKICAg
ICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICAgICAgICAgcmV0dXJuICIiOwog
ICAgIH0sCi0KKwogICAgIGdldCBwb3BvdmVyKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9wb3BvdmVyOwpAQCAtMTUzLDcgKzE1Myw3IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRp
dGluZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9r
ZXlib2FyZFNob3J0Y3V0RXNjLm1hdGNoZXNFdmVudChldmVudCkgfHwgIXRoaXMuX3BvcG92ZXIu
dmlzaWJsZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQorCiAgICAgICAgIHRoaXMudmFs
dWUgPSB0aGlzLl9vcmlnaW5hbFZhbHVlOwogICAgICAgICB0aGlzLl9wb3BvdmVyLmRpc21pc3Mo
KTsKCkBAIC0xNzYsNyArMTc2LDcgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29u
dHJvbGxlci5wcm90b3R5cGUgPSB7CgogICAgICAgICB0aGlzLl9vcmlnaW5hbFZhbHVlID0gdGhp
cy5fdmFsdWUuY29weSgpOwogICAgIH0sCi0KKwogICAgIGRpZERpc21pc3NQb3BvdmVyOiBmdW5j
dGlvbihwb3BvdmVyKQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMuX3BvcG92ZXI7CkBAIC0x
ODcsNCArMTg3LDQgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5f
ZGVsZWdhdGUuZWRpdGluZ0NvbnRyb2xsZXJEaWRGaW5pc2hFZGl0aW5nID09PSAiZnVuY3Rpb24i
KQogICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUuZWRpdGluZ0NvbnRyb2xsZXJEaWRGaW5pc2hF
ZGl0aW5nKHRoaXMpOwogICAgIH0KLX0KK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuanMKaW5kZXggM2EwNDJlMy4u
MjJiOTdhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JU
b2tlblRyYWNraW5nQ29udHJvbGxlci5qcwpAQCAtNTAsNyArNTAsNyBAQCBXZWJJbnNwZWN0b3Iu
Q29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUgPSB7CiAgICAgTm9uU3ltYm9s
VG9rZW5zOiAibm9uLXN5bWJvbC10b2tlbnMiLAogICAgIEphdmFTY3JpcHRFeHByZXNzaW9uOiAi
amF2YXNjcmlwdC1leHByZXNzaW9uIiwKICAgICBNYXJrZWRUb2tlbnM6ICJtYXJrZWQtdG9rZW5z
IgotfQorfTsKCiBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVy
LnByb3RvdHlwZSA9IHsKICAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JU
b2tlblRyYWNraW5nQ29udHJvbGxlciwKQEAgLTE0OCw3ICsxNDgsNyBAQCBXZWJJbnNwZWN0b3Iu
Q29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICB7CiAg
ICAgICAgIHJldHVybiB0aGlzLl9ob3ZlcmVkTWFya2VyOwogICAgIH0sCi0KKwogICAgIHNldCBo
b3ZlcmVkTWFya2VyKGhvdmVyZWRNYXJrZXIpCiAgICAgewogICAgICAgICB0aGlzLl9ob3ZlcmVk
TWFya2VyID0gaG92ZXJlZE1hcmtlcjsKQEAgLTQzNywxMyArNDM3LDEzIEBAIFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgICAgIHN0YXJ0OiB0aGlzLl9jb2RlTWlycm9yLmdldEN1cnNvcigic3RhcnQiKSwKICAg
ICAgICAgICAgICAgICBlbmQ6IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJlbmQiKQogICAg
ICAgICAgICAgfTsKLQorCiAgICAgICAgICAgICBmdW5jdGlvbiB0b2tlbklzSW5SYW5nZSh0b2tl
biwgcmFuZ2UpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuLmxp
bmUgPj0gcmFuZ2Uuc3RhcnQubGluZSAmJiB0b2tlbi5jaCA+PSByYW5nZS5zdGFydC5jaCAmJgog
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5saW5lIDw9IHJhbmdlLmVuZC5saW5lICYmIHRv
a2VuLmNoIDw9IHJhbmdlLmVuZC5jaDsKICAgICAgICAgICAgIH0KLQorCiAgICAgICAgICAgICBp
ZiAodG9rZW5Jc0luUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgc2VsZWN0aW9uUmFuZ2UpIHx8IHRva2Vu
SXNJblJhbmdlKGVuZFBvc2l0aW9uLCBzZWxlY3Rpb25SYW5nZSkpIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICBob3ZlcmVkVG9rZW46IHRoaXMuX2hvdmVy
ZWRUb2tlbkluZm8udG9rZW4sCkBAIC00NTIsNyArNDUyLDcgQEAgV2ViSW5zcGVjdG9yLkNvZGVN
aXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAg
ICAgICAgIGV4cHJlc3Npb25SYW5nZTogc2VsZWN0aW9uUmFuZ2UsCiAgICAgICAgICAgICAgICAg
fTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICB9CgogICAgICAgICAvLyBXZSBv
bmx5IGhhbmRsZSB2YXJzLCBkZWZpbml0aW9ucywgcHJvcGVydGllcywgYW5kIHRoZSBrZXl3b3Jk
ICd0aGlzJy4KICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZvLnRva2Vu
LnR5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL2Nsb2p1cmUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb2p1cmUuanMKaW5kZXggZWUyMmExMi4u
M2I1OTZhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9qdXJlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvanVyZS5qcwpAQCAtMiwxMCAr
MiwyMiBAQAogICogQXV0aG9yOiBIYW5zIEVuZ2VsCiAgKiBCcmFuY2hlZCBmcm9tIENvZGVNaXJy
b3IncyBTY2hlbWUgbW9kZSAoYnkgS29oIFppIEhhbiwgYmFzZWQgb24gaW1wbGVtZW50YXRpb24g
YnkgS29oIFppIENodW4pCiAgKi8KLUNvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY2xvanVyZSIsIGZ1
bmN0aW9uICgpIHsKKworKGZ1bmN0aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0g
Im9iamVjdCIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKKyAgICBt
b2QocmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSk7CisgIGVsc2UgaWYgKHR5cGVvZiBk
ZWZpbmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAgICBkZWZpbmUoWyIu
Li8uLi9saWIvY29kZW1pcnJvciJdLCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52
CisgICAgbW9kKENvZGVNaXJyb3IpOworfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgeworInVzZSBz
dHJpY3QiOworCitDb2RlTWlycm9yLmRlZmluZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAob3B0
aW9ucykgewogICAgIHZhciBCVUlMVElOID0gImJ1aWx0aW4iLCBDT01NRU5UID0gImNvbW1lbnQi
LCBTVFJJTkcgPSAic3RyaW5nIiwgQ0hBUkFDVEVSID0gInN0cmluZy0yIiwKICAgICAgICAgQVRP
TSA9ICJhdG9tIiwgTlVNQkVSID0gIm51bWJlciIsIEJSQUNLRVQgPSAiYnJhY2tldCIsIEtFWVdP
UkQgPSAia2V5d29yZCI7Ci0gICAgdmFyIElOREVOVF9XT1JEX1NLSVAgPSAyOworICAgIHZhciBJ
TkRFTlRfV09SRF9TS0lQID0gb3B0aW9ucy5pbmRlbnRVbml0IHx8IDI7CisgICAgdmFyIE5PUk1B
TF9JTkRFTlRfVU5JVCA9IG9wdGlvbnMuaW5kZW50VW5pdCB8fCAyOwoKICAgICBmdW5jdGlvbiBt
YWtlS2V5d29yZHMoc3RyKSB7CiAgICAgICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3Bs
aXQoIiAiKTsKQEAgLTQ0LDcgKzU2LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjbG9qdXJl
IiwgZnVuY3Rpb24gKCkgewogICAgICAgICBzaWduOiAvWystXS8sCiAgICAgICAgIGV4cG9uZW50
OiAvZS9pLAogICAgICAgICBrZXl3b3JkX2NoYXI6IC9bXlxzXChcW1w7XClcXV0vLAotICAgICAg
ICBzeW1ib2w6IC9bXHcqKyFcLVwuXz86XC9dLworICAgICAgICBzeW1ib2w6IC9bXHcqKyFcLVwu
Xz86PD5cL10vCiAgICAgfTsKCiAgICAgZnVuY3Rpb24gc3RhdGVTdGFjayhpbmRlbnQsIHR5cGUs
IHByZXYpIHsgLy8gcmVwcmVzZW50cyBhIHN0YXRlIHN0YWNrIG9iamVjdApAQCAtMTc5LDggKzE5
MSw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY2xvanVyZSIsIGZ1bmN0aW9uICgpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0U3BhY2UoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVvbCgpIHx8IHN0cmVhbS5wZWVrKCkgPT0gIjsi
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgc2lnbmlmaWNh
bnQgYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgcmVzdGFydCBp
bmRlbnRhdGlvbiAxIHNwYWNlIGFmdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIDEsIGNoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2UgcmVzdGFydCBpbmRlbnRhdGlvbiB0aGUgdXNlciBkZWZpbmVk
IHNwYWNlcyBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoU3RhY2so
c3RhdGUsIGluZGVudFRlbXAgKyBOT1JNQUxfSU5ERU5UX1VOSVQsIGNoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoU3RhY2soc3RhdGUsIGluZGVudFRlbXAgKyBzdHJlYW0uY3VycmVudCgpLmxlbmd0aCwg
Y2gpOyAvLyBlbHNlIHdlIG1hdGNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MjIyLDMgKzIzNCw1IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY2xvanVyZSIsIGZ1bmN0aW9u
ICgpIHsKIH0pOwoKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWNsb2p1cmUiLCAiY2xv
anVyZSIpOworCit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvc2VicmFja2V0cy5qcyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvc2VicmFja2V0
cy5qcwppbmRleCA4ODcxOGI3Li4zY2VhODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb3NlYnJhY2tldHMuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9jbG9zZWJyYWNrZXRzLmpzCkBAIC0xLDggKzEsMTcgQEAKLShmdW5jdGlvbigpIHsKKyhm
dW5jdGlvbihtb2QpIHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVv
ZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCisgICAgbW9kKHJlcXVpcmUoIi4uLy4u
L2xpYi9jb2RlbWlycm9yIikpOworICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlv
biIgJiYgZGVmaW5lLmFtZCkgLy8gQU1ECisgICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJy
b3IiXSwgbW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudgorICAgIG1vZChDb2RlTWly
cm9yKTsKK30pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKICAgdmFyIERFRkFVTFRfQlJBQ0tFVFMg
PSAiKClbXXt9JydcIlwiIjsKICAgdmFyIERFRkFVTFRfRVhQTE9ERV9PTl9FTlRFUiA9ICJbXXt9
IjsKICAgdmFyIFNQQUNFX0NIQVJfUkVHRVggPSAvXHMvOwoKKyAgdmFyIFBvcyA9IENvZGVNaXJy
b3IuUG9zOworCiAgIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9uKCJhdXRvQ2xvc2VCcmFja2V0cyIs
IGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHsKICAgICBpZiAob2xkICE9IENvZGVNaXJy
b3IuSW5pdCAmJiBvbGQpCiAgICAgICBjbS5yZW1vdmVLZXlNYXAoImF1dG9DbG9zZUJyYWNrZXRz
Iik7CkBAIC0xOSw4ICsyOCw4IEBACiAgIH0pOwoKICAgZnVuY3Rpb24gY2hhcnNBcm91bmQoY20s
IHBvcykgewotICAgIHZhciBzdHIgPSBjbS5nZXRSYW5nZShDb2RlTWlycm9yLlBvcyhwb3MubGlu
ZSwgcG9zLmNoIC0gMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVNaXJyb3IuUG9z
KHBvcy5saW5lLCBwb3MuY2ggKyAxKSk7CisgICAgdmFyIHN0ciA9IGNtLmdldFJhbmdlKFBvcyhw
b3MubGluZSwgcG9zLmNoIC0gMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhwb3Mu
bGluZSwgcG9zLmNoICsgMSkpOwogICAgIHJldHVybiBzdHIubGVuZ3RoID09IDIgPyBzdHIgOiBu
dWxsOwogICB9CgpAQCAtMjgsNTUgKzM3LDEwNCBAQAogICAgIHZhciBtYXAgPSB7CiAgICAgICBu
YW1lIDogImF1dG9DbG9zZUJyYWNrZXRzIiwKICAgICAgIEJhY2tzcGFjZTogZnVuY3Rpb24oY20p
IHsKLSAgICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybiBDb2RlTWlycm9y
LlBhc3M7Ci0gICAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgYXJvdW5kID0gY2hhcnNB
cm91bmQoY20sIGN1cik7Ci0gICAgICAgIGlmIChhcm91bmQgJiYgcGFpcnMuaW5kZXhPZihhcm91
bmQpICUgMiA9PSAwKQotICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgQ29kZU1pcnJvci5Q
b3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpLCBDb2RlTWlycm9yLlBvcyhjdXIubGluZSwgY3VyLmNo
ICsgMSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsK
KyAgICAgICAgaWYgKGNtLmdldE9wdGlvbigiZGlzYWJsZUlucHV0IikpIHJldHVybiBDb2RlTWly
cm9yLlBhc3M7CisgICAgICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpOworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
IGlmICghcmFuZ2VzW2ldLmVtcHR5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAgICAg
ICAgdmFyIGFyb3VuZCA9IGNoYXJzQXJvdW5kKGNtLCByYW5nZXNbaV0uaGVhZCk7CisgICAgICAg
ICAgaWYgKCFhcm91bmQgfHwgcGFpcnMuaW5kZXhPZihhcm91bmQpICUgMiAhPSAwKSByZXR1cm4g
Q29kZU1pcnJvci5QYXNzOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMu
bGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICB2YXIgY3VyID0gcmFuZ2VzW2ld
LmhlYWQ7CisgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCBQb3MoY3VyLmxpbmUsIGN1ci5j
aCAtIDEpLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpKTsKKyAgICAgICAgfQogICAgICAgfQog
ICAgIH07CiAgICAgdmFyIGNsb3NpbmdCcmFja2V0cyA9ICIiOwogICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcGFpcnMubGVuZ3RoOyBpICs9IDIpIChmdW5jdGlvbihsZWZ0LCByaWdodCkgewogICAg
ICAgaWYgKGxlZnQgIT0gcmlnaHQpIGNsb3NpbmdCcmFja2V0cyArPSByaWdodDsKLSAgICAgIGZ1
bmN0aW9uIHN1cnJvdW5kKGNtKSB7Ci0gICAgICAgIHZhciBzZWxlY3Rpb24gPSBjbS5nZXRTZWxl
Y3Rpb24oKTsKLSAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihsZWZ0ICsgc2VsZWN0aW9uICsg
cmlnaHQpOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gbWF5YmVPdmVyd3JpdGUoY20pIHsKLSAg
ICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBhaGVhZCA9IGNtLmdldFJhbmdlKGN1ciwg
Q29kZU1pcnJvci5Qb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpKTsKLSAgICAgICAgaWYgKGFoZWFk
ICE9IHJpZ2h0IHx8IGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybiBDb2RlTWlycm9yLlBh
c3M7Ci0gICAgICAgIGVsc2UgY20uZXhlY0NvbW1hbmQoImdvQ2hhclJpZ2h0Iik7Ci0gICAgICB9
CiAgICAgICBtYXBbIiciICsgbGVmdCArICInIl0gPSBmdW5jdGlvbihjbSkgewotICAgICAgICBp
ZiAobGVmdCA9PSAiJyIgJiYgY20uZ2V0VG9rZW5BdChjbS5nZXRDdXJzb3IoKSkudHlwZSA9PSAi
Y29tbWVudCIpCi0gICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKLSAgICAgICAgaWYg
KGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybiBzdXJyb3VuZChjbSk7Ci0gICAgICAgIGlm
IChsZWZ0ID09IHJpZ2h0ICYmIG1heWJlT3ZlcndyaXRlKGNtKSAhPSBDb2RlTWlycm9yLlBhc3Mp
IHJldHVybjsKLSAgICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBhaGVhZCA9IENvZGVN
aXJyb3IuUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKTsKLSAgICAgICAgdmFyIGxpbmUgPSBjbS5n
ZXRMaW5lKGN1ci5saW5lKSwgbmV4dENoYXIgPSBsaW5lLmNoYXJBdChjdXIuY2gpLCBjdXJDaGFy
ID0gY3VyLmNoID4gMCA/IGxpbmUuY2hhckF0KGN1ci5jaCAtIDEpIDogIiI7Ci0gICAgICAgIGlm
IChsZWZ0ID09IHJpZ2h0ICYmIENvZGVNaXJyb3IuaXNXb3JkQ2hhcihjdXJDaGFyKSkKLSAgICAg
ICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAgICBpZiAobGluZS5sZW5ndGggPT0g
Y3VyLmNoIHx8IGNsb3NpbmdCcmFja2V0cy5pbmRleE9mKG5leHRDaGFyKSA+PSAwIHx8IFNQQUNF
X0NIQVJfUkVHRVgudGVzdChuZXh0Q2hhcikpCi0gICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlv
bihsZWZ0ICsgcmlnaHQsIHtoZWFkOiBhaGVhZCwgYW5jaG9yOiBhaGVhZH0pOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgICAgaWYgKGNtLmdl
dE9wdGlvbigiZGlzYWJsZUlucHV0IikpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAgICAg
IHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCB0eXBlLCBuZXh0OworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHZhciBy
YW5nZSA9IHJhbmdlc1tpXSwgY3VyID0gcmFuZ2UuaGVhZCwgY3VyVHlwZTsKKyAgICAgICAgICBp
ZiAobGVmdCA9PSAiJyIgJiYgY20uZ2V0VG9rZW5UeXBlQXQoY3VyKSA9PSAiY29tbWVudCIpCisg
ICAgICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAgICAgICAgIHZhciBuZXh0ID0g
Y20uZ2V0UmFuZ2UoY3VyLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpKTsKKyAgICAgICAgICBp
ZiAoIXJhbmdlLmVtcHR5KCkpCisgICAgICAgICAgICBjdXJUeXBlID0gInN1cnJvdW5kIjsKKyAg
ICAgICAgICBlbHNlIGlmIChsZWZ0ID09IHJpZ2h0ICYmIG5leHQgPT0gcmlnaHQpIHsKKyAgICAg
ICAgICAgIGlmIChjbS5nZXRSYW5nZShjdXIsIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMykpID09
IGxlZnQgKyBsZWZ0ICsgbGVmdCkKKyAgICAgICAgICAgICAgY3VyVHlwZSA9ICJza2lwVGhyZWUi
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBjdXJUeXBlID0gInNraXAiOworICAg
ICAgICAgIH0gZWxzZSBpZiAobGVmdCA9PSByaWdodCAmJiBjdXIuY2ggPiAxICYmCisgICAgICAg
ICAgICAgICAgICAgICBjbS5nZXRSYW5nZShQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDIpLCBjdXIp
ID09IGxlZnQgKyBsZWZ0ICYmCisgICAgICAgICAgICAgICAgICAgICAoY3VyLmNoIDw9IDIgfHwg
Y20uZ2V0UmFuZ2UoUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAzKSwgUG9zKGN1ci5saW5lLCBjdXIu
Y2ggLSAyKSkgIT0gbGVmdCkpCisgICAgICAgICAgICBjdXJUeXBlID0gImFkZEZvdXIiOworICAg
ICAgICAgIGVsc2UgaWYgKGxlZnQgPT0gcmlnaHQgJiYgQ29kZU1pcnJvci5pc1dvcmRDaGFyKG5l
eHQpKQorICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgICAgICBlbHNl
IGlmIChjbS5nZXRMaW5lKGN1ci5saW5lKS5sZW5ndGggPT0gY3VyLmNoIHx8IGNsb3NpbmdCcmFj
a2V0cy5pbmRleE9mKG5leHQpID49IDAgfHwgU1BBQ0VfQ0hBUl9SRUdFWC50ZXN0KG5leHQpKQor
ICAgICAgICAgICAgY3VyVHlwZSA9ICJib3RoIjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAgICAgICAgIGlmICghdHlwZSkgdHlwZSA9IGN1
clR5cGU7CisgICAgICAgICAgZWxzZSBpZiAodHlwZSAhPSBjdXJUeXBlKSByZXR1cm4gQ29kZU1p
cnJvci5QYXNzOworICAgICAgICB9CisKKyAgICAgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkg
eworICAgICAgICAgIGlmICh0eXBlID09ICJza2lwIikgeworICAgICAgICAgICAgY20uZXhlY0Nv
bW1hbmQoImdvQ2hhclJpZ2h0Iik7CisgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICJza2lw
VGhyZWUiKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykKKyAgICAg
ICAgICAgICAgY20uZXhlY0NvbW1hbmQoImdvQ2hhclJpZ2h0Iik7CisgICAgICAgICAgfSBlbHNl
IGlmICh0eXBlID09ICJzdXJyb3VuZCIpIHsKKyAgICAgICAgICAgIHZhciBzZWxzID0gY20uZ2V0
U2VsZWN0aW9ucygpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxzLmxlbmd0
aDsgaSsrKQorICAgICAgICAgICAgICBzZWxzW2ldID0gbGVmdCArIHNlbHNbaV0gKyByaWdodDsK
KyAgICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNlbHMsICJhcm91bmQiKTsKKyAgICAg
ICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImJvdGgiKSB7CisgICAgICAgICAgICBjbS5yZXBsYWNl
U2VsZWN0aW9uKGxlZnQgKyByaWdodCwgbnVsbCk7CisgICAgICAgICAgICBjbS5leGVjQ29tbWFu
ZCgiZ29DaGFyTGVmdCIpOworICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiYWRkRm91ciIp
IHsKKyAgICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24obGVmdCArIGxlZnQgKyBsZWZ0ICsg
bGVmdCwgImJlZm9yZSIpOworICAgICAgICAgICAgY20uZXhlY0NvbW1hbmQoImdvQ2hhclJpZ2h0
Iik7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH07CisgICAgICBpZiAobGVmdCAh
PSByaWdodCkgbWFwWyInIiArIHJpZ2h0ICsgIiciXSA9IGZ1bmN0aW9uKGNtKSB7CisgICAgICAg
IHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHZhciByYW5nZSA9IHJhbmdl
c1tpXTsKKyAgICAgICAgICBpZiAoIXJhbmdlLmVtcHR5KCkgfHwKKyAgICAgICAgICAgICAgY20u
Z2V0UmFuZ2UocmFuZ2UuaGVhZCwgUG9zKHJhbmdlLmhlYWQubGluZSwgcmFuZ2UuaGVhZC5jaCAr
IDEpKSAhPSByaWdodCkKKyAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAg
ICAgIH0KKyAgICAgICAgY20uZXhlY0NvbW1hbmQoImdvQ2hhclJpZ2h0Iik7CiAgICAgICB9Owot
ICAgICAgaWYgKGxlZnQgIT0gcmlnaHQpIG1hcFsiJyIgKyByaWdodCArICInIl0gPSBtYXliZU92
ZXJ3cml0ZTsKICAgICB9KShwYWlycy5jaGFyQXQoaSksIHBhaXJzLmNoYXJBdChpICsgMSkpOwog
ICAgIHJldHVybiBtYXA7CiAgIH0KCiAgIGZ1bmN0aW9uIGJ1aWxkRXhwbG9kZUhhbmRsZXIocGFp
cnMpIHsKICAgICByZXR1cm4gZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciBjdXIgPSBjbS5nZXRD
dXJzb3IoKSwgYXJvdW5kID0gY2hhcnNBcm91bmQoY20sIGN1cik7Ci0gICAgICBpZiAoIWFyb3Vu
ZCB8fCBwYWlycy5pbmRleE9mKGFyb3VuZCkgJSAyICE9IDApIHJldHVybiBDb2RlTWlycm9yLlBh
c3M7CisgICAgICBpZiAoY20uZ2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiKSkgcmV0dXJuIENvZGVN
aXJyb3IuUGFzczsKKyAgICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpOworICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYg
KCFyYW5nZXNbaV0uZW1wdHkoKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgICAgdmFy
IGFyb3VuZCA9IGNoYXJzQXJvdW5kKGNtLCByYW5nZXNbaV0uaGVhZCk7CisgICAgICAgIGlmICgh
YXJvdW5kIHx8IHBhaXJzLmluZGV4T2YoYXJvdW5kKSAlIDIgIT0gMCkgcmV0dXJuIENvZGVNaXJy
b3IuUGFzczsKKyAgICAgIH0KICAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKLSAgICAg
ICAgdmFyIG5ld1BvcyA9IENvZGVNaXJyb3IuUG9zKGN1ci5saW5lICsgMSwgMCk7Ci0gICAgICAg
IGNtLnJlcGxhY2VTZWxlY3Rpb24oIlxuXG4iLCB7YW5jaG9yOiBuZXdQb3MsIGhlYWQ6IG5ld1Bv
c30sICIraW5wdXQiKTsKLSAgICAgICAgY20uaW5kZW50TGluZShjdXIubGluZSArIDEsIG51bGws
IHRydWUpOwotICAgICAgICBjbS5pbmRlbnRMaW5lKGN1ci5saW5lICsgMiwgbnVsbCwgdHJ1ZSk7
CisgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oIlxuXG4iLCBudWxsKTsKKyAgICAgICAgY20u
ZXhlY0NvbW1hbmQoImdvQ2hhckxlZnQiKTsKKyAgICAgICAgcmFuZ2VzID0gY20ubGlzdFNlbGVj
dGlvbnMoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICB2YXIgbGluZSA9IHJhbmdlc1tpXS5oZWFkLmxpbmU7CisgICAgICAgICAg
Y20uaW5kZW50TGluZShsaW5lLCBudWxsLCB0cnVlKTsKKyAgICAgICAgICBjbS5pbmRlbnRMaW5l
KGxpbmUgKyAxLCBudWxsLCB0cnVlKTsKKyAgICAgICAgfQogICAgICAgfSk7CiAgICAgfTsKICAg
fQotfSkoKTsKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5jc3MK
aW5kZXggMjNlYWY3NC4uMDk4YTMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nv
ZGVtaXJyb3IuY3NzCkBAIC0zNiwxMyArMzYsMTQgQEAKICAgbWluLXdpZHRoOiAyMHB4OwogICB0
ZXh0LWFsaWduOiByaWdodDsKICAgY29sb3I6ICM5OTk7CisgIC1tb3otYm94LXNpemluZzogY29u
dGVudC1ib3g7CisgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogfQoKIC8qIENVUlNPUiAqLwoK
IC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgIGJvcmRlci1sZWZ0OiAxcHgg
c29saWQgYmxhY2s7Ci0gIHotaW5kZXg6IDM7CiB9CiAvKiBTaG93biB3aGVuIG1vdmluZyBpbiBi
aS1kaXJlY3Rpb25hbCB0ZXh0ICovCiAuQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRh
cnljdXJzb3IgewpAQCAtNTIsMjQgKzUzLDI5IEBACiAgIHdpZHRoOiBhdXRvOwogICBib3JkZXI6
IDA7CiAgIGJhY2tncm91bmQ6ICM3ZTc7Ci0gIHotaW5kZXg6IDE7CiB9CiAvKiBDYW4gc3R5bGUg
Y3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLS5Db2Rl
TWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvci5Db2RlTWlycm9yLW92ZXJ3cml0ZSB7fQorZGl2
LkNvZGVNaXJyb3Itb3ZlcndyaXRlIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7fQoKIC5jbS10YWIg
eyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH0KCisuQ29kZU1pcnJvci1ydWxlciB7CisgIGJvcmRl
ci1sZWZ0OiAxcHggc29saWQgI2NjYzsKKyAgcG9zaXRpb246IGFic29sdXRlOworfQorCiAvKiBE
RUZBVUxUIFRIRU1FICovCgogLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7Y29sb3I6ICM3MDg7
fQogLmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7Y29sb3I6ICMyMTk7fQogLmNtLXMtZGVmYXVsdCAu
Y20tbnVtYmVyIHtjb2xvcjogIzE2NDt9CiAuY20tcy1kZWZhdWx0IC5jbS1kZWYge2NvbG9yOiAj
MDBmO30KLS5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlIHtjb2xvcjogYmxhY2s7fQorLmNtLXMt
ZGVmYXVsdCAuY20tdmFyaWFibGUsCisuY20tcy1kZWZhdWx0IC5jbS1wdW5jdHVhdGlvbiwKKy5j
bS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5LAorLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3Ige30K
IC5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjMDVhO30KIC5jbS1zLWRlZmF1
bHQgLmNtLXZhcmlhYmxlLTMge2NvbG9yOiAjMDg1O30KLS5jbS1zLWRlZmF1bHQgLmNtLXByb3Bl
cnR5IHtjb2xvcjogYmxhY2s7fQotLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3Ige2NvbG9yOiBi
bGFjazt9CiAuY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHtjb2xvcjogI2E1MDt9CiAuY20tcy1k
ZWZhdWx0IC5jbS1zdHJpbmcge2NvbG9yOiAjYTExO30KIC5jbS1zLWRlZmF1bHQgLmNtLXN0cmlu
Zy0yIHtjb2xvcjogI2Y1MDt9CkBAIC0xMTQsNyArMTIwLDcgQEAgZGl2LkNvZGVNaXJyb3Igc3Bh
bi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogICAvKiAzMHB4
IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3Jv
bGxiYXJzICovCiAgIC8qIFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAg
IG1hcmdpbi1ib3R0b206IC0zMHB4OyBtYXJnaW4tcmlnaHQ6IC0zMHB4OwotICBwYWRkaW5nLWJv
dHRvbTogMzBweDsgcGFkZGluZy1yaWdodDogMzBweDsKKyAgcGFkZGluZy1ib3R0b206IDMwcHg7
CiAgIGhlaWdodDogMTAwJTsKICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBm
cm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwogICBwb3NpdGlvbjogcmVsYXRpdmU7CkBA
IC0xMjMsNiArMTI5LDkgQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNo
aW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogfQogLkNvZGVNaXJyb3Itc2l6ZXIgewogICBwb3Np
dGlvbjogcmVsYXRpdmU7CisgIGJvcmRlci1yaWdodDogMzBweCBzb2xpZCB0cmFuc3BhcmVudDsK
KyAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgYm94LXNpemluZzogY29udGVudC1i
b3g7CiB9CgogLyogVGhlIGZha2UsIHZpc2libGUgc2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSBy
ZWRyYXcgZHVyaW5nIHNjcm9sbGluZwpAQCAtMTk3LDE2ICsyMDYsNyBAQCBkaXYuQ29kZU1pcnJv
ciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiAgIHdo
aXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgd29yZC1icmVhazogbm9ybWFsOwogfQotLkNvZGVNaXJy
b3ItY29kZSBwcmUgewotICBib3JkZXItcmlnaHQ6IDMwcHggc29saWQgdHJhbnNwYXJlbnQ7Ci0g
IHdpZHRoOiAtd2Via2l0LWZpdC1jb250ZW50OwotICB3aWR0aDogLW1vei1maXQtY29udGVudDsK
LSAgd2lkdGg6IGZpdC1jb250ZW50OwotfQotLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1j
b2RlIHByZSB7Ci0gIGJvcmRlci1yaWdodDogbm9uZTsKLSAgd2lkdGg6IGF1dG87Ci19CisKIC5D
b2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIHsKICAgcG9zaXRpb246IGFic29sdXRlOwogICBsZWZ0
OiAwOyByaWdodDogMDsgdG9wOiAwOyBib3R0b206IDA7CkBAIC0yMzYsMTYgKzIzNiwyMiBAQCBk
aXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjog
I2YyMjt9CgogLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgcG9zaXRpb246
IGFic29sdXRlOwotICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgIGJvcmRlci1yaWdodDogbm9uZTsK
ICAgd2lkdGg6IDA7CiB9Ci0uQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNv
ciB7CisKK2Rpdi5Db2RlTWlycm9yLWN1cnNvcnMgeworICB2aXNpYmlsaXR5OiBoaWRkZW47Cisg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgei1pbmRleDogMTsKK30KKy5Db2RlTWlycm9yLWZvY3Vz
ZWQgZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7CiAgIHZpc2liaWxpdHk6IHZpc2libGU7CiB9Cgog
LkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDlkOWQ5OyB9CiAuQ29kZU1pcnJv
ci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogI2Q3ZDRmMDsgfQor
LkNvZGVNaXJyb3ItY3Jvc3NoYWlyIHsgY3Vyc29yOiBjcm9zc2hhaXI7IH0KCiAuY20tc2VhcmNo
aW5nIHsKICAgYmFja2dyb3VuZDogI2ZmYTsKQEAgLTI1NSw5ICsyNjEsMTIgQEAgZGl2LkNvZGVN
aXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQog
LyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVybmluZyBmdW5ueSBvZmZzZXRUb3Bz
IG9uIHRoZSBzcGFucyAqLwogLkNvZGVNaXJyb3Igc3BhbiB7ICp2ZXJ0aWNhbC1hbGlnbjogdGV4
dC1ib3R0b207IH0KCisvKiBVc2VkIHRvIGZvcmNlIGEgYm9yZGVyIG1vZGVsIGZvciBhIG5vZGUg
Ki8KKy5jbS1mb3JjZS1ib3JkZXIgeyBwYWRkaW5nLXJpZ2h0OiAuMXB4OyB9CisKIEBtZWRpYSBw
cmludCB7CiAgIC8qIEhpZGUgdGhlIGN1cnNvciB3aGVuIHByaW50aW5nICovCi0gIC5Db2RlTWly
cm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CisgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9y
LWN1cnNvcnMgewogICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgfQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9j
b2RlbWlycm9yLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJu
YWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzCmluZGV4IDQ2MzczYmYuLjFhNzBjZDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3IvY29kZW1pcnJvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanMKQEAgLTEsMjMgKzEsMzYgQEAK
LS8vIENvZGVNaXJyb3IgaXMgdGhlIG9ubHkgZ2xvYmFsIHZhciB3ZSBjbGFpbQotd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CisvLyBUaGlzIGlzIENvZGVNaXJyb3IgKGh0dHA6Ly9j
b2RlbWlycm9yLm5ldCksIGEgY29kZSBlZGl0b3IKKy8vIGltcGxlbWVudGVkIGluIEphdmFTY3Jp
cHQgb24gdG9wIG9mIHRoZSBicm93c2VyJ3MgRE9NLgorLy8KKy8vIFlvdSBjYW4gZmluZCBzb21l
IHRlY2huaWNhbCBiYWNrZ3JvdW5kIGZvciBzb21lIG9mIHRoZSBjb2RlIGJlbG93CisvLyBhdCBo
dHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2Jsb2cvI2NtLWludGVybmFscyAuCisKKyhmdW5jdGlv
bihtb2QpIHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1
bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCisgICAgbW9kdWxlLmV4cG9ydHMgPSBtb2QoKTsK
KyAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8v
IEFNRAorICAgIHJldHVybiBkZWZpbmUoW10sIG1vZCk7CisgIGVsc2UgLy8gUGxhaW4gYnJvd3Nl
ciBlbnYKKyAgICB0aGlzLkNvZGVNaXJyb3IgPSBtb2QoKTsKK30pKGZ1bmN0aW9uKCkgewogICAi
dXNlIHN0cmljdCI7CgogICAvLyBCUk9XU0VSIFNOSUZGSU5HCgotICAvLyBDcnVkZSwgYnV0IG5l
Y2Vzc2FyeSB0byBoYW5kbGUgYSBudW1iZXIgb2YgaGFyZC10by1mZWF0dXJlLWRldGVjdAotICAv
LyBidWdzIGFuZCBiZWhhdmlvciBkaWZmZXJlbmNlcy4KKyAgLy8gS2x1ZGdlcyBmb3IgYnVncyBh
bmQgYmVoYXZpb3IgZGlmZmVyZW5jZXMgdGhhdCBjYW4ndCBiZSBmZWF0dXJlCisgIC8vIGRldGVj
dGVkIGFyZSBlbmFibGVkIGJhc2VkIG9uIHVzZXJBZ2VudCBldGMgc25pZmZpbmcuCisKICAgdmFy
IGdlY2tvID0gL2dlY2tvXC9cZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIC8vIElF
MTEgY3VycmVudGx5IGRvZXNuJ3QgY291bnQgYXMgJ2llJywgc2luY2UgaXQgaGFzIGFsbW9zdCBu
b25lIG9mCi0gIC8vIHRoZSBzYW1lIGJ1Z3MgYXMgZWFybGllciB2ZXJzaW9ucy4gVXNlIGllX2d0
MTAgdG8gaGFuZGxlCi0gIC8vIGluY29tcGF0aWJpbGl0aWVzIGluIHRoYXQgdmVyc2lvbi4KLSAg
dmFyIGllID0gL01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZhciBpZV9s
dDggPSBpZSAmJiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09IG51bGwgfHwgZG9jdW1lbnQuZG9j
dW1lbnRNb2RlIDwgOCk7Ci0gIHZhciBpZV9sdDkgPSBpZSAmJiAoZG9jdW1lbnQuZG9jdW1lbnRN
b2RlID09IG51bGwgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgOSk7Ci0gIHZhciBpZV9ndDEw
ID0gL1RyaWRlbnRcLyhbNy05XXxcZHsyLH0pXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7
CisgIC8vIGllX3VwdG9OIG1lYW5zIEludGVybmV0IEV4cGxvcmVyIHZlcnNpb24gTiBvciBsb3dl
cgorICB2YXIgaWVfdXB0bzEwID0gL01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7
CisgIHZhciBpZV91cHRvNyA9IGllX3VwdG8xMCAmJiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09
IG51bGwgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgOCk7CisgIHZhciBpZV91cHRvOCA9IGll
X3VwdG8xMCAmJiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09IG51bGwgfHwgZG9jdW1lbnQuZG9j
dW1lbnRNb2RlIDwgOSk7CisgIHZhciBpZV91cHRvOSA9IGllX3VwdG8xMCAmJiAoZG9jdW1lbnQu
ZG9jdW1lbnRNb2RlID09IG51bGwgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgMTApOworICB2
YXIgaWVfMTF1cCA9IC9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51
c2VyQWdlbnQpOworICB2YXIgaWUgPSBpZV91cHRvMTAgfHwgaWVfMTF1cDsKICAgdmFyIHdlYmtp
dCA9IC9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICAgdmFyIHF0d2Via2l0
ID0gd2Via2l0ICYmIC9RdFwvXGQrXC5cZCsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAg
IHZhciBjaHJvbWUgPSAvQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZh
ciBvcGVyYSA9IC9PcGVyYVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOworICB2YXIgcHJl
c3RvID0gL09wZXJhXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgIHZhciBzYWZhcmkg
PSAvQXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvcik7CiAgIHZhciBraHRtbCA9
IC9LSFRNTFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogICB2YXIgbWFjX2dlTGlvbiA9
IC9NYWMgT1MgWCAxXGRcRChbNy05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQp
OwpAQCAtMzAsMTUxICs0MywxODEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgIHZhciBtYWMgPSBpb3MgfHwgL01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pOwogICB2
YXIgd2luZG93cyA9IC93aW4vaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7CgotICB2YXIgb3Bl
cmFfdmVyc2lvbiA9IG9wZXJhICYmIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25c
LyhcZCpcLlxkKikvKTsKLSAgaWYgKG9wZXJhX3ZlcnNpb24pIG9wZXJhX3ZlcnNpb24gPSBOdW1i
ZXIob3BlcmFfdmVyc2lvblsxXSk7Ci0gIGlmIChvcGVyYV92ZXJzaW9uICYmIG9wZXJhX3ZlcnNp
b24gPj0gMTUpIHsgb3BlcmEgPSBmYWxzZTsgd2Via2l0ID0gdHJ1ZTsgfQorICB2YXIgcHJlc3Rv
X3ZlcnNpb24gPSBwcmVzdG8gJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwv
KFxkKlwuXGQqKS8pOworICBpZiAocHJlc3RvX3ZlcnNpb24pIHByZXN0b192ZXJzaW9uID0gTnVt
YmVyKHByZXN0b192ZXJzaW9uWzFdKTsKKyAgaWYgKHByZXN0b192ZXJzaW9uICYmIHByZXN0b192
ZXJzaW9uID49IDE1KSB7IHByZXN0byA9IGZhbHNlOyB3ZWJraXQgPSB0cnVlOyB9CiAgIC8vIFNv
bWUgYnJvd3NlcnMgdXNlIHRoZSB3cm9uZyBldmVudCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCBjbWQv
Y3RybCBvbiBPUyBYCi0gIHZhciBmbGlwQ3RybENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwgb3Bl
cmEgJiYgKG9wZXJhX3ZlcnNpb24gPT0gbnVsbCB8fCBvcGVyYV92ZXJzaW9uIDwgMTIuMTEpKTsK
LSAgdmFyIGNhcHR1cmVNaWRkbGVDbGljayA9IGdlY2tvIHx8IChpZSAmJiAhaWVfbHQ5KTsKKyAg
dmFyIGZsaXBDdHJsQ21kID0gbWFjICYmIChxdHdlYmtpdCB8fCBwcmVzdG8gJiYgKHByZXN0b192
ZXJzaW9uID09IG51bGwgfHwgcHJlc3RvX3ZlcnNpb24gPCAxMi4xMSkpOworICB2YXIgY2FwdHVy
ZVJpZ2h0Q2xpY2sgPSBnZWNrbyB8fCAoaWUgJiYgIWllX3VwdG84KTsKCi0gIC8vIE9wdGltaXpl
IHNvbWUgY29kZSB3aGVuIHRoZXNlIGZlYXR1cmVzIGFyZSBub3QgdXNlZAorICAvLyBPcHRpbWl6
ZSBzb21lIGNvZGUgd2hlbiB0aGVzZSBmZWF0dXJlcyBhcmUgbm90IHVzZWQuCiAgIHZhciBzYXdS
ZWFkT25seVNwYW5zID0gZmFsc2UsIHNhd0NvbGxhcHNlZFNwYW5zID0gZmFsc2U7CgotICAvLyBD
T05TVFJVQ1RPUgorICAvLyBFRElUT1IgQ09OU1RSVUNUT1IKKworICAvLyBBIENvZGVNaXJyb3Ig
aW5zdGFuY2UgcmVwcmVzZW50cyBhbiBlZGl0b3IuIFRoaXMgaXMgdGhlIG9iamVjdAorICAvLyB0
aGF0IHVzZXIgY29kZSBpcyB1c3VhbGx5IGRlYWxpbmcgd2l0aC4KCiAgIGZ1bmN0aW9uIENvZGVN
aXJyb3IocGxhY2UsIG9wdGlvbnMpIHsKICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29kZU1p
cnJvcikpIHJldHVybiBuZXcgQ29kZU1pcnJvcihwbGFjZSwgb3B0aW9ucyk7CgogICAgIHRoaXMu
b3B0aW9ucyA9IG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgIC8vIERldGVybWluZSBlZmZl
Y3RpdmUgb3B0aW9ucyBiYXNlZCBvbiBnaXZlbiB2YWx1ZXMgYW5kIGRlZmF1bHRzLgotICAgIGZv
ciAodmFyIG9wdCBpbiBkZWZhdWx0cykgaWYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkg
JiYgZGVmYXVsdHMuaGFzT3duUHJvcGVydHkob3B0KSkKLSAgICAgIG9wdGlvbnNbb3B0XSA9IGRl
ZmF1bHRzW29wdF07CisgICAgY29weU9iaihkZWZhdWx0cywgb3B0aW9ucywgZmFsc2UpOwogICAg
IHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhvcHRpb25zKTsKCi0gICAgdmFyIGRvY1N0YXJ0ID0g
dHlwZW9mIG9wdGlvbnMudmFsdWUgPT0gInN0cmluZyIgPyAwIDogb3B0aW9ucy52YWx1ZS5maXJz
dDsKLSAgICB2YXIgZGlzcGxheSA9IHRoaXMuZGlzcGxheSA9IG1ha2VEaXNwbGF5KHBsYWNlLCBk
b2NTdGFydCk7CisgICAgdmFyIGRvYyA9IG9wdGlvbnMudmFsdWU7CisgICAgaWYgKHR5cGVvZiBk
b2MgPT0gInN0cmluZyIpIGRvYyA9IG5ldyBEb2MoZG9jLCBvcHRpb25zLm1vZGUpOworICAgIHRo
aXMuZG9jID0gZG9jOworCisgICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXkgPSBuZXcgRGlz
cGxheShwbGFjZSwgZG9jKTsKICAgICBkaXNwbGF5LndyYXBwZXIuQ29kZU1pcnJvciA9IHRoaXM7
CiAgICAgdXBkYXRlR3V0dGVycyh0aGlzKTsKLSAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgJiYg
IW1vYmlsZSkgZm9jdXNJbnB1dCh0aGlzKTsKLQotICAgIHRoaXMuc3RhdGUgPSB7a2V5TWFwczog
W10sCi0gICAgICAgICAgICAgICAgICBvdmVybGF5czogW10sCi0gICAgICAgICAgICAgICAgICBt
b2RlR2VuOiAwLAotICAgICAgICAgICAgICAgICAgb3ZlcndyaXRlOiBmYWxzZSwgZm9jdXNlZDog
ZmFsc2UsCi0gICAgICAgICAgICAgICAgICBzdXBwcmVzc0VkaXRzOiBmYWxzZSwgcGFzdGVJbmNv
bWluZzogZmFsc2UsCi0gICAgICAgICAgICAgICAgICBkcmFnZ2luZ1RleHQ6IGZhbHNlLAotICAg
ICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiBuZXcgRGVsYXllZCgpfTsKLQogICAgIHRoZW1lQ2hh
bmdlZCh0aGlzKTsKICAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpCiAgICAgICB0aGlzLmRp
c3BsYXkud3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOworICAgIGlmIChv
cHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSBmb2N1c0lucHV0KHRoaXMpOwoKLSAgICB2YXIg
ZG9jID0gb3B0aW9ucy52YWx1ZTsKLSAgICBpZiAodHlwZW9mIGRvYyA9PSAic3RyaW5nIikgZG9j
ID0gbmV3IERvYyhvcHRpb25zLnZhbHVlLCBvcHRpb25zLm1vZGUpOwotICAgIG9wZXJhdGlvbih0
aGlzLCBhdHRhY2hEb2MpKHRoaXMsIGRvYyk7CisgICAgdGhpcy5zdGF0ZSA9IHsKKyAgICAgIGtl
eU1hcHM6IFtdLCAgLy8gc3RvcmVzIG1hcHMgYWRkZWQgYnkgYWRkS2V5TWFwCisgICAgICBvdmVy
bGF5czogW10sIC8vIGhpZ2hsaWdodGluZyBvdmVybGF5cywgYXMgYWRkZWQgYnkgYWRkT3Zlcmxh
eQorICAgICAgbW9kZUdlbjogMCwgICAvLyBidW1wZWQgd2hlbiBtb2RlL292ZXJsYXkgY2hhbmdl
cywgdXNlZCB0byBpbnZhbGlkYXRlIGhpZ2hsaWdodGluZyBpbmZvCisgICAgICBvdmVyd3JpdGU6
IGZhbHNlLCBmb2N1c2VkOiBmYWxzZSwKKyAgICAgIHN1cHByZXNzRWRpdHM6IGZhbHNlLCAvLyB1
c2VkIHRvIGRpc2FibGUgZWRpdGluZyBkdXJpbmcga2V5IGhhbmRsZXJzIHdoZW4gaW4gcmVhZE9u
bHkgbW9kZQorICAgICAgcGFzdGVJbmNvbWluZzogZmFsc2UsIGN1dEluY29taW5nOiBmYWxzZSwg
Ly8gaGVscCByZWNvZ25pemUgcGFzdGUvY3V0IGVkaXRzIGluIHJlYWRJbnB1dAorICAgICAgZHJh
Z2dpbmdUZXh0OiBmYWxzZSwKKyAgICAgIGhpZ2hsaWdodDogbmV3IERlbGF5ZWQoKSAvLyBzdG9y
ZXMgaGlnaGxpZ2h0IHdvcmtlciB0aW1lb3V0CisgICAgfTsKCiAgICAgLy8gT3ZlcnJpZGUgbWFn
aWMgdGV4dGFyZWEgY29udGVudCByZXN0b3JlIHRoYXQgSUUgc29tZXRpbWVzIGRvZXMKICAgICAv
LyBvbiBvdXIgaGlkZGVuIHRleHRhcmVhIG9uIHJlbG9hZAotICAgIGlmIChpZSkgc2V0VGltZW91
dChiaW5kKHJlc2V0SW5wdXQsIHRoaXMsIHRydWUpLCAyMCk7CisgICAgaWYgKGllX3VwdG8xMCkg
c2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQsIHRoaXMsIHRydWUpLCAyMCk7CgogICAgIHJlZ2lz
dGVyRXZlbnRIYW5kbGVycyh0aGlzKTsKLSAgICAvLyBJRSB0aHJvd3MgdW5zcGVjaWZpZWQgZXJy
b3IgaW4gY2VydGFpbiBjYXNlcywgd2hlbgotICAgIC8vIHRyeWluZyB0byBhY2Nlc3MgYWN0aXZl
RWxlbWVudCBiZWZvcmUgb25sb2FkCi0gICAgdmFyIGhhc0ZvY3VzOyB0cnkgeyBoYXNGb2N1cyA9
IChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGRpc3BsYXkuaW5wdXQpOyB9IGNhdGNoKGUpIHsg
fQotICAgIGlmIChoYXNGb2N1cyB8fCAob3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkpIHNl
dFRpbWVvdXQoYmluZChvbkZvY3VzLCB0aGlzKSwgMjApOwotICAgIGVsc2Ugb25CbHVyKHRoaXMp
OwoKLSAgICBvcGVyYXRpb24odGhpcywgZnVuY3Rpb24oKSB7Ci0gICAgICBmb3IgKHZhciBvcHQg
aW4gb3B0aW9uSGFuZGxlcnMpCi0gICAgICAgIGlmIChvcHRpb25IYW5kbGVycy5wcm9wZXJ0eUlz
RW51bWVyYWJsZShvcHQpKQotICAgICAgICAgIG9wdGlvbkhhbmRsZXJzW29wdF0odGhpcywgb3B0
aW9uc1tvcHRdLCBJbml0KTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdEhvb2tzLmxl
bmd0aDsgKytpKSBpbml0SG9va3NbaV0odGhpcyk7Ci0gICAgfSkoKTsKKyAgICB2YXIgY20gPSB0
aGlzOworICAgIHJ1bkluT3AodGhpcywgZnVuY3Rpb24oKSB7CisgICAgICBjbS5jdXJPcC5mb3Jj
ZVVwZGF0ZSA9IHRydWU7CisgICAgICBhdHRhY2hEb2MoY20sIGRvYyk7CisKKyAgICAgIGlmICgo
b3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkgfHwgYWN0aXZlRWx0KCkgPT0gZGlzcGxheS5p
bnB1dCkKKyAgICAgICAgc2V0VGltZW91dChiaW5kKG9uRm9jdXMsIGNtKSwgMjApOworICAgICAg
ZWxzZQorICAgICAgICBvbkJsdXIoY20pOworCisgICAgICBmb3IgKHZhciBvcHQgaW4gb3B0aW9u
SGFuZGxlcnMpIGlmIChvcHRpb25IYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShvcHQpKQorICAgICAg
ICBvcHRpb25IYW5kbGVyc1tvcHRdKGNtLCBvcHRpb25zW29wdF0sIEluaXQpOworICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBpbml0SG9va3MubGVuZ3RoOyArK2kpIGluaXRIb29rc1tpXShjbSk7
CisgICAgfSk7CiAgIH0KCiAgIC8vIERJU1BMQVkgQ09OU1RSVUNUT1IKCi0gIGZ1bmN0aW9uIG1h
a2VEaXNwbGF5KHBsYWNlLCBkb2NTdGFydCkgewotICAgIHZhciBkID0ge307CisgIC8vIFRoZSBk
aXNwbGF5IGhhbmRsZXMgdGhlIERPTSBpbnRlZ3JhdGlvbiwgYm90aCBmb3IgaW5wdXQgcmVhZGlu
ZworICAvLyBhbmQgY29udGVudCBkcmF3aW5nLiBJdCBob2xkcyByZWZlcmVuY2VzIHRvIERPTSBu
b2RlcyBhbmQKKyAgLy8gZGlzcGxheS1yZWxhdGVkIHN0YXRlLgoKLSAgICB2YXIgaW5wdXQgPSBk
LmlucHV0ID0gZWx0KCJ0ZXh0YXJlYSIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7
IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lOyBmb250
LXNpemU6IDRweDsiKTsKKyAgZnVuY3Rpb24gRGlzcGxheShwbGFjZSwgZG9jKSB7CisgICAgdmFy
IGQgPSB0aGlzOworCisgICAgLy8gVGhlIHNlbWloaWRkZW4gdGV4dGFyZWEgdGhhdCBpcyBmb2N1
c2VkIHdoZW4gdGhlIGVkaXRvciBpcworICAgIC8vIGZvY3VzZWQsIGFuZCByZWNlaXZlcyBpbnB1
dC4KKyAgICB2YXIgaW5wdXQgPSBkLmlucHV0ID0gZWx0KCJ0ZXh0YXJlYSIsIG51bGwsIG51bGws
ICJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVt
OyBvdXRsaW5lOiBub25lIik7CisgICAgLy8gVGhlIHRleHRhcmVhIGlzIGtlcHQgcG9zaXRpb25l
ZCBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCB0aGUKKyAgICAvLyBmYWN0IHRoYXQgaXQnbGwg
YmUgc2Nyb2xsZWQgaW50byB2aWV3IG9uIGlucHV0IGZyb20gc2Nyb2xsaW5nCisgICAgLy8gb3Vy
IGZha2UgY3Vyc29yIG91dCBvZiB2aWV3LiBPbiB3ZWJraXQsIHdoZW4gd3JhcD1vZmYsIHBhc3Rl
IGlzCisgICAgLy8gdmVyeSBzbG93LiBTbyBtYWtlIHRoZSBhcmVhIHdpZGUgaW5zdGVhZC4KICAg
ICBpZiAod2Via2l0KSBpbnB1dC5zdHlsZS53aWR0aCA9ICIxMDAwcHgiOwogICAgIGVsc2UgaW5w
dXQuc2V0QXR0cmlidXRlKCJ3cmFwIiwgIm9mZiIpOwotICAgIC8vIGlmIGJvcmRlcjogMDsgLS0g
aU9TIGZhaWxzIHRvIG9wZW4ga2V5Ym9hcmQgKGlzc3VlICMxMjg3KQorICAgIC8vIElmIGJvcmRl
cjogMDsgLS0gaU9TIGZhaWxzIHRvIG9wZW4ga2V5Ym9hcmQgKGlzc3VlICMxMjg3KQogICAgIGlm
IChpb3MpIGlucHV0LnN0eWxlLmJvcmRlciA9ICIxcHggc29saWQgYmxhY2siOwogICAgIGlucHV0
LnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgi
YXV0b2NhcGl0YWxpemUiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgic3BlbGxjaGVjayIs
ICJmYWxzZSIpOwoKICAgICAvLyBXcmFwcyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWEKICAgICBk
LmlucHV0RGl2ID0gZWx0KCJkaXYiLCBbaW5wdXRdLCBudWxsLCAib3ZlcmZsb3c6IGhpZGRlbjsg
cG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6IDBweDsiKTsKLSAgICAvLyBU
aGUgYWN0dWFsIGZha2Ugc2Nyb2xsYmFycy4KLSAgICBkLnNjcm9sbGJhckggPSBlbHQoImRpdiIs
IFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJoZWlnaHQ6IDFweCIpXSwgIkNvZGVNaXJyb3ItaHNj
cm9sbGJhciIpOwotICAgIGQuc2Nyb2xsYmFyViA9IGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbnVs
bCwgbnVsbCwgIndpZHRoOiAxcHgiKV0sICJDb2RlTWlycm9yLXZzY3JvbGxiYXIiKTsKKyAgICAv
LyBUaGUgZmFrZSBzY3JvbGxiYXIgZWxlbWVudHMuCisgICAgZC5zY3JvbGxiYXJIID0gZWx0KCJk
aXYiLCBbZWx0KCJkaXYiLCBudWxsLCBudWxsLCAiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAx
cHgiKV0sICJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKTsKKyAgICBkLnNjcm9sbGJhclYgPSBlbHQo
ImRpdiIsIFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJtaW4td2lkdGg6IDFweCIpXSwgIkNvZGVN
aXJyb3ItdnNjcm9sbGJhciIpOworICAgIC8vIENvdmVycyBib3R0b20tcmlnaHQgc3F1YXJlIHdo
ZW4gYm90aCBzY3JvbGxiYXJzIGFyZSBwcmVzZW50LgogICAgIGQuc2Nyb2xsYmFyRmlsbGVyID0g
ZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIik7CisgICAgLy8g
Q292ZXJzIGJvdHRvbSBvZiBndXR0ZXIgd2hlbiBjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciBp
cyBvbgorICAgIC8vIGFuZCBoIHNjcm9sbGJhciBpcyBwcmVzZW50LgogICAgIGQuZ3V0dGVyRmls
bGVyID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIik7Ci0gICAg
Ly8gRElWcyBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBhY3R1YWwgY29kZQorICAg
IC8vIFdpbGwgY29udGFpbiB0aGUgYWN0dWFsIGNvZGUsIHBvc2l0aW9uZWQgdG8gY292ZXIgdGhl
IHZpZXdwb3J0LgogICAgIGQubGluZURpdiA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3It
Y29kZSIpOworICAgIC8vIEVsZW1lbnRzIGFyZSBhZGRlZCB0byB0aGVzZSB0byByZXByZXNlbnQg
c2VsZWN0aW9uIGFuZCBjdXJzb3JzLgogICAgIGQuc2VsZWN0aW9uRGl2ID0gZWx0KCJkaXYiLCBu
dWxsLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxIik7Ci0gICAgLy8gQmxp
bmt5IGN1cnNvciwgYW5kIGVsZW1lbnQgdXNlZCB0byBlbnN1cmUgY3Vyc29yIGZpdHMgYXQgdGhl
IGVuZCBvZiBhIGxpbmUKLSAgICBkLmN1cnNvciA9IGVsdCgiZGl2IiwgIlx1MDBhMCIsICJDb2Rl
TWlycm9yLWN1cnNvciIpOwotICAgIC8vIFNlY29uZGFyeSBjdXJzb3IsIHNob3duIHdoZW4gb24g
YSAnanVtcCcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dAotICAgIGQub3RoZXJDdXJzb3IgPSBlbHQo
ImRpdiIsICJcdTAwYTAiLCAiQ29kZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnlj
dXJzb3IiKTsKLSAgICAvLyBVc2VkIHRvIG1lYXN1cmUgdGV4dCBzaXplCisgICAgZC5jdXJzb3JE
aXYgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWN1cnNvcnMiKTsKKyAgICAvLyBBIHZp
c2liaWxpdHk6IGhpZGRlbiBlbGVtZW50IHVzZWQgdG8gZmluZCB0aGUgc2l6ZSBvZiB0aGluZ3Mu
CiAgICAgZC5tZWFzdXJlID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1tZWFzdXJlIik7
CisgICAgLy8gV2hlbiBsaW5lcyBvdXRzaWRlIG9mIHRoZSB2aWV3cG9ydCBhcmUgbWVhc3VyZWQs
IHRoZXkgYXJlIGRyYXduIGluIHRoaXMuCisgICAgZC5saW5lTWVhc3VyZSA9IGVsdCgiZGl2Iiwg
bnVsbCwgIkNvZGVNaXJyb3ItbWVhc3VyZSIpOwogICAgIC8vIFdyYXBzIGV2ZXJ5dGhpbmcgdGhh
dCBuZWVkcyB0byBleGlzdCBpbnNpZGUgdGhlIHZlcnRpY2FsbHktcGFkZGVkIGNvb3JkaW5hdGUg
c3lzdGVtCi0gICAgZC5saW5lU3BhY2UgPSBlbHQoImRpdiIsIFtkLm1lYXN1cmUsIGQuc2VsZWN0
aW9uRGl2LCBkLmxpbmVEaXYsIGQuY3Vyc29yLCBkLm90aGVyQ3Vyc29yXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyBvdXRsaW5lOiBub25lIik7
Ci0gICAgLy8gTW92ZWQgYXJvdW5kIGl0cyBwYXJlbnQgdG8gY292ZXIgdmlzaWJsZSB2aWV3Cisg
ICAgZC5saW5lU3BhY2UgPSBlbHQoImRpdiIsIFtkLm1lYXN1cmUsIGQubGluZU1lYXN1cmUsIGQu
c2VsZWN0aW9uRGl2LCBkLmN1cnNvckRpdiwgZC5saW5lRGl2XSwKKyAgICAgICAgICAgICAgICAg
ICAgICBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyBvdXRsaW5lOiBub25lIik7CisgICAgLy8g
TW92ZWQgYXJvdW5kIGl0cyBwYXJlbnQgdG8gY292ZXIgdmlzaWJsZSB2aWV3LgogICAgIGQubW92
ZXIgPSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIFtkLmxpbmVTcGFjZV0sICJDb2RlTWlycm9yLWxp
bmVzIildLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlIik7Ci0gICAgLy8gU2V0IHRvIHRoZSBo
ZWlnaHQgb2YgdGhlIHRleHQsIGNhdXNlcyBzY3JvbGxpbmcKKyAgICAvLyBTZXQgdG8gdGhlIGhl
aWdodCBvZiB0aGUgZG9jdW1lbnQsIGFsbG93aW5nIHNjcm9sbGluZy4KICAgICBkLnNpemVyID0g
ZWx0KCJkaXYiLCBbZC5tb3Zlcl0sICJDb2RlTWlycm9yLXNpemVyIik7Ci0gICAgLy8gRCBpcyBu
ZWVkZWQgYmVjYXVzZSBiZWhhdmlvciBvZiBlbHRzIHdpdGggb3ZlcmZsb3c6IGF1dG8gYW5kIHBh
ZGRpbmcgaXMgaW5jb25zaXN0ZW50IGFjcm9zcyBicm93c2VycworICAgIC8vIEJlaGF2aW9yIG9m
IGVsdHMgd2l0aCBvdmVyZmxvdzogYXV0byBhbmQgcGFkZGluZyBpcworICAgIC8vIGluY29uc2lz
dGVudCBhY3Jvc3MgYnJvd3NlcnMuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhlCisgICAgLy8g
c2Nyb2xsYWJsZSBhcmVhIGlzIGJpZyBlbm91Z2guCiAgICAgZC5oZWlnaHRGb3JjZXIgPSBlbHQo
ImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIiArIHNjcm9s
bGVyQ3V0T2ZmICsgInB4OyB3aWR0aDogMXB4OyIpOwotICAgIC8vIFdpbGwgY29udGFpbiB0aGUg
Z3V0dGVycywgaWYgYW55CisgICAgLy8gV2lsbCBjb250YWluIHRoZSBndXR0ZXJzLCBpZiBhbnku
CiAgICAgZC5ndXR0ZXJzID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXJzIik7
CiAgICAgZC5saW5lR3V0dGVyID0gbnVsbDsKLSAgICAvLyBQcm92aWRlcyBzY3JvbGxpbmcKKyAg
ICAvLyBBY3R1YWwgc2Nyb2xsYWJsZSBlbGVtZW50LgogICAgIGQuc2Nyb2xsZXIgPSBlbHQoImRp
diIsIFtkLnNpemVyLCBkLmhlaWdodEZvcmNlciwgZC5ndXR0ZXJzXSwgIkNvZGVNaXJyb3Itc2Ny
b2xsIik7CiAgICAgZC5zY3JvbGxlci5zZXRBdHRyaWJ1dGUoInRhYkluZGV4IiwgIi0xIik7CiAg
ICAgLy8gVGhlIGVsZW1lbnQgaW4gd2hpY2ggdGhlIGVkaXRvciBsaXZlcy4KICAgICBkLndyYXBw
ZXIgPSBlbHQoImRpdiIsIFtkLmlucHV0RGl2LCBkLnNjcm9sbGJhckgsIGQuc2Nyb2xsYmFyViwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNjcm9sbGJhckZpbGxlciwgZC5ndXR0ZXJG
aWxsZXIsIGQuc2Nyb2xsZXJdLCAiQ29kZU1pcnJvciIpOwotICAgIC8vIFdvcmsgYXJvdW5kIElF
NyB6LWluZGV4IGJ1ZwotICAgIGlmIChpZV9sdDgpIHsgZC5ndXR0ZXJzLnN0eWxlLnpJbmRleCA9
IC0xOyBkLnNjcm9sbGVyLnN0eWxlLnBhZGRpbmdSaWdodCA9IDA7IH0KLSAgICBpZiAocGxhY2Uu
YXBwZW5kQ2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKGQud3JhcHBlcik7IGVsc2UgcGxhY2UoZC53
cmFwcGVyKTsKCisgICAgLy8gV29yayBhcm91bmQgSUU3IHotaW5kZXggYnVnIChub3QgcGVyZmVj
dCwgaGVuY2UgSUU3IG5vdCByZWFsbHkgYmVpbmcgc3VwcG9ydGVkKQorICAgIGlmIChpZV91cHRv
NykgeyBkLmd1dHRlcnMuc3R5bGUuekluZGV4ID0gLTE7IGQuc2Nyb2xsZXIuc3R5bGUucGFkZGlu
Z1JpZ2h0ID0gMDsgfQogICAgIC8vIE5lZWRlZCB0byBoaWRlIGJpZyBibHVlIGJsaW5raW5nIGN1
cnNvciBvbiBNb2JpbGUgU2FmYXJpCiAgICAgaWYgKGlvcykgaW5wdXQuc3R5bGUud2lkdGggPSAi
MHB4IjsKICAgICBpZiAoIXdlYmtpdCkgZC5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOwogICAg
IC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAogICAgIGlmIChraHRtbCkgeyBk
LmlucHV0RGl2LnN0eWxlLmhlaWdodCA9ICIxcHgiOyBkLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9u
ID0gImFic29sdXRlIjsgfQogICAgIC8vIE5lZWQgdG8gc2V0IGEgbWluaW11bSB3aWR0aCB0byBz
ZWUgdGhlIHNjcm9sbGJhciBvbiBJRTcgKGJ1dCBtdXN0IG5vdCBzZXQgaXQgb24gSUU4KS4KLSAg
ICBlbHNlIGlmIChpZV9sdDgpIGQuc2Nyb2xsYmFySC5zdHlsZS5taW5XaWR0aCA9IGQuc2Nyb2xs
YmFyVi5zdHlsZS5taW5XaWR0aCA9ICIxOHB4IjsKLQotICAgIC8vIEN1cnJlbnQgdmlzaWJsZSBy
YW5nZSAobWF5IGJlIGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuCi0gICAgZC52aWV3T2Zm
c2V0ID0gZC5sYXN0U2l6ZUMgPSAwOwotICAgIGQuc2hvd2luZ0Zyb20gPSBkLnNob3dpbmdUbyA9
IGRvY1N0YXJ0OworICAgIGlmIChpZV91cHRvNykgZC5zY3JvbGxiYXJILnN0eWxlLm1pbkhlaWdo
dCA9IGQuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aCA9ICIxOHB4IjsKKworICAgIGlmIChwbGFj
ZS5hcHBlbmRDaGlsZCkgcGxhY2UuYXBwZW5kQ2hpbGQoZC53cmFwcGVyKTsKKyAgICBlbHNlIHBs
YWNlKGQud3JhcHBlcik7CisKKyAgICAvLyBDdXJyZW50IHJlbmRlcmVkIHJhbmdlIChtYXkgYmUg
YmlnZ2VyIHRoYW4gdGhlIHZpZXcgd2luZG93KS4KKyAgICBkLnZpZXdGcm9tID0gZC52aWV3VG8g
PSBkb2MuZmlyc3Q7CisgICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlbmRlcmVkIGxpbmVz
LgorICAgIGQudmlldyA9IFtdOworICAgIC8vIEhvbGRzIGluZm8gYWJvdXQgYSBzaW5nbGUgcmVu
ZGVyZWQgbGluZSB3aGVuIGl0IHdhcyByZW5kZXJlZAorICAgIC8vIGZvciBtZWFzdXJlbWVudCwg
d2hpbGUgbm90IGluIHZpZXcuCisgICAgZC5leHRlcm5hbE1lYXN1cmVkID0gbnVsbDsKKyAgICAv
LyBFbXB0eSBzcGFjZSAoaW4gcGl4ZWxzKSBhYm92ZSB0aGUgdmlldworICAgIGQudmlld09mZnNl
dCA9IDA7CisgICAgZC5sYXN0U2l6ZUMgPSAwOworICAgIGQudXBkYXRlTGluZU51bWJlcnMgPSBu
dWxsOwoKICAgICAvLyBVc2VkIHRvIG9ubHkgcmVzaXplIHRoZSBsaW5lIG51bWJlciBndXR0ZXIg
d2hlbiBuZWNlc3NhcnkgKHdoZW4KICAgICAvLyB0aGUgYW1vdW50IG9mIGxpbmVzIGNyb3NzZXMg
YSBib3VuZGFyeSB0aGF0IG1ha2VzIGl0cyB3aWR0aCBjaGFuZ2UpCiAgICAgZC5saW5lTnVtV2lk
dGggPSBkLmxpbmVOdW1Jbm5lcldpZHRoID0gZC5saW5lTnVtQ2hhcnMgPSBudWxsOwogICAgIC8v
IFNlZSByZWFkSW5wdXQgYW5kIHJlc2V0SW5wdXQKICAgICBkLnByZXZJbnB1dCA9ICIiOwotICAg
IC8vIFNldCB0byB0cnVlIHdoZW4gYSBub24taG9yaXpvbnRhbC1zY3JvbGxpbmcgd2lkZ2V0IGlz
IGFkZGVkLiBBcwotICAgIC8vIGFuIG9wdGltaXphdGlvbiwgd2lkZ2V0IGFsaWduaW5nIGlzIHNr
aXBwZWQgd2hlbiBkIGlzIGZhbHNlLgorICAgIC8vIFNldCB0byB0cnVlIHdoZW4gYSBub24taG9y
aXpvbnRhbC1zY3JvbGxpbmcgbGluZSB3aWRnZXQgaXMKKyAgICAvLyBhZGRlZC4gQXMgYW4gb3B0
aW1pemF0aW9uLCBsaW5lIHdpZGdldCBhbGlnbmluZyBpcyBza2lwcGVkIHdoZW4KKyAgICAvLyB0
aGlzIGlzIGZhbHNlLgogICAgIGQuYWxpZ25XaWRnZXRzID0gZmFsc2U7Ci0gICAgLy8gRmxhZyB0
aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGN1cnJlbnRseSBleHBlY3QgaW5wdXQgdG8gYXBwZWFy
Ci0gICAgLy8gKGFmdGVyIHNvbWUgZXZlbnQgbGlrZSAna2V5cHJlc3MnIG9yICdpbnB1dCcpIGFu
ZCBhcmUgcG9sbGluZwotICAgIC8vIGludGVuc2l2ZWx5LgorICAgIC8vIEZsYWcgdGhhdCBpbmRp
Y2F0ZXMgd2hldGhlciB3ZSBleHBlY3QgaW5wdXQgdG8gYXBwZWFyIHJlYWwgc29vbgorICAgIC8v
IG5vdyAoYWZ0ZXIgc29tZSBldmVudCBsaWtlICdrZXlwcmVzcycgb3IgJ2lucHV0JykgYW5kIGFy
ZQorICAgIC8vIHBvbGxpbmcgaW50ZW5zaXZlbHkuCiAgICAgZC5wb2xsaW5nRmFzdCA9IGZhbHNl
OwogICAgIC8vIFNlbGYtcmVzZXR0aW5nIHRpbWVvdXQgZm9yIHRoZSBwb2xsZXIKICAgICBkLnBv
bGwgPSBuZXcgRGVsYXllZCgpOwoKLSAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4
dEhlaWdodCA9IG51bGw7Ci0gICAgZC5tZWFzdXJlTGluZUNhY2hlID0gW107Ci0gICAgZC5tZWFz
dXJlTGluZUNhY2hlUG9zID0gMDsKKyAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4
dEhlaWdodCA9IGQuY2FjaGVkUGFkZGluZ0ggPSBudWxsOwoKICAgICAvLyBUcmFja3Mgd2hlbiBy
ZXNldElucHV0IGhhcyBwdW50ZWQgdG8ganVzdCBwdXR0aW5nIGEgc2hvcnQKLSAgICAvLyBzdHJp
bmcgaW5zdGVhZCBvZiB0aGUgKGxhcmdlKSBzZWxlY3Rpb24uCisgICAgLy8gc3RyaW5nIGludG8g
dGhlIHRleHRhcmVhIGluc3RlYWQgb2YgdGhlIGZ1bGwgc2VsZWN0aW9uLgogICAgIGQuaW5hY2N1
cmF0ZVNlbGVjdGlvbiA9IGZhbHNlOwoKICAgICAvLyBUcmFja3MgdGhlIG1heGltdW0gbGluZSBs
ZW5ndGggc28gdGhhdCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIKQEAgLTE4Niw3ICsyMjksOCBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAvLyBVc2VkIGZvciBtZWFz
dXJpbmcgd2hlZWwgc2Nyb2xsaW5nIGdyYW51bGFyaXR5CiAgICAgZC53aGVlbERYID0gZC53aGVl
bERZID0gZC53aGVlbFN0YXJ0WCA9IGQud2hlZWxTdGFydFkgPSBudWxsOwoKLSAgICByZXR1cm4g
ZDsKKyAgICAvLyBUcnVlIHdoZW4gc2hpZnQgaXMgaGVsZCBkb3duLgorICAgIGQuc2hpZnQgPSBm
YWxzZTsKICAgfQoKICAgLy8gU1RBVEUgVVBEQVRFUwpAQCAtMTk1LDYgKzIzOSwxMCBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKCiAgIGZ1bmN0aW9uIGxvYWRNb2RlKGNtKSB7
CiAgICAgY20uZG9jLm1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY20ub3B0aW9ucywgY20uZG9j
Lm1vZGVPcHRpb24pOworICAgIHJlc2V0TW9kZVN0YXRlKGNtKTsKKyAgfQorCisgIGZ1bmN0aW9u
IHJlc2V0TW9kZVN0YXRlKGNtKSB7CiAgICAgY20uZG9jLml0ZXIoZnVuY3Rpb24obGluZSkgewog
ICAgICAgaWYgKGxpbmUuc3RhdGVBZnRlcikgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsKICAgICAg
IGlmIChsaW5lLnN0eWxlcykgbGluZS5zdHlsZXMgPSBudWxsOwpAQCAtMjA3LDExICsyNTUsMTEg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CgogICBmdW5jdGlvbiB3cmFwcGlu
Z0NoYW5nZWQoY20pIHsKICAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAg
IGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOworICAg
ICAgYWRkQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCAiQ29kZU1pcnJvci13cmFwIik7CiAgICAg
ICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gIiI7CiAgICAgfSBlbHNlIHsKLSAg
ICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgPSBjbS5kaXNwbGF5LndyYXBwZXIuY2xh
c3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCAiIik7Ci0gICAgICBjb21wdXRlTWF4
TGVuZ3RoKGNtKTsKKyAgICAgIHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCAiQ29kZU1pcnJv
ci13cmFwIik7CisgICAgICBmaW5kTWF4TGluZShjbSk7CiAgICAgfQogICAgIGVzdGltYXRlTGlu
ZUhlaWdodHMoY20pOwogICAgIHJlZ0NoYW5nZShjbSk7CkBAIC0yMTksMTYgKzI2NywyNCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCl7dXBkYXRlU2Nyb2xsYmFycyhjbSk7fSwgMTAwKTsKICAgfQoKKyAgLy8gUmV0dXJucyBhIGZ1
bmN0aW9uIHRoYXQgZXN0aW1hdGVzIHRoZSBoZWlnaHQgb2YgYSBsaW5lLCB0byB1c2UgYXMKKyAg
Ly8gZmlyc3QgYXBwcm94aW1hdGlvbiB1bnRpbCB0aGUgbGluZSBiZWNvbWVzIHZpc2libGUgKGFu
ZCBpcyB0aHVzCisgIC8vIHByb3Blcmx5IG1lYXN1cmFibGUpLgogICBmdW5jdGlvbiBlc3RpbWF0
ZUhlaWdodChjbSkgewogICAgIHZhciB0aCA9IHRleHRIZWlnaHQoY20uZGlzcGxheSksIHdyYXBw
aW5nID0gY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7CiAgICAgdmFyIHBlckxpbmUgPSB3cmFwcGlu
ZyAmJiBNYXRoLm1heCg1LCBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoIC8gY2hhcldp
ZHRoKGNtLmRpc3BsYXkpIC0gMyk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAg
IGlmIChsaW5lSXNIaWRkZW4oY20uZG9jLCBsaW5lKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICBlbHNlIGlmICh3cmFwcGluZykKLSAgICAgICAgcmV0dXJuIChNYXRoLmNlaWwobGluZS50ZXh0
Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDEpICogdGg7CisgICAgICBpZiAobGluZUlzSGlkZGVuKGNt
LmRvYywgbGluZSkpIHJldHVybiAwOworCisgICAgICB2YXIgd2lkZ2V0c0hlaWdodCA9IDA7Cisg
ICAgICBpZiAobGluZS53aWRnZXRzKSBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5s
ZW5ndGg7IGkrKykgeworICAgICAgICBpZiAobGluZS53aWRnZXRzW2ldLmhlaWdodCkgd2lkZ2V0
c0hlaWdodCArPSBsaW5lLndpZGdldHNbaV0uaGVpZ2h0OworICAgICAgfQorCisgICAgICBpZiAo
d3JhcHBpbmcpCisgICAgICAgIHJldHVybiB3aWRnZXRzSGVpZ2h0ICsgKE1hdGguY2VpbChsaW5l
LnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMSkgKiB0aDsKICAgICAgIGVsc2UKLSAgICAgICAg
cmV0dXJuIHRoOworICAgICAgICByZXR1cm4gd2lkZ2V0c0hlaWdodCArIHRoOwogICAgIH07CiAg
IH0KCkBAIC0yNDQsNyArMzAwLDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgdmFyIG1hcCA9IGtleU1hcFtjbS5vcHRpb25zLmtleU1hcF0sIHN0eWxlID0gbWFwLnN0
eWxlOwogICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgPSBjbS5kaXNwbGF5LndyYXBw
ZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLWtleW1hcC1cUysvZywgIiIpICsKICAgICAgIChz
dHlsZSA/ICIgY20ta2V5bWFwLSIgKyBzdHlsZSA6ICIiKTsKLSAgICBjbS5zdGF0ZS5kaXNhYmxl
SW5wdXQgPSBtYXAuZGlzYWJsZUlucHV0OwogICB9CgogICBmdW5jdGlvbiB0aGVtZUNoYW5nZWQo
Y20pIHsKQEAgLTI1OSw2ICszMTQsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YWxpZ25Ib3Jpem9udGFsbHkoY20pO30sIDIw
KTsKICAgfQoKKyAgLy8gUmVidWlsZCB0aGUgZ3V0dGVyIGVsZW1lbnRzLCBlbnN1cmUgdGhlIG1h
cmdpbiB0byB0aGUgbGVmdCBvZiB0aGUKKyAgLy8gY29kZSBtYXRjaGVzIHRoZWlyIHdpZHRoLgog
ICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXJzKGNtKSB7CiAgICAgdmFyIGd1dHRlcnMgPSBjbS5kaXNw
bGF5Lmd1dHRlcnMsIHNwZWNzID0gY20ub3B0aW9ucy5ndXR0ZXJzOwogICAgIHJlbW92ZUNoaWxk
cmVuKGd1dHRlcnMpOwpAQCAtMjcxLDMzICszMjgsNDQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICB9CiAgICAgfQogICAgIGd1dHRlcnMuc3R5bGUuZGlzcGxheSA9
IGkgPyAiIiA6ICJub25lIjsKKyAgICB1cGRhdGVHdXR0ZXJTcGFjZShjbSk7CisgIH0KKworICBm
dW5jdGlvbiB1cGRhdGVHdXR0ZXJTcGFjZShjbSkgeworICAgIHZhciB3aWR0aCA9IGNtLmRpc3Bs
YXkuZ3V0dGVycy5vZmZzZXRXaWR0aDsKKyAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdp
bkxlZnQgPSB3aWR0aCArICJweCI7CisgICAgY20uZGlzcGxheS5zY3JvbGxiYXJILnN0eWxlLmxl
ZnQgPSBjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8gd2lkdGggKyAicHgiIDogMDsKICAgfQoKLSAg
ZnVuY3Rpb24gbGluZUxlbmd0aChkb2MsIGxpbmUpIHsKKyAgLy8gQ29tcHV0ZSB0aGUgY2hhcmFj
dGVyIGxlbmd0aCBvZiBhIGxpbmUsIHRha2luZyBpbnRvIGFjY291bnQKKyAgLy8gY29sbGFwc2Vk
IHJhbmdlcyAoc2VlIG1hcmtUZXh0KSB0aGF0IG1pZ2h0IGhpZGUgcGFydHMsIGFuZCBqb2luCisg
IC8vIG90aGVyIGxpbmVzIG9udG8gaXQuCisgIGZ1bmN0aW9uIGxpbmVMZW5ndGgobGluZSkgewog
ICAgIGlmIChsaW5lLmhlaWdodCA9PSAwKSByZXR1cm4gMDsKICAgICB2YXIgbGVuID0gbGluZS50
ZXh0Lmxlbmd0aCwgbWVyZ2VkLCBjdXIgPSBsaW5lOwogICAgIHdoaWxlIChtZXJnZWQgPSBjb2xs
YXBzZWRTcGFuQXRTdGFydChjdXIpKSB7Ci0gICAgICB2YXIgZm91bmQgPSBtZXJnZWQuZmluZCgp
OwotICAgICAgY3VyID0gZ2V0TGluZShkb2MsIGZvdW5kLmZyb20ubGluZSk7CisgICAgICB2YXIg
Zm91bmQgPSBtZXJnZWQuZmluZCgwLCB0cnVlKTsKKyAgICAgIGN1ciA9IGZvdW5kLmZyb20ubGlu
ZTsKICAgICAgIGxlbiArPSBmb3VuZC5mcm9tLmNoIC0gZm91bmQudG8uY2g7CiAgICAgfQogICAg
IGN1ciA9IGxpbmU7CiAgICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChjdXIp
KSB7Ci0gICAgICB2YXIgZm91bmQgPSBtZXJnZWQuZmluZCgpOworICAgICAgdmFyIGZvdW5kID0g
bWVyZ2VkLmZpbmQoMCwgdHJ1ZSk7CiAgICAgICBsZW4gLT0gY3VyLnRleHQubGVuZ3RoIC0gZm91
bmQuZnJvbS5jaDsKLSAgICAgIGN1ciA9IGdldExpbmUoZG9jLCBmb3VuZC50by5saW5lKTsKKyAg
ICAgIGN1ciA9IGZvdW5kLnRvLmxpbmU7CiAgICAgICBsZW4gKz0gY3VyLnRleHQubGVuZ3RoIC0g
Zm91bmQudG8uY2g7CiAgICAgfQogICAgIHJldHVybiBsZW47CiAgIH0KCi0gIGZ1bmN0aW9uIGNv
bXB1dGVNYXhMZW5ndGgoY20pIHsKKyAgLy8gRmluZCB0aGUgbG9uZ2VzdCBsaW5lIGluIHRoZSBk
b2N1bWVudC4KKyAgZnVuY3Rpb24gZmluZE1heExpbmUoY20pIHsKICAgICB2YXIgZCA9IGNtLmRp
c3BsYXksIGRvYyA9IGNtLmRvYzsKICAgICBkLm1heExpbmUgPSBnZXRMaW5lKGRvYywgZG9jLmZp
cnN0KTsKLSAgICBkLm1heExpbmVMZW5ndGggPSBsaW5lTGVuZ3RoKGRvYywgZC5tYXhMaW5lKTsK
KyAgICBkLm1heExpbmVMZW5ndGggPSBsaW5lTGVuZ3RoKGQubWF4TGluZSk7CiAgICAgZC5tYXhM
aW5lQ2hhbmdlZCA9IHRydWU7CiAgICAgZG9jLml0ZXIoZnVuY3Rpb24obGluZSkgewotICAgICAg
dmFyIGxlbiA9IGxpbmVMZW5ndGgoZG9jLCBsaW5lKTsKKyAgICAgIHZhciBsZW4gPSBsaW5lTGVu
Z3RoKGxpbmUpOwogICAgICAgaWYgKGxlbiA+IGQubWF4TGluZUxlbmd0aCkgewogICAgICAgICBk
Lm1heExpbmVMZW5ndGggPSBsZW47CiAgICAgICAgIGQubWF4TGluZSA9IGxpbmU7CkBAIC0zMTks
MjEgKzM4NywzMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKCiAgIC8vIFND
Uk9MTEJBUlMKCisgIC8vIFByZXBhcmUgRE9NIHJlYWRzIG5lZWRlZCB0byB1cGRhdGUgdGhlIHNj
cm9sbGJhcnMuIERvbmUgaW4gb25lCisgIC8vIHNob3QgdG8gbWluaW1pemUgdXBkYXRlL21lYXN1
cmUgcm91bmR0cmlwcy4KKyAgZnVuY3Rpb24gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pIHsKKyAg
ICB2YXIgc2Nyb2xsID0gY20uZGlzcGxheS5zY3JvbGxlcjsKKyAgICByZXR1cm4geworICAgICAg
Y2xpZW50SGVpZ2h0OiBzY3JvbGwuY2xpZW50SGVpZ2h0LAorICAgICAgYmFySGVpZ2h0OiBjbS5k
aXNwbGF5LnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0LAorICAgICAgc2Nyb2xsV2lkdGg6IHNjcm9s
bC5zY3JvbGxXaWR0aCwgY2xpZW50V2lkdGg6IHNjcm9sbC5jbGllbnRXaWR0aCwKKyAgICAgIGJh
cldpZHRoOiBjbS5kaXNwbGF5LnNjcm9sbGJhckguY2xpZW50V2lkdGgsCisgICAgICBkb2NIZWln
aHQ6IE1hdGgucm91bmQoY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGNtLmRpc3BsYXkpKQor
ICAgIH07CisgIH0KKwogICAvLyBSZS1zeW5jaHJvbml6ZSB0aGUgZmFrZSBzY3JvbGxiYXJzIHdp
dGggdGhlIGFjdHVhbCBzaXplIG9mIHRoZQotICAvLyBjb250ZW50LiBPcHRpb25hbGx5IGZvcmNl
IGEgc2Nyb2xsVG9wLgotICBmdW5jdGlvbiB1cGRhdGVTY3JvbGxiYXJzKGNtKSB7Ci0gICAgdmFy
IGQgPSBjbS5kaXNwbGF5LCBkb2NIZWlnaHQgPSBjbS5kb2MuaGVpZ2h0OwotICAgIHZhciB0b3Rh
bEhlaWdodCA9IGRvY0hlaWdodCArIHBhZGRpbmdWZXJ0KGQpOwotICAgIGQuc2l6ZXIuc3R5bGUu
bWluSGVpZ2h0ID0gZC5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gdG90YWxIZWlnaHQgKyAicHgi
OwotICAgIGQuZ3V0dGVycy5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heCh0b3RhbEhlaWdodCwgZC5z
Y3JvbGxlci5jbGllbnRIZWlnaHQgLSBzY3JvbGxlckN1dE9mZikgKyAicHgiOwotICAgIHZhciBz
Y3JvbGxIZWlnaHQgPSBNYXRoLm1heCh0b3RhbEhlaWdodCwgZC5zY3JvbGxlci5zY3JvbGxIZWln
aHQpOwotICAgIHZhciBuZWVkc0ggPSBkLnNjcm9sbGVyLnNjcm9sbFdpZHRoID4gKGQuc2Nyb2xs
ZXIuY2xpZW50V2lkdGggKyAxKTsKLSAgICB2YXIgbmVlZHNWID0gc2Nyb2xsSGVpZ2h0ID4gKGQu
c2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgMSk7CisgIC8vIGNvbnRlbnQuCisgIGZ1bmN0aW9uIHVw
ZGF0ZVNjcm9sbGJhcnMoY20sIG1lYXN1cmUpIHsKKyAgICBpZiAoIW1lYXN1cmUpIG1lYXN1cmUg
PSBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSk7CisgICAgdmFyIGQgPSBjbS5kaXNwbGF5OworICAg
IHZhciBzY3JvbGxIZWlnaHQgPSBtZWFzdXJlLmRvY0hlaWdodCArIHNjcm9sbGVyQ3V0T2ZmOwor
ICAgIHZhciBuZWVkc0ggPSBtZWFzdXJlLnNjcm9sbFdpZHRoID4gbWVhc3VyZS5jbGllbnRXaWR0
aDsKKyAgICB2YXIgbmVlZHNWID0gc2Nyb2xsSGVpZ2h0ID4gbWVhc3VyZS5jbGllbnRIZWlnaHQ7
CiAgICAgaWYgKG5lZWRzVikgewogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXkgPSAi
YmxvY2siOwogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/IHNjcm9s
bGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiIDogIjAiOworICAgICAgLy8gQSBidWcgaW4gSUU4
IGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIG5lZ2F0aXZlLCBzbyBndWFyZCBpdC4KICAgICAg
IGQuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9Ci0gICAgICAgIChzY3JvbGxI
ZWlnaHQgLSBkLnNjcm9sbGVyLmNsaWVudEhlaWdodCArIGQuc2Nyb2xsYmFyVi5jbGllbnRIZWln
aHQpICsgInB4IjsKKyAgICAgICAgTWF0aC5tYXgoMCwgc2Nyb2xsSGVpZ2h0IC0gbWVhc3VyZS5j
bGllbnRIZWlnaHQgKyAobWVhc3VyZS5iYXJIZWlnaHQgfHwgZC5zY3JvbGxiYXJWLmNsaWVudEhl
aWdodCkpICsgInB4IjsKICAgICB9IGVsc2UgewogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmRp
c3BsYXkgPSAiIjsKICAgICAgIGQuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9
ICIwIjsKQEAgLTM0Miw3ICs0MjIsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICAgIGQuc2Nyb2xsYmFySC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgIGQu
c2Nyb2xsYmFySC5zdHlsZS5yaWdodCA9IG5lZWRzViA/IHNjcm9sbGJhcldpZHRoKGQubWVhc3Vy
ZSkgKyAicHgiIDogIjAiOwogICAgICAgZC5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lk
dGggPQotICAgICAgICAoZC5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGQuc2Nyb2xsZXIuY2xpZW50
V2lkdGggKyBkLnNjcm9sbGJhckguY2xpZW50V2lkdGgpICsgInB4IjsKKyAgICAgICAgKG1lYXN1
cmUuc2Nyb2xsV2lkdGggLSBtZWFzdXJlLmNsaWVudFdpZHRoICsgKG1lYXN1cmUuYmFyV2lkdGgg
fHwgZC5zY3JvbGxiYXJILmNsaWVudFdpZHRoKSkgKyAicHgiOwogICAgIH0gZWxzZSB7CiAgICAg
ICBkLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgZC5zY3JvbGxiYXJILmZp
cnN0Q2hpbGQuc3R5bGUud2lkdGggPSAiMCI7CkBAIC0zNTksMzMgKzQzOSw2MSBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKCiAgICAgaWYgKG1hY19nZUxpb24gJiYgc2Nyb2xs
YmFyV2lkdGgoZC5tZWFzdXJlKSA9PT0gMCkgewogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLm1p
bldpZHRoID0gZC5zY3JvbGxiYXJILnN0eWxlLm1pbkhlaWdodCA9IG1hY19nZU1vdW50YWluTGlv
biA/ICIxOHB4IiA6ICIxMnB4IjsKLSAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5wb2ludGVyRXZl
bnRzID0gZC5zY3JvbGxiYXJILnN0eWxlLnBvaW50ZXJFdmVudHMgPSAibm9uZSI7CisgICAgICB2
YXIgYmFyTW91c2VEb3duID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZV90YXJnZXQoZSkg
IT0gZC5zY3JvbGxiYXJWICYmIGVfdGFyZ2V0KGUpICE9IGQuc2Nyb2xsYmFySCkKKyAgICAgICAg
ICBvcGVyYXRpb24oY20sIG9uTW91c2VEb3duKShlKTsKKyAgICAgIH07CisgICAgICBvbihkLnNj
cm9sbGJhclYsICJtb3VzZWRvd24iLCBiYXJNb3VzZURvd24pOworICAgICAgb24oZC5zY3JvbGxi
YXJILCAibW91c2Vkb3duIiwgYmFyTW91c2VEb3duKTsKICAgICB9CiAgIH0KCisgIC8vIENvbXB1
dGUgdGhlIGxpbmVzIHRoYXQgYXJlIHZpc2libGUgaW4gYSBnaXZlbiB2aWV3cG9ydCAoZGVmYXVs
dHMKKyAgLy8gdGhlIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbikuIHZpZXdQb3J0IG1heSBj
b250YWluIHRvcCwKKyAgLy8gaGVpZ2h0LCBhbmQgZW5zdXJlIChzZWUgb3Auc2Nyb2xsVG9Qb3Mp
IHByb3BlcnRpZXMuCiAgIGZ1bmN0aW9uIHZpc2libGVMaW5lcyhkaXNwbGF5LCBkb2MsIHZpZXdQ
b3J0KSB7Ci0gICAgdmFyIHRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wLCBoZWlnaHQg
PSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OwotICAgIGlmICh0eXBlb2Ygdmlld1BvcnQg
PT0gIm51bWJlciIpIHRvcCA9IHZpZXdQb3J0OwotICAgIGVsc2UgaWYgKHZpZXdQb3J0KSB7dG9w
ID0gdmlld1BvcnQudG9wOyBoZWlnaHQgPSB2aWV3UG9ydC5ib3R0b20gLSB2aWV3UG9ydC50b3A7
fQorICAgIHZhciB0b3AgPSB2aWV3UG9ydCAmJiB2aWV3UG9ydC50b3AgIT0gbnVsbCA/IHZpZXdQ
b3J0LnRvcCA6IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOwogICAgIHRvcCA9IE1hdGguZmxv
b3IodG9wIC0gcGFkZGluZ1RvcChkaXNwbGF5KSk7Ci0gICAgdmFyIGJvdHRvbSA9IE1hdGguY2Vp
bCh0b3AgKyBoZWlnaHQpOwotICAgIHJldHVybiB7ZnJvbTogbGluZUF0SGVpZ2h0KGRvYywgdG9w
KSwgdG86IGxpbmVBdEhlaWdodChkb2MsIGJvdHRvbSl9OworICAgIHZhciBib3R0b20gPSB2aWV3
UG9ydCAmJiB2aWV3UG9ydC5ib3R0b20gIT0gbnVsbCA/IHZpZXdQb3J0LmJvdHRvbSA6IHRvcCAr
IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CisKKyAgICB2YXIgZnJvbSA9IGxpbmVBdEhl
aWdodChkb2MsIHRvcCksIHRvID0gbGluZUF0SGVpZ2h0KGRvYywgYm90dG9tKTsKKyAgICAvLyBF
bnN1cmUgaXMgYSB7ZnJvbToge2xpbmUsIGNofSwgdG86IHtsaW5lLCBjaH19IG9iamVjdCwgYW5k
CisgICAgLy8gZm9yY2VzIHRob3NlIGxpbmVzIGludG8gdGhlIHZpZXdwb3J0IChpZiBwb3NzaWJs
ZSkuCisgICAgaWYgKHZpZXdQb3J0ICYmIHZpZXdQb3J0LmVuc3VyZSkgeworICAgICAgdmFyIGVu
c3VyZUZyb20gPSB2aWV3UG9ydC5lbnN1cmUuZnJvbS5saW5lLCBlbnN1cmVUbyA9IHZpZXdQb3J0
LmVuc3VyZS50by5saW5lOworICAgICAgaWYgKGVuc3VyZUZyb20gPCBmcm9tKQorICAgICAgICBy
ZXR1cm4ge2Zyb206IGVuc3VyZUZyb20sCisgICAgICAgICAgICAgICAgdG86IGxpbmVBdEhlaWdo
dChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlRnJvbSkpICsgZGlzcGxheS53
cmFwcGVyLmNsaWVudEhlaWdodCl9OworICAgICAgaWYgKE1hdGgubWluKGVuc3VyZVRvLCBkb2Mu
bGFzdExpbmUoKSkgPj0gdG8pCisgICAgICAgIHJldHVybiB7ZnJvbTogbGluZUF0SGVpZ2h0KGRv
YywgaGVpZ2h0QXRMaW5lKGdldExpbmUoZG9jLCBlbnN1cmVUbykpIC0gZGlzcGxheS53cmFwcGVy
LmNsaWVudEhlaWdodCksCisgICAgICAgICAgICAgICAgdG86IGVuc3VyZVRvfTsKKyAgICB9Cisg
ICAgcmV0dXJuIHtmcm9tOiBmcm9tLCB0bzogdG99OwogICB9CgogICAvLyBMSU5FIE5VTUJFUlMK
CisgIC8vIFJlLWFsaWduIGxpbmUgbnVtYmVycyBhbmQgZ3V0dGVyIG1hcmtzIHRvIGNvbXBlbnNh
dGUgZm9yCisgIC8vIGhvcml6b250YWwgc2Nyb2xsaW5nLgogICBmdW5jdGlvbiBhbGlnbkhvcml6
b250YWxseShjbSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICB2YXIgZGlz
cGxheSA9IGNtLmRpc3BsYXksIHZpZXcgPSBkaXNwbGF5LnZpZXc7CiAgICAgaWYgKCFkaXNwbGF5
LmFsaWduV2lkZ2V0cyAmJiAoIWRpc3BsYXkuZ3V0dGVycy5maXJzdENoaWxkIHx8ICFjbS5vcHRp
b25zLmZpeGVkR3V0dGVyKSkgcmV0dXJuOwogICAgIHZhciBjb21wID0gY29tcGVuc2F0ZUZvckhT
Y3JvbGwoZGlzcGxheSkgLSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgKyBjbS5kb2Muc2Ny
b2xsTGVmdDsKLSAgICB2YXIgZ3V0dGVyVyA9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCwg
bCA9IGNvbXAgKyAicHgiOwotICAgIGZvciAodmFyIG4gPSBkaXNwbGF5LmxpbmVEaXYuZmlyc3RD
aGlsZDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcpIGlmIChuLmFsaWduYWJsZSkgewotICAgICAgZm9y
ICh2YXIgaSA9IDAsIGEgPSBuLmFsaWduYWJsZTsgaSA8IGEubGVuZ3RoOyArK2kpIGFbaV0uc3R5
bGUubGVmdCA9IGw7CisgICAgdmFyIGd1dHRlclcgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lk
dGgsIGxlZnQgPSBjb21wICsgInB4IjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVu
Z3RoOyBpKyspIGlmICghdmlld1tpXS5oaWRkZW4pIHsKKyAgICAgIGlmIChjbS5vcHRpb25zLmZp
eGVkR3V0dGVyICYmIHZpZXdbaV0uZ3V0dGVyKQorICAgICAgICB2aWV3W2ldLmd1dHRlci5zdHls
ZS5sZWZ0ID0gbGVmdDsKKyAgICAgIHZhciBhbGlnbiA9IHZpZXdbaV0uYWxpZ25hYmxlOworICAg
ICAgaWYgKGFsaWduKSBmb3IgKHZhciBqID0gMDsgaiA8IGFsaWduLmxlbmd0aDsgaisrKQorICAg
ICAgICBhbGlnbltqXS5zdHlsZS5sZWZ0ID0gbGVmdDsKICAgICB9CiAgICAgaWYgKGNtLm9wdGlv
bnMuZml4ZWRHdXR0ZXIpCiAgICAgICBkaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdCA9IChjb21w
ICsgZ3V0dGVyVykgKyAicHgiOwogICB9CgorICAvLyBVc2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBs
aW5lIG51bWJlciBndXR0ZXIgaXMgc3RpbGwgdGhlIHJpZ2h0CisgIC8vIHNpemUgZm9yIHRoZSBj
dXJyZW50IGRvY3VtZW50IHNpemUuIFJldHVybnMgdHJ1ZSB3aGVuIGFuIHVwZGF0ZQorICAvLyBp
cyBuZWVkZWQuCiAgIGZ1bmN0aW9uIG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKGNtKSB7CiAg
ICAgaWYgKCFjbS5vcHRpb25zLmxpbmVOdW1iZXJzKSByZXR1cm4gZmFsc2U7CiAgICAgdmFyIGRv
YyA9IGNtLmRvYywgbGFzdCA9IGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgZG9jLmZpcnN0ICsg
ZG9jLnNpemUgLSAxKSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7CkBAIC0zOTgsNiArNTA2LDcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBkaXNwbGF5LmxpbmVOdW1X
aWR0aCA9IGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggKyBwYWRkaW5nOwogICAgICAgZGlzcGxh
eS5saW5lTnVtQ2hhcnMgPSBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoID8gbGFzdC5sZW5ndGgg
OiAtMTsKICAgICAgIGRpc3BsYXkubGluZUd1dHRlci5zdHlsZS53aWR0aCA9IGRpc3BsYXkubGlu
ZU51bVdpZHRoICsgInB4IjsKKyAgICAgIHVwZGF0ZUd1dHRlclNwYWNlKGNtKTsKICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC00MDYsMTkxICs1MTUsMTkz
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBsaW5lTnVt
YmVyRm9yKG9wdGlvbnMsIGkpIHsKICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbnMubGluZU51bWJl
ckZvcm1hdHRlcihpICsgb3B0aW9ucy5maXJzdExpbmVOdW1iZXIpKTsKICAgfQorCisgIC8vIENv
bXB1dGVzIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCArIGRpc3BsYXkuZ3V0dGVycy5vZmZz
ZXRXaWR0aCwKKyAgLy8gYnV0IHVzaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCB0byBnZXQgYSBz
dWItcGl4ZWwtYWNjdXJhdGUKKyAgLy8gcmVzdWx0LgogICBmdW5jdGlvbiBjb21wZW5zYXRlRm9y
SFNjcm9sbChkaXNwbGF5KSB7Ci0gICAgcmV0dXJuIGdldFJlY3QoZGlzcGxheS5zY3JvbGxlciku
bGVmdCAtIGdldFJlY3QoZGlzcGxheS5zaXplcikubGVmdDsKKyAgICByZXR1cm4gZGlzcGxheS5z
Y3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZGlzcGxheS5zaXplci5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OwogICB9CgogICAvLyBESVNQTEFZIERSQVdJTkcKCi0g
IGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXkoY20sIGNoYW5nZXMsIHZpZXdQb3J0LCBmb3JjZWQpIHsK
LSAgICB2YXIgb2xkRnJvbSA9IGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20sIG9sZFRvID0gY20uZGlz
cGxheS5zaG93aW5nVG8sIHVwZGF0ZWQ7CisgIC8vIFVwZGF0ZXMgdGhlIGRpc3BsYXksIHNlbGVj
dGlvbiwgYW5kIHNjcm9sbGJhcnMsIHVzaW5nIHRoZQorICAvLyBpbmZvcm1hdGlvbiBpbiBkaXNw
bGF5LnZpZXcgdG8gZmluZCBvdXQgd2hpY2ggbm9kZXMgYXJlIG5vIGxvbmdlcgorICAvLyB1cC10
by1kYXRlLiBUcmllcyB0byBiYWlsIG91dCBlYXJseSB3aGVuIG5vIGNoYW5nZXMgYXJlIG5lZWRl
ZCwKKyAgLy8gdW5sZXNzIGZvcmNlZCBpcyB0cnVlLgorICAvLyBSZXR1cm5zIHRydWUgaWYgYW4g
YWN0dWFsIHVwZGF0ZSBoYXBwZW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICBmdW5jdGlvbiB1cGRh
dGVEaXNwbGF5KGNtLCB2aWV3UG9ydCwgZm9yY2VkKSB7CisgICAgdmFyIG9sZEZyb20gPSBjbS5k
aXNwbGF5LnZpZXdGcm9tLCBvbGRUbyA9IGNtLmRpc3BsYXkudmlld1RvLCB1cGRhdGVkOwogICAg
IHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGNtLmRpc3BsYXksIGNtLmRvYywgdmlld1BvcnQp
OwogICAgIGZvciAodmFyIGZpcnN0ID0gdHJ1ZTs7IGZpcnN0ID0gZmFsc2UpIHsKICAgICAgIHZh
ciBvbGRXaWR0aCA9IGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg7Ci0gICAgICBpZiAo
IXVwZGF0ZURpc3BsYXlJbm5lcihjbSwgY2hhbmdlcywgdmlzaWJsZSwgZm9yY2VkKSkgYnJlYWs7
CisgICAgICBpZiAoIXVwZGF0ZURpc3BsYXlJbm5lcihjbSwgdmlzaWJsZSwgZm9yY2VkKSkgYnJl
YWs7CiAgICAgICB1cGRhdGVkID0gdHJ1ZTsKLSAgICAgIGNoYW5nZXMgPSBbXTsKKworICAgICAg
Ly8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQsIG1l
YXN1cmUgaXQsCisgICAgICAvLyBhbmQgZW5zdXJlIHRoZSBkb2N1bWVudCdzIHdpZHRoIG1hdGNo
ZXMgaXQuCisgICAgICBpZiAoY20uZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCAmJiAhY20ub3B0aW9u
cy5saW5lV3JhcHBpbmcpCisgICAgICAgIGFkanVzdENvbnRlbnRXaWR0aChjbSk7CisKKyAgICAg
IHZhciBiYXJNZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOwogICAgICAgdXBkYXRl
U2VsZWN0aW9uKGNtKTsKLSAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20pOworICAgICAgc2V0RG9j
dW1lbnRIZWlnaHQoY20sIGJhck1lYXN1cmUpOworICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwg
YmFyTWVhc3VyZSk7CisgICAgICBpZiAod2Via2l0ICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5n
KQorICAgICAgICBjaGVja0ZvcldlYmtpdFdpZHRoQnVnKGNtLCBiYXJNZWFzdXJlKTsgLy8gKElz
c3VlICMyNDIwKQogICAgICAgaWYgKGZpcnN0ICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYm
IG9sZFdpZHRoICE9IGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpIHsKICAgICAgICAg
Zm9yY2VkID0gdHJ1ZTsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAgICAgICBmb3JjZWQg
PSBmYWxzZTsKCi0gICAgICAvLyBDbGlwIGZvcmNlZCB2aWV3cG9ydCB0byBhY3R1YWwgc2Nyb2xs
YWJsZSBhcmVhCi0gICAgICBpZiAodmlld1BvcnQpCi0gICAgICAgIHZpZXdQb3J0ID0gTWF0aC5t
aW4oY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBjbS5kaXNwbGF5LnNjcm9sbGVy
LmNsaWVudEhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygdmlld1Bv
cnQgPT0gIm51bWJlciIgPyB2aWV3UG9ydCA6IHZpZXdQb3J0LnRvcCk7CisgICAgICAvLyBDbGlw
IGZvcmNlZCB2aWV3cG9ydCB0byBhY3R1YWwgc2Nyb2xsYWJsZSBhcmVhLgorICAgICAgaWYgKHZp
ZXdQb3J0ICYmIHZpZXdQb3J0LnRvcCAhPSBudWxsKQorICAgICAgICB2aWV3UG9ydCA9IHt0b3A6
IE1hdGgubWluKGJhck1lYXN1cmUuZG9jSGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYgLSBiYXJNZWFz
dXJlLmNsaWVudEhlaWdodCwgdmlld1BvcnQudG9wKX07CisgICAgICAvLyBVcGRhdGVkIGxpbmUg
aGVpZ2h0cyBtaWdodCByZXN1bHQgaW4gdGhlIGRyYXduIGFyZWEgbm90CisgICAgICAvLyBhY3R1
YWxseSBjb3ZlcmluZyB0aGUgdmlld3BvcnQuIEtlZXAgbG9vcGluZyB1bnRpbCBpdCBkb2VzLgog
ICAgICAgdmlzaWJsZSA9IHZpc2libGVMaW5lcyhjbS5kaXNwbGF5LCBjbS5kb2MsIHZpZXdQb3J0
KTsKLSAgICAgIGlmICh2aXNpYmxlLmZyb20gPj0gY20uZGlzcGxheS5zaG93aW5nRnJvbSAmJiB2
aXNpYmxlLnRvIDw9IGNtLmRpc3BsYXkuc2hvd2luZ1RvKQorICAgICAgaWYgKHZpc2libGUuZnJv
bSA+PSBjbS5kaXNwbGF5LnZpZXdGcm9tICYmIHZpc2libGUudG8gPD0gY20uZGlzcGxheS52aWV3
VG8pCiAgICAgICAgIGJyZWFrOwogICAgIH0KCisgICAgY20uZGlzcGxheS51cGRhdGVMaW5lTnVt
YmVycyA9IG51bGw7CiAgICAgaWYgKHVwZGF0ZWQpIHsKICAgICAgIHNpZ25hbExhdGVyKGNtLCAi
dXBkYXRlIiwgY20pOwotICAgICAgaWYgKGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20gIT0gb2xkRnJv
bSB8fCBjbS5kaXNwbGF5LnNob3dpbmdUbyAhPSBvbGRUbykKLSAgICAgICAgc2lnbmFsTGF0ZXIo
Y20sICJ2aWV3cG9ydENoYW5nZSIsIGNtLCBjbS5kaXNwbGF5LnNob3dpbmdGcm9tLCBjbS5kaXNw
bGF5LnNob3dpbmdUbyk7CisgICAgICBpZiAoY20uZGlzcGxheS52aWV3RnJvbSAhPSBvbGRGcm9t
IHx8IGNtLmRpc3BsYXkudmlld1RvICE9IG9sZFRvKQorICAgICAgICBzaWduYWxMYXRlcihjbSwg
InZpZXdwb3J0Q2hhbmdlIiwgY20sIGNtLmRpc3BsYXkudmlld0Zyb20sIGNtLmRpc3BsYXkudmll
d1RvKTsKICAgICB9CiAgICAgcmV0dXJuIHVwZGF0ZWQ7CiAgIH0KCi0gIC8vIFVzZXMgYSBzZXQg
b2YgY2hhbmdlcyBwbHVzIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiB0bwotICAvLyBkZXRl
cm1pbmUgd2hpY2ggRE9NIHVwZGF0ZXMgaGF2ZSB0byBiZSBtYWRlLCBhbmQgbWFrZXMgdGhlCi0g
IC8vIHVwZGF0ZXMuCi0gIGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXlJbm5lcihjbSwgY2hhbmdlcywg
dmlzaWJsZSwgZm9yY2VkKSB7CisgIC8vIERvZXMgdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0aGUg
bGluZSBkaXNwbGF5LiBCYWlscyBvdXQKKyAgLy8gKHJldHVybmluZyBmYWxzZSkgd2hlbiB0aGVy
ZSBpcyBub3RoaW5nIHRvIGJlIGRvbmUgYW5kIGZvcmNlZCBpcworICAvLyBmYWxzZS4KKyAgZnVu
Y3Rpb24gdXBkYXRlRGlzcGxheUlubmVyKGNtLCB2aXNpYmxlLCBmb3JjZWQpIHsKICAgICB2YXIg
ZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKLSAgICBpZiAoIWRpc3BsYXkud3Jh
cHBlci5jbGllbnRXaWR0aCkgewotICAgICAgZGlzcGxheS5zaG93aW5nRnJvbSA9IGRpc3BsYXku
c2hvd2luZ1RvID0gZG9jLmZpcnN0OwotICAgICAgZGlzcGxheS52aWV3T2Zmc2V0ID0gMDsKKyAg
ICBpZiAoIWRpc3BsYXkud3JhcHBlci5vZmZzZXRXaWR0aCkgeworICAgICAgcmVzZXRWaWV3KGNt
KTsKICAgICAgIHJldHVybjsKICAgICB9CgogICAgIC8vIEJhaWwgb3V0IGlmIHRoZSB2aXNpYmxl
IGFyZWEgaXMgYWxyZWFkeSByZW5kZXJlZCBhbmQgbm90aGluZyBjaGFuZ2VkLgotICAgIGlmICgh
Zm9yY2VkICYmIGNoYW5nZXMubGVuZ3RoID09IDAgJiYKLSAgICAgICAgdmlzaWJsZS5mcm9tID4g
ZGlzcGxheS5zaG93aW5nRnJvbSAmJiB2aXNpYmxlLnRvIDwgZGlzcGxheS5zaG93aW5nVG8pCisg
ICAgaWYgKCFmb3JjZWQgJiYgdmlzaWJsZS5mcm9tID49IGRpc3BsYXkudmlld0Zyb20gJiYgdmlz
aWJsZS50byA8PSBkaXNwbGF5LnZpZXdUbyAmJgorICAgICAgICBjb3VudERpcnR5VmlldyhjbSkg
PT0gMCkKICAgICAgIHJldHVybjsKCiAgICAgaWYgKG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRo
KGNtKSkKLSAgICAgIGNoYW5nZXMgPSBbe2Zyb206IGRvYy5maXJzdCwgdG86IGRvYy5maXJzdCAr
IGRvYy5zaXplfV07Ci0gICAgdmFyIGd1dHRlclcgPSBkaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdp
bkxlZnQgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGggKyAicHgiOwotICAgIGRpc3BsYXku
c2Nyb2xsYmFySC5zdHlsZS5sZWZ0ID0gY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGd1dHRlclcg
OiAiMCI7Ci0KLSAgICAvLyBVc2VkIHRvIGRldGVybWluZSB3aGljaCBsaW5lcyBuZWVkIHRoZWly
IGxpbmUgbnVtYmVycyB1cGRhdGVkCi0gICAgdmFyIHBvc2l0aW9uc0NoYW5nZWRGcm9tID0gSW5m
aW5pdHk7Ci0gICAgaWYgKGNtLm9wdGlvbnMubGluZU51bWJlcnMpCi0gICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyArK2kpCi0gICAgICAgIGlmIChjaGFuZ2VzW2ldLmRp
ZmYgJiYgY2hhbmdlc1tpXS5mcm9tIDwgcG9zaXRpb25zQ2hhbmdlZEZyb20pIHsgcG9zaXRpb25z
Q2hhbmdlZEZyb20gPSBjaGFuZ2VzW2ldLmZyb207IH0KKyAgICAgIHJlc2V0VmlldyhjbSk7Cisg
ICAgdmFyIGRpbXMgPSBnZXREaW1lbnNpb25zKGNtKTsKCisgICAgLy8gQ29tcHV0ZSBhIHN1aXRh
YmxlIG5ldyB2aWV3cG9ydCAoZnJvbSAmIHRvKQogICAgIHZhciBlbmQgPSBkb2MuZmlyc3QgKyBk
b2Muc2l6ZTsKICAgICB2YXIgZnJvbSA9IE1hdGgubWF4KHZpc2libGUuZnJvbSAtIGNtLm9wdGlv
bnMudmlld3BvcnRNYXJnaW4sIGRvYy5maXJzdCk7CiAgICAgdmFyIHRvID0gTWF0aC5taW4oZW5k
LCB2aXNpYmxlLnRvICsgY20ub3B0aW9ucy52aWV3cG9ydE1hcmdpbik7Ci0gICAgaWYgKGRpc3Bs
YXkuc2hvd2luZ0Zyb20gPCBmcm9tICYmIGZyb20gLSBkaXNwbGF5LnNob3dpbmdGcm9tIDwgMjAp
IGZyb20gPSBNYXRoLm1heChkb2MuZmlyc3QsIGRpc3BsYXkuc2hvd2luZ0Zyb20pOwotICAgIGlm
IChkaXNwbGF5LnNob3dpbmdUbyA+IHRvICYmIGRpc3BsYXkuc2hvd2luZ1RvIC0gdG8gPCAyMCkg
dG8gPSBNYXRoLm1pbihlbmQsIGRpc3BsYXkuc2hvd2luZ1RvKTsKKyAgICBpZiAoZGlzcGxheS52
aWV3RnJvbSA8IGZyb20gJiYgZnJvbSAtIGRpc3BsYXkudmlld0Zyb20gPCAyMCkgZnJvbSA9IE1h
dGgubWF4KGRvYy5maXJzdCwgZGlzcGxheS52aWV3RnJvbSk7CisgICAgaWYgKGRpc3BsYXkudmll
d1RvID4gdG8gJiYgZGlzcGxheS52aWV3VG8gLSB0byA8IDIwKSB0byA9IE1hdGgubWluKGVuZCwg
ZGlzcGxheS52aWV3VG8pOwogICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucykgewotICAgICAgZnJv
bSA9IGxpbmVObyh2aXN1YWxMaW5lKGRvYywgZ2V0TGluZShkb2MsIGZyb20pKSk7Ci0gICAgICB3
aGlsZSAodG8gPCBlbmQgJiYgbGluZUlzSGlkZGVuKGRvYywgZ2V0TGluZShkb2MsIHRvKSkpICsr
dG87Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGEgcmFuZ2Ugb2YgdGhlb3JldGljYWxseSBpbnRh
Y3QgbGluZXMsIGFuZCBwdW5jaCBob2xlcwotICAgIC8vIGluIHRoYXQgdXNpbmcgdGhlIGNoYW5n
ZSBpbmZvLgotICAgIHZhciBpbnRhY3QgPSBbe2Zyb206IE1hdGgubWF4KGRpc3BsYXkuc2hvd2lu
Z0Zyb20sIGRvYy5maXJzdCksCi0gICAgICAgICAgICAgICAgICAgdG86IE1hdGgubWluKGRpc3Bs
YXkuc2hvd2luZ1RvLCBlbmQpfV07Ci0gICAgaWYgKGludGFjdFswXS5mcm9tID49IGludGFjdFsw
XS50bykgaW50YWN0ID0gW107Ci0gICAgZWxzZSBpbnRhY3QgPSBjb21wdXRlSW50YWN0KGludGFj
dCwgY2hhbmdlcyk7Ci0gICAgLy8gV2hlbiBtZXJnZWQgbGluZXMgYXJlIHByZXNlbnQsIHdlIG1p
Z2h0IGhhdmUgdG8gcmVkdWNlIHRoZQotICAgIC8vIGludGFjdCByYW5nZXMgYmVjYXVzZSBjaGFu
Z2VzIGluIGNvbnRpbnVlZCBmcmFnbWVudHMgb2YgdGhlCi0gICAgLy8gaW50YWN0IGxpbmVzIGRv
IHJlcXVpcmUgdGhlIGxpbmVzIHRvIGJlIHJlZHJhd24uCi0gICAgaWYgKHNhd0NvbGxhcHNlZFNw
YW5zKQotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRhY3QubGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgdmFyIHJhbmdlID0gaW50YWN0W2ldLCBtZXJnZWQ7Ci0gICAgICAgIHdoaWxlIChtZXJn
ZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQoZ2V0TGluZShkb2MsIHJhbmdlLnRvIC0gMSkpKSB7Ci0g
ICAgICAgICAgdmFyIG5ld1RvID0gbWVyZ2VkLmZpbmQoKS5mcm9tLmxpbmU7Ci0gICAgICAgICAg
aWYgKG5ld1RvID4gcmFuZ2UuZnJvbSkgcmFuZ2UudG8gPSBuZXdUbzsKLSAgICAgICAgICBlbHNl
IHsgaW50YWN0LnNwbGljZShpLS0sIDEpOyBicmVhazsgfQotICAgICAgICB9Ci0gICAgICB9Ci0K
LSAgICAvLyBDbGlwIG9mZiB0aGUgcGFydHMgdGhhdCB3b24ndCBiZSB2aXNpYmxlCi0gICAgdmFy
IGludGFjdExpbmVzID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGludGFjdC5sZW5ndGg7
ICsraSkgewotICAgICAgdmFyIHJhbmdlID0gaW50YWN0W2ldOwotICAgICAgaWYgKHJhbmdlLmZy
b20gPCBmcm9tKSByYW5nZS5mcm9tID0gZnJvbTsKLSAgICAgIGlmIChyYW5nZS50byA+IHRvKSBy
YW5nZS50byA9IHRvOwotICAgICAgaWYgKHJhbmdlLmZyb20gPj0gcmFuZ2UudG8pIGludGFjdC5z
cGxpY2UoaS0tLCAxKTsKLSAgICAgIGVsc2UgaW50YWN0TGluZXMgKz0gcmFuZ2UudG8gLSByYW5n
ZS5mcm9tOwotICAgIH0KLSAgICBpZiAoIWZvcmNlZCAmJiBpbnRhY3RMaW5lcyA9PSB0byAtIGZy
b20gJiYgZnJvbSA9PSBkaXNwbGF5LnNob3dpbmdGcm9tICYmIHRvID09IGRpc3BsYXkuc2hvd2lu
Z1RvKSB7Ci0gICAgICB1cGRhdGVWaWV3T2Zmc2V0KGNtKTsKLSAgICAgIHJldHVybjsKKyAgICAg
IGZyb20gPSB2aXN1YWxMaW5lTm8oY20uZG9jLCBmcm9tKTsKKyAgICAgIHRvID0gdmlzdWFsTGlu
ZUVuZE5vKGNtLmRvYywgdG8pOwogICAgIH0KLSAgICBpbnRhY3Quc29ydChmdW5jdGlvbihhLCBi
KSB7cmV0dXJuIGEuZnJvbSAtIGIuZnJvbTt9KTsKCi0gICAgLy8gQXZvaWQgY3Jhc2hpbmcgb24g
SUUncyAidW5zcGVjaWZpZWQgZXJyb3IiIHdoZW4gaW4gaWZyYW1lcwotICAgIHRyeSB7Ci0gICAg
ICB2YXIgZm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Ci0gICAgfSBjYXRjaChlKSB7
fQotICAgIGlmIChpbnRhY3RMaW5lcyA8ICh0byAtIGZyb20pICogLjcpIGRpc3BsYXkubGluZURp
di5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIHBhdGNoRGlzcGxheShjbSwgZnJvbSwgdG8s
IGludGFjdCwgcG9zaXRpb25zQ2hhbmdlZEZyb20pOwotICAgIGRpc3BsYXkubGluZURpdi5zdHls
ZS5kaXNwbGF5ID0gIiI7Ci0gICAgaWYgKGZvY3VzZWQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dCAhPSBmb2N1c2VkICYmIGZvY3VzZWQub2Zmc2V0SGVpZ2h0KSBmb2N1c2VkLmZvY3VzKCk7Ci0K
LSAgICB2YXIgZGlmZmVyZW50ID0gZnJvbSAhPSBkaXNwbGF5LnNob3dpbmdGcm9tIHx8IHRvICE9
IGRpc3BsYXkuc2hvd2luZ1RvIHx8CisgICAgdmFyIGRpZmZlcmVudCA9IGZyb20gIT0gZGlzcGxh
eS52aWV3RnJvbSB8fCB0byAhPSBkaXNwbGF5LnZpZXdUbyB8fAogICAgICAgZGlzcGxheS5sYXN0
U2l6ZUMgIT0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKLSAgICAvLyBUaGlzIGlzIGp1
c3QgYSBib2d1cyBmb3JtdWxhIHRoYXQgZGV0ZWN0cyB3aGVuIHRoZSBlZGl0b3IgaXMKLSAgICAv
LyByZXNpemVkIG9yIHRoZSBmb250IHNpemUgY2hhbmdlcy4KKyAgICBhZGp1c3RWaWV3KGNtLCBm
cm9tLCB0byk7CisKKyAgICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoZ2V0TGlu
ZShjbS5kb2MsIGRpc3BsYXkudmlld0Zyb20pKTsKKyAgICAvLyBQb3NpdGlvbiB0aGUgbW92ZXIg
ZGl2IHRvIGFsaWduIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uCisgICAgY20uZGlz
cGxheS5tb3Zlci5zdHlsZS50b3AgPSBkaXNwbGF5LnZpZXdPZmZzZXQgKyAicHgiOworCisgICAg
dmFyIHRvVXBkYXRlID0gY291bnREaXJ0eVZpZXcoY20pOworICAgIGlmICghZGlmZmVyZW50ICYm
IHRvVXBkYXRlID09IDAgJiYgIWZvcmNlZCkgcmV0dXJuOworCisgICAgLy8gRm9yIGJpZyBjaGFu
Z2VzLCB3ZSBoaWRlIHRoZSBlbmNsb3NpbmcgZWxlbWVudCBkdXJpbmcgdGhlCisgICAgLy8gdXBk
YXRlLCBzaW5jZSB0aGF0IHNwZWVkcyB1cCB0aGUgb3BlcmF0aW9ucyBvbiBtb3N0IGJyb3dzZXJz
LgorICAgIHZhciBmb2N1c2VkID0gYWN0aXZlRWx0KCk7CisgICAgaWYgKHRvVXBkYXRlID4gNCkg
ZGlzcGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgcGF0Y2hEaXNwbGF5
KGNtLCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzLCBkaW1zKTsKKyAgICBpZiAodG9VcGRhdGUg
PiA0KSBkaXNwbGF5LmxpbmVEaXYuc3R5bGUuZGlzcGxheSA9ICIiOworICAgIC8vIFRoZXJlIG1p
Z2h0IGhhdmUgYmVlbiBhIHdpZGdldCB3aXRoIGEgZm9jdXNlZCBlbGVtZW50IHRoYXQgZ290Cisg
ICAgLy8gaGlkZGVuIG9yIHVwZGF0ZWQsIGlmIHNvIHJlLWZvY3VzIGl0LgorICAgIGlmIChmb2N1
c2VkICYmIGFjdGl2ZUVsdCgpICE9IGZvY3VzZWQgJiYgZm9jdXNlZC5vZmZzZXRIZWlnaHQpIGZv
Y3VzZWQuZm9jdXMoKTsKKworICAgIC8vIFByZXZlbnQgc2VsZWN0aW9uIGFuZCBjdXJzb3JzIGZy
b20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgc2Nyb2xsCisgICAgLy8gd2lkdGguCisgICAgcmVtb3Zl
Q2hpbGRyZW4oZGlzcGxheS5jdXJzb3JEaXYpOworICAgIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXku
c2VsZWN0aW9uRGl2KTsKKwogICAgIGlmIChkaWZmZXJlbnQpIHsKICAgICAgIGRpc3BsYXkubGFz
dFNpemVDID0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKICAgICAgIHN0YXJ0V29ya2Vy
KGNtLCA0MDApOwogICAgIH0KLSAgICBkaXNwbGF5LnNob3dpbmdGcm9tID0gZnJvbTsgZGlzcGxh
eS5zaG93aW5nVG8gPSB0bzsKCiAgICAgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pOwotICAg
IHVwZGF0ZVZpZXdPZmZzZXQoY20pOwoKICAgICByZXR1cm4gdHJ1ZTsKICAgfQoKKyAgZnVuY3Rp
b24gYWRqdXN0Q29udGVudFdpZHRoKGNtKSB7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5
OworICAgIHZhciB3aWR0aCA9IG1lYXN1cmVDaGFyKGNtLCBkaXNwbGF5Lm1heExpbmUsIGRpc3Bs
YXkubWF4TGluZS50ZXh0Lmxlbmd0aCkubGVmdDsKKyAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2Vk
ID0gZmFsc2U7CisgICAgdmFyIG1pbldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggKyAzKTsKKyAg
ICB2YXIgbWF4U2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVm
dCArIG1pbldpZHRoICsgc2Nyb2xsZXJDdXRPZmYgLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdp
ZHRoKTsKKyAgICBkaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gbWluV2lkdGggKyAicHgi
OworICAgIGlmIChtYXhTY3JvbGxMZWZ0IDwgY20uZG9jLnNjcm9sbExlZnQpCisgICAgICBzZXRT
Y3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsIG1heFNj
cm9sbExlZnQpLCB0cnVlKTsKKyAgfQorCisgIGZ1bmN0aW9uIHNldERvY3VtZW50SGVpZ2h0KGNt
LCBtZWFzdXJlKSB7CisgICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5taW5IZWlnaHQgPSBjbS5k
aXNwbGF5LmhlaWdodEZvcmNlci5zdHlsZS50b3AgPSBtZWFzdXJlLmRvY0hlaWdodCArICJweCI7
CisgICAgY20uZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IE1hdGgubWF4KG1lYXN1cmUu
ZG9jSGVpZ2h0LCBtZWFzdXJlLmNsaWVudEhlaWdodCAtIHNjcm9sbGVyQ3V0T2ZmKSArICJweCI7
CisgIH0KKworCisgIGZ1bmN0aW9uIGNoZWNrRm9yV2Via2l0V2lkdGhCdWcoY20sIG1lYXN1cmUp
IHsKKyAgICAvLyBXb3JrIGFyb3VuZCBXZWJraXQgYnVnIHdoZXJlIGl0IHNvbWV0aW1lcyByZXNl
cnZlcyBzcGFjZSBmb3IgYQorICAgIC8vIG5vbi1leGlzdGluZyBwaGFudG9tIHNjcm9sbGJhciBp
biB0aGUgc2Nyb2xsZXIgKElzc3VlICMyNDIwKQorICAgIGlmIChjbS5kaXNwbGF5LnNpemVyLm9m
ZnNldFdpZHRoICsgY20uZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoIDwgY20uZGlzcGxheS5z
Y3JvbGxlci5jbGllbnRXaWR0aCAtIDEpIHsKKyAgICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUu
bWluSGVpZ2h0ID0gY20uZGlzcGxheS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gIjBweCI7Cisg
ICAgICBjbS5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gbWVhc3VyZS5kb2NIZWlnaHQg
KyAicHgiOworICAgIH0KKyAgfQorCisgIC8vIFJlYWQgdGhlIGFjdHVhbCBoZWlnaHRzIG9mIHRo
ZSByZW5kZXJlZCBsaW5lcywgYW5kIHVwZGF0ZSB0aGVpcgorICAvLyBzdG9yZWQgaGVpZ2h0cyB0
byBtYXRjaC4KICAgZnVuY3Rpb24gdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pIHsKICAgICB2
YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CiAgICAgdmFyIHByZXZCb3R0b20gPSBkaXNwbGF5Lmxp
bmVEaXYub2Zmc2V0VG9wOwotICAgIGZvciAodmFyIG5vZGUgPSBkaXNwbGF5LmxpbmVEaXYuZmly
c3RDaGlsZCwgaGVpZ2h0OyBub2RlOyBub2RlID0gbm9kZS5uZXh0U2libGluZykgaWYgKG5vZGUu
bGluZU9iaikgewotICAgICAgaWYgKGllX2x0OCkgewotICAgICAgICB2YXIgYm90ID0gbm9kZS5v
ZmZzZXRUb3AgKyBub2RlLm9mZnNldEhlaWdodDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRp
c3BsYXkudmlldy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIGN1ciA9IGRpc3BsYXkudmlld1tp
XSwgaGVpZ2h0OworICAgICAgaWYgKGN1ci5oaWRkZW4pIGNvbnRpbnVlOworICAgICAgaWYgKGll
X3VwdG83KSB7CisgICAgICAgIHZhciBib3QgPSBjdXIubm9kZS5vZmZzZXRUb3AgKyBjdXIubm9k
ZS5vZmZzZXRIZWlnaHQ7CiAgICAgICAgIGhlaWdodCA9IGJvdCAtIHByZXZCb3R0b207CiAgICAg
ICAgIHByZXZCb3R0b20gPSBib3Q7CiAgICAgICB9IGVsc2UgewotICAgICAgICB2YXIgYm94ID0g
Z2V0UmVjdChub2RlKTsKKyAgICAgICAgdmFyIGJveCA9IGN1ci5ub2RlLmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpOwogICAgICAgICBoZWlnaHQgPSBib3guYm90dG9tIC0gYm94LnRvcDsKICAgICAg
IH0KLSAgICAgIHZhciBkaWZmID0gbm9kZS5saW5lT2JqLmhlaWdodCAtIGhlaWdodDsKKyAgICAg
IHZhciBkaWZmID0gY3VyLmxpbmUuaGVpZ2h0IC0gaGVpZ2h0OwogICAgICAgaWYgKGhlaWdodCA8
IDIpIGhlaWdodCA9IHRleHRIZWlnaHQoZGlzcGxheSk7CiAgICAgICBpZiAoZGlmZiA+IC4wMDEg
fHwgZGlmZiA8IC0uMDAxKSB7Ci0gICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobm9kZS5saW5lT2Jq
LCBoZWlnaHQpOwotICAgICAgICB2YXIgd2lkZ2V0cyA9IG5vZGUubGluZU9iai53aWRnZXRzOwot
ICAgICAgICBpZiAod2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkgPCB3aWRnZXRzLmxlbmd0aDsg
KytpKQotICAgICAgICAgIHdpZGdldHNbaV0uaGVpZ2h0ID0gd2lkZ2V0c1tpXS5ub2RlLm9mZnNl
dEhlaWdodDsKKyAgICAgICAgdXBkYXRlTGluZUhlaWdodChjdXIubGluZSwgaGVpZ2h0KTsKKyAg
ICAgICAgdXBkYXRlV2lkZ2V0SGVpZ2h0KGN1ci5saW5lKTsKKyAgICAgICAgaWYgKGN1ci5yZXN0
KSBmb3IgKHZhciBqID0gMDsgaiA8IGN1ci5yZXN0Lmxlbmd0aDsgaisrKQorICAgICAgICAgIHVw
ZGF0ZVdpZGdldEhlaWdodChjdXIucmVzdFtqXSk7CiAgICAgICB9CiAgICAgfQogICB9CgotICBm
dW5jdGlvbiB1cGRhdGVWaWV3T2Zmc2V0KGNtKSB7Ci0gICAgdmFyIG9mZiA9IGNtLmRpc3BsYXku
dmlld09mZnNldCA9IGhlaWdodEF0TGluZShjbSwgZ2V0TGluZShjbS5kb2MsIGNtLmRpc3BsYXku
c2hvd2luZ0Zyb20pKTsKLSAgICAvLyBQb3NpdGlvbiB0aGUgbW92ZXIgZGl2IHRvIGFsaWduIHdp
dGggdGhlIGN1cnJlbnQgdmlydHVhbCBzY3JvbGwgcG9zaXRpb24KLSAgICBjbS5kaXNwbGF5Lm1v
dmVyLnN0eWxlLnRvcCA9IG9mZiArICJweCI7Ci0gIH0KLQotICBmdW5jdGlvbiBjb21wdXRlSW50
YWN0KGludGFjdCwgY2hhbmdlcykgewotICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hhbmdlcy5s
ZW5ndGggfHwgMDsgaSA8IGw7ICsraSkgewotICAgICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbaV0s
IGludGFjdDIgPSBbXSwgZGlmZiA9IGNoYW5nZS5kaWZmIHx8IDA7Ci0gICAgICBmb3IgKHZhciBq
ID0gMCwgbDIgPSBpbnRhY3QubGVuZ3RoOyBqIDwgbDI7ICsraikgewotICAgICAgICB2YXIgcmFu
Z2UgPSBpbnRhY3Rbal07Ci0gICAgICAgIGlmIChjaGFuZ2UudG8gPD0gcmFuZ2UuZnJvbSAmJiBj
aGFuZ2UuZGlmZikgewotICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogcmFuZ2UuZnJvbSAr
IGRpZmYsIHRvOiByYW5nZS50byArIGRpZmZ9KTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2Uu
dG8gPD0gcmFuZ2UuZnJvbSB8fCBjaGFuZ2UuZnJvbSA+PSByYW5nZS50bykgewotICAgICAgICAg
IGludGFjdDIucHVzaChyYW5nZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGNo
YW5nZS5mcm9tID4gcmFuZ2UuZnJvbSkKLSAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTog
cmFuZ2UuZnJvbSwgdG86IGNoYW5nZS5mcm9tfSk7Ci0gICAgICAgICAgaWYgKGNoYW5nZS50byA8
IHJhbmdlLnRvKQotICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiBjaGFuZ2UudG8gKyBk
aWZmLCB0bzogcmFuZ2UudG8gKyBkaWZmfSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlu
dGFjdCA9IGludGFjdDI7Ci0gICAgfQotICAgIHJldHVybiBpbnRhY3Q7CisgIC8vIFJlYWQgYW5k
IHN0b3JlIHRoZSBoZWlnaHQgb2YgbGluZSB3aWRnZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAg
Ly8gZ2l2ZW4gbGluZS4KKyAgZnVuY3Rpb24gdXBkYXRlV2lkZ2V0SGVpZ2h0KGxpbmUpIHsKKyAg
ICBpZiAobGluZS53aWRnZXRzKSBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5n
dGg7ICsraSkKKyAgICAgIGxpbmUud2lkZ2V0c1tpXS5oZWlnaHQgPSBsaW5lLndpZGdldHNbaV0u
bm9kZS5vZmZzZXRIZWlnaHQ7CiAgIH0KCisgIC8vIERvIGEgYnVsay1yZWFkIG9mIHRoZSBET00g
cG9zaXRpb25zIGFuZCBzaXplcyBuZWVkZWQgdG8gZHJhdyB0aGUKKyAgLy8gdmlldywgc28gdGhh
dCB3ZSBkb24ndCBpbnRlcmxlYXZlIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIERPTS4KICAg
ZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhjbSkgewogICAgIHZhciBkID0gY20uZGlzcGxheSwgbGVm
dCA9IHt9LCB3aWR0aCA9IHt9OwogICAgIGZvciAodmFyIG4gPSBkLmd1dHRlcnMuZmlyc3RDaGls
ZCwgaSA9IDA7IG47IG4gPSBuLm5leHRTaWJsaW5nLCArK2kpIHsKQEAgLTYwNCwxNTQgKzcxNSwy
MDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB3cmFw
cGVyV2lkdGg6IGQud3JhcHBlci5jbGllbnRXaWR0aH07CiAgIH0KCi0gIGZ1bmN0aW9uIHBhdGNo
RGlzcGxheShjbSwgZnJvbSwgdG8sIGludGFjdCwgdXBkYXRlTnVtYmVyc0Zyb20pIHsKLSAgICB2
YXIgZGltcyA9IGdldERpbWVuc2lvbnMoY20pOworICAvLyBTeW5jIHRoZSBhY3R1YWwgZGlzcGxh
eSBET00gc3RydWN0dXJlIHdpdGggZGlzcGxheS52aWV3LCByZW1vdmluZworICAvLyBub2RlcyBm
b3IgbGluZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHZpZXcsIGFuZCBjcmVhdGluZyB0aGUgb25l
cworICAvLyB0aGF0IGFyZSBub3QgdGhlcmUgeWV0LCBhbmQgdXBkYXRpbmcgdGhlIG9uZXMgdGhh
dCBhcmUgb3V0IG9mCisgIC8vIGRhdGUuCisgIGZ1bmN0aW9uIHBhdGNoRGlzcGxheShjbSwgdXBk
YXRlTnVtYmVyc0Zyb20sIGRpbXMpIHsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGxp
bmVOdW1iZXJzID0gY20ub3B0aW9ucy5saW5lTnVtYmVyczsKLSAgICBpZiAoIWludGFjdC5sZW5n
dGggJiYgKCF3ZWJraXQgfHwgIWNtLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0KSkKLSAgICAg
IHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkubGluZURpdik7CiAgICAgdmFyIGNvbnRhaW5lciA9IGRp
c3BsYXkubGluZURpdiwgY3VyID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7CgogICAgIGZ1bmN0aW9u
IHJtKG5vZGUpIHsKICAgICAgIHZhciBuZXh0ID0gbm9kZS5uZXh0U2libGluZzsKLSAgICAgIGlm
ICh3ZWJraXQgJiYgbWFjICYmIGNtLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID09IG5vZGUp
IHsKKyAgICAgIC8vIFdvcmtzIGFyb3VuZCBhIHRocm93LXNjcm9sbCBidWcgaW4gT1MgWCBXZWJr
aXQKKyAgICAgIGlmICh3ZWJraXQgJiYgbWFjICYmIGNtLmRpc3BsYXkuY3VycmVudFdoZWVsVGFy
Z2V0ID09IG5vZGUpCiAgICAgICAgIG5vZGUuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICAg
ICAgbm9kZS5saW5lT2JqID0gbnVsbDsKLSAgICAgIH0gZWxzZSB7CisgICAgICBlbHNlCiAgICAg
ICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTsKLSAgICAgIH0KICAgICAgIHJl
dHVybiBuZXh0OwogICAgIH0KCi0gICAgdmFyIG5leHRJbnRhY3QgPSBpbnRhY3Quc2hpZnQoKSwg
bGluZU4gPSBmcm9tOwotICAgIGNtLmRvYy5pdGVyKGZyb20sIHRvLCBmdW5jdGlvbihsaW5lKSB7
Ci0gICAgICBpZiAobmV4dEludGFjdCAmJiBuZXh0SW50YWN0LnRvID09IGxpbmVOKSBuZXh0SW50
YWN0ID0gaW50YWN0LnNoaWZ0KCk7Ci0gICAgICBpZiAobGluZUlzSGlkZGVuKGNtLmRvYywgbGlu
ZSkpIHsKLSAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ICE9IDApIHVwZGF0ZUxpbmVIZWlnaHQobGlu
ZSwgMCk7Ci0gICAgICAgIGlmIChsaW5lLndpZGdldHMgJiYgY3VyICYmIGN1ci5wcmV2aW91c1Np
YmxpbmcpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgdmFyIHcgPSBsaW5lLndpZGdldHNbaV07Ci0gICAgICAgICAgaWYgKHcuc2hvd0lm
SGlkZGVuKSB7Ci0gICAgICAgICAgICB2YXIgcHJldiA9IGN1ci5wcmV2aW91c1NpYmxpbmc7Ci0g
ICAgICAgICAgICBpZiAoL3ByZS9pLnRlc3QocHJldi5ub2RlTmFtZSkpIHsKLSAgICAgICAgICAg
ICAgdmFyIHdyYXAgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmUi
KTsKLSAgICAgICAgICAgICAgcHJldi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh3cmFwLCBwcmV2
KTsKLSAgICAgICAgICAgICAgd3JhcC5hcHBlbmRDaGlsZChwcmV2KTsKLSAgICAgICAgICAgICAg
cHJldiA9IHdyYXA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgd25vZGUgPSBwcmV2
LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW3cubm9kZV0sICJDb2RlTWlycm9yLWxpbmV3aWRnZXQi
KSk7Ci0gICAgICAgICAgICBpZiAoIXcuaGFuZGxlTW91c2VFdmVudHMpIHdub2RlLmlnbm9yZUV2
ZW50cyA9IHRydWU7Ci0gICAgICAgICAgICBwb3NpdGlvbkxpbmVXaWRnZXQodywgd25vZGUsIHBy
ZXYsIGRpbXMpOwotICAgICAgICAgIH0KKyAgICB2YXIgdmlldyA9IGRpc3BsYXkudmlldywgbGlu
ZU4gPSBkaXNwbGF5LnZpZXdGcm9tOworICAgIC8vIExvb3Agb3ZlciB0aGUgZWxlbWVudHMgaW4g
dGhlIHZpZXcsIHN5bmNpbmcgY3VyICh0aGUgRE9NIG5vZGVzCisgICAgLy8gaW4gZGlzcGxheS5s
aW5lRGl2KSB3aXRoIHRoZSB2aWV3IGFzIHdlIGdvLgorICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dmlldy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIGxpbmVWaWV3ID0gdmlld1tpXTsKKyAgICAg
IGlmIChsaW5lVmlldy5oaWRkZW4pIHsKKyAgICAgIH0gZWxzZSBpZiAoIWxpbmVWaWV3Lm5vZGUp
IHsgLy8gTm90IGRyYXduIHlldAorICAgICAgICB2YXIgbm9kZSA9IGJ1aWxkTGluZUVsZW1lbnQo
Y20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7CisgICAgICAgIGNvbnRhaW5lci5pbnNlcnRCZWZv
cmUobm9kZSwgY3VyKTsKKyAgICAgIH0gZWxzZSB7IC8vIEFscmVhZHkgZHJhd24KKyAgICAgICAg
d2hpbGUgKGN1ciAhPSBsaW5lVmlldy5ub2RlKSBjdXIgPSBybShjdXIpOworICAgICAgICB2YXIg
dXBkYXRlTnVtYmVyID0gbGluZU51bWJlcnMgJiYgdXBkYXRlTnVtYmVyc0Zyb20gIT0gbnVsbCAm
JgorICAgICAgICAgIHVwZGF0ZU51bWJlcnNGcm9tIDw9IGxpbmVOICYmIGxpbmVWaWV3LmxpbmVO
dW1iZXI7CisgICAgICAgIGlmIChsaW5lVmlldy5jaGFuZ2VzKSB7CisgICAgICAgICAgaWYgKGlu
ZGV4T2YobGluZVZpZXcuY2hhbmdlcywgImd1dHRlciIpID4gLTEpIHVwZGF0ZU51bWJlciA9IGZh
bHNlOworICAgICAgICAgIHVwZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCBsaW5lVmlldywgbGluZU4s
IGRpbXMpOwogICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKG5leHRJbnRhY3QgJiYgbmV4dElu
dGFjdC5mcm9tIDw9IGxpbmVOICYmIG5leHRJbnRhY3QudG8gPiBsaW5lTikgewotICAgICAgICAv
LyBUaGlzIGxpbmUgaXMgaW50YWN0LiBTa2lwIHRvIHRoZSBhY3R1YWwgbm9kZS4gVXBkYXRlIGl0
cwotICAgICAgICAvLyBsaW5lIG51bWJlciBpZiBuZWVkZWQuCi0gICAgICAgIHdoaWxlIChjdXIu
bGluZU9iaiAhPSBsaW5lKSBjdXIgPSBybShjdXIpOwotICAgICAgICBpZiAobGluZU51bWJlcnMg
JiYgdXBkYXRlTnVtYmVyc0Zyb20gPD0gbGluZU4gJiYgY3VyLmxpbmVOdW1iZXIpCi0gICAgICAg
ICAgc2V0VGV4dENvbnRlbnQoY3VyLmxpbmVOdW1iZXIsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9u
cywgbGluZU4pKTsKLSAgICAgICAgY3VyID0gY3VyLm5leHRTaWJsaW5nOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gRm9yIGxpbmVzIHdpdGggd2lkZ2V0cywgbWFrZSBhbiBhdHRlbXB0IHRv
IGZpbmQgYW5kIHJldXNlCi0gICAgICAgIC8vIHRoZSBleGlzdGluZyBlbGVtZW50LCBzbyB0aGF0
IHdpZGdldHMgYXJlbid0IG5lZWRsZXNzbHkKLSAgICAgICAgLy8gcmVtb3ZlZCBhbmQgcmUtaW5z
ZXJ0ZWQgaW50byB0aGUgZG9tCi0gICAgICAgIGlmIChsaW5lLndpZGdldHMpIGZvciAodmFyIGog
PSAwLCBzZWFyY2ggPSBjdXIsIHJldXNlOyBzZWFyY2ggJiYgaiA8IDIwOyArK2osIHNlYXJjaCA9
IHNlYXJjaC5uZXh0U2libGluZykKLSAgICAgICAgICBpZiAoc2VhcmNoLmxpbmVPYmogPT0gbGlu
ZSAmJiAvZGl2L2kudGVzdChzZWFyY2gubm9kZU5hbWUpKSB7IHJldXNlID0gc2VhcmNoOyBicmVh
azsgfQotICAgICAgICAvLyBUaGlzIGxpbmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLgotICAgICAg
ICB2YXIgbGluZU5vZGUgPSBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lLCBsaW5lTiwgZGltcywg
cmV1c2UpOwotICAgICAgICBpZiAobGluZU5vZGUgIT0gcmV1c2UpIHsKLSAgICAgICAgICBjb250
YWluZXIuaW5zZXJ0QmVmb3JlKGxpbmVOb2RlLCBjdXIpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIHdoaWxlIChjdXIgIT0gcmV1c2UpIGN1ciA9IHJtKGN1cik7Ci0gICAgICAgICAgY3Vy
ID0gY3VyLm5leHRTaWJsaW5nOworICAgICAgICBpZiAodXBkYXRlTnVtYmVyKSB7CisgICAgICAg
ICAgcmVtb3ZlQ2hpbGRyZW4obGluZVZpZXcubGluZU51bWJlcik7CisgICAgICAgICAgbGluZVZp
ZXcubGluZU51bWJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lTnVt
YmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVOKSkpOwogICAgICAgICB9Ci0KLSAgICAgICAgbGluZU5v
ZGUubGluZU9iaiA9IGxpbmU7CisgICAgICAgIGN1ciA9IGxpbmVWaWV3Lm5vZGUubmV4dFNpYmxp
bmc7CiAgICAgICB9Ci0gICAgICArK2xpbmVOOwotICAgIH0pOworICAgICAgbGluZU4gKz0gbGlu
ZVZpZXcuc2l6ZTsKKyAgICB9CiAgICAgd2hpbGUgKGN1cikgY3VyID0gcm0oY3VyKTsKICAgfQoK
LSAgZnVuY3Rpb24gYnVpbGRMaW5lRWxlbWVudChjbSwgbGluZSwgbGluZU5vLCBkaW1zLCByZXVz
ZSkgewotICAgIHZhciBidWlsdCA9IGJ1aWxkTGluZUNvbnRlbnQoY20sIGxpbmUpLCBsaW5lRWxl
bWVudCA9IGJ1aWx0LnByZTsKLSAgICB2YXIgbWFya2VycyA9IGxpbmUuZ3V0dGVyTWFya2Vycywg
ZGlzcGxheSA9IGNtLmRpc3BsYXksIHdyYXA7Ci0KLSAgICB2YXIgYmdDbGFzcyA9IGJ1aWx0LmJn
Q2xhc3MgPyBidWlsdC5iZ0NsYXNzICsgIiAiICsgKGxpbmUuYmdDbGFzcyB8fCAiIikgOiBsaW5l
LmJnQ2xhc3M7Ci0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmICFtYXJrZXJzICYm
ICFiZ0NsYXNzICYmICFsaW5lLndyYXBDbGFzcyAmJiAhbGluZS53aWRnZXRzKQotICAgICAgcmV0
dXJuIGxpbmVFbGVtZW50OworICAvLyBXaGVuIGFuIGFzcGVjdCBvZiBhIGxpbmUgY2hhbmdlcywg
YSBzdHJpbmcgaXMgYWRkZWQgdG8KKyAgLy8gbGluZVZpZXcuY2hhbmdlcy4gVGhpcyB1cGRhdGVz
IHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBsaW5lJ3MKKyAgLy8gRE9NIHN0cnVjdHVyZS4KKyAg
ZnVuY3Rpb24gdXBkYXRlTGluZUZvckNoYW5nZXMoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykg
eworICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZVZpZXcuY2hhbmdlcy5sZW5ndGg7IGorKykg
eworICAgICAgdmFyIHR5cGUgPSBsaW5lVmlldy5jaGFuZ2VzW2pdOworICAgICAgaWYgKHR5cGUg
PT0gInRleHQiKSB1cGRhdGVMaW5lVGV4dChjbSwgbGluZVZpZXcpOworICAgICAgZWxzZSBpZiAo
dHlwZSA9PSAiZ3V0dGVyIikgdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBk
aW1zKTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImNsYXNzIikgdXBkYXRlTGluZUNsYXNzZXMo
bGluZVZpZXcpOworICAgICAgZWxzZSBpZiAodHlwZSA9PSAid2lkZ2V0IikgdXBkYXRlTGluZVdp
ZGdldHMobGluZVZpZXcsIGRpbXMpOworICAgIH0KKyAgICBsaW5lVmlldy5jaGFuZ2VzID0gbnVs
bDsKKyAgfQoKLSAgICAvLyBMaW5lcyB3aXRoIGd1dHRlciBlbGVtZW50cywgd2lkZ2V0cyBvciBh
IGJhY2tncm91bmQgY2xhc3MgbmVlZAotICAgIC8vIHRvIGJlIHdyYXBwZWQgYWdhaW4sIGFuZCBo
YXZlIHRoZSBleHRyYSBlbGVtZW50cyBhZGRlZCB0byB0aGUKLSAgICAvLyB3cmFwcGVyIGRpdgor
ICAvLyBMaW5lcyB3aXRoIGd1dHRlciBlbGVtZW50cywgd2lkZ2V0cyBvciBhIGJhY2tncm91bmQg
Y2xhc3MgbmVlZCB0bworICAvLyBiZSB3cmFwcGVkLCBhbmQgaGF2ZSB0aGUgZXh0cmEgZWxlbWVu
dHMgYWRkZWQgdG8gdGhlIHdyYXBwZXIgZGl2CisgIGZ1bmN0aW9uIGVuc3VyZUxpbmVXcmFwcGVk
KGxpbmVWaWV3KSB7CisgICAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbGluZVZpZXcudGV4dCkgewor
ICAgICAgbGluZVZpZXcubm9kZSA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBy
ZWxhdGl2ZSIpOworICAgICAgaWYgKGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZSkKKyAgICAgICAg
bGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChsaW5lVmlldy5ub2RlLCBsaW5l
Vmlldy50ZXh0KTsKKyAgICAgIGxpbmVWaWV3Lm5vZGUuYXBwZW5kQ2hpbGQobGluZVZpZXcudGV4
dCk7CisgICAgICBpZiAoaWVfdXB0bzcpIGxpbmVWaWV3Lm5vZGUuc3R5bGUuekluZGV4ID0gMjsK
KyAgICB9CisgICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7CisgIH0KCi0gICAgaWYgKHJldXNlKSB7
Ci0gICAgICByZXVzZS5hbGlnbmFibGUgPSBudWxsOwotICAgICAgdmFyIGlzT2sgPSB0cnVlLCB3
aWRnZXRzU2VlbiA9IDAsIGluc2VydEJlZm9yZSA9IG51bGw7Ci0gICAgICBmb3IgKHZhciBuID0g
cmV1c2UuZmlyc3RDaGlsZCwgbmV4dDsgbjsgbiA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IG4u
bmV4dFNpYmxpbmc7Ci0gICAgICAgIGlmICghL1xiQ29kZU1pcnJvci1saW5ld2lkZ2V0XGIvLnRl
c3Qobi5jbGFzc05hbWUpKSB7Ci0gICAgICAgICAgcmV1c2UucmVtb3ZlQ2hpbGQobik7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciB3aWRnZXQgPSBsaW5lLndpZGdldHNbaV07
Ci0gICAgICAgICAgICBpZiAod2lkZ2V0Lm5vZGUgPT0gbi5maXJzdENoaWxkKSB7Ci0gICAgICAg
ICAgICAgIGlmICghd2lkZ2V0LmFib3ZlICYmICFpbnNlcnRCZWZvcmUpIGluc2VydEJlZm9yZSA9
IG47Ci0gICAgICAgICAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3aWRnZXQsIG4sIHJldXNlLCBk
aW1zKTsKLSAgICAgICAgICAgICAgKyt3aWRnZXRzU2VlbjsKLSAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChpID09IGxpbmUud2lk
Z2V0cy5sZW5ndGgpIHsgaXNPayA9IGZhbHNlOyBicmVhazsgfQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICByZXVzZS5pbnNlcnRCZWZvcmUobGluZUVsZW1lbnQsIGluc2VydEJlZm9yZSk7Ci0g
ICAgICBpZiAoaXNPayAmJiB3aWRnZXRzU2VlbiA9PSBsaW5lLndpZGdldHMubGVuZ3RoKSB7Ci0g
ICAgICAgIHdyYXAgPSByZXVzZTsKLSAgICAgICAgcmV1c2UuY2xhc3NOYW1lID0gbGluZS53cmFw
Q2xhc3MgfHwgIiI7Ci0gICAgICB9CisgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVCYWNrZ3JvdW5kKGxp
bmVWaWV3KSB7CisgICAgdmFyIGNscyA9IGxpbmVWaWV3LmJnQ2xhc3MgPyBsaW5lVmlldy5iZ0Ns
YXNzICsgIiAiICsgKGxpbmVWaWV3LmxpbmUuYmdDbGFzcyB8fCAiIikgOiBsaW5lVmlldy5saW5l
LmJnQ2xhc3M7CisgICAgaWYgKGNscykgY2xzICs9ICIgQ29kZU1pcnJvci1saW5lYmFja2dyb3Vu
ZCI7CisgICAgaWYgKGxpbmVWaWV3LmJhY2tncm91bmQpIHsKKyAgICAgIGlmIChjbHMpIGxpbmVW
aWV3LmJhY2tncm91bmQuY2xhc3NOYW1lID0gY2xzOworICAgICAgZWxzZSB7IGxpbmVWaWV3LmJh
Y2tncm91bmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5iYWNrZ3JvdW5kKTsgbGlu
ZVZpZXcuYmFja2dyb3VuZCA9IG51bGw7IH0KKyAgICB9IGVsc2UgaWYgKGNscykgeworICAgICAg
dmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7CisgICAgICBsaW5lVmlldy5i
YWNrZ3JvdW5kID0gd3JhcC5pbnNlcnRCZWZvcmUoZWx0KCJkaXYiLCBudWxsLCBjbHMpLCB3cmFw
LmZpcnN0Q2hpbGQpOwogICAgIH0KLSAgICBpZiAoIXdyYXApIHsKLSAgICAgIHdyYXAgPSBlbHQo
ImRpdiIsIG51bGwsIGxpbmUud3JhcENsYXNzLCAicG9zaXRpb246IHJlbGF0aXZlIik7Ci0gICAg
ICB3cmFwLmFwcGVuZENoaWxkKGxpbmVFbGVtZW50KTsKKyAgfQorCisgIC8vIFdyYXBwZXIgYXJv
dW5kIGJ1aWxkTGluZUNvbnRlbnQgd2hpY2ggd2lsbCByZXVzZSB0aGUgc3RydWN0dXJlCisgIC8v
IGluIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCB3aGVuIHBvc3NpYmxlLgorICBmdW5jdGlvbiBn
ZXRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpIHsKKyAgICB2YXIgZXh0ID0gY20uZGlzcGxheS5l
eHRlcm5hbE1lYXN1cmVkOworICAgIGlmIChleHQgJiYgZXh0LmxpbmUgPT0gbGluZVZpZXcubGlu
ZSkgeworICAgICAgY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbnVsbDsKKyAgICAgIGxp
bmVWaWV3Lm1lYXN1cmUgPSBleHQubWVhc3VyZTsKKyAgICAgIHJldHVybiBleHQuYnVpbHQ7CiAg
ICAgfQotICAgIC8vIEtsdWRnZSB0byBtYWtlIHN1cmUgdGhlIHN0eWxlZCBlbGVtZW50IGxpZXMg
YmVoaW5kIHRoZSBzZWxlY3Rpb24gKGJ5IHotaW5kZXgpCi0gICAgaWYgKGJnQ2xhc3MpCi0gICAg
ICB3cmFwLmluc2VydEJlZm9yZShlbHQoImRpdiIsIG51bGwsIGJnQ2xhc3MgKyAiIENvZGVNaXJy
b3ItbGluZWJhY2tncm91bmQiKSwgd3JhcC5maXJzdENoaWxkKTsKKyAgICByZXR1cm4gYnVpbGRM
aW5lQ29udGVudChjbSwgbGluZVZpZXcpOworICB9CisKKyAgLy8gUmVkcmF3IHRoZSBsaW5lJ3Mg
dGV4dC4gSW50ZXJhY3RzIHdpdGggdGhlIGJhY2tncm91bmQgYW5kIHRleHQKKyAgLy8gY2xhc3Nl
cyBiZWNhdXNlIHRoZSBtb2RlIG1heSBvdXRwdXQgdG9rZW5zIHRoYXQgaW5mbHVlbmNlIHRoZXNl
CisgIC8vIGNsYXNzZXMuCisgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVUZXh0KGNtLCBsaW5lVmlldykg
eworICAgIHZhciBjbHMgPSBsaW5lVmlldy50ZXh0LmNsYXNzTmFtZTsKKyAgICB2YXIgYnVpbHQg
PSBnZXRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpOworICAgIGlmIChsaW5lVmlldy50ZXh0ID09
IGxpbmVWaWV3Lm5vZGUpIGxpbmVWaWV3Lm5vZGUgPSBidWlsdC5wcmU7CisgICAgbGluZVZpZXcu
dGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChidWlsdC5wcmUsIGxpbmVWaWV3LnRleHQpOwor
ICAgIGxpbmVWaWV3LnRleHQgPSBidWlsdC5wcmU7CisgICAgaWYgKGJ1aWx0LmJnQ2xhc3MgIT0g
bGluZVZpZXcuYmdDbGFzcyB8fCBidWlsdC50ZXh0Q2xhc3MgIT0gbGluZVZpZXcudGV4dENsYXNz
KSB7CisgICAgICBsaW5lVmlldy5iZ0NsYXNzID0gYnVpbHQuYmdDbGFzczsKKyAgICAgIGxpbmVW
aWV3LnRleHRDbGFzcyA9IGJ1aWx0LnRleHRDbGFzczsKKyAgICAgIHVwZGF0ZUxpbmVDbGFzc2Vz
KGxpbmVWaWV3KTsKKyAgICB9IGVsc2UgaWYgKGNscykgeworICAgICAgbGluZVZpZXcudGV4dC5j
bGFzc05hbWUgPSBjbHM7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gdXBkYXRlTGluZUNsYXNz
ZXMobGluZVZpZXcpIHsKKyAgICB1cGRhdGVMaW5lQmFja2dyb3VuZChsaW5lVmlldyk7CisgICAg
aWYgKGxpbmVWaWV3LmxpbmUud3JhcENsYXNzKQorICAgICAgZW5zdXJlTGluZVdyYXBwZWQobGlu
ZVZpZXcpLmNsYXNzTmFtZSA9IGxpbmVWaWV3LmxpbmUud3JhcENsYXNzOworICAgIGVsc2UgaWYg
KGxpbmVWaWV3Lm5vZGUgIT0gbGluZVZpZXcudGV4dCkKKyAgICAgIGxpbmVWaWV3Lm5vZGUuY2xh
c3NOYW1lID0gIiI7CisgICAgdmFyIHRleHRDbGFzcyA9IGxpbmVWaWV3LnRleHRDbGFzcyA/IGxp
bmVWaWV3LnRleHRDbGFzcyArICIgIiArIChsaW5lVmlldy5saW5lLnRleHRDbGFzcyB8fCAiIikg
OiBsaW5lVmlldy5saW5lLnRleHRDbGFzczsKKyAgICBsaW5lVmlldy50ZXh0LmNsYXNzTmFtZSA9
IHRleHRDbGFzcyB8fCAiIjsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVHdXR0ZXIoY20s
IGxpbmVWaWV3LCBsaW5lTiwgZGltcykgeworICAgIGlmIChsaW5lVmlldy5ndXR0ZXIpIHsKKyAg
ICAgIGxpbmVWaWV3Lm5vZGUucmVtb3ZlQ2hpbGQobGluZVZpZXcuZ3V0dGVyKTsKKyAgICAgIGxp
bmVWaWV3Lmd1dHRlciA9IG51bGw7CisgICAgfQorICAgIHZhciBtYXJrZXJzID0gbGluZVZpZXcu
bGluZS5ndXR0ZXJNYXJrZXJzOwogICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8IG1h
cmtlcnMpIHsKLSAgICAgIHZhciBndXR0ZXJXcmFwID0gd3JhcC5pbnNlcnRCZWZvcmUoZWx0KCJk
aXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiICsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbS5vcHRpb25zLmZpeGVkR3V0
dGVyID8gZGltcy5maXhlZFBvcyA6IC1kaW1zLmd1dHRlclRvdGFsV2lkdGgpICsgInB4IiksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAuZmlyc3RDaGlsZCk7
Ci0gICAgICBpZiAoY20ub3B0aW9ucy5maXhlZEd1dHRlcikgKHdyYXAuYWxpZ25hYmxlIHx8ICh3
cmFwLmFsaWduYWJsZSA9IFtdKSkucHVzaChndXR0ZXJXcmFwKTsKKyAgICAgIHZhciB3cmFwID0g
ZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpOworICAgICAgdmFyIGd1dHRlcldyYXAgPSBsaW5l
Vmlldy5ndXR0ZXIgPQorICAgICAgICB3cmFwLmluc2VydEJlZm9yZShlbHQoImRpdiIsIG51bGws
ICJDb2RlTWlycm9yLWd1dHRlci13cmFwcGVyIiwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDog
IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY20ub3B0aW9ucy5maXhlZEd1dHRl
ciA/IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArICJweCIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlldy50ZXh0KTsKICAgICAgIGlmIChjbS5vcHRp
b25zLmxpbmVOdW1iZXJzICYmICghbWFya2VycyB8fCAhbWFya2Vyc1siQ29kZU1pcnJvci1saW5l
bnVtYmVycyJdKSkKLSAgICAgICAgd3JhcC5saW5lTnVtYmVyID0gZ3V0dGVyV3JhcC5hcHBlbmRD
aGlsZCgKLSAgICAgICAgICBlbHQoImRpdiIsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgbGlu
ZU5vKSwKKyAgICAgICAgbGluZVZpZXcubGluZU51bWJlciA9IGd1dHRlcldyYXAuYXBwZW5kQ2hp
bGQoCisgICAgICAgICAgZWx0KCJkaXYiLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVO
KSwKICAgICAgICAgICAgICAgIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRl
ci1lbHQiLAogICAgICAgICAgICAgICAibGVmdDogIiArIGRpbXMuZ3V0dGVyTGVmdFsiQ29kZU1p
cnJvci1saW5lbnVtYmVycyJdICsgInB4OyB3aWR0aDogIgotICAgICAgICAgICAgICArIGRpc3Bs
YXkubGluZU51bUlubmVyV2lkdGggKyAicHgiKSk7Ci0gICAgICBpZiAobWFya2VycykKLSAgICAg
ICAgZm9yICh2YXIgayA9IDA7IGsgPCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2spIHsK
LSAgICAgICAgICB2YXIgaWQgPSBjbS5vcHRpb25zLmd1dHRlcnNba10sIGZvdW5kID0gbWFya2Vy
cy5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgbWFya2Vyc1tpZF07Ci0gICAgICAgICAgaWYgKGZvdW5k
KQotICAgICAgICAgICAgZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZChlbHQoImRpdiIsIFtmb3VuZF0s
ICJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCAibGVmdDogIiArCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaW1zLmd1dHRlckxlZnRbaWRdICsgInB4OyB3aWR0aDogIiAr
IGRpbXMuZ3V0dGVyV2lkdGhbaWRdICsgInB4IikpOwotICAgICAgICB9CisgICAgICAgICAgICAg
ICsgY20uZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCArICJweCIpKTsKKyAgICAgIGlmIChtYXJr
ZXJzKSBmb3IgKHZhciBrID0gMDsgayA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsraykg
eworICAgICAgICB2YXIgaWQgPSBjbS5vcHRpb25zLmd1dHRlcnNba10sIGZvdW5kID0gbWFya2Vy
cy5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgbWFya2Vyc1tpZF07CisgICAgICAgIGlmIChmb3VuZCkK
KyAgICAgICAgICBndXR0ZXJXcmFwLmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW2ZvdW5kXSwgIkNv
ZGVNaXJyb3ItZ3V0dGVyLWVsdCIsICJsZWZ0OiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaW1zLmd1dHRlckxlZnRbaWRdICsgInB4OyB3aWR0aDogIiArIGRpbXMu
Z3V0dGVyV2lkdGhbaWRdICsgInB4IikpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0
aW9uIHVwZGF0ZUxpbmVXaWRnZXRzKGxpbmVWaWV3LCBkaW1zKSB7CisgICAgaWYgKGxpbmVWaWV3
LmFsaWduYWJsZSkgbGluZVZpZXcuYWxpZ25hYmxlID0gbnVsbDsKKyAgICBmb3IgKHZhciBub2Rl
ID0gbGluZVZpZXcubm9kZS5maXJzdENoaWxkLCBuZXh0OyBub2RlOyBub2RlID0gbmV4dCkgewor
ICAgICAgdmFyIG5leHQgPSBub2RlLm5leHRTaWJsaW5nOworICAgICAgaWYgKG5vZGUuY2xhc3NO
YW1lID09ICJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKQorICAgICAgICBsaW5lVmlldy5ub2RlLnJl
bW92ZUNoaWxkKG5vZGUpOwogICAgIH0KLSAgICBpZiAoaWVfbHQ4KSB3cmFwLnN0eWxlLnpJbmRl
eCA9IDI7Ci0gICAgaWYgKGxpbmUud2lkZ2V0cyAmJiB3cmFwICE9IHJldXNlKSBmb3IgKHZhciBp
ID0gMCwgd3MgPSBsaW5lLndpZGdldHM7IGkgPCB3cy5sZW5ndGg7ICsraSkgeworICAgIGluc2Vy
dExpbmVXaWRnZXRzKGxpbmVWaWV3LCBkaW1zKTsKKyAgfQorCisgIC8vIEJ1aWxkIGEgbGluZSdz
IERPTSByZXByZXNlbnRhdGlvbiBmcm9tIHNjcmF0Y2gKKyAgZnVuY3Rpb24gYnVpbGRMaW5lRWxl
bWVudChjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKSB7CisgICAgdmFyIGJ1aWx0ID0gZ2V0TGlu
ZUNvbnRlbnQoY20sIGxpbmVWaWV3KTsKKyAgICBsaW5lVmlldy50ZXh0ID0gbGluZVZpZXcubm9k
ZSA9IGJ1aWx0LnByZTsKKyAgICBpZiAoYnVpbHQuYmdDbGFzcykgbGluZVZpZXcuYmdDbGFzcyA9
IGJ1aWx0LmJnQ2xhc3M7CisgICAgaWYgKGJ1aWx0LnRleHRDbGFzcykgbGluZVZpZXcudGV4dENs
YXNzID0gYnVpbHQudGV4dENsYXNzOworCisgICAgdXBkYXRlTGluZUNsYXNzZXMobGluZVZpZXcp
OworICAgIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7CisgICAg
aW5zZXJ0TGluZVdpZGdldHMobGluZVZpZXcsIGRpbXMpOworICAgIHJldHVybiBsaW5lVmlldy5u
b2RlOworICB9CisKKyAgLy8gQSBsaW5lVmlldyBtYXkgY29udGFpbiBtdWx0aXBsZSBsb2dpY2Fs
IGxpbmVzICh3aGVuIG1lcmdlZCBieQorICAvLyBjb2xsYXBzZWQgc3BhbnMpLiBUaGUgd2lkZ2V0
cyBmb3IgYWxsIG9mIHRoZW0gbmVlZCB0byBiZSBkcmF3bi4KKyAgZnVuY3Rpb24gaW5zZXJ0TGlu
ZVdpZGdldHMobGluZVZpZXcsIGRpbXMpIHsKKyAgICBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihsaW5l
Vmlldy5saW5lLCBsaW5lVmlldywgZGltcywgdHJ1ZSk7CisgICAgaWYgKGxpbmVWaWV3LnJlc3Qp
IGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKykKKyAgICAgIGlu
c2VydExpbmVXaWRnZXRzRm9yKGxpbmVWaWV3LnJlc3RbaV0sIGxpbmVWaWV3LCBkaW1zLCBmYWxz
ZSk7CisgIH0KKworICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihsaW5lLCBsaW5lVmll
dywgZGltcywgYWxsb3dBYm92ZSkgeworICAgIGlmICghbGluZS53aWRnZXRzKSByZXR1cm47Cisg
ICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7CisgICAgZm9yICh2YXIg
aSA9IDAsIHdzID0gbGluZS53aWRnZXRzOyBpIDwgd3MubGVuZ3RoOyArK2kpIHsKICAgICAgIHZh
ciB3aWRnZXQgPSB3c1tpXSwgbm9kZSA9IGVsdCgiZGl2IiwgW3dpZGdldC5ub2RlXSwgIkNvZGVN
aXJyb3ItbGluZXdpZGdldCIpOwogICAgICAgaWYgKCF3aWRnZXQuaGFuZGxlTW91c2VFdmVudHMp
IG5vZGUuaWdub3JlRXZlbnRzID0gdHJ1ZTsKLSAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3aWRn
ZXQsIG5vZGUsIHdyYXAsIGRpbXMpOwotICAgICAgaWYgKHdpZGdldC5hYm92ZSkKLSAgICAgICAg
d3JhcC5pbnNlcnRCZWZvcmUobm9kZSwgY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiBsaW5lLmhl
aWdodCAhPSAwID8gZ3V0dGVyV3JhcCA6IGxpbmVFbGVtZW50KTsKKyAgICAgIHBvc2l0aW9uTGlu
ZVdpZGdldCh3aWRnZXQsIG5vZGUsIGxpbmVWaWV3LCBkaW1zKTsKKyAgICAgIGlmIChhbGxvd0Fi
b3ZlICYmIHdpZGdldC5hYm92ZSkKKyAgICAgICAgd3JhcC5pbnNlcnRCZWZvcmUobm9kZSwgbGlu
ZVZpZXcuZ3V0dGVyIHx8IGxpbmVWaWV3LnRleHQpOwogICAgICAgZWxzZQogICAgICAgICB3cmFw
LmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgc2lnbmFsTGF0ZXIod2lkZ2V0LCAicmVkcmF3Iik7
CiAgICAgfQotICAgIHJldHVybiB3cmFwOwogICB9CgotICBmdW5jdGlvbiBwb3NpdGlvbkxpbmVX
aWRnZXQod2lkZ2V0LCBub2RlLCB3cmFwLCBkaW1zKSB7CisgIGZ1bmN0aW9uIHBvc2l0aW9uTGlu
ZVdpZGdldCh3aWRnZXQsIG5vZGUsIGxpbmVWaWV3LCBkaW1zKSB7CiAgICAgaWYgKHdpZGdldC5u
b0hTY3JvbGwpIHsKLSAgICAgICh3cmFwLmFsaWduYWJsZSB8fCAod3JhcC5hbGlnbmFibGUgPSBb
XSkpLnB1c2gobm9kZSk7CisgICAgICAobGluZVZpZXcuYWxpZ25hYmxlIHx8IChsaW5lVmlldy5h
bGlnbmFibGUgPSBbXSkpLnB1c2gobm9kZSk7CiAgICAgICB2YXIgd2lkdGggPSBkaW1zLndyYXBw
ZXJXaWR0aDsKICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGRpbXMuZml4ZWRQb3MgKyAicHgiOwog
ICAgICAgaWYgKCF3aWRnZXQuY292ZXJHdXR0ZXIpIHsKQEAgLTc2Nyw1NyArOTMxLDM3MCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgIH0KCisgIC8vIFBPU0lU
SU9OIE9CSkVDVAorCisgIC8vIEEgUG9zIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwb3NpdGlvbiB3
aXRoaW4gdGhlIHRleHQuCisgIHZhciBQb3MgPSBDb2RlTWlycm9yLlBvcyA9IGZ1bmN0aW9uKGxp
bmUsIGNoKSB7CisgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBvcykpIHJldHVybiBuZXcgUG9z
KGxpbmUsIGNoKTsKKyAgICB0aGlzLmxpbmUgPSBsaW5lOyB0aGlzLmNoID0gY2g7CisgIH07CisK
KyAgLy8gQ29tcGFyZSB0d28gcG9zaXRpb25zLCByZXR1cm4gMCBpZiB0aGV5IGFyZSB0aGUgc2Ft
ZSwgYSBuZWdhdGl2ZQorICAvLyBudW1iZXIgd2hlbiBhIGlzIGxlc3MsIGFuZCBhIHBvc2l0aXZl
IG51bWJlciBvdGhlcndpc2UuCisgIHZhciBjbXAgPSBDb2RlTWlycm9yLmNtcFBvcyA9IGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEubGluZSAtIGIubGluZSB8fCBhLmNoIC0gYi5jaDsgfTsKKwor
ICBmdW5jdGlvbiBjb3B5UG9zKHgpIHtyZXR1cm4gUG9zKHgubGluZSwgeC5jaCk7fQorICBmdW5j
dGlvbiBtYXhQb3MoYSwgYikgeyByZXR1cm4gY21wKGEsIGIpIDwgMCA/IGIgOiBhOyB9CisgIGZ1
bmN0aW9uIG1pblBvcyhhLCBiKSB7IHJldHVybiBjbXAoYSwgYikgPCAwID8gYSA6IGI7IH0KKwog
ICAvLyBTRUxFQ1RJT04gLyBDVVJTT1IKCisgIC8vIFNlbGVjdGlvbiBvYmplY3RzIGFyZSBpbW11
dGFibGUuIEEgbmV3IG9uZSBpcyBjcmVhdGVkIGV2ZXJ5IHRpbWUKKyAgLy8gdGhlIHNlbGVjdGlv
biBjaGFuZ2VzLiBBIHNlbGVjdGlvbiBpcyBvbmUgb3IgbW9yZSBub24tb3ZlcmxhcHBpbmcKKyAg
Ly8gKGFuZCBub24tdG91Y2hpbmcpIHJhbmdlcywgc29ydGVkLCBhbmQgYW4gaW50ZWdlciB0aGF0
IGluZGljYXRlcworICAvLyB3aGljaCBvbmUgaXMgdGhlIHByaW1hcnkgc2VsZWN0aW9uICh0aGUg
b25lIHRoYXQncyBzY3JvbGxlZCBpbnRvCisgIC8vIHZpZXcsIHRoYXQgZ2V0Q3Vyc29yIHJldHVy
bnMsIGV0YykuCisgIGZ1bmN0aW9uIFNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleCkgeworICAg
IHRoaXMucmFuZ2VzID0gcmFuZ2VzOworICAgIHRoaXMucHJpbUluZGV4ID0gcHJpbUluZGV4Owor
ICB9CisKKyAgU2VsZWN0aW9uLnByb3RvdHlwZSA9IHsKKyAgICBwcmltYXJ5OiBmdW5jdGlvbigp
IHsgcmV0dXJuIHRoaXMucmFuZ2VzW3RoaXMucHJpbUluZGV4XTsgfSwKKyAgICBlcXVhbHM6IGZ1
bmN0aW9uKG90aGVyKSB7CisgICAgICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuIHRydWU7Cisg
ICAgICBpZiAob3RoZXIucHJpbUluZGV4ICE9IHRoaXMucHJpbUluZGV4IHx8IG90aGVyLnJhbmdl
cy5sZW5ndGggIT0gdGhpcy5yYW5nZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CisgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBo
ZXJlID0gdGhpcy5yYW5nZXNbaV0sIHRoZXJlID0gb3RoZXIucmFuZ2VzW2ldOworICAgICAgICBp
ZiAoY21wKGhlcmUuYW5jaG9yLCB0aGVyZS5hbmNob3IpICE9IDAgfHwgY21wKGhlcmUuaGVhZCwg
dGhlcmUuaGVhZCkgIT0gMCkgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSwKKyAgICBkZWVwQ29weTogZnVuY3Rpb24oKSB7CisgICAgICBmb3IgKHZhciBv
dXQgPSBbXSwgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgb3V0
W2ldID0gbmV3IFJhbmdlKGNvcHlQb3ModGhpcy5yYW5nZXNbaV0uYW5jaG9yKSwgY29weVBvcyh0
aGlzLnJhbmdlc1tpXS5oZWFkKSk7CisgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihvdXQsIHRo
aXMucHJpbUluZGV4KTsKKyAgICB9LAorICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigp
IHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspCisg
ICAgICAgIGlmICghdGhpcy5yYW5nZXNbaV0uZW1wdHkoKSkgcmV0dXJuIHRydWU7CisgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfSwKKyAgICBjb250YWluczogZnVuY3Rpb24ocG9zLCBlbmQpIHsK
KyAgICAgIGlmICghZW5kKSBlbmQgPSBwb3M7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMucmFuZ2Vz
W2ldOworICAgICAgICBpZiAoY21wKGVuZCwgcmFuZ2UuZnJvbSgpKSA+PSAwICYmIGNtcChwb3Ms
IHJhbmdlLnRvKCkpIDw9IDApCisgICAgICAgICAgcmV0dXJuIGk7CisgICAgICB9CisgICAgICBy
ZXR1cm4gLTE7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIFJhbmdlKGFuY2hvciwgaGVhZCkg
eworICAgIHRoaXMuYW5jaG9yID0gYW5jaG9yOyB0aGlzLmhlYWQgPSBoZWFkOworICB9CisKKyAg
UmFuZ2UucHJvdG90eXBlID0geworICAgIGZyb206IGZ1bmN0aW9uKCkgeyByZXR1cm4gbWluUG9z
KHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpOyB9LAorICAgIHRvOiBmdW5jdGlvbigpIHsgcmV0dXJu
IG1heFBvcyh0aGlzLmFuY2hvciwgdGhpcy5oZWFkKTsgfSwKKyAgICBlbXB0eTogZnVuY3Rpb24o
KSB7CisgICAgICByZXR1cm4gdGhpcy5oZWFkLmxpbmUgPT0gdGhpcy5hbmNob3IubGluZSAmJiB0
aGlzLmhlYWQuY2ggPT0gdGhpcy5hbmNob3IuY2g7CisgICAgfQorICB9OworCisgIC8vIFRha2Ug
YW4gdW5zb3J0ZWQsIHBvdGVudGlhbGx5IG92ZXJsYXBwaW5nIHNldCBvZiByYW5nZXMsIGFuZAor
ICAvLyBidWlsZCBhIHNlbGVjdGlvbiBvdXQgb2YgaXQuICdDb25zdW1lcycgcmFuZ2VzIGFycmF5
IChtb2RpZnlpbmcKKyAgLy8gaXQpLgorICBmdW5jdGlvbiBub3JtYWxpemVTZWxlY3Rpb24ocmFu
Z2VzLCBwcmltSW5kZXgpIHsKKyAgICB2YXIgcHJpbSA9IHJhbmdlc1twcmltSW5kZXhdOworICAg
IHJhbmdlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGNtcChhLmZyb20oKSwgYi5mcm9t
KCkpOyB9KTsKKyAgICBwcmltSW5kZXggPSBpbmRleE9mKHJhbmdlcywgcHJpbSk7CisgICAgZm9y
ICh2YXIgaSA9IDE7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBjdXIgPSBy
YW5nZXNbaV0sIHByZXYgPSByYW5nZXNbaSAtIDFdOworICAgICAgaWYgKGNtcChwcmV2LnRvKCks
IGN1ci5mcm9tKCkpID49IDApIHsKKyAgICAgICAgdmFyIGZyb20gPSBtaW5Qb3MocHJldi5mcm9t
KCksIGN1ci5mcm9tKCkpLCB0byA9IG1heFBvcyhwcmV2LnRvKCksIGN1ci50bygpKTsKKyAgICAg
ICAgdmFyIGludiA9IHByZXYuZW1wdHkoKSA/IGN1ci5mcm9tKCkgPT0gY3VyLmhlYWQgOiBwcmV2
LmZyb20oKSA9PSBwcmV2LmhlYWQ7CisgICAgICAgIGlmIChpIDw9IHByaW1JbmRleCkgLS1wcmlt
SW5kZXg7CisgICAgICAgIHJhbmdlcy5zcGxpY2UoLS1pLCAyLCBuZXcgUmFuZ2UoaW52ID8gdG8g
OiBmcm9tLCBpbnYgPyBmcm9tIDogdG8pKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5l
dyBTZWxlY3Rpb24ocmFuZ2VzLCBwcmltSW5kZXgpOworICB9CisKKyAgZnVuY3Rpb24gc2ltcGxl
U2VsZWN0aW9uKGFuY2hvciwgaGVhZCkgeworICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKFtuZXcg
UmFuZ2UoYW5jaG9yLCBoZWFkIHx8IGFuY2hvcildLCAwKTsKKyAgfQorCisgIC8vIE1vc3Qgb2Yg
dGhlIGV4dGVybmFsIEFQSSBjbGlwcyBnaXZlbiBwb3NpdGlvbnMgdG8gbWFrZSBzdXJlIHRoZXkK
KyAgLy8gYWN0dWFsbHkgZXhpc3Qgd2l0aGluIHRoZSBkb2N1bWVudC4KKyAgZnVuY3Rpb24gY2xp
cExpbmUoZG9jLCBuKSB7cmV0dXJuIE1hdGgubWF4KGRvYy5maXJzdCwgTWF0aC5taW4obiwgZG9j
LmZpcnN0ICsgZG9jLnNpemUgLSAxKSk7fQorICBmdW5jdGlvbiBjbGlwUG9zKGRvYywgcG9zKSB7
CisgICAgaWYgKHBvcy5saW5lIDwgZG9jLmZpcnN0KSByZXR1cm4gUG9zKGRvYy5maXJzdCwgMCk7
CisgICAgdmFyIGxhc3QgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE7CisgICAgaWYgKHBvcy5s
aW5lID4gbGFzdCkgcmV0dXJuIFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5n
dGgpOworICAgIHJldHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRl
eHQubGVuZ3RoKTsKKyAgfQorICBmdW5jdGlvbiBjbGlwVG9MZW4ocG9zLCBsaW5lbGVuKSB7Cisg
ICAgdmFyIGNoID0gcG9zLmNoOworICAgIGlmIChjaCA9PSBudWxsIHx8IGNoID4gbGluZWxlbikg
cmV0dXJuIFBvcyhwb3MubGluZSwgbGluZWxlbik7CisgICAgZWxzZSBpZiAoY2ggPCAwKSByZXR1
cm4gUG9zKHBvcy5saW5lLCAwKTsKKyAgICBlbHNlIHJldHVybiBwb3M7CisgIH0KKyAgZnVuY3Rp
b24gaXNMaW5lKGRvYywgbCkge3JldHVybiBsID49IGRvYy5maXJzdCAmJiBsIDwgZG9jLmZpcnN0
ICsgZG9jLnNpemU7fQorICBmdW5jdGlvbiBjbGlwUG9zQXJyYXkoZG9jLCBhcnJheSkgeworICAg
IGZvciAodmFyIG91dCA9IFtdLCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSBvdXRbaV0g
PSBjbGlwUG9zKGRvYywgYXJyYXlbaV0pOworICAgIHJldHVybiBvdXQ7CisgIH0KKworICAvLyBT
RUxFQ1RJT04gVVBEQVRFUworCisgIC8vIFRoZSAnc2Nyb2xsJyBwYXJhbWV0ZXIgZ2l2ZW4gdG8g
bWFueSBvZiB0aGVzZSBpbmRpY2F0ZWQgd2hldGhlcgorICAvLyB0aGUgbmV3IGN1cnNvciBwb3Np
dGlvbiBzaG91bGQgYmUgc2Nyb2xsZWQgaW50byB2aWV3IGFmdGVyCisgIC8vIG1vZGlmeWluZyB0
aGUgc2VsZWN0aW9uLgorCisgIC8vIElmIHNoaWZ0IGlzIGhlbGQgb3IgdGhlIGV4dGVuZCBmbGFn
IGlzIHNldCwgZXh0ZW5kcyBhIHJhbmdlIHRvCisgIC8vIGluY2x1ZGUgYSBnaXZlbiBwb3NpdGlv
biAoYW5kIG9wdGlvbmFsbHkgYSBzZWNvbmQgcG9zaXRpb24pLgorICAvLyBPdGhlcndpc2UsIHNp
bXBseSByZXR1cm5zIHRoZSByYW5nZSBiZXR3ZWVuIHRoZSBnaXZlbiBwb3NpdGlvbnMuCisgIC8v
IFVzZWQgZm9yIGN1cnNvciBtb3Rpb24gYW5kIHN1Y2guCisgIGZ1bmN0aW9uIGV4dGVuZFJhbmdl
KGRvYywgcmFuZ2UsIGhlYWQsIG90aGVyKSB7CisgICAgaWYgKGRvYy5jbSAmJiBkb2MuY20uZGlz
cGxheS5zaGlmdCB8fCBkb2MuZXh0ZW5kKSB7CisgICAgICB2YXIgYW5jaG9yID0gcmFuZ2UuYW5j
aG9yOworICAgICAgaWYgKG90aGVyKSB7CisgICAgICAgIHZhciBwb3NCZWZvcmUgPSBjbXAoaGVh
ZCwgYW5jaG9yKSA8IDA7CisgICAgICAgIGlmIChwb3NCZWZvcmUgIT0gKGNtcChvdGhlciwgYW5j
aG9yKSA8IDApKSB7CisgICAgICAgICAgYW5jaG9yID0gaGVhZDsKKyAgICAgICAgICBoZWFkID0g
b3RoZXI7CisgICAgICAgIH0gZWxzZSBpZiAocG9zQmVmb3JlICE9IChjbXAoaGVhZCwgb3RoZXIp
IDwgMCkpIHsKKyAgICAgICAgICBoZWFkID0gb3RoZXI7CisgICAgICAgIH0KKyAgICAgIH0KKyAg
ICAgIHJldHVybiBuZXcgUmFuZ2UoYW5jaG9yLCBoZWFkKTsKKyAgICB9IGVsc2UgeworICAgICAg
cmV0dXJuIG5ldyBSYW5nZShvdGhlciB8fCBoZWFkLCBoZWFkKTsKKyAgICB9CisgIH0KKworICAv
LyBFeHRlbmQgdGhlIHByaW1hcnkgc2VsZWN0aW9uIHJhbmdlLCBkaXNjYXJkIHRoZSByZXN0Lgor
ICBmdW5jdGlvbiBleHRlbmRTZWxlY3Rpb24oZG9jLCBoZWFkLCBvdGhlciwgb3B0aW9ucykgewor
ICAgIHNldFNlbGVjdGlvbihkb2MsIG5ldyBTZWxlY3Rpb24oW2V4dGVuZFJhbmdlKGRvYywgZG9j
LnNlbC5wcmltYXJ5KCksIGhlYWQsIG90aGVyKV0sIDApLCBvcHRpb25zKTsKKyAgfQorCisgIC8v
IEV4dGVuZCBhbGwgc2VsZWN0aW9ucyAocG9zIGlzIGFuIGFycmF5IG9mIHNlbGVjdGlvbnMgd2l0
aCBsZW5ndGgKKyAgLy8gZXF1YWwgdGhlIG51bWJlciBvZiBzZWxlY3Rpb25zKQorICBmdW5jdGlv
biBleHRlbmRTZWxlY3Rpb25zKGRvYywgaGVhZHMsIG9wdGlvbnMpIHsKKyAgICBmb3IgKHZhciBv
dXQgPSBbXSwgaSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykKKyAgICAgIG91
dFtpXSA9IGV4dGVuZFJhbmdlKGRvYywgZG9jLnNlbC5yYW5nZXNbaV0sIGhlYWRzW2ldLCBudWxs
KTsKKyAgICB2YXIgbmV3U2VsID0gbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgZG9jLnNlbC5wcmlt
SW5kZXgpOworICAgIHNldFNlbGVjdGlvbihkb2MsIG5ld1NlbCwgb3B0aW9ucyk7CisgIH0KKwor
ICAvLyBVcGRhdGVzIGEgc2luZ2xlIHJhbmdlIGluIHRoZSBzZWxlY3Rpb24uCisgIGZ1bmN0aW9u
IHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpLCByYW5nZSwgb3B0aW9ucykgeworICAgIHZhciBy
YW5nZXMgPSBkb2Muc2VsLnJhbmdlcy5zbGljZSgwKTsKKyAgICByYW5nZXNbaV0gPSByYW5nZTsK
KyAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLCBkb2Muc2Vs
LnByaW1JbmRleCksIG9wdGlvbnMpOworICB9CisKKyAgLy8gUmVzZXQgdGhlIHNlbGVjdGlvbiB0
byBhIHNpbmdsZSByYW5nZS4KKyAgZnVuY3Rpb24gc2V0U2ltcGxlU2VsZWN0aW9uKGRvYywgYW5j
aG9yLCBoZWFkLCBvcHRpb25zKSB7CisgICAgc2V0U2VsZWN0aW9uKGRvYywgc2ltcGxlU2VsZWN0
aW9uKGFuY2hvciwgaGVhZCksIG9wdGlvbnMpOworICB9CisKKyAgLy8gR2l2ZSBiZWZvcmVTZWxl
Y3Rpb25DaGFuZ2UgaGFuZGxlcnMgYSBjaGFuZ2UgdG8gaW5mbHVlbmNlIGEKKyAgLy8gc2VsZWN0
aW9uIHVwZGF0ZS4KKyAgZnVuY3Rpb24gZmlsdGVyU2VsZWN0aW9uQ2hhbmdlKGRvYywgc2VsKSB7
CisgICAgdmFyIG9iaiA9IHsKKyAgICAgIHJhbmdlczogc2VsLnJhbmdlcywKKyAgICAgIHVwZGF0
ZTogZnVuY3Rpb24ocmFuZ2VzKSB7CisgICAgICAgIHRoaXMucmFuZ2VzID0gW107CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKQorICAgICAgICAgIHRoaXMu
cmFuZ2VzW2ldID0gbmV3IFJhbmdlKGNsaXBQb3MoZG9jLCByYW5nZXNbaV0uYW5jaG9yKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9zKGRvYywgcmFuZ2VzW2ld
LmhlYWQpKTsKKyAgICAgIH0KKyAgICB9OworICAgIHNpZ25hbChkb2MsICJiZWZvcmVTZWxlY3Rp
b25DaGFuZ2UiLCBkb2MsIG9iaik7CisgICAgaWYgKGRvYy5jbSkgc2lnbmFsKGRvYy5jbSwgImJl
Zm9yZVNlbGVjdGlvbkNoYW5nZSIsIGRvYy5jbSwgb2JqKTsKKyAgICBpZiAob2JqLnJhbmdlcyAh
PSBzZWwucmFuZ2VzKSByZXR1cm4gbm9ybWFsaXplU2VsZWN0aW9uKG9iai5yYW5nZXMsIG9iai5y
YW5nZXMubGVuZ3RoIC0gMSk7CisgICAgZWxzZSByZXR1cm4gc2VsOworICB9CisKKyAgZnVuY3Rp
b24gc2V0U2VsZWN0aW9uUmVwbGFjZUhpc3RvcnkoZG9jLCBzZWwsIG9wdGlvbnMpIHsKKyAgICB2
YXIgZG9uZSA9IGRvYy5oaXN0b3J5LmRvbmUsIGxhc3QgPSBsc3QoZG9uZSk7CisgICAgaWYgKGxh
c3QgJiYgbGFzdC5yYW5nZXMpIHsKKyAgICAgIGRvbmVbZG9uZS5sZW5ndGggLSAxXSA9IHNlbDsK
KyAgICAgIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbCwgb3B0aW9ucyk7CisgICAgfSBlbHNl
IHsKKyAgICAgIHNldFNlbGVjdGlvbihkb2MsIHNlbCwgb3B0aW9ucyk7CisgICAgfQorICB9CisK
KyAgLy8gU2V0IGEgbmV3IHNlbGVjdGlvbi4KKyAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGRvYywg
c2VsLCBvcHRpb25zKSB7CisgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmlnaW4gJiYgZG9j
LmNtKSBkb2MuY20uY3VyT3Aub3JpZ2luID0gb3B0aW9ucy5vcmlnaW47CisgICAgc2V0U2VsZWN0
aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRpb25zKTsKKyAgICBhZGRTZWxlY3Rpb25Ub0hpc3Rvcnko
ZG9jLCBkb2Muc2VsLCBkb2MuY20gPyBkb2MuY20uY3VyT3AuaWQgOiBOYU4sIG9wdGlvbnMpOwor
ICB9CisKKyAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRpb25zKSB7
CisgICAgaWYgKGhhc0hhbmRsZXIoZG9jLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikgfHwgZG9j
LmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikpCisgICAg
ICBzZWwgPSBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBzZWwpOworCisgICAgdmFyIGJpYXMg
PSBjbXAoc2VsLnByaW1hcnkoKS5oZWFkLCBkb2Muc2VsLnByaW1hcnkoKS5oZWFkKSA8IDAgPyAt
MSA6IDE7CisgICAgc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBza2lwQXRvbWljSW5TZWxlY3Rpb24o
ZG9jLCBzZWwsIGJpYXMsIHRydWUpKTsKKworICAgIGlmICghKG9wdGlvbnMgJiYgb3B0aW9ucy5z
Y3JvbGwgPT09IGZhbHNlKSAmJiBkb2MuY20pCisgICAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGRv
Yy5jbSk7CisgIH0KKworICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25Jbm5lcihkb2MsIHNlbCkgewor
ICAgIGlmIChzZWwuZXF1YWxzKGRvYy5zZWwpKSByZXR1cm47CisKKyAgICBkb2Muc2VsID0gc2Vs
OworCisgICAgaWYgKGRvYy5jbSkKKyAgICAgIGRvYy5jbS5jdXJPcC51cGRhdGVJbnB1dCA9IGRv
Yy5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0KKyAgICAgICAgZG9jLmNtLmN1ck9wLmN1cnNv
ckFjdGl2aXR5ID0gdHJ1ZTsKKyAgICBzaWduYWxMYXRlcihkb2MsICJjdXJzb3JBY3Rpdml0eSIs
IGRvYyk7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc2VsZWN0aW9uIGRvZXMgbm90IHBh
cnRpYWxseSBzZWxlY3QgYW55IGF0b21pYworICAvLyBtYXJrZWQgcmFuZ2VzLgorICBmdW5jdGlv
biByZUNoZWNrU2VsZWN0aW9uKGRvYykgeworICAgIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2tp
cEF0b21pY0luU2VsZWN0aW9uKGRvYywgZG9jLnNlbCwgbnVsbCwgZmFsc2UpLCBzZWxfZG9udFNj
cm9sbCk7CisgIH0KKworICAvLyBSZXR1cm4gYSBzZWxlY3Rpb24gdGhhdCBkb2VzIG5vdCBwYXJ0
aWFsbHkgc2VsZWN0IGFueSBhdG9taWMKKyAgLy8gcmFuZ2VzLgorICBmdW5jdGlvbiBza2lwQXRv
bWljSW5TZWxlY3Rpb24oZG9jLCBzZWwsIGJpYXMsIG1heUNsZWFyKSB7CisgICAgdmFyIG91dDsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAg
IHZhciByYW5nZSA9IHNlbC5yYW5nZXNbaV07CisgICAgICB2YXIgbmV3QW5jaG9yID0gc2tpcEF0
b21pYyhkb2MsIHJhbmdlLmFuY2hvciwgYmlhcywgbWF5Q2xlYXIpOworICAgICAgdmFyIG5ld0hl
YWQgPSBza2lwQXRvbWljKGRvYywgcmFuZ2UuaGVhZCwgYmlhcywgbWF5Q2xlYXIpOworICAgICAg
aWYgKG91dCB8fCBuZXdBbmNob3IgIT0gcmFuZ2UuYW5jaG9yIHx8IG5ld0hlYWQgIT0gcmFuZ2Uu
aGVhZCkgeworICAgICAgICBpZiAoIW91dCkgb3V0ID0gc2VsLnJhbmdlcy5zbGljZSgwLCBpKTsK
KyAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKG5ld0FuY2hvciwgbmV3SGVhZCk7CisgICAgICB9
CisgICAgfQorICAgIHJldHVybiBvdXQgPyBub3JtYWxpemVTZWxlY3Rpb24ob3V0LCBzZWwucHJp
bUluZGV4KSA6IHNlbDsKKyAgfQorCisgIC8vIEVuc3VyZSBhIGdpdmVuIHBvc2l0aW9uIGlzIG5v
dCBpbnNpZGUgYW4gYXRvbWljIHJhbmdlLgorICBmdW5jdGlvbiBza2lwQXRvbWljKGRvYywgcG9z
LCBiaWFzLCBtYXlDbGVhcikgeworICAgIHZhciBmbGlwcGVkID0gZmFsc2UsIGN1clBvcyA9IHBv
czsKKyAgICB2YXIgZGlyID0gYmlhcyB8fCAxOworICAgIGRvYy5jYW50RWRpdCA9IGZhbHNlOwor
ICAgIHNlYXJjaDogZm9yICg7OykgeworICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgY3Vy
UG9zLmxpbmUpOworICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIHsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
dmFyIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXSwgbSA9IHNwLm1hcmtlcjsKKyAgICAgICAgICBp
ZiAoKHNwLmZyb20gPT0gbnVsbCB8fCAobS5pbmNsdXNpdmVMZWZ0ID8gc3AuZnJvbSA8PSBjdXJQ
b3MuY2ggOiBzcC5mcm9tIDwgY3VyUG9zLmNoKSkgJiYKKyAgICAgICAgICAgICAgKHNwLnRvID09
IG51bGwgfHwgKG0uaW5jbHVzaXZlUmlnaHQgPyBzcC50byA+PSBjdXJQb3MuY2ggOiBzcC50byA+
IGN1clBvcy5jaCkpKSB7CisgICAgICAgICAgICBpZiAobWF5Q2xlYXIpIHsKKyAgICAgICAgICAg
ICAgc2lnbmFsKG0sICJiZWZvcmVDdXJzb3JFbnRlciIpOworICAgICAgICAgICAgICBpZiAobS5l
eHBsaWNpdGx5Q2xlYXJlZCkgeworICAgICAgICAgICAgICAgIGlmICghbGluZS5tYXJrZWRTcGFu
cykgYnJlYWs7CisgICAgICAgICAgICAgICAgZWxzZSB7LS1pOyBjb250aW51ZTt9CisgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbS5hdG9taWMpIGNvbnRp
bnVlOworICAgICAgICAgICAgdmFyIG5ld1BvcyA9IG0uZmluZChkaXIgPCAwID8gLTEgOiAxKTsK
KyAgICAgICAgICAgIGlmIChjbXAobmV3UG9zLCBjdXJQb3MpID09IDApIHsKKyAgICAgICAgICAg
ICAgbmV3UG9zLmNoICs9IGRpcjsKKyAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5jaCA8IDApIHsK
KyAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUgPiBkb2MuZmlyc3QpIG5ld1BvcyA9IGNs
aXBQb3MoZG9jLCBQb3MobmV3UG9zLmxpbmUgLSAxKSk7CisgICAgICAgICAgICAgICAgZWxzZSBu
ZXdQb3MgPSBudWxsOworICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld1Bvcy5jaCA+IGxpbmUu
dGV4dC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUgPCBkb2MuZmly
c3QgKyBkb2Muc2l6ZSAtIDEpIG5ld1BvcyA9IFBvcyhuZXdQb3MubGluZSArIDEsIDApOworICAg
ICAgICAgICAgICAgIGVsc2UgbmV3UG9zID0gbnVsbDsKKyAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICBpZiAoIW5ld1BvcykgeworICAgICAgICAgICAgICAgIGlmIChmbGlwcGVkKSB7Cisg
ICAgICAgICAgICAgICAgICAvLyBEcml2ZW4gaW4gYSBjb3JuZXIgLS0gbm8gdmFsaWQgY3Vyc29y
IHBvc2l0aW9uIGZvdW5kIGF0IGFsbAorICAgICAgICAgICAgICAgICAgLy8gLS0gdHJ5IGFnYWlu
ICp3aXRoKiBjbGVhcmluZywgaWYgd2UgZGlkbid0IGFscmVhZHkKKyAgICAgICAgICAgICAgICAg
IGlmICghbWF5Q2xlYXIpIHJldHVybiBza2lwQXRvbWljKGRvYywgcG9zLCBiaWFzLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdHVybiBvZmYgZWRpdGluZyB1bnRpbCBm
dXJ0aGVyIG5vdGljZSwgYW5kIHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGRvYworICAgICAgICAg
ICAgICAgICAgZG9jLmNhbnRFZGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBQ
b3MoZG9jLmZpcnN0LCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmxp
cHBlZCA9IHRydWU7IG5ld1BvcyA9IHBvczsgZGlyID0gLWRpcjsKKyAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VyUG9zID0gbmV3UG9zOworICAgICAgICAgICAg
Y29udGludWUgc2VhcmNoOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAg
cmV0dXJuIGN1clBvczsKKyAgICB9CisgIH0KKworICAvLyBTRUxFQ1RJT04gRFJBV0lORworCisg
IC8vIFJlZHJhdyB0aGUgc2VsZWN0aW9uIGFuZC9vciBjdXJzb3IKICAgZnVuY3Rpb24gdXBkYXRl
U2VsZWN0aW9uKGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIHZhciBj
b2xsYXBzZWQgPSBwb3NFcShjbS5kb2Muc2VsLmZyb20sIGNtLmRvYy5zZWwudG8pOwotICAgIGlm
IChjb2xsYXBzZWQgfHwgY20ub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZykKLSAgICAg
IHVwZGF0ZVNlbGVjdGlvbkN1cnNvcihjbSk7Ci0gICAgZWxzZQotICAgICAgZGlzcGxheS5jdXJz
b3Iuc3R5bGUuZGlzcGxheSA9IGRpc3BsYXkub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICJu
b25lIjsKLSAgICBpZiAoIWNvbGxhcHNlZCkKLSAgICAgIHVwZGF0ZVNlbGVjdGlvblJhbmdlKGNt
KTsKLSAgICBlbHNlCi0gICAgICBkaXNwbGF5LnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0g
Im5vbmUiOworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jOworICAg
IHZhciBjdXJGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAg
ICB2YXIgc2VsRnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTsKKyAgICAgIHZhciBjb2xsYXBzZWQg
PSByYW5nZS5lbXB0eSgpOworICAgICAgaWYgKGNvbGxhcHNlZCB8fCBjbS5vcHRpb25zLnNob3dD
dXJzb3JXaGVuU2VsZWN0aW5nKQorICAgICAgICBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCByYW5n
ZSwgY3VyRnJhZ21lbnQpOworICAgICAgaWYgKCFjb2xsYXBzZWQpCisgICAgICAgIGRyYXdTZWxl
Y3Rpb25SYW5nZShjbSwgcmFuZ2UsIHNlbEZyYWdtZW50KTsKKyAgICB9CgogICAgIC8vIE1vdmUg
dGhlIGhpZGRlbiB0ZXh0YXJlYSBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCBzY3JvbGxpbmcg
YXJ0aWZhY3RzCiAgICAgaWYgKGNtLm9wdGlvbnMubW92ZUlucHV0V2l0aEN1cnNvcikgewotICAg
ICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHMoY20sIGNtLmRvYy5zZWwuaGVhZCwgImRpdiIp
OwotICAgICAgdmFyIHdyYXBPZmYgPSBnZXRSZWN0KGRpc3BsYXkud3JhcHBlciksIGxpbmVPZmYg
PSBnZXRSZWN0KGRpc3BsYXkubGluZURpdik7Ci0gICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxl
LnRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQg
LSAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVhZFBvcy50b3AgKyBsaW5lT2ZmLnRvcCAtIHdyYXBPZmYudG9wKSkgKyAicHgiOwot
ICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS5sZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4o
ZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLmxlZnQgKyBsaW5lT2Zm
LmxlZnQgLSB3cmFwT2ZmLmxlZnQpKSArICJweCI7CisgICAgICB2YXIgaGVhZFBvcyA9IGN1cnNv
ckNvb3JkcyhjbSwgZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCwgImRpdiIpOworICAgICAgdmFyIHdy
YXBPZmYgPSBkaXNwbGF5LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGxpbmVPZmYg
PSBkaXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICB2YXIgdG9w
ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCAtIDEw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MudG9wICsgbGlu
ZU9mZi50b3AgLSB3cmFwT2ZmLnRvcCkpOworICAgICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBN
YXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggLSAxMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBvcy5sZWZ0ICsgbGluZU9mZi5sZWZ0IC0gd3Jh
cE9mZi5sZWZ0KSk7CisgICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcCA9IHRvcCArICJw
eCI7CisgICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IjsKICAg
ICB9CisKKyAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LmN1cnNvckRpdiwgY3VyRnJh
Z21lbnQpOworICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkuc2VsZWN0aW9uRGl2LCBz
ZWxGcmFnbWVudCk7CiAgIH0KCi0gIC8vIE5vIHNlbGVjdGlvbiwgcGxhaW4gY3Vyc29yCi0gIGZ1
bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbkN1cnNvcihjbSkgewotICAgIHZhciBkaXNwbGF5ID0gY20u
ZGlzcGxheSwgcG9zID0gY3Vyc29yQ29vcmRzKGNtLCBjbS5kb2Muc2VsLmhlYWQsICJkaXYiKTsK
LSAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS5sZWZ0ID0gcG9zLmxlZnQgKyAicHgiOwotICAgIGRp
c3BsYXkuY3Vyc29yLnN0eWxlLnRvcCA9IHBvcy50b3AgKyAicHgiOwotICAgIGRpc3BsYXkuY3Vy
c29yLnN0eWxlLmhlaWdodCA9IE1hdGgubWF4KDAsIHBvcy5ib3R0b20gLSBwb3MudG9wKSAqIGNt
Lm9wdGlvbnMuY3Vyc29ySGVpZ2h0ICsgInB4IjsKLSAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS5k
aXNwbGF5ID0gIiI7CisgIC8vIERyYXdzIGEgY3Vyc29yIGZvciB0aGUgZ2l2ZW4gcmFuZ2UKKyAg
ZnVuY3Rpb24gZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgcmFuZ2UsIG91dHB1dCkgeworICAgIHZh
ciBwb3MgPSBjdXJzb3JDb29yZHMoY20sIHJhbmdlLmhlYWQsICJkaXYiKTsKKworICAgIHZhciBj
dXJzb3IgPSBvdXRwdXQuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCAiXHUwMGEwIiwgIkNvZGVNaXJy
b3ItY3Vyc29yIikpOworICAgIGN1cnNvci5zdHlsZS5sZWZ0ID0gcG9zLmxlZnQgKyAicHgiOwor
ICAgIGN1cnNvci5zdHlsZS50b3AgPSBwb3MudG9wICsgInB4IjsKKyAgICBjdXJzb3Iuc3R5bGUu
aGVpZ2h0ID0gTWF0aC5tYXgoMCwgcG9zLmJvdHRvbSAtIHBvcy50b3ApICogY20ub3B0aW9ucy5j
dXJzb3JIZWlnaHQgKyAicHgiOwoKICAgICBpZiAocG9zLm90aGVyKSB7Ci0gICAgICBkaXNwbGF5
Lm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGRpc3BsYXkub3RoZXJDdXJz
b3Iuc3R5bGUubGVmdCA9IHBvcy5vdGhlci5sZWZ0ICsgInB4IjsKLSAgICAgIGRpc3BsYXkub3Ro
ZXJDdXJzb3Iuc3R5bGUudG9wID0gcG9zLm90aGVyLnRvcCArICJweCI7Ci0gICAgICBkaXNwbGF5
Lm90aGVyQ3Vyc29yLnN0eWxlLmhlaWdodCA9IChwb3Mub3RoZXIuYm90dG9tIC0gcG9zLm90aGVy
LnRvcCkgKiAuODUgKyAicHgiOwotICAgIH0gZWxzZSB7IGRpc3BsYXkub3RoZXJDdXJzb3Iuc3R5
bGUuZGlzcGxheSA9ICJub25lIjsgfQorICAgICAgLy8gU2Vjb25kYXJ5IGN1cnNvciwgc2hvd24g
d2hlbiBvbiBhICdqdW1wJyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0CisgICAgICB2YXIgb3RoZXJD
dXJzb3IgPSBvdXRwdXQuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCAiXHUwMGEwIiwgIkNvZGVNaXJy
b3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIikpOworICAgICAgb3RoZXJDdXJz
b3Iuc3R5bGUuZGlzcGxheSA9ICIiOworICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUubGVmdCA9IHBv
cy5vdGhlci5sZWZ0ICsgInB4IjsKKyAgICAgIG90aGVyQ3Vyc29yLnN0eWxlLnRvcCA9IHBvcy5v
dGhlci50b3AgKyAicHgiOworICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gKHBvcy5v
dGhlci5ib3R0b20gLSBwb3Mub3RoZXIudG9wKSAqIC44NSArICJweCI7CisgICAgfQogICB9Cgot
ICAvLyBIaWdobGlnaHQgc2VsZWN0aW9uCi0gIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvblJhbmdl
KGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2MsIHNlbCA9
IGNtLmRvYy5zZWw7CisgIC8vIERyYXdzIHRoZSBnaXZlbiByYW5nZSBhcyBhIGhpZ2hsaWdodGVk
IHNlbGVjdGlvbgorICBmdW5jdGlvbiBkcmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBvdXRw
dXQpIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKICAgICB2
YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgdmFy
IGNsaWVudFdpZHRoID0gZGlzcGxheS5saW5lU3BhY2Uub2Zmc2V0V2lkdGgsIHBsID0gcGFkZGlu
Z0xlZnQoY20uZGlzcGxheSk7CisgICAgdmFyIHBhZGRpbmcgPSBwYWRkaW5nSChjbS5kaXNwbGF5
KSwgbGVmdFNpZGUgPSBwYWRkaW5nLmxlZnQsIHJpZ2h0U2lkZSA9IGRpc3BsYXkubGluZVNwYWNl
Lm9mZnNldFdpZHRoIC0gcGFkZGluZy5yaWdodDsKCiAgICAgZnVuY3Rpb24gYWRkKGxlZnQsIHRv
cCwgd2lkdGgsIGJvdHRvbSkgewogICAgICAgaWYgKHRvcCA8IDApIHRvcCA9IDA7CisgICAgICB0
b3AgPSBNYXRoLnJvdW5kKHRvcCk7CisgICAgICBib3R0b20gPSBNYXRoLnJvdW5kKGJvdHRvbSk7
CiAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9y
LXNlbGVjdGVkIiwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogIiArIGxlZnQgKwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJweDsgdG9wOiAiICsgdG9wICsgInB4OyB3aWR0aDog
IiArICh3aWR0aCA9PSBudWxsID8gY2xpZW50V2lkdGggLSBsZWZ0IDogd2lkdGgpICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicHg7IHRvcDogIiArIHRvcCArICJweDsgd2lkdGg6
ICIgKyAod2lkdGggPT0gbnVsbCA/IHJpZ2h0U2lkZSAtIGxlZnQgOiB3aWR0aCkgKwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJweDsgaGVpZ2h0OiAiICsgKGJvdHRvbSAtIHRvcCkg
KyAicHgiKSk7CiAgICAgfQoKQEAgLTg0MCw0NCArMTMxNyw0NCBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICBsZWZ0ID0gbGVmdFBvcy5sZWZ0OwogICAgICAg
ICAgIHJpZ2h0ID0gcmlnaHRQb3MucmlnaHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGZyb21B
cmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBwbDsKKyAgICAgICAgaWYgKGZyb21Bcmcg
PT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBsZWZ0U2lkZTsKICAgICAgICAgaWYgKHJpZ2h0
UG9zLnRvcCAtIGxlZnRQb3MudG9wID4gMykgeyAvLyBEaWZmZXJlbnQgbGluZXMsIGRyYXcgdG9w
IHBhcnQKICAgICAgICAgICBhZGQobGVmdCwgbGVmdFBvcy50b3AsIG51bGwsIGxlZnRQb3MuYm90
dG9tKTsKLSAgICAgICAgICBsZWZ0ID0gcGw7CisgICAgICAgICAgbGVmdCA9IGxlZnRTaWRlOwog
ICAgICAgICAgIGlmIChsZWZ0UG9zLmJvdHRvbSA8IHJpZ2h0UG9zLnRvcCkgYWRkKGxlZnQsIGxl
ZnRQb3MuYm90dG9tLCBudWxsLCByaWdodFBvcy50b3ApOwogICAgICAgICB9Ci0gICAgICAgIGlm
ICh0b0FyZyA9PSBudWxsICYmIHRvID09IGxpbmVMZW4pIHJpZ2h0ID0gY2xpZW50V2lkdGg7Cisg
ICAgICAgIGlmICh0b0FyZyA9PSBudWxsICYmIHRvID09IGxpbmVMZW4pIHJpZ2h0ID0gcmlnaHRT
aWRlOwogICAgICAgICBpZiAoIXN0YXJ0IHx8IGxlZnRQb3MudG9wIDwgc3RhcnQudG9wIHx8IGxl
ZnRQb3MudG9wID09IHN0YXJ0LnRvcCAmJiBsZWZ0UG9zLmxlZnQgPCBzdGFydC5sZWZ0KQogICAg
ICAgICAgIHN0YXJ0ID0gbGVmdFBvczsKICAgICAgICAgaWYgKCFlbmQgfHwgcmlnaHRQb3MuYm90
dG9tID4gZW5kLmJvdHRvbSB8fCByaWdodFBvcy5ib3R0b20gPT0gZW5kLmJvdHRvbSAmJiByaWdo
dFBvcy5yaWdodCA+IGVuZC5yaWdodCkKICAgICAgICAgICBlbmQgPSByaWdodFBvczsKLSAgICAg
ICAgaWYgKGxlZnQgPCBwbCArIDEpIGxlZnQgPSBwbDsKKyAgICAgICAgaWYgKGxlZnQgPCBsZWZ0
U2lkZSArIDEpIGxlZnQgPSBsZWZ0U2lkZTsKICAgICAgICAgYWRkKGxlZnQsIHJpZ2h0UG9zLnRv
cCwgcmlnaHQgLSBsZWZ0LCByaWdodFBvcy5ib3R0b20pOwogICAgICAgfSk7CiAgICAgICByZXR1
cm4ge3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9OwogICAgIH0KCi0gICAgaWYgKHNlbC5mcm9tLmxp
bmUgPT0gc2VsLnRvLmxpbmUpIHsKLSAgICAgIGRyYXdGb3JMaW5lKHNlbC5mcm9tLmxpbmUsIHNl
bC5mcm9tLmNoLCBzZWwudG8uY2gpOworICAgIHZhciBzRnJvbSA9IHJhbmdlLmZyb20oKSwgc1Rv
ID0gcmFuZ2UudG8oKTsKKyAgICBpZiAoc0Zyb20ubGluZSA9PSBzVG8ubGluZSkgeworICAgICAg
ZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNUby5jaCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgIHZhciBmcm9tTGluZSA9IGdldExpbmUoZG9jLCBzZWwuZnJvbS5saW5lKSwgdG9MaW5l
ID0gZ2V0TGluZShkb2MsIHNlbC50by5saW5lKTsKLSAgICAgIHZhciBzaW5nbGVWTGluZSA9IHZp
c3VhbExpbmUoZG9jLCBmcm9tTGluZSkgPT0gdmlzdWFsTGluZShkb2MsIHRvTGluZSk7Ci0gICAg
ICB2YXIgbGVmdEVuZCA9IGRyYXdGb3JMaW5lKHNlbC5mcm9tLmxpbmUsIHNlbC5mcm9tLmNoLCBz
aW5nbGVWTGluZSA/IGZyb21MaW5lLnRleHQubGVuZ3RoIDogbnVsbCkuZW5kOwotICAgICAgdmFy
IHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGluZShzZWwudG8ubGluZSwgc2luZ2xlVkxpbmUgPyAwIDog
bnVsbCwgc2VsLnRvLmNoKS5zdGFydDsKKyAgICAgIHZhciBmcm9tTGluZSA9IGdldExpbmUoZG9j
LCBzRnJvbS5saW5lKSwgdG9MaW5lID0gZ2V0TGluZShkb2MsIHNUby5saW5lKTsKKyAgICAgIHZh
ciBzaW5nbGVWTGluZSA9IHZpc3VhbExpbmUoZnJvbUxpbmUpID09IHZpc3VhbExpbmUodG9MaW5l
KTsKKyAgICAgIHZhciBsZWZ0RW5kID0gZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gs
IHNpbmdsZVZMaW5lID8gZnJvbUxpbmUudGV4dC5sZW5ndGggKyAxIDogbnVsbCkuZW5kOworICAg
ICAgdmFyIHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGluZShzVG8ubGluZSwgc2luZ2xlVkxpbmUgPyAw
IDogbnVsbCwgc1RvLmNoKS5zdGFydDsKICAgICAgIGlmIChzaW5nbGVWTGluZSkgewogICAgICAg
ICBpZiAobGVmdEVuZC50b3AgPCByaWdodFN0YXJ0LnRvcCAtIDIpIHsKICAgICAgICAgICBhZGQo
bGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIG51bGwsIGxlZnRFbmQuYm90dG9tKTsKLSAgICAg
ICAgICBhZGQocGwsIHJpZ2h0U3RhcnQudG9wLCByaWdodFN0YXJ0LmxlZnQsIHJpZ2h0U3RhcnQu
Ym90dG9tKTsKKyAgICAgICAgICBhZGQobGVmdFNpZGUsIHJpZ2h0U3RhcnQudG9wLCByaWdodFN0
YXJ0LmxlZnQsIHJpZ2h0U3RhcnQuYm90dG9tKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIHJpZ2h0U3RhcnQubGVmdCAtIGxlZnRF
bmQucmlnaHQsIGxlZnRFbmQuYm90dG9tKTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgaWYg
KGxlZnRFbmQuYm90dG9tIDwgcmlnaHRTdGFydC50b3ApCi0gICAgICAgIGFkZChwbCwgbGVmdEVu
ZC5ib3R0b20sIG51bGwsIHJpZ2h0U3RhcnQudG9wKTsKKyAgICAgICAgYWRkKGxlZnRTaWRlLCBs
ZWZ0RW5kLmJvdHRvbSwgbnVsbCwgcmlnaHRTdGFydC50b3ApOwogICAgIH0KCi0gICAgcmVtb3Zl
Q2hpbGRyZW5BbmRBZGQoZGlzcGxheS5zZWxlY3Rpb25EaXYsIGZyYWdtZW50KTsKLSAgICBkaXNw
bGF5LnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAgb3V0cHV0LmFwcGVuZENo
aWxkKGZyYWdtZW50KTsKICAgfQoKICAgLy8gQ3Vyc29yLWJsaW5raW5nCkBAIC04ODYsMzcgKzEz
NjMsMzggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGRpc3Bs
YXkgPSBjbS5kaXNwbGF5OwogICAgIGNsZWFySW50ZXJ2YWwoZGlzcGxheS5ibGlua2VyKTsKICAg
ICB2YXIgb24gPSB0cnVlOwotICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHkgPSBk
aXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLnZpc2liaWxpdHkgPSAiIjsKKyAgICBkaXNwbGF5LmN1
cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gIiI7CiAgICAgaWYgKGNtLm9wdGlvbnMuY3Vyc29y
QmxpbmtSYXRlID4gMCkKICAgICAgIGRpc3BsYXkuYmxpbmtlciA9IHNldEludGVydmFsKGZ1bmN0
aW9uKCkgewotICAgICAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gZGlzcGxh
eS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gKG9uID0gIW9uKSA/ICIiIDogImhpZGRl
biI7CisgICAgICAgIGRpc3BsYXkuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHkgPSAob24gPSAh
b24pID8gIiIgOiAiaGlkZGVuIjsKICAgICAgIH0sIGNtLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRl
KTsKICAgfQoKICAgLy8gSElHSExJR0hUIFdPUktFUgoKICAgZnVuY3Rpb24gc3RhcnRXb3JrZXIo
Y20sIHRpbWUpIHsKLSAgICBpZiAoY20uZG9jLm1vZGUuc3RhcnRTdGF0ZSAmJiBjbS5kb2MuZnJv
bnRpZXIgPCBjbS5kaXNwbGF5LnNob3dpbmdUbykKKyAgICBpZiAoY20uZG9jLm1vZGUuc3RhcnRT
dGF0ZSAmJiBjbS5kb2MuZnJvbnRpZXIgPCBjbS5kaXNwbGF5LnZpZXdUbykKICAgICAgIGNtLnN0
YXRlLmhpZ2hsaWdodC5zZXQodGltZSwgYmluZChoaWdobGlnaHRXb3JrZXIsIGNtKSk7CiAgIH0K
CiAgIGZ1bmN0aW9uIGhpZ2hsaWdodFdvcmtlcihjbSkgewogICAgIHZhciBkb2MgPSBjbS5kb2M7
CiAgICAgaWYgKGRvYy5mcm9udGllciA8IGRvYy5maXJzdCkgZG9jLmZyb250aWVyID0gZG9jLmZp
cnN0OwotICAgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxheS5zaG93aW5nVG8pIHJldHVy
bjsKKyAgICBpZiAoZG9jLmZyb250aWVyID49IGNtLmRpc3BsYXkudmlld1RvKSByZXR1cm47CiAg
ICAgdmFyIGVuZCA9ICtuZXcgRGF0ZSArIGNtLm9wdGlvbnMud29ya1RpbWU7CiAgICAgdmFyIHN0
YXRlID0gY29weVN0YXRlKGRvYy5tb2RlLCBnZXRTdGF0ZUJlZm9yZShjbSwgZG9jLmZyb250aWVy
KSk7Ci0gICAgdmFyIGNoYW5nZWQgPSBbXSwgcHJldkNoYW5nZTsKLSAgICBkb2MuaXRlcihkb2Mu
ZnJvbnRpZXIsIE1hdGgubWluKGRvYy5maXJzdCArIGRvYy5zaXplLCBjbS5kaXNwbGF5LnNob3dp
bmdUbyArIDUwMCksIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIGlmIChkb2MuZnJvbnRpZXIgPj0g
Y20uZGlzcGxheS5zaG93aW5nRnJvbSkgeyAvLyBWaXNpYmxlCisKKyAgICBydW5Jbk9wKGNtLCBm
dW5jdGlvbigpIHsKKyAgICBkb2MuaXRlcihkb2MuZnJvbnRpZXIsIE1hdGgubWluKGRvYy5maXJz
dCArIGRvYy5zaXplLCBjbS5kaXNwbGF5LnZpZXdUbyArIDUwMCksIGZ1bmN0aW9uKGxpbmUpIHsK
KyAgICAgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxheS52aWV3RnJvbSkgeyAvLyBWaXNp
YmxlCiAgICAgICAgIHZhciBvbGRTdHlsZXMgPSBsaW5lLnN0eWxlczsKLSAgICAgICAgbGluZS5z
dHlsZXMgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBzdGF0ZSwgdHJ1ZSk7CisgICAgICAgIHZh
ciBoaWdobGlnaHRlZCA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRlLCB0cnVlKTsKKyAg
ICAgICAgbGluZS5zdHlsZXMgPSBoaWdobGlnaHRlZC5zdHlsZXM7CisgICAgICAgIGlmIChoaWdo
bGlnaHRlZC5jbGFzc2VzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IGhpZ2hsaWdodGVkLmNsYXNzZXM7
CisgICAgICAgIGVsc2UgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9
IG51bGw7CiAgICAgICAgIHZhciBpc2NoYW5nZSA9ICFvbGRTdHlsZXMgfHwgb2xkU3R5bGVzLmxl
bmd0aCAhPSBsaW5lLnN0eWxlcy5sZW5ndGg7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyAhaXNj
aGFuZ2UgJiYgaSA8IG9sZFN0eWxlcy5sZW5ndGg7ICsraSkgaXNjaGFuZ2UgPSBvbGRTdHlsZXNb
aV0gIT0gbGluZS5zdHlsZXNbaV07Ci0gICAgICAgIGlmIChpc2NoYW5nZSkgewotICAgICAgICAg
IGlmIChwcmV2Q2hhbmdlICYmIHByZXZDaGFuZ2UuZW5kID09IGRvYy5mcm9udGllcikgcHJldkNo
YW5nZS5lbmQrKzsKLSAgICAgICAgICBlbHNlIGNoYW5nZWQucHVzaChwcmV2Q2hhbmdlID0ge3N0
YXJ0OiBkb2MuZnJvbnRpZXIsIGVuZDogZG9jLmZyb250aWVyICsgMX0pOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChpc2NoYW5nZSkgcmVnTGluZUNoYW5nZShjbSwgZG9jLmZyb250aWVyLCAidGV4
dCIpOwogICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb3B5U3RhdGUoZG9jLm1vZGUsIHN0YXRl
KTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHByb2Nlc3NMaW5lKGNtLCBsaW5lLnRleHQsIHN0
YXRlKTsKQEAgLTkyOCwxMSArMTQwNiw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIH0KICAgICB9KTsKLSAgICBpZiAoY2hh
bmdlZC5sZW5ndGgpCi0gICAgICBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCkgewotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZWQubGVuZ3RoOyArK2kpCi0gICAgICAgICAgcmVnQ2hh
bmdlKHRoaXMsIGNoYW5nZWRbaV0uc3RhcnQsIGNoYW5nZWRbaV0uZW5kKTsKLSAgICAgIH0pKCk7
CisgICAgfSk7CiAgIH0KCiAgIC8vIEZpbmRzIHRoZSBsaW5lIHRvIHN0YXJ0IHdpdGggd2hlbiBz
dGFydGluZyBhIHBhcnNlLiBUcmllcyB0bwpAQCAtOTY0LDcgKzE0MzgsNyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBlbHNlIHN0YXRlID0gY29weVN0YXRlKGRvYy5t
b2RlLCBzdGF0ZSk7CiAgICAgZG9jLml0ZXIocG9zLCBuLCBmdW5jdGlvbihsaW5lKSB7CiAgICAg
ICBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0LCBzdGF0ZSk7Ci0gICAgICB2YXIgc2F2ZSA9IHBv
cyA9PSBuIC0gMSB8fCBwb3MgJSA1ID09IDAgfHwgcG9zID49IGRpc3BsYXkuc2hvd2luZ0Zyb20g
JiYgcG9zIDwgZGlzcGxheS5zaG93aW5nVG87CisgICAgICB2YXIgc2F2ZSA9IHBvcyA9PSBuIC0g
MSB8fCBwb3MgJSA1ID09IDAgfHwgcG9zID49IGRpc3BsYXkudmlld0Zyb20gJiYgcG9zIDwgZGlz
cGxheS52aWV3VG87CiAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBzYXZlID8gY29weVN0YXRlKGRv
Yy5tb2RlLCBzdGF0ZSkgOiBudWxsOwogICAgICAgKytwb3M7CiAgICAgfSk7CkBAIC05NzYsMTgz
ICsxNDUwLDIyMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKCiAgIGZ1bmN0
aW9uIHBhZGRpbmdUb3AoZGlzcGxheSkge3JldHVybiBkaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRU
b3A7fQogICBmdW5jdGlvbiBwYWRkaW5nVmVydChkaXNwbGF5KSB7cmV0dXJuIGRpc3BsYXkubW92
ZXIub2Zmc2V0SGVpZ2h0IC0gZGlzcGxheS5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0O30KLSAgZnVu
Y3Rpb24gcGFkZGluZ0xlZnQoZGlzcGxheSkgewotICAgIHZhciBlID0gcmVtb3ZlQ2hpbGRyZW5B
bmRBZGQoZGlzcGxheS5tZWFzdXJlLCBlbHQoInByZSIsIG51bGwsIG51bGwsICJ0ZXh0LWFsaWdu
OiBsZWZ0IikpLmFwcGVuZENoaWxkKGVsdCgic3BhbiIsICJ4IikpOwotICAgIHJldHVybiBlLm9m
ZnNldExlZnQ7Ci0gIH0KLQotICBmdW5jdGlvbiBtZWFzdXJlQ2hhcihjbSwgbGluZSwgY2gsIGRh
dGEsIGJpYXMpIHsKLSAgICB2YXIgZGlyID0gLTE7Ci0gICAgZGF0YSA9IGRhdGEgfHwgbWVhc3Vy
ZUxpbmUoY20sIGxpbmUpOwotICAgIGlmIChkYXRhLmNydWRlKSB7Ci0gICAgICB2YXIgbGVmdCA9
IGRhdGEubGVmdCArIGNoICogZGF0YS53aWR0aDsKLSAgICAgIHJldHVybiB7bGVmdDogbGVmdCwg
cmlnaHQ6IGxlZnQgKyBkYXRhLndpZHRoLCB0b3A6IGRhdGEudG9wLCBib3R0b206IGRhdGEuYm90
dG9tfTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciBwb3MgPSBjaDs7IHBvcyArPSBkaXIpIHsKLSAg
ICAgIHZhciByID0gZGF0YVtwb3NdOwotICAgICAgaWYgKHIpIGJyZWFrOwotICAgICAgaWYgKGRp
ciA8IDAgJiYgcG9zID09IDApIGRpciA9IDE7Ci0gICAgfQotICAgIGJpYXMgPSBwb3MgPiBjaCA/
ICJsZWZ0IiA6IHBvcyA8IGNoID8gInJpZ2h0IiA6IGJpYXM7Ci0gICAgaWYgKGJpYXMgPT0gImxl
ZnQiICYmIHIubGVmdFNpZGUpIHIgPSByLmxlZnRTaWRlOwotICAgIGVsc2UgaWYgKGJpYXMgPT0g
InJpZ2h0IiAmJiByLnJpZ2h0U2lkZSkgciA9IHIucmlnaHRTaWRlOwotICAgIHJldHVybiB7bGVm
dDogcG9zIDwgY2ggPyByLnJpZ2h0IDogci5sZWZ0LAotICAgICAgICAgICAgcmlnaHQ6IHBvcyA+
IGNoID8gci5sZWZ0IDogci5yaWdodCwKLSAgICAgICAgICAgIHRvcDogci50b3AsCi0gICAgICAg
ICAgICBib3R0b206IHIuYm90dG9tfTsKLSAgfQotCi0gIGZ1bmN0aW9uIGZpbmRDYWNoZWRNZWFz
dXJlbWVudChjbSwgbGluZSkgewotICAgIHZhciBjYWNoZSA9IGNtLmRpc3BsYXkubWVhc3VyZUxp
bmVDYWNoZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICB2YXIgbWVtbyA9IGNhY2hlW2ldOwotICAgICAgaWYgKG1lbW8udGV4dCA9PSBsaW5lLnRl
eHQgJiYgbWVtby5tYXJrZWRTcGFucyA9PSBsaW5lLm1hcmtlZFNwYW5zICYmCi0gICAgICAgICAg
Y20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCA9PSBtZW1vLndpZHRoICYmCi0gICAgICAg
ICAgbWVtby5jbGFzc2VzID09IGxpbmUudGV4dENsYXNzICsgInwiICsgbGluZS53cmFwQ2xhc3Mp
Ci0gICAgICAgIHJldHVybiBtZW1vOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGNsZWFyQ2Fj
aGVkTWVhc3VyZW1lbnQoY20sIGxpbmUpIHsKLSAgICB2YXIgZXhpc3RzID0gZmluZENhY2hlZE1l
YXN1cmVtZW50KGNtLCBsaW5lKTsKLSAgICBpZiAoZXhpc3RzKSBleGlzdHMudGV4dCA9IGV4aXN0
cy5tZWFzdXJlID0gZXhpc3RzLm1hcmtlZFNwYW5zID0gbnVsbDsKLSAgfQotCi0gIGZ1bmN0aW9u
IG1lYXN1cmVMaW5lKGNtLCBsaW5lKSB7Ci0gICAgLy8gRmlyc3QgbG9vayBpbiB0aGUgY2FjaGUK
LSAgICB2YXIgY2FjaGVkID0gZmluZENhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKTsKLSAgICBp
ZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkLm1lYXN1cmU7Ci0KLSAgICAvLyBGYWlsaW5nIHRoYXQs
IHJlY29tcHV0ZSBhbmQgc3RvcmUgcmVzdWx0IGluIGNhY2hlCi0gICAgdmFyIG1lYXN1cmUgPSBt
ZWFzdXJlTGluZUlubmVyKGNtLCBsaW5lKTsKLSAgICB2YXIgY2FjaGUgPSBjbS5kaXNwbGF5Lm1l
YXN1cmVMaW5lQ2FjaGU7Ci0gICAgdmFyIG1lbW8gPSB7dGV4dDogbGluZS50ZXh0LCB3aWR0aDog
Y20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwKLSAgICAgICAgICAgICAgICBtYXJrZWRT
cGFuczogbGluZS5tYXJrZWRTcGFucywgbWVhc3VyZTogbWVhc3VyZSwKLSAgICAgICAgICAgICAg
ICBjbGFzc2VzOiBsaW5lLnRleHRDbGFzcyArICJ8IiArIGxpbmUud3JhcENsYXNzfTsKLSAgICBp
ZiAoY2FjaGUubGVuZ3RoID09IDE2KSBjYWNoZVsrK2NtLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNo
ZVBvcyAlIDE2XSA9IG1lbW87Ci0gICAgZWxzZSBjYWNoZS5wdXNoKG1lbW8pOwotICAgIHJldHVy
biBtZWFzdXJlOwotICB9Ci0KLSAgZnVuY3Rpb24gbWVhc3VyZUxpbmVJbm5lcihjbSwgbGluZSkg
ewotICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgbGluZS50ZXh0Lmxlbmd0aCA+
PSBjbS5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSkKLSAgICAgIHJldHVybiBjcnVkZWx5TWVh
c3VyZUxpbmUoY20sIGxpbmUpOwotCi0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBtZWFz
dXJlID0gZW1wdHlBcnJheShsaW5lLnRleHQubGVuZ3RoKTsKLSAgICB2YXIgcHJlID0gYnVpbGRM
aW5lQ29udGVudChjbSwgbGluZSwgbWVhc3VyZSwgdHJ1ZSkucHJlOwotCi0gICAgLy8gSUUgZG9l
cyBub3QgY2FjaGUgZWxlbWVudCBwb3NpdGlvbnMgb2YgaW5saW5lIGVsZW1lbnRzIGJldHdlZW4K
LSAgICAvLyBjYWxscyB0byBnZXRCb3VuZGluZ0NsaWVudFJlY3QuIFRoaXMgbWFrZXMgdGhlIGxv
b3AgYmVsb3csCi0gICAgLy8gd2hpY2ggZ2F0aGVycyB0aGUgcG9zaXRpb25zIG9mIGFsbCB0aGUg
Y2hhcmFjdGVycyBvbiB0aGUgbGluZSwKLSAgICAvLyBkbyBhbiBhbW91bnQgb2YgbGF5b3V0IHdv
cmsgcXVhZHJhdGljIHRvIHRoZSBudW1iZXIgb2YKLSAgICAvLyBjaGFyYWN0ZXJzLiBXaGVuIGxp
bmUgd3JhcHBpbmcgaXMgb2ZmLCB3ZSB0cnkgdG8gaW1wcm92ZSB0aGluZ3MKLSAgICAvLyBieSBm
aXJzdCBzdWJkaXZpZGluZyB0aGUgbGluZSBpbnRvIGEgYnVuY2ggb2YgaW5saW5lIGJsb2Nrcywg
c28KLSAgICAvLyB0aGF0IElFIGNhbiByZXVzZSBtb3N0IG9mIHRoZSBsYXlvdXQgaW5mb3JtYXRp
b24gZnJvbSBjYWNoZXMKLSAgICAvLyBmb3IgdGhvc2UgYmxvY2tzLiBUaGlzIGRvZXMgaW50ZXJm
ZXJlIHdpdGggbGluZSB3cmFwcGluZywgc28gaXQKLSAgICAvLyBkb2Vzbid0IHdvcmsgd2hlbiB3
cmFwcGluZyBpcyBvbiwgYnV0IGluIHRoYXQgY2FzZSB0aGUKLSAgICAvLyBzaXR1YXRpb24gaXMg
c2xpZ2h0bHkgYmV0dGVyLCBzaW5jZSBJRSBkb2VzIGNhY2hlIGxpbmUtd3JhcHBpbmcKLSAgICAv
LyBpbmZvcm1hdGlvbiBhbmQgb25seSByZWNvbXB1dGVzIHBlci1saW5lLgotICAgIGlmIChpZSAm
JiAhaWVfbHQ4ICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiBwcmUuY2hpbGROb2Rlcy5s
ZW5ndGggPiAxMDApIHsKLSAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTsKLSAgICAgIHZhciBjaHVuayA9IDEwLCBuID0gcHJlLmNoaWxkTm9kZXMu
bGVuZ3RoOwotICAgICAgZm9yICh2YXIgaSA9IDAsIGNodW5rcyA9IE1hdGguY2VpbChuIC8gY2h1
bmspOyBpIDwgY2h1bmtzOyArK2kpIHsKLSAgICAgICAgdmFyIHdyYXAgPSBlbHQoImRpdiIsIG51
bGwsIG51bGwsICJkaXNwbGF5OiBpbmxpbmUtYmxvY2siKTsKLSAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBjaHVuayAmJiBuOyArK2opIHsKLSAgICAgICAgICB3cmFwLmFwcGVuZENoaWxkKHBy
ZS5maXJzdENoaWxkKTsKLSAgICAgICAgICAtLW47CisgIGZ1bmN0aW9uIHBhZGRpbmdIKGRpc3Bs
YXkpIHsKKyAgICBpZiAoZGlzcGxheS5jYWNoZWRQYWRkaW5nSCkgcmV0dXJuIGRpc3BsYXkuY2Fj
aGVkUGFkZGluZ0g7CisgICAgdmFyIGUgPSByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1l
YXN1cmUsIGVsdCgicHJlIiwgIngiKSk7CisgICAgdmFyIHN0eWxlID0gd2luZG93LmdldENvbXB1
dGVkU3R5bGUgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKSA6IGUuY3VycmVudFN0eWxlOwor
ICAgIHJldHVybiBkaXNwbGF5LmNhY2hlZFBhZGRpbmdIID0ge2xlZnQ6IHBhcnNlSW50KHN0eWxl
LnBhZGRpbmdMZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdo
dDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0KX07CisgIH0KKworICAvLyBFbnN1cmUgdGhl
IGxpbmVWaWV3LndyYXBwaW5nLmhlaWdodHMgYXJyYXkgaXMgcG9wdWxhdGVkLiBUaGlzIGlzCisg
IC8vIGFuIGFycmF5IG9mIGJvdHRvbSBvZmZzZXRzIGZvciB0aGUgbGluZXMgdGhhdCBtYWtlIHVw
IGEgZHJhd24KKyAgLy8gbGluZS4gV2hlbiBsaW5lV3JhcHBpbmcgaXMgb24sIHRoZXJlIG1pZ2h0
IGJlIG1vcmUgdGhhbiBvbmUKKyAgLy8gaGVpZ2h0LgorICBmdW5jdGlvbiBlbnN1cmVMaW5lSGVp
Z2h0cyhjbSwgbGluZVZpZXcsIHJlY3QpIHsKKyAgICB2YXIgd3JhcHBpbmcgPSBjbS5vcHRpb25z
LmxpbmVXcmFwcGluZzsKKyAgICB2YXIgY3VyV2lkdGggPSB3cmFwcGluZyAmJiBjbS5kaXNwbGF5
LnNjcm9sbGVyLmNsaWVudFdpZHRoOworICAgIGlmICghbGluZVZpZXcubWVhc3VyZS5oZWlnaHRz
IHx8IHdyYXBwaW5nICYmIGxpbmVWaWV3Lm1lYXN1cmUud2lkdGggIT0gY3VyV2lkdGgpIHsKKyAg
ICAgIHZhciBoZWlnaHRzID0gbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzID0gW107CisgICAgICBp
ZiAod3JhcHBpbmcpIHsKKyAgICAgICAgbGluZVZpZXcubWVhc3VyZS53aWR0aCA9IGN1cldpZHRo
OworICAgICAgICB2YXIgcmVjdHMgPSBsaW5lVmlldy50ZXh0LmZpcnN0Q2hpbGQuZ2V0Q2xpZW50
UmVjdHMoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGggLSAxOyBp
KyspIHsKKyAgICAgICAgICB2YXIgY3VyID0gcmVjdHNbaV0sIG5leHQgPSByZWN0c1tpICsgMV07
CisgICAgICAgICAgaWYgKE1hdGguYWJzKGN1ci5ib3R0b20gLSBuZXh0LmJvdHRvbSkgPiAyKQor
ICAgICAgICAgICAgaGVpZ2h0cy5wdXNoKChjdXIuYm90dG9tICsgbmV4dC50b3ApIC8gMiAtIHJl
Y3QudG9wKTsKICAgICAgICAgfQotICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwKTsK
ICAgICAgIH0KLSAgICAgIHByZS5hcHBlbmRDaGlsZChmcmFnbWVudCk7Ci0gICAgfQotCi0gICAg
cmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBwcmUpOwotCi0gICAgdmFyIG91
dGVyID0gZ2V0UmVjdChkaXNwbGF5LmxpbmVEaXYpOwotICAgIHZhciB2cmFuZ2VzID0gW10sIGRh
dGEgPSBlbXB0eUFycmF5KGxpbmUudGV4dC5sZW5ndGgpLCBtYXhCb3QgPSBwcmUub2Zmc2V0SGVp
Z2h0OwotICAgIC8vIFdvcmsgYXJvdW5kIGFuIElFNy84IGJ1ZyB3aGVyZSBpdCB3aWxsIHNvbWV0
aW1lcyBoYXZlIHJhbmRvbWx5Ci0gICAgLy8gcmVwbGFjZWQgb3VyIHByZSB3aXRoIGEgY2xvbmUg
YXQgdGhpcyBwb2ludC4KLSAgICBpZiAoaWVfbHQ5ICYmIGRpc3BsYXkubWVhc3VyZS5maXJzdCAh
PSBwcmUpCi0gICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIHByZSk7
CisgICAgICBoZWlnaHRzLnB1c2gocmVjdC5ib3R0b20gLSByZWN0LnRvcCk7CisgICAgfQorICB9
CisKKyAgLy8gRmluZCBhIGxpbmUgbWFwIChtYXBwaW5nIGNoYXJhY3RlciBvZmZzZXRzIHRvIHRl
eHQgbm9kZXMpIGFuZCBhCisgIC8vIG1lYXN1cmVtZW50IGNhY2hlIGZvciB0aGUgZ2l2ZW4gbGlu
ZSBudW1iZXIuIChBIGxpbmUgdmlldyBtaWdodAorICAvLyBjb250YWluIG11bHRpcGxlIGxpbmVz
IHdoZW4gY29sbGFwc2VkIHJhbmdlcyBhcmUgcHJlc2VudC4pCisgIGZ1bmN0aW9uIG1hcEZyb21M
aW5lVmlldyhsaW5lVmlldywgbGluZSwgbGluZU4pIHsKKyAgICBpZiAobGluZVZpZXcubGluZSA9
PSBsaW5lKQorICAgICAgcmV0dXJuIHttYXA6IGxpbmVWaWV3Lm1lYXN1cmUubWFwLCBjYWNoZTog
bGluZVZpZXcubWVhc3VyZS5jYWNoZX07CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmll
dy5yZXN0Lmxlbmd0aDsgaSsrKQorICAgICAgaWYgKGxpbmVWaWV3LnJlc3RbaV0gPT0gbGluZSkK
KyAgICAgICAgcmV0dXJuIHttYXA6IGxpbmVWaWV3Lm1lYXN1cmUubWFwc1tpXSwgY2FjaGU6IGxp
bmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2ldfTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVW
aWV3LnJlc3QubGVuZ3RoOyBpKyspCisgICAgICBpZiAobGluZU5vKGxpbmVWaWV3LnJlc3RbaV0p
ID4gbGluZU4pCisgICAgICAgIHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcHNbaV0s
IGNhY2hlOiBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXSwgYmVmb3JlOiB0cnVlfTsKKyAgfQor
CisgIC8vIFJlbmRlciBhIGxpbmUgaW50byB0aGUgaGlkZGVuIG5vZGUgZGlzcGxheS5leHRlcm5h
bE1lYXN1cmVkLiBVc2VkCisgIC8vIHdoZW4gbWVhc3VyZW1lbnQgaXMgbmVlZGVkIGZvciBhIGxp
bmUgdGhhdCdzIG5vdCBpbiB0aGUgdmlld3BvcnQuCisgIGZ1bmN0aW9uIHVwZGF0ZUV4dGVybmFs
TWVhc3VyZW1lbnQoY20sIGxpbmUpIHsKKyAgICBsaW5lID0gdmlzdWFsTGluZShsaW5lKTsKKyAg
ICB2YXIgbGluZU4gPSBsaW5lTm8obGluZSk7CisgICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LmV4
dGVybmFsTWVhc3VyZWQgPSBuZXcgTGluZVZpZXcoY20uZG9jLCBsaW5lLCBsaW5lTik7CisgICAg
dmlldy5saW5lTiA9IGxpbmVOOworICAgIHZhciBidWlsdCA9IHZpZXcuYnVpbHQgPSBidWlsZExp
bmVDb250ZW50KGNtLCB2aWV3KTsKKyAgICB2aWV3LnRleHQgPSBidWlsdC5wcmU7CisgICAgcmVt
b3ZlQ2hpbGRyZW5BbmRBZGQoY20uZGlzcGxheS5saW5lTWVhc3VyZSwgYnVpbHQucHJlKTsKKyAg
ICByZXR1cm4gdmlldzsKKyAgfQorCisgIC8vIEdldCBhIHt0b3AsIGJvdHRvbSwgbGVmdCwgcmln
aHR9IGJveCAoaW4gbGluZS1sb2NhbCBjb29yZGluYXRlcykKKyAgLy8gZm9yIGEgZ2l2ZW4gY2hh
cmFjdGVyLgorICBmdW5jdGlvbiBtZWFzdXJlQ2hhcihjbSwgbGluZSwgY2gsIGJpYXMpIHsKKyAg
ICByZXR1cm4gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNt
LCBsaW5lKSwgY2gsIGJpYXMpOworICB9CisKKyAgLy8gRmluZCBhIGxpbmUgdmlldyB0aGF0IGNv
cnJlc3BvbmRzIHRvIHRoZSBnaXZlbiBsaW5lIG51bWJlci4KKyAgZnVuY3Rpb24gZmluZFZpZXdG
b3JMaW5lKGNtLCBsaW5lTikgeworICAgIGlmIChsaW5lTiA+PSBjbS5kaXNwbGF5LnZpZXdGcm9t
ICYmIGxpbmVOIDwgY20uZGlzcGxheS52aWV3VG8pCisgICAgICByZXR1cm4gY20uZGlzcGxheS52
aWV3W2ZpbmRWaWV3SW5kZXgoY20sIGxpbmVOKV07CisgICAgdmFyIGV4dCA9IGNtLmRpc3BsYXku
ZXh0ZXJuYWxNZWFzdXJlZDsKKyAgICBpZiAoZXh0ICYmIGxpbmVOID49IGV4dC5saW5lTiAmJiBs
aW5lTiA8IGV4dC5saW5lTiArIGV4dC5zaXplKQorICAgICAgcmV0dXJuIGV4dDsKKyAgfQorCisg
IC8vIE1lYXN1cmVtZW50IGNhbiBiZSBzcGxpdCBpbiB0d28gc3RlcHMsIHRoZSBzZXQtdXAgd29y
ayB0aGF0CisgIC8vIGFwcGxpZXMgdG8gdGhlIHdob2xlIGxpbmUsIGFuZCB0aGUgbWVhc3VyZW1l
bnQgb2YgdGhlIGFjdHVhbAorICAvLyBjaGFyYWN0ZXIuIEZ1bmN0aW9ucyBsaWtlIGNvb3Jkc0No
YXIsIHRoYXQgbmVlZCB0byBkbyBhIGxvdCBvZgorICAvLyBtZWFzdXJlbWVudHMgaW4gYSByb3cs
IGNhbiB0aHVzIGVuc3VyZSB0aGF0IHRoZSBzZXQtdXAgd29yayBpcworICAvLyBvbmx5IGRvbmUg
b25jZS4KKyAgZnVuY3Rpb24gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lKSB7CisgICAg
dmFyIGxpbmVOID0gbGluZU5vKGxpbmUpOworICAgIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5l
KGNtLCBsaW5lTik7CisgICAgaWYgKHZpZXcgJiYgIXZpZXcudGV4dCkKKyAgICAgIHZpZXcgPSBu
dWxsOworICAgIGVsc2UgaWYgKHZpZXcgJiYgdmlldy5jaGFuZ2VzKQorICAgICAgdXBkYXRlTGlu
ZUZvckNoYW5nZXMoY20sIHZpZXcsIGxpbmVOLCBnZXREaW1lbnNpb25zKGNtKSk7CisgICAgaWYg
KCF2aWV3KQorICAgICAgdmlldyA9IHVwZGF0ZUV4dGVybmFsTWVhc3VyZW1lbnQoY20sIGxpbmUp
OworCisgICAgdmFyIGluZm8gPSBtYXBGcm9tTGluZVZpZXcodmlldywgbGluZSwgbGluZU4pOwor
ICAgIHJldHVybiB7CisgICAgICBsaW5lOiBsaW5lLCB2aWV3OiB2aWV3LCByZWN0OiBudWxsLAor
ICAgICAgbWFwOiBpbmZvLm1hcCwgY2FjaGU6IGluZm8uY2FjaGUsIGJlZm9yZTogaW5mby5iZWZv
cmUsCisgICAgICBoYXNIZWlnaHRzOiBmYWxzZQorICAgIH07CisgIH0KCi0gICAgZnVuY3Rpb24g
bWVhc3VyZVJlY3QocmVjdCkgewotICAgICAgdmFyIHRvcCA9IHJlY3QudG9wIC0gb3V0ZXIudG9w
LCBib3QgPSByZWN0LmJvdHRvbSAtIG91dGVyLnRvcDsKLSAgICAgIGlmIChib3QgPiBtYXhCb3Qp
IGJvdCA9IG1heEJvdDsKLSAgICAgIGlmICh0b3AgPCAwKSB0b3AgPSAwOwotICAgICAgZm9yICh2
YXIgaSA9IHZyYW5nZXMubGVuZ3RoIC0gMjsgaSA+PSAwOyBpIC09IDIpIHsKLSAgICAgICAgdmFy
IHJ0b3AgPSB2cmFuZ2VzW2ldLCByYm90ID0gdnJhbmdlc1tpKzFdOwotICAgICAgICBpZiAocnRv
cCA+IGJvdCB8fCByYm90IDwgdG9wKSBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ0b3AgPD0gdG9w
ICYmIHJib3QgPj0gYm90IHx8Ci0gICAgICAgICAgICB0b3AgPD0gcnRvcCAmJiBib3QgPj0gcmJv
dCB8fAotICAgICAgICAgICAgTWF0aC5taW4oYm90LCByYm90KSAtIE1hdGgubWF4KHRvcCwgcnRv
cCkgPj0gKGJvdCAtIHRvcCkgPj4gMSkgewotICAgICAgICAgIHZyYW5nZXNbaV0gPSBNYXRoLm1p
bih0b3AsIHJ0b3ApOwotICAgICAgICAgIHZyYW5nZXNbaSsxXSA9IE1hdGgubWF4KGJvdCwgcmJv
dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgLy8gR2l2ZW4gYSBwcmVwYXJlZCBt
ZWFzdXJlbWVudCBvYmplY3QsIG1lYXN1cmVzIHRoZSBwb3NpdGlvbiBvZiBhbgorICAvLyBhY3R1
YWwgY2hhcmFjdGVyIChvciBmZXRjaGVzIGl0IGZyb20gdGhlIGNhY2hlKS4KKyAgZnVuY3Rpb24g
bWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWQsIGNoLCBiaWFzKSB7CisgICAgaWYgKHBy
ZXBhcmVkLmJlZm9yZSkgY2ggPSAtMTsKKyAgICB2YXIga2V5ID0gY2ggKyAoYmlhcyB8fCAiIiks
IGZvdW5kOworICAgIGlmIChwcmVwYXJlZC5jYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Cisg
ICAgICBmb3VuZCA9IHByZXBhcmVkLmNhY2hlW2tleV07CisgICAgfSBlbHNlIHsKKyAgICAgIGlm
ICghcHJlcGFyZWQucmVjdCkKKyAgICAgICAgcHJlcGFyZWQucmVjdCA9IHByZXBhcmVkLnZpZXcu
dGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgIGlmICghcHJlcGFyZWQuaGFzSGVp
Z2h0cykgeworICAgICAgICBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgcHJlcGFyZWQudmlldywgcHJl
cGFyZWQucmVjdCk7CisgICAgICAgIHByZXBhcmVkLmhhc0hlaWdodHMgPSB0cnVlOwogICAgICAg
fQotICAgICAgaWYgKGkgPCAwKSB7IGkgPSB2cmFuZ2VzLmxlbmd0aDsgdnJhbmdlcy5wdXNoKHRv
cCwgYm90KTsgfQotICAgICAgcmV0dXJuIHtsZWZ0OiByZWN0LmxlZnQgLSBvdXRlci5sZWZ0LAot
ICAgICAgICAgICAgICByaWdodDogcmVjdC5yaWdodCAtIG91dGVyLmxlZnQsCi0gICAgICAgICAg
ICAgIHRvcDogaSwgYm90dG9tOiBudWxsfTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gZmluaXNoUmVj
dChyZWN0KSB7Ci0gICAgICByZWN0LmJvdHRvbSA9IHZyYW5nZXNbcmVjdC50b3ArMV07Ci0gICAg
ICByZWN0LnRvcCA9IHZyYW5nZXNbcmVjdC50b3BdOwotICAgIH0KLQotICAgIGZvciAodmFyIGkg
PSAwLCBjdXI7IGkgPCBtZWFzdXJlLmxlbmd0aDsgKytpKSBpZiAoY3VyID0gbWVhc3VyZVtpXSkg
ewotICAgICAgdmFyIG5vZGUgPSBjdXIsIHJlY3QgPSBudWxsOwotICAgICAgLy8gQSB3aWRnZXQg
bWlnaHQgd3JhcCwgbmVlZHMgc3BlY2lhbCBjYXJlCi0gICAgICBpZiAoL1xiQ29kZU1pcnJvci13
aWRnZXRcYi8udGVzdChjdXIuY2xhc3NOYW1lKSAmJiBjdXIuZ2V0Q2xpZW50UmVjdHMpIHsKLSAg
ICAgICAgaWYgKGN1ci5maXJzdENoaWxkLm5vZGVUeXBlID09IDEpIG5vZGUgPSBjdXIuZmlyc3RD
aGlsZDsKLSAgICAgICAgdmFyIHJlY3RzID0gbm9kZS5nZXRDbGllbnRSZWN0cygpOwotICAgICAg
ICBpZiAocmVjdHMubGVuZ3RoID4gMSkgewotICAgICAgICAgIHJlY3QgPSBkYXRhW2ldID0gbWVh
c3VyZVJlY3QocmVjdHNbMF0pOwotICAgICAgICAgIHJlY3QucmlnaHRTaWRlID0gbWVhc3VyZVJl
Y3QocmVjdHNbcmVjdHMubGVuZ3RoIC0gMV0pOwotICAgICAgICB9CisgICAgICBmb3VuZCA9IG1l
YXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwgYmlhcyk7CisgICAgICBpZiAoIWZvdW5k
LmJvZ3VzKSBwcmVwYXJlZC5jYWNoZVtrZXldID0gZm91bmQ7CisgICAgfQorICAgIHJldHVybiB7
bGVmdDogZm91bmQubGVmdCwgcmlnaHQ6IGZvdW5kLnJpZ2h0LCB0b3A6IGZvdW5kLnRvcCwgYm90
dG9tOiBmb3VuZC5ib3R0b219OworICB9CisKKyAgdmFyIG51bGxSZWN0ID0ge2xlZnQ6IDAsIHJp
Z2h0OiAwLCB0b3A6IDAsIGJvdHRvbTogMH07CisKKyAgZnVuY3Rpb24gbWVhc3VyZUNoYXJJbm5l
cihjbSwgcHJlcGFyZWQsIGNoLCBiaWFzKSB7CisgICAgdmFyIG1hcCA9IHByZXBhcmVkLm1hcDsK
KworICAgIHZhciBub2RlLCBzdGFydCwgZW5kLCBjb2xsYXBzZTsKKyAgICAvLyBGaXJzdCwgc2Vh
cmNoIHRoZSBsaW5lIG1hcCBmb3IgdGhlIHRleHQgbm9kZSBjb3JyZXNwb25kaW5nIHRvLAorICAg
IC8vIG9yIGNsb3Nlc3QgdG8sIHRoZSB0YXJnZXQgY2hhcmFjdGVyLgorICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbWFwLmxlbmd0aDsgaSArPSAzKSB7CisgICAgICB2YXIgbVN0YXJ0ID0gbWFwW2ld
LCBtRW5kID0gbWFwW2kgKyAxXTsKKyAgICAgIGlmIChjaCA8IG1TdGFydCkgeworICAgICAgICBz
dGFydCA9IDA7IGVuZCA9IDE7CisgICAgICAgIGNvbGxhcHNlID0gImxlZnQiOworICAgICAgfSBl
bHNlIGlmIChjaCA8IG1FbmQpIHsKKyAgICAgICAgc3RhcnQgPSBjaCAtIG1TdGFydDsKKyAgICAg
ICAgZW5kID0gc3RhcnQgKyAxOworICAgICAgfSBlbHNlIGlmIChpID09IG1hcC5sZW5ndGggLSAz
IHx8IGNoID09IG1FbmQgJiYgbWFwW2kgKyAzXSA+IGNoKSB7CisgICAgICAgIGVuZCA9IG1FbmQg
LSBtU3RhcnQ7CisgICAgICAgIHN0YXJ0ID0gZW5kIC0gMTsKKyAgICAgICAgaWYgKGNoID49IG1F
bmQpIGNvbGxhcHNlID0gInJpZ2h0IjsKKyAgICAgIH0KKyAgICAgIGlmIChzdGFydCAhPSBudWxs
KSB7CisgICAgICAgIG5vZGUgPSBtYXBbaSArIDJdOworICAgICAgICBpZiAobVN0YXJ0ID09IG1F
bmQgJiYgYmlhcyA9PSAobm9kZS5pbnNlcnRMZWZ0ID8gImxlZnQiIDogInJpZ2h0IikpCisgICAg
ICAgICAgY29sbGFwc2UgPSBiaWFzOworICAgICAgICBpZiAoYmlhcyA9PSAibGVmdCIgJiYgc3Rh
cnQgPT0gMCkKKyAgICAgICAgICB3aGlsZSAoaSAmJiBtYXBbaSAtIDJdID09IG1hcFtpIC0gM10g
JiYgbWFwW2kgLSAxXS5pbnNlcnRMZWZ0KSB7CisgICAgICAgICAgICBub2RlID0gbWFwWyhpIC09
IDMpICsgMl07CisgICAgICAgICAgICBjb2xsYXBzZSA9ICJsZWZ0IjsKKyAgICAgICAgICB9Cisg
ICAgICAgIGlmIChiaWFzID09ICJyaWdodCIgJiYgc3RhcnQgPT0gbUVuZCAtIG1TdGFydCkKKyAg
ICAgICAgICB3aGlsZSAoaSA8IG1hcC5sZW5ndGggLSAzICYmIG1hcFtpICsgM10gPT0gbWFwW2kg
KyA0XSAmJiAhbWFwW2kgKyA1XS5pbnNlcnRMZWZ0KSB7CisgICAgICAgICAgICBub2RlID0gbWFw
WyhpICs9IDMpICsgMl07CisgICAgICAgICAgICBjb2xsYXBzZSA9ICJyaWdodCI7CisgICAgICAg
ICAgfQorICAgICAgICBicmVhazsKICAgICAgIH0KLSAgICAgIGlmICghcmVjdCkgcmVjdCA9IGRh
dGFbaV0gPSBtZWFzdXJlUmVjdChnZXRSZWN0KG5vZGUpKTsKLSAgICAgIGlmIChjdXIubWVhc3Vy
ZVJpZ2h0KSByZWN0LnJpZ2h0ID0gZ2V0UmVjdChjdXIubWVhc3VyZVJpZ2h0KS5sZWZ0OwotICAg
ICAgaWYgKGN1ci5sZWZ0U2lkZSkgcmVjdC5sZWZ0U2lkZSA9IG1lYXN1cmVSZWN0KGdldFJlY3Qo
Y3VyLmxlZnRTaWRlKSk7Ci0gICAgfQotICAgIHJlbW92ZUNoaWxkcmVuKGNtLmRpc3BsYXkubWVh
c3VyZSk7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGN1cjsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIGlm
IChjdXIgPSBkYXRhW2ldKSB7Ci0gICAgICBmaW5pc2hSZWN0KGN1cik7Ci0gICAgICBpZiAoY3Vy
LmxlZnRTaWRlKSBmaW5pc2hSZWN0KGN1ci5sZWZ0U2lkZSk7Ci0gICAgICBpZiAoY3VyLnJpZ2h0
U2lkZSkgZmluaXNoUmVjdChjdXIucmlnaHRTaWRlKTsKICAgICB9Ci0gICAgcmV0dXJuIGRhdGE7
Ci0gIH0KCi0gIGZ1bmN0aW9uIGNydWRlbHlNZWFzdXJlTGluZShjbSwgbGluZSkgewotICAgIHZh
ciBjb3B5ID0gbmV3IExpbmUobGluZS50ZXh0LnNsaWNlKDAsIDEwMCksIG51bGwpOwotICAgIGlm
IChsaW5lLnRleHRDbGFzcykgY29weS50ZXh0Q2xhc3MgPSBsaW5lLnRleHRDbGFzczsKLSAgICB2
YXIgbWVhc3VyZSA9IG1lYXN1cmVMaW5lSW5uZXIoY20sIGNvcHkpOwotICAgIHZhciBsZWZ0ID0g
bWVhc3VyZUNoYXIoY20sIGNvcHksIDAsIG1lYXN1cmUsICJsZWZ0Iik7Ci0gICAgdmFyIHJpZ2h0
ID0gbWVhc3VyZUNoYXIoY20sIGNvcHksIDk5LCBtZWFzdXJlLCAicmlnaHQiKTsKLSAgICByZXR1
cm4ge2NydWRlOiB0cnVlLCB0b3A6IGxlZnQudG9wLCBsZWZ0OiBsZWZ0LmxlZnQsIGJvdHRvbTog
bGVmdC5ib3R0b20sIHdpZHRoOiAocmlnaHQucmlnaHQgLSBsZWZ0LmxlZnQpIC8gMTAwfTsKKyAg
ICB2YXIgcmVjdDsKKyAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAzKSB7IC8vIElmIGl0IGlzIGEg
dGV4dCBub2RlLCB1c2UgYSByYW5nZSB0byByZXRyaWV2ZSB0aGUgY29vcmRpbmF0ZXMuCisgICAg
ICB3aGlsZSAoc3RhcnQgJiYgaXNFeHRlbmRpbmdDaGFyKHByZXBhcmVkLmxpbmUudGV4dC5jaGFy
QXQobVN0YXJ0ICsgc3RhcnQpKSkgLS1zdGFydDsKKyAgICAgIHdoaWxlIChtU3RhcnQgKyBlbmQg
PCBtRW5kICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KG1TdGFy
dCArIGVuZCkpKSArK2VuZDsKKyAgICAgIGlmIChpZV91cHRvOCAmJiBzdGFydCA9PSAwICYmIGVu
ZCA9PSBtRW5kIC0gbVN0YXJ0KSB7CisgICAgICAgIHJlY3QgPSBub2RlLnBhcmVudE5vZGUuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICB9IGVsc2UgaWYgKGllICYmIGNtLm9wdGlvbnMu
bGluZVdyYXBwaW5nKSB7CisgICAgICAgIHZhciByZWN0cyA9IHJhbmdlKG5vZGUsIHN0YXJ0LCBl
bmQpLmdldENsaWVudFJlY3RzKCk7CisgICAgICAgIGlmIChyZWN0cy5sZW5ndGgpCisgICAgICAg
ICAgcmVjdCA9IHJlY3RzW2JpYXMgPT0gInJpZ2h0IiA/IHJlY3RzLmxlbmd0aCAtIDEgOiAwXTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgIHJlY3QgPSBudWxsUmVjdDsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIHJlY3QgPSByYW5nZShub2RlLCBzdGFydCwgZW5kKS5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBJZiBpdCBpcyBhIHdpZGdldCwgc2lt
cGx5IGdldCB0aGUgYm94IGZvciB0aGUgd2hvbGUgd2lkZ2V0LgorICAgICAgaWYgKHN0YXJ0ID4g
MCkgY29sbGFwc2UgPSBiaWFzID0gInJpZ2h0IjsKKyAgICAgIHZhciByZWN0czsKKyAgICAgIGlm
IChjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiAocmVjdHMgPSBub2RlLmdldENsaWVudFJlY3Rz
KCkpLmxlbmd0aCA+IDEpCisgICAgICAgIHJlY3QgPSByZWN0c1tiaWFzID09ICJyaWdodCIgPyBy
ZWN0cy5sZW5ndGggLSAxIDogMF07CisgICAgICBlbHNlCisgICAgICAgIHJlY3QgPSBub2RlLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIH0KKyAgICBpZiAoaWVfdXB0bzggJiYgIXN0YXJ0
ICYmICghcmVjdCB8fCAhcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSkgeworICAgICAgdmFyIHJT
cGFuID0gbm9kZS5wYXJlbnROb2RlLmdldENsaWVudFJlY3RzKClbMF07CisgICAgICBpZiAoclNw
YW4pCisgICAgICAgIHJlY3QgPSB7bGVmdDogclNwYW4ubGVmdCwgcmlnaHQ6IHJTcGFuLmxlZnQg
KyBjaGFyV2lkdGgoY20uZGlzcGxheSksIHRvcDogclNwYW4udG9wLCBib3R0b206IHJTcGFuLmJv
dHRvbX07CisgICAgICBlbHNlCisgICAgICAgIHJlY3QgPSBudWxsUmVjdDsKKyAgICB9CisKKyAg
ICB2YXIgdG9wLCBib3QgPSAocmVjdC5ib3R0b20gKyByZWN0LnRvcCkgLyAyIC0gcHJlcGFyZWQu
cmVjdC50b3A7CisgICAgdmFyIGhlaWdodHMgPSBwcmVwYXJlZC52aWV3Lm1lYXN1cmUuaGVpZ2h0
czsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlaWdodHMubGVuZ3RoIC0gMTsgaSsrKQorICAg
ICAgaWYgKGJvdCA8IGhlaWdodHNbaV0pIGJyZWFrOworICAgIHRvcCA9IGkgPyBoZWlnaHRzW2kg
LSAxXSA6IDA7IGJvdCA9IGhlaWdodHNbaV07CisgICAgdmFyIHJlc3VsdCA9IHtsZWZ0OiAoY29s
bGFwc2UgPT0gInJpZ2h0IiA/IHJlY3QucmlnaHQgOiByZWN0LmxlZnQpIC0gcHJlcGFyZWQucmVj
dC5sZWZ0LAorICAgICAgICAgICAgICAgICAgcmlnaHQ6IChjb2xsYXBzZSA9PSAibGVmdCIgPyBy
ZWN0LmxlZnQgOiByZWN0LnJpZ2h0KSAtIHByZXBhcmVkLnJlY3QubGVmdCwKKyAgICAgICAgICAg
ICAgICAgIHRvcDogdG9wLCBib3R0b206IGJvdH07CisgICAgaWYgKCFyZWN0LmxlZnQgJiYgIXJl
Y3QucmlnaHQpIHJlc3VsdC5ib2d1cyA9IHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKICAgfQoK
LSAgZnVuY3Rpb24gbWVhc3VyZUxpbmVXaWR0aChjbSwgbGluZSkgewotICAgIHZhciBoYXNCYWRT
cGFuID0gZmFsc2U7Ci0gICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIGZvciAodmFyIGkgPSAwOyBp
IDwgbGluZS5tYXJrZWRTcGFuczsgKytpKSB7Ci0gICAgICB2YXIgc3AgPSBsaW5lLm1hcmtlZFNw
YW5zW2ldOwotICAgICAgaWYgKHNwLmNvbGxhcHNlZCAmJiAoc3AudG8gPT0gbnVsbCB8fCBzcC50
byA9PSBsaW5lLnRleHQubGVuZ3RoKSkgaGFzQmFkU3BhbiA9IHRydWU7CisgIGZ1bmN0aW9uIGNs
ZWFyTGluZU1lYXN1cmVtZW50Q2FjaGVGb3IobGluZVZpZXcpIHsKKyAgICBpZiAobGluZVZpZXcu
bWVhc3VyZSkgeworICAgICAgbGluZVZpZXcubWVhc3VyZS5jYWNoZSA9IHt9OworICAgICAgbGlu
ZVZpZXcubWVhc3VyZS5oZWlnaHRzID0gbnVsbDsKKyAgICAgIGlmIChsaW5lVmlldy5yZXN0KSBm
b3IgKHZhciBpID0gMDsgaSA8IGxpbmVWaWV3LnJlc3QubGVuZ3RoOyBpKyspCisgICAgICAgIGxp
bmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2ldID0ge307CiAgICAgfQotICAgIHZhciBjYWNoZWQgPSAh
aGFzQmFkU3BhbiAmJiBmaW5kQ2FjaGVkTWVhc3VyZW1lbnQoY20sIGxpbmUpOwotICAgIGlmIChj
YWNoZWQgfHwgbGluZS50ZXh0Lmxlbmd0aCA+PSBjbS5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJv
bSkKLSAgICAgIHJldHVybiBtZWFzdXJlQ2hhcihjbSwgbGluZSwgbGluZS50ZXh0Lmxlbmd0aCwg
Y2FjaGVkICYmIGNhY2hlZC5tZWFzdXJlLCAicmlnaHQiKS5yaWdodDsKKyAgfQoKLSAgICB2YXIg
cHJlID0gYnVpbGRMaW5lQ29udGVudChjbSwgbGluZSwgbnVsbCwgdHJ1ZSkucHJlOwotICAgIHZh
ciBlbmQgPSBwcmUuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1
cmUpKTsKLSAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5Lm1lYXN1cmUsIHByZSk7
Ci0gICAgcmV0dXJuIGdldFJlY3QoZW5kKS5yaWdodCAtIGdldFJlY3QoY20uZGlzcGxheS5saW5l
RGl2KS5sZWZ0OworICBmdW5jdGlvbiBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKGNtKSB7Cisg
ICAgY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmUgPSBudWxsOworICAgIHJlbW92ZUNoaWxkcmVu
KGNtLmRpc3BsYXkubGluZU1lYXN1cmUpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZGlz
cGxheS52aWV3Lmxlbmd0aDsgaSsrKQorICAgICAgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZv
cihjbS5kaXNwbGF5LnZpZXdbaV0pOwogICB9CgogICBmdW5jdGlvbiBjbGVhckNhY2hlcyhjbSkg
ewotICAgIGNtLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGggPSBjbS5kaXNwbGF5Lm1l
YXN1cmVMaW5lQ2FjaGVQb3MgPSAwOwotICAgIGNtLmRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoID0g
Y20uZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ID0gbnVsbDsKKyAgICBjbGVhckxpbmVNZWFzdXJl
bWVudENhY2hlKGNtKTsKKyAgICBjbS5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aCA9IGNtLmRpc3Bs
YXkuY2FjaGVkVGV4dEhlaWdodCA9IGNtLmRpc3BsYXkuY2FjaGVkUGFkZGluZ0ggPSBudWxsOwog
ICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGNtLmRpc3BsYXkubWF4TGluZUNoYW5n
ZWQgPSB0cnVlOwogICAgIGNtLmRpc3BsYXkubGluZU51bUNoYXJzID0gbnVsbDsKICAgfQpAQCAt
MTE2MCw3ICsxNjczLDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1
bmN0aW9uIHBhZ2VTY3JvbGxYKCkgeyByZXR1cm4gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IChkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdDsgfQogICBm
dW5jdGlvbiBwYWdlU2Nyb2xsWSgpIHsgcmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldCB8fCAoZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcDsgfQoKLSAg
Ly8gQ29udGV4dCBpcyBvbmUgb2YgImxpbmUiLCAiZGl2IiAoZGlzcGxheS5saW5lRGl2KSwgImxv
Y2FsIi9udWxsIChlZGl0b3IpLCBvciAicGFnZSIKKyAgLy8gQ29udmVydHMgYSB7dG9wLCBib3R0
b20sIGxlZnQsIHJpZ2h0fSBib3ggZnJvbSBsaW5lLWxvY2FsCisgIC8vIGNvb3JkaW5hdGVzIGlu
dG8gYW5vdGhlciBjb29yZGluYXRlIHN5c3RlbS4gQ29udGV4dCBtYXkgYmUgb25lIG9mCisgIC8v
ICJsaW5lIiwgImRpdiIgKGRpc3BsYXkubGluZURpdiksICJsb2NhbCIvbnVsbCAoZWRpdG9yKSwg
b3IgInBhZ2UiLgogICBmdW5jdGlvbiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIHJlY3Qs
IGNvbnRleHQpIHsKICAgICBpZiAobGluZU9iai53aWRnZXRzKSBmb3IgKHZhciBpID0gMDsgaSA8
IGxpbmVPYmoud2lkZ2V0cy5sZW5ndGg7ICsraSkgaWYgKGxpbmVPYmoud2lkZ2V0c1tpXS5hYm92
ZSkgewogICAgICAgdmFyIHNpemUgPSB3aWRnZXRIZWlnaHQobGluZU9iai53aWRnZXRzW2ldKTsK
QEAgLTExNjgsMTEgKzE2ODMsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgfQogICAgIGlmIChjb250ZXh0ID09ICJsaW5lIikgcmV0dXJuIHJlY3Q7CiAgICAgaWYg
KCFjb250ZXh0KSBjb250ZXh0ID0gImxvY2FsIjsKLSAgICB2YXIgeU9mZiA9IGhlaWdodEF0TGlu
ZShjbSwgbGluZU9iaik7CisgICAgdmFyIHlPZmYgPSBoZWlnaHRBdExpbmUobGluZU9iaik7CiAg
ICAgaWYgKGNvbnRleHQgPT0gImxvY2FsIikgeU9mZiArPSBwYWRkaW5nVG9wKGNtLmRpc3BsYXkp
OwogICAgIGVsc2UgeU9mZiAtPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7CiAgICAgaWYgKGNvbnRl
eHQgPT0gInBhZ2UiIHx8IGNvbnRleHQgPT0gIndpbmRvdyIpIHsKLSAgICAgIHZhciBsT2ZmID0g
Z2V0UmVjdChjbS5kaXNwbGF5LmxpbmVTcGFjZSk7CisgICAgICB2YXIgbE9mZiA9IGNtLmRpc3Bs
YXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgeU9mZiArPSBsT2Zm
LnRvcCArIChjb250ZXh0ID09ICJ3aW5kb3ciID8gMCA6IHBhZ2VTY3JvbGxZKCkpOwogICAgICAg
dmFyIHhPZmYgPSBsT2ZmLmxlZnQgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdlU2Ny
b2xsWCgpKTsKICAgICAgIHJlY3QubGVmdCArPSB4T2ZmOyByZWN0LnJpZ2h0ICs9IHhPZmY7CkBA
IC0xMTgxLDggKzE2OTYsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICByZXR1cm4gcmVjdDsKICAgfQoKLSAgLy8gQ29udGV4dCBtYXkgYmUgIndpbmRvdyIsICJwYWdl
IiwgImRpdiIsIG9yICJsb2NhbCIvbnVsbAotICAvLyBSZXN1bHQgaXMgaW4gImRpdiIgY29vcmRz
CisgIC8vIENvdmVydHMgYSBib3ggZnJvbSAiZGl2IiBjb29yZHMgdG8gYW5vdGhlciBjb29yZGlu
YXRlIHN5c3RlbS4KKyAgLy8gQ29udGV4dCBtYXkgYmUgIndpbmRvdyIsICJwYWdlIiwgImRpdiIs
IG9yICJsb2NhbCIvbnVsbC4KICAgZnVuY3Rpb24gZnJvbUNvb3JkU3lzdGVtKGNtLCBjb29yZHMs
IGNvbnRleHQpIHsKICAgICBpZiAoY29udGV4dCA9PSAiZGl2IikgcmV0dXJuIGNvb3JkczsKICAg
ICB2YXIgbGVmdCA9IGNvb3Jkcy5sZWZ0LCB0b3AgPSBjb29yZHMudG9wOwpAQCAtMTE5MSwyNSAr
MTcwNiwyOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGxlZnQg
LT0gcGFnZVNjcm9sbFgoKTsKICAgICAgIHRvcCAtPSBwYWdlU2Nyb2xsWSgpOwogICAgIH0gZWxz
ZSBpZiAoY29udGV4dCA9PSAibG9jYWwiIHx8ICFjb250ZXh0KSB7Ci0gICAgICB2YXIgbG9jYWxC
b3ggPSBnZXRSZWN0KGNtLmRpc3BsYXkuc2l6ZXIpOworICAgICAgdmFyIGxvY2FsQm94ID0gY20u
ZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgIGxlZnQgKz0gbG9j
YWxCb3gubGVmdDsKICAgICAgIHRvcCArPSBsb2NhbEJveC50b3A7CiAgICAgfQoKLSAgICB2YXIg
bGluZVNwYWNlQm94ID0gZ2V0UmVjdChjbS5kaXNwbGF5LmxpbmVTcGFjZSk7CisgICAgdmFyIGxp
bmVTcGFjZUJveCA9IGNtLmRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OwogICAgIHJldHVybiB7bGVmdDogbGVmdCAtIGxpbmVTcGFjZUJveC5sZWZ0LCB0b3A6IHRvcCAt
IGxpbmVTcGFjZUJveC50b3B9OwogICB9CgogICBmdW5jdGlvbiBjaGFyQ29vcmRzKGNtLCBwb3Ms
IGNvbnRleHQsIGxpbmVPYmosIGJpYXMpIHsKICAgICBpZiAoIWxpbmVPYmopIGxpbmVPYmogPSBn
ZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwotICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20s
IGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3MuY2gsIG51bGwsIGJpYXMpLCBj
b250ZXh0KTsKKyAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBtZWFzdXJl
Q2hhcihjbSwgbGluZU9iaiwgcG9zLmNoLCBiaWFzKSwgY29udGV4dCk7CiAgIH0KCi0gIGZ1bmN0
aW9uIGN1cnNvckNvb3JkcyhjbSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBtZWFzdXJlbWVudCkg
eworICAvLyBSZXR1cm5zIGEgYm94IGZvciBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgd2hpY2gg
bWF5IGhhdmUgYW4KKyAgLy8gJ290aGVyJyBwcm9wZXJ0eSBjb250YWluaW5nIHRoZSBwb3NpdGlv
biBvZiB0aGUgc2Vjb25kYXJ5IGN1cnNvcgorICAvLyBvbiBhIGJpZGkgYm91bmRhcnkuCisgIGZ1
bmN0aW9uIGN1cnNvckNvb3JkcyhjbSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBwcmVwYXJlZE1l
YXN1cmUpIHsKICAgICBsaW5lT2JqID0gbGluZU9iaiB8fCBnZXRMaW5lKGNtLmRvYywgcG9zLmxp
bmUpOwotICAgIGlmICghbWVhc3VyZW1lbnQpIG1lYXN1cmVtZW50ID0gbWVhc3VyZUxpbmUoY20s
IGxpbmVPYmopOworICAgIGlmICghcHJlcGFyZWRNZWFzdXJlKSBwcmVwYXJlZE1lYXN1cmUgPSBw
cmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopOwogICAgIGZ1bmN0aW9uIGdldChjaCwg
cmlnaHQpIHsKLSAgICAgIHZhciBtID0gbWVhc3VyZUNoYXIoY20sIGxpbmVPYmosIGNoLCBtZWFz
dXJlbWVudCwgcmlnaHQgPyAicmlnaHQiIDogImxlZnQiKTsKKyAgICAgIHZhciBtID0gbWVhc3Vy
ZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCBjaCwgcmlnaHQgPyAicmlnaHQiIDog
ImxlZnQiKTsKICAgICAgIGlmIChyaWdodCkgbS5sZWZ0ID0gbS5yaWdodDsgZWxzZSBtLnJpZ2h0
ID0gbS5sZWZ0OwogICAgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbSwg
Y29udGV4dCk7CiAgICAgfQpAQCAtMTIzNSw0MyArMTc1Myw1OSBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gdmFsOwogICB9CgorICAvLyBVc2VkIHRvIGNo
ZWFwbHkgZXN0aW1hdGUgdGhlIGNvb3JkaW5hdGVzIGZvciBhIHBvc2l0aW9uLiBVc2VkIGZvcgor
ICAvLyBpbnRlcm1lZGlhdGUgc2Nyb2xsIHVwZGF0ZXMuCisgIGZ1bmN0aW9uIGVzdGltYXRlQ29v
cmRzKGNtLCBwb3MpIHsKKyAgICB2YXIgbGVmdCA9IDAsIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBw
b3MpOworICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGxlZnQgPSBjaGFyV2lkdGgo
Y20uZGlzcGxheSkgKiBwb3MuY2g7CisgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywg
cG9zLmxpbmUpOworICAgIHZhciB0b3AgPSBoZWlnaHRBdExpbmUobGluZU9iaikgKyBwYWRkaW5n
VG9wKGNtLmRpc3BsYXkpOworICAgIHJldHVybiB7bGVmdDogbGVmdCwgcmlnaHQ6IGxlZnQsIHRv
cDogdG9wLCBib3R0b206IHRvcCArIGxpbmVPYmouaGVpZ2h0fTsKKyAgfQorCisgIC8vIFBvc2l0
aW9ucyByZXR1cm5lZCBieSBjb29yZHNDaGFyIGNvbnRhaW4gc29tZSBleHRyYSBpbmZvcm1hdGlv
bi4KKyAgLy8geFJlbCBpcyB0aGUgcmVsYXRpdmUgeCBwb3NpdGlvbiBvZiB0aGUgaW5wdXQgY29v
cmRpbmF0ZXMgY29tcGFyZWQKKyAgLy8gdG8gdGhlIGZvdW5kIHBvc2l0aW9uIChzbyB4UmVsID4g
MCBtZWFucyB0aGUgY29vcmRpbmF0ZXMgYXJlIHRvCisgIC8vIHRoZSByaWdodCBvZiB0aGUgY2hh
cmFjdGVyIHBvc2l0aW9uLCBmb3IgZXhhbXBsZSkuIFdoZW4gb3V0c2lkZQorICAvLyBpcyB0cnVl
LCB0aGF0IG1lYW5zIHRoZSBjb29yZGluYXRlcyBsaWUgb3V0c2lkZSB0aGUgbGluZSdzCisgIC8v
IHZlcnRpY2FsIHJhbmdlLgogICBmdW5jdGlvbiBQb3NXaXRoSW5mbyhsaW5lLCBjaCwgb3V0c2lk
ZSwgeFJlbCkgewotICAgIHZhciBwb3MgPSBuZXcgUG9zKGxpbmUsIGNoKTsKKyAgICB2YXIgcG9z
ID0gUG9zKGxpbmUsIGNoKTsKICAgICBwb3MueFJlbCA9IHhSZWw7CiAgICAgaWYgKG91dHNpZGUp
IHBvcy5vdXRzaWRlID0gdHJ1ZTsKICAgICByZXR1cm4gcG9zOwogICB9CgotICAvLyBDb29yZHMg
bXVzdCBiZSBsaW5lU3BhY2UtbG9jYWwKKyAgLy8gQ29tcHV0ZSB0aGUgY2hhcmFjdGVyIHBvc2l0
aW9uIGNsb3Nlc3QgdG8gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLgorICAvLyBJbnB1dCBtdXN0IGJl
IGxpbmVTcGFjZS1sb2NhbCAoImRpdiIgY29vcmRpbmF0ZSBzeXN0ZW0pLgogICBmdW5jdGlvbiBj
b29yZHNDaGFyKGNtLCB4LCB5KSB7CiAgICAgdmFyIGRvYyA9IGNtLmRvYzsKICAgICB5ICs9IGNt
LmRpc3BsYXkudmlld09mZnNldDsKICAgICBpZiAoeSA8IDApIHJldHVybiBQb3NXaXRoSW5mbyhk
b2MuZmlyc3QsIDAsIHRydWUsIC0xKTsKLSAgICB2YXIgbGluZU5vID0gbGluZUF0SGVpZ2h0KGRv
YywgeSksIGxhc3QgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE7Ci0gICAgaWYgKGxpbmVObyA+
IGxhc3QpCisgICAgdmFyIGxpbmVOID0gbGluZUF0SGVpZ2h0KGRvYywgeSksIGxhc3QgPSBkb2Mu
Zmlyc3QgKyBkb2Muc2l6ZSAtIDE7CisgICAgaWYgKGxpbmVOID4gbGFzdCkKICAgICAgIHJldHVy
biBQb3NXaXRoSW5mbyhkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEsIGdldExpbmUoZG9jLCBsYXN0
KS50ZXh0Lmxlbmd0aCwgdHJ1ZSwgMSk7CiAgICAgaWYgKHggPCAwKSB4ID0gMDsKCisgICAgdmFy
IGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZU4pOwogICAgIGZvciAoOzspIHsKLSAgICAgIHZh
ciBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGxpbmVObyk7Ci0gICAgICB2YXIgZm91bmQgPSBjb29y
ZHNDaGFySW5uZXIoY20sIGxpbmVPYmosIGxpbmVObywgeCwgeSk7CisgICAgICB2YXIgZm91bmQg
PSBjb29yZHNDaGFySW5uZXIoY20sIGxpbmVPYmosIGxpbmVOLCB4LCB5KTsKICAgICAgIHZhciBt
ZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZU9iaik7Ci0gICAgICB2YXIgbWVyZ2VkUG9z
ID0gbWVyZ2VkICYmIG1lcmdlZC5maW5kKCk7CisgICAgICB2YXIgbWVyZ2VkUG9zID0gbWVyZ2Vk
ICYmIG1lcmdlZC5maW5kKDAsIHRydWUpOwogICAgICAgaWYgKG1lcmdlZCAmJiAoZm91bmQuY2gg
PiBtZXJnZWRQb3MuZnJvbS5jaCB8fCBmb3VuZC5jaCA9PSBtZXJnZWRQb3MuZnJvbS5jaCAmJiBm
b3VuZC54UmVsID4gMCkpCi0gICAgICAgIGxpbmVObyA9IG1lcmdlZFBvcy50by5saW5lOworICAg
ICAgICBsaW5lTiA9IGxpbmVObyhsaW5lT2JqID0gbWVyZ2VkUG9zLnRvLmxpbmUpOwogICAgICAg
ZWxzZQogICAgICAgICByZXR1cm4gZm91bmQ7CiAgICAgfQogICB9CgogICBmdW5jdGlvbiBjb29y
ZHNDaGFySW5uZXIoY20sIGxpbmVPYmosIGxpbmVObywgeCwgeSkgewotICAgIHZhciBpbm5lck9m
ZiA9IHkgLSBoZWlnaHRBdExpbmUoY20sIGxpbmVPYmopOworICAgIHZhciBpbm5lck9mZiA9IHkg
LSBoZWlnaHRBdExpbmUobGluZU9iaik7CiAgICAgdmFyIHdyb25nTGluZSA9IGZhbHNlLCBhZGp1
c3QgPSAyICogY20uZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoOwotICAgIHZhciBtZWFzdXJl
bWVudCA9IG1lYXN1cmVMaW5lKGNtLCBsaW5lT2JqKTsKKyAgICB2YXIgcHJlcGFyZWRNZWFzdXJl
ID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTsKCiAgICAgZnVuY3Rpb24gZ2V0
WChjaCkgewotICAgICAgdmFyIHNwID0gY3Vyc29yQ29vcmRzKGNtLCBQb3MobGluZU5vLCBjaCks
ICJsaW5lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lT2JqLCBtZWFzdXJlbWVu
dCk7CisgICAgICB2YXIgc3AgPSBjdXJzb3JDb29yZHMoY20sIFBvcyhsaW5lTm8sIGNoKSwgImxp
bmUiLCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUpOwogICAgICAgd3JvbmdMaW5lID0gdHJ1ZTsK
ICAgICAgIGlmIChpbm5lck9mZiA+IHNwLmJvdHRvbSkgcmV0dXJuIHNwLmxlZnQgLSBhZGp1c3Q7
CiAgICAgICBlbHNlIGlmIChpbm5lck9mZiA8IHNwLnRvcCkgcmV0dXJuIHNwLmxlZnQgKyBhZGp1
c3Q7CkBAIC0xMjg5LDkgKzE4MjMsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICAgIGlmIChiaWRpID8gdG8gPT0gZnJvbSB8fCB0byA9PSBtb3ZlVmlzdWFsbHkobGlu
ZU9iaiwgZnJvbSwgMSkgOiB0byAtIGZyb20gPD0gMSkgewogICAgICAgICB2YXIgY2ggPSB4IDwg
ZnJvbVggfHwgeCAtIGZyb21YIDw9IHRvWCAtIHggPyBmcm9tIDogdG87CiAgICAgICAgIHZhciB4
RGlmZiA9IHggLSAoY2ggPT0gZnJvbSA/IGZyb21YIDogdG9YKTsKLSAgICAgICAgd2hpbGUgKGlz
RXh0ZW5kaW5nQ2hhci50ZXN0KGxpbmVPYmoudGV4dC5jaGFyQXQoY2gpKSkgKytjaDsKKyAgICAg
ICAgd2hpbGUgKGlzRXh0ZW5kaW5nQ2hhcihsaW5lT2JqLnRleHQuY2hhckF0KGNoKSkpICsrY2g7
CiAgICAgICAgIHZhciBwb3MgPSBQb3NXaXRoSW5mbyhsaW5lTm8sIGNoLCBjaCA9PSBmcm9tID8g
ZnJvbU91dHNpZGUgOiB0b091dHNpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
RGlmZiA8IDAgPyAtMSA6IHhEaWZmID8gMSA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeERpZmYgPCAtMSA/IC0xIDogeERpZmYgPiAxID8gMSA6IDApOwogICAgICAgICByZXR1
cm4gcG9zOwogICAgICAgfQogICAgICAgdmFyIHN0ZXAgPSBNYXRoLmNlaWwoZGlzdCAvIDIpLCBt
aWRkbGUgPSBmcm9tICsgc3RlcDsKQEAgLTEzMDYsNiArMTg0MCw3IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICB9CgogICB2YXIgbWVhc3VyZVRleHQ7CisgIC8vIENvbXB1
dGUgdGhlIGRlZmF1bHQgdGV4dCBoZWlnaHQuCiAgIGZ1bmN0aW9uIHRleHRIZWlnaHQoZGlzcGxh
eSkgewogICAgIGlmIChkaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgIT0gbnVsbCkgcmV0dXJuIGRp
c3BsYXkuY2FjaGVkVGV4dEhlaWdodDsKICAgICBpZiAobWVhc3VyZVRleHQgPT0gbnVsbCkgewpA
QCAtMTMyNSw4NCArMTg2MCw4OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICByZXR1cm4gaGVpZ2h0IHx8IDE7CiAgIH0KCisgIC8vIENvbXB1dGUgdGhlIGRlZmF1bHQg
Y2hhcmFjdGVyIHdpZHRoLgogICBmdW5jdGlvbiBjaGFyV2lkdGgoZGlzcGxheSkgewogICAgIGlm
IChkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCAhPSBudWxsKSByZXR1cm4gZGlzcGxheS5jYWNoZWRD
aGFyV2lkdGg7Ci0gICAgdmFyIGFuY2hvciA9IGVsdCgic3BhbiIsICJ4Iik7CisgICAgdmFyIGFu
Y2hvciA9IGVsdCgic3BhbiIsICJ4eHh4eHh4eHh4Iik7CiAgICAgdmFyIHByZSA9IGVsdCgicHJl
IiwgW2FuY2hvcl0pOwogICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwg
cHJlKTsKLSAgICB2YXIgd2lkdGggPSBhbmNob3Iub2Zmc2V0V2lkdGg7CisgICAgdmFyIHJlY3Qg
PSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHdpZHRoID0gKHJlY3QucmlnaHQgLSBy
ZWN0LmxlZnQpIC8gMTA7CiAgICAgaWYgKHdpZHRoID4gMikgZGlzcGxheS5jYWNoZWRDaGFyV2lk
dGggPSB3aWR0aDsKICAgICByZXR1cm4gd2lkdGggfHwgMTA7CiAgIH0KCiAgIC8vIE9QRVJBVElP
TlMKCi0gIC8vIE9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gd3JhcCBjaGFuZ2VzIGluIHN1Y2ggYSB3
YXkgdGhhdCBlYWNoCi0gIC8vIGNoYW5nZSB3b24ndCBoYXZlIHRvIHVwZGF0ZSB0aGUgY3Vyc29y
IGFuZCBkaXNwbGF5ICh3aGljaCB3b3VsZAotICAvLyBiZSBhd2t3YXJkLCBzbG93LCBhbmQgZXJy
b3ItcHJvbmUpLCBidXQgaW5zdGVhZCB1cGRhdGVzIGFyZQotICAvLyBiYXRjaGVkIGFuZCB0aGVu
IGFsbCBjb21iaW5lZCBhbmQgZXhlY3V0ZWQgYXQgb25jZS4KKyAgLy8gT3BlcmF0aW9ucyBhcmUg
dXNlZCB0byB3cmFwIGEgc2VyaWVzIG9mIGNoYW5nZXMgdG8gdGhlIGVkaXRvcgorICAvLyBzdGF0
ZSBpbiBzdWNoIGEgd2F5IHRoYXQgZWFjaCBjaGFuZ2Ugd29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhl
CisgIC8vIGN1cnNvciBhbmQgZGlzcGxheSAod2hpY2ggd291bGQgYmUgYXdrd2FyZCwgc2xvdywg
YW5kCisgIC8vIGVycm9yLXByb25lKS4gSW5zdGVhZCwgZGlzcGxheSB1cGRhdGVzIGFyZSBiYXRj
aGVkIGFuZCB0aGVuIGFsbAorICAvLyBjb21iaW5lZCBhbmQgZXhlY3V0ZWQgYXQgb25jZS4KCiAg
IHZhciBuZXh0T3BJZCA9IDA7CisgIC8vIFN0YXJ0IGEgbmV3IG9wZXJhdGlvbi4KICAgZnVuY3Rp
b24gc3RhcnRPcGVyYXRpb24oY20pIHsKICAgICBjbS5jdXJPcCA9IHsKLSAgICAgIC8vIEFuIGFy
cmF5IG9mIHJhbmdlcyBvZiBsaW5lcyB0aGF0IGhhdmUgdG8gYmUgdXBkYXRlZC4gU2VlCi0gICAg
ICAvLyB1cGRhdGVEaXNwbGF5LgotICAgICAgY2hhbmdlczogW10sCi0gICAgICBmb3JjZVVwZGF0
ZTogZmFsc2UsCi0gICAgICB1cGRhdGVJbnB1dDogbnVsbCwKLSAgICAgIHVzZXJTZWxDaGFuZ2U6
IG51bGwsCi0gICAgICB0ZXh0Q2hhbmdlZDogbnVsbCwKLSAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6
IGZhbHNlLAotICAgICAgY3Vyc29yQWN0aXZpdHk6IGZhbHNlLAotICAgICAgdXBkYXRlTWF4TGlu
ZTogZmFsc2UsCi0gICAgICB1cGRhdGVTY3JvbGxQb3M6IGZhbHNlLAotICAgICAgaWQ6ICsrbmV4
dE9wSWQKKyAgICAgIHZpZXdDaGFuZ2VkOiBmYWxzZSwgICAgICAvLyBGbGFnIHRoYXQgaW5kaWNh
dGVzIHRoYXQgbGluZXMgbWlnaHQgbmVlZCB0byBiZSByZWRyYXduCisgICAgICBzdGFydEhlaWdo
dDogY20uZG9jLmhlaWdodCwgLy8gVXNlZCB0byBkZXRlY3QgbmVlZCB0byB1cGRhdGUgc2Nyb2xs
YmFyCisgICAgICBmb3JjZVVwZGF0ZTogZmFsc2UsICAgICAgLy8gVXNlZCB0byBmb3JjZSBhIHJl
ZHJhdworICAgICAgdXBkYXRlSW5wdXQ6IG51bGwsICAgICAgIC8vIFdoZXRoZXIgdG8gcmVzZXQg
dGhlIGlucHV0IHRleHRhcmVhCisgICAgICB0eXBpbmc6IGZhbHNlLCAgICAgICAgICAgLy8gV2hl
dGhlciB0aGlzIHJlc2V0IHNob3VsZCBiZSBjYXJlZnVsIHRvIGxlYXZlIGV4aXN0aW5nIHRleHQg
KGZvciBjb21wb3NpdGluZykKKyAgICAgIGNoYW5nZU9ianM6IG51bGwsICAgICAgICAvLyBBY2N1
bXVsYXRlZCBjaGFuZ2VzLCBmb3IgZmlyaW5nIGNoYW5nZSBldmVudHMKKyAgICAgIG9yaWdpbjog
bnVsbCwgICAgICAgICAgICAvLyBTZWxlY3Rpb24ncyBvcmlnaW4KKyAgICAgIGN1cnNvckFjdGl2
aXR5OiBmYWxzZSwgICAvLyBXaGV0aGVyIHRvIGZpcmUgYSBjdXJzb3JBY3Rpdml0eSBldmVudAor
ICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogZmFsc2UsIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBu
ZWVkcyB0byBiZSByZWRyYXduCisgICAgICB1cGRhdGVNYXhMaW5lOiBmYWxzZSwgICAgLy8gU2V0
IHdoZW4gdGhlIHdpZGVzdCBsaW5lIG5lZWRzIHRvIGJlIGRldGVybWluZWQgYW5ldworICAgICAg
c2Nyb2xsTGVmdDogbnVsbCwgc2Nyb2xsVG9wOiBudWxsLCAvLyBJbnRlcm1lZGlhdGUgc2Nyb2xs
IHBvc2l0aW9uLCBub3QgcHVzaGVkIHRvIERPTSB5ZXQKKyAgICAgIHNjcm9sbFRvUG9zOiBudWxs
LCAgICAgICAvLyBVc2VkIHRvIHNjcm9sbCB0byBhIHNwZWNpZmljIHBvc2l0aW9uCisgICAgICBp
ZDogKytuZXh0T3BJZCAgICAgICAgICAgLy8gVW5pcXVlIElECiAgICAgfTsKICAgICBpZiAoIWRl
bGF5ZWRDYWxsYmFja0RlcHRoKyspIGRlbGF5ZWRDYWxsYmFja3MgPSBbXTsKICAgfQoKKyAgLy8g
RmluaXNoIGFuIG9wZXJhdGlvbiwgdXBkYXRpbmcgdGhlIGRpc3BsYXkgYW5kIHNpZ25hbGxpbmcg
ZGVsYXllZCBldmVudHMKICAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uKGNtKSB7CiAgICAgdmFyIG9w
ID0gY20uY3VyT3AsIGRvYyA9IGNtLmRvYywgZGlzcGxheSA9IGNtLmRpc3BsYXk7CiAgICAgY20u
Y3VyT3AgPSBudWxsOwoKLSAgICBpZiAob3AudXBkYXRlTWF4TGluZSkgY29tcHV0ZU1heExlbmd0
aChjbSk7Ci0gICAgaWYgKGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9wdGlvbnMubGlu
ZVdyYXBwaW5nICYmIGRpc3BsYXkubWF4TGluZSkgewotICAgICAgdmFyIHdpZHRoID0gbWVhc3Vy
ZUxpbmVXaWR0aChjbSwgZGlzcGxheS5tYXhMaW5lKTsKLSAgICAgIGRpc3BsYXkuc2l6ZXIuc3R5
bGUubWluV2lkdGggPSBNYXRoLm1heCgwLCB3aWR0aCArIDMgKyBzY3JvbGxlckN1dE9mZikgKyAi
cHgiOwotICAgICAgZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgdmFyIG1h
eFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBkaXNw
bGF5LnNpemVyLm9mZnNldFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCk7Ci0g
ICAgICBpZiAobWF4U2Nyb2xsTGVmdCA8IGRvYy5zY3JvbGxMZWZ0ICYmICFvcC51cGRhdGVTY3Jv
bGxQb3MpCi0gICAgICAgIHNldFNjcm9sbExlZnQoY20sIE1hdGgubWluKGRpc3BsYXkuc2Nyb2xs
ZXIuc2Nyb2xsTGVmdCwgbWF4U2Nyb2xsTGVmdCksIHRydWUpOwotICAgIH0KLSAgICB2YXIgbmV3
U2Nyb2xsUG9zLCB1cGRhdGVkOwotICAgIGlmIChvcC51cGRhdGVTY3JvbGxQb3MpIHsKLSAgICAg
IG5ld1Njcm9sbFBvcyA9IG9wLnVwZGF0ZVNjcm9sbFBvczsKLSAgICB9IGVsc2UgaWYgKG9wLnNl
bGVjdGlvbkNoYW5nZWQgJiYgZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHsgLy8gZG9u
J3QgcmVzY3JvbGwgaWYgbm90IHZpc2libGUKLSAgICAgIHZhciBjb29yZHMgPSBjdXJzb3JDb29y
ZHMoY20sIGRvYy5zZWwuaGVhZCk7Ci0gICAgICBuZXdTY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3Jv
bGxQb3MoY20sIGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wLCBjb29yZHMubGVmdCwgY29vcmRzLmJv
dHRvbSk7Ci0gICAgfQotICAgIGlmIChvcC5jaGFuZ2VzLmxlbmd0aCB8fCBvcC5mb3JjZVVwZGF0
ZSB8fCBuZXdTY3JvbGxQb3MgJiYgbmV3U2Nyb2xsUG9zLnNjcm9sbFRvcCAhPSBudWxsKSB7Ci0g
ICAgICB1cGRhdGVkID0gdXBkYXRlRGlzcGxheShjbSwgb3AuY2hhbmdlcywgbmV3U2Nyb2xsUG9z
ICYmIG5ld1Njcm9sbFBvcy5zY3JvbGxUb3AsIG9wLmZvcmNlVXBkYXRlKTsKKyAgICBpZiAob3Au
dXBkYXRlTWF4TGluZSkgZmluZE1heExpbmUoY20pOworCisgICAgLy8gSWYgaXQgbG9va3MgbGlr
ZSBhbiB1cGRhdGUgbWlnaHQgYmUgbmVlZGVkLCBjYWxsIHVwZGF0ZURpc3BsYXkKKyAgICBpZiAo
b3Audmlld0NoYW5nZWQgfHwgb3AuZm9yY2VVcGRhdGUgfHwgb3Auc2Nyb2xsVG9wICE9IG51bGwg
fHwKKyAgICAgICAgb3Auc2Nyb2xsVG9Qb3MgJiYgKG9wLnNjcm9sbFRvUG9zLmZyb20ubGluZSA8
IGRpc3BsYXkudmlld0Zyb20gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLnNjcm9s
bFRvUG9zLnRvLmxpbmUgPj0gZGlzcGxheS52aWV3VG8pIHx8CisgICAgICAgIGRpc3BsYXkubWF4
TGluZUNoYW5nZWQgJiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKKyAgICAgIHZhciB1cGRh
dGVkID0gdXBkYXRlRGlzcGxheShjbSwge3RvcDogb3Auc2Nyb2xsVG9wLCBlbnN1cmU6IG9wLnNj
cm9sbFRvUG9zfSwgb3AuZm9yY2VVcGRhdGUpOwogICAgICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xs
ZXIub2Zmc2V0SGVpZ2h0KSBjbS5kb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5z
Y3JvbGxUb3A7CiAgICAgfQorICAgIC8vIElmIG5vIHVwZGF0ZSB3YXMgcnVuLCBidXQgdGhlIHNl
bGVjdGlvbiBjaGFuZ2VkLCByZWRyYXcgdGhhdC4KICAgICBpZiAoIXVwZGF0ZWQgJiYgb3Auc2Vs
ZWN0aW9uQ2hhbmdlZCkgdXBkYXRlU2VsZWN0aW9uKGNtKTsKLSAgICBpZiAob3AudXBkYXRlU2Ny
b2xsUG9zKSB7Ci0gICAgICB2YXIgdG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS5z
Y3JvbGxlci5zY3JvbGxIZWlnaHQgLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwgbmV3
U2Nyb2xsUG9zLnNjcm9sbFRvcCkpOwotICAgICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRo
Lm1pbihkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGll
bnRXaWR0aCwgbmV3U2Nyb2xsUG9zLnNjcm9sbExlZnQpKTsKKyAgICBpZiAoIXVwZGF0ZWQgJiYg
b3Auc3RhcnRIZWlnaHQgIT0gY20uZG9jLmhlaWdodCkgdXBkYXRlU2Nyb2xsYmFycyhjbSk7CisK
KyAgICAvLyBQcm9wYWdhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiB0byB0aGUgYWN0dWFsIERPTSBz
Y3JvbGxlcgorICAgIGlmIChvcC5zY3JvbGxUb3AgIT0gbnVsbCAmJiBkaXNwbGF5LnNjcm9sbGVy
LnNjcm9sbFRvcCAhPSBvcC5zY3JvbGxUb3ApIHsKKyAgICAgIHZhciB0b3AgPSBNYXRoLm1heCgw
LCBNYXRoLm1pbihkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbEhlaWdodCAtIGRpc3BsYXkuc2Nyb2xs
ZXIuY2xpZW50SGVpZ2h0LCBvcC5zY3JvbGxUb3ApKTsKICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIu
c2Nyb2xsVG9wID0gZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9IGRvYy5zY3JvbGxUb3Ag
PSB0b3A7CisgICAgfQorICAgIGlmIChvcC5zY3JvbGxMZWZ0ICE9IG51bGwgJiYgZGlzcGxheS5z
Y3JvbGxlci5zY3JvbGxMZWZ0ICE9IG9wLnNjcm9sbExlZnQpIHsKKyAgICAgIHZhciBsZWZ0ID0g
TWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGRpc3Bs
YXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgsIG9wLnNjcm9sbExlZnQpKTsKICAgICAgIGRpc3BsYXku
c2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IGRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0ID0gZG9j
LnNjcm9sbExlZnQgPSBsZWZ0OwogICAgICAgYWxpZ25Ib3Jpem9udGFsbHkoY20pOwotICAgICAg
aWYgKG9wLnNjcm9sbFRvUG9zKQotICAgICAgICBzY3JvbGxQb3NJbnRvVmlldyhjbSwgY2xpcFBv
cyhjbS5kb2MsIG9wLnNjcm9sbFRvUG9zLmZyb20pLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGlwUG9zKGNtLmRvYywgb3Auc2Nyb2xsVG9Qb3MudG8pLCBvcC5zY3JvbGxUb1Bvcy5tYXJn
aW4pOwotICAgIH0gZWxzZSBpZiAobmV3U2Nyb2xsUG9zKSB7Ci0gICAgICBzY3JvbGxDdXJzb3JJ
bnRvVmlldyhjbSk7CiAgICAgfQorICAgIC8vIElmIHdlIG5lZWQgdG8gc2Nyb2xsIGEgc3BlY2lm
aWMgcG9zaXRpb24gaW50byB2aWV3LCBkbyBzby4KKyAgICBpZiAob3Auc2Nyb2xsVG9Qb3MpIHsK
KyAgICAgIHZhciBjb29yZHMgPSBzY3JvbGxQb3NJbnRvVmlldyhjbSwgY2xpcFBvcyhjbS5kb2Ms
IG9wLnNjcm9sbFRvUG9zLmZyb20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsaXBQb3MoY20uZG9jLCBvcC5zY3JvbGxUb1Bvcy50byksIG9wLnNjcm9sbFRvUG9zLm1h
cmdpbik7CisgICAgICBpZiAob3Auc2Nyb2xsVG9Qb3MuaXNDdXJzb3IgJiYgY20uc3RhdGUuZm9j
dXNlZCkgbWF5YmVTY3JvbGxXaW5kb3coY20sIGNvb3Jkcyk7CisgICAgfQorCiAgICAgaWYgKG9w
LnNlbGVjdGlvbkNoYW5nZWQpIHJlc3RhcnRCbGluayhjbSk7CgogICAgIGlmIChjbS5zdGF0ZS5m
b2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KQotICAgICAgcmVzZXRJbnB1dChjbSwgb3AudXNlclNl
bENoYW5nZSk7CisgICAgICByZXNldElucHV0KGNtLCBvcC50eXBpbmcpOwoKKyAgICAvLyBGaXJl
IGV2ZW50cyBmb3IgbWFya2VycyB0aGF0IGFyZSBoaWRkZW4vdW5pZGRlbiBieSBlZGl0aW5nIG9y
CisgICAgLy8gdW5kb2luZwogICAgIHZhciBoaWRkZW4gPSBvcC5tYXliZUhpZGRlbk1hcmtlcnMs
IHVuaGlkZGVuID0gb3AubWF5YmVVbmhpZGRlbk1hcmtlcnM7CiAgICAgaWYgKGhpZGRlbikgZm9y
ICh2YXIgaSA9IDA7IGkgPCBoaWRkZW4ubGVuZ3RoOyArK2kpCiAgICAgICBpZiAoIWhpZGRlbltp
XS5saW5lcy5sZW5ndGgpIHNpZ25hbChoaWRkZW5baV0sICJoaWRlIik7CkBAIC0xNDE0LDQ3ICsx
OTU0LDI0MiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGRlbGF5
ZWQgPSBkZWxheWVkQ2FsbGJhY2tzOwogICAgICAgZGVsYXllZENhbGxiYWNrcyA9IG51bGw7CiAg
ICAgfQotICAgIGlmIChvcC50ZXh0Q2hhbmdlZCkKLSAgICAgIHNpZ25hbChjbSwgImNoYW5nZSIs
IGNtLCBvcC50ZXh0Q2hhbmdlZCk7Ci0gICAgaWYgKG9wLmN1cnNvckFjdGl2aXR5KSBzaWduYWwo
Y20sICJjdXJzb3JBY3Rpdml0eSIsIGNtKTsKKyAgICAvLyBGaXJlIGNoYW5nZSBldmVudHMsIGFu
ZCBkZWxheWVkIGV2ZW50IGhhbmRsZXJzCisgICAgaWYgKG9wLmNoYW5nZU9ianMpIHsKKyAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgb3AuY2hhbmdlT2Jqcy5sZW5ndGg7IGkrKykKKyAgICAgICAg
c2lnbmFsKGNtLCAiY2hhbmdlIiwgY20sIG9wLmNoYW5nZU9ianNbaV0pOworICAgICAgc2lnbmFs
KGNtLCAiY2hhbmdlcyIsIGNtLCBvcC5jaGFuZ2VPYmpzKTsKKyAgICB9CisgICAgaWYgKG9wLmN1
cnNvckFjdGl2aXR5KSBzaWduYWwoY20sICJjdXJzb3JBY3Rpdml0eSIsIGNtLCBvcC5vcmlnaW4p
OwogICAgIGlmIChkZWxheWVkKSBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGF5ZWQubGVuZ3RoOyAr
K2kpIGRlbGF5ZWRbaV0oKTsKICAgfQoKKyAgLy8gUnVuIHRoZSBnaXZlbiBmdW5jdGlvbiBpbiBh
biBvcGVyYXRpb24KKyAgZnVuY3Rpb24gcnVuSW5PcChjbSwgZikgeworICAgIGlmIChjbS5jdXJP
cCkgcmV0dXJuIGYoKTsKKyAgICBzdGFydE9wZXJhdGlvbihjbSk7CisgICAgdHJ5IHsgcmV0dXJu
IGYoKTsgfQorICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24oY20pOyB9CisgIH0KICAgLy8gV3Jh
cHMgYSBmdW5jdGlvbiBpbiBhbiBvcGVyYXRpb24uIFJldHVybnMgdGhlIHdyYXBwZWQgZnVuY3Rp
b24uCi0gIGZ1bmN0aW9uIG9wZXJhdGlvbihjbTEsIGYpIHsKKyAgZnVuY3Rpb24gb3BlcmF0aW9u
KGNtLCBmKSB7CiAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGNtID0gY20xIHx8
IHRoaXMsIHdpdGhPcCA9ICFjbS5jdXJPcDsKLSAgICAgIGlmICh3aXRoT3ApIHN0YXJ0T3BlcmF0
aW9uKGNtKTsKLSAgICAgIHRyeSB7IHZhciByZXN1bHQgPSBmLmFwcGx5KGNtLCBhcmd1bWVudHMp
OyB9Ci0gICAgICBmaW5hbGx5IHsgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9uKGNtKTsgfQotICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIGlmIChjbS5jdXJPcCkgcmV0dXJuIGYuYXBwbHkoY20s
IGFyZ3VtZW50cyk7CisgICAgICBzdGFydE9wZXJhdGlvbihjbSk7CisgICAgICB0cnkgeyByZXR1
cm4gZi5hcHBseShjbSwgYXJndW1lbnRzKTsgfQorICAgICAgZmluYWxseSB7IGVuZE9wZXJhdGlv
bihjbSk7IH0KICAgICB9OwogICB9Ci0gIGZ1bmN0aW9uIGRvY09wZXJhdGlvbihmKSB7CisgIC8v
IFVzZWQgdG8gYWRkIG1ldGhvZHMgdG8gZWRpdG9yIGFuZCBkb2MgaW5zdGFuY2VzLCB3cmFwcGlu
ZyB0aGVtIGluCisgIC8vIG9wZXJhdGlvbnMuCisgIGZ1bmN0aW9uIG1ldGhvZE9wKGYpIHsKICAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgd2l0aE9wID0gdGhpcy5jbSAmJiAhdGhp
cy5jbS5jdXJPcCwgcmVzdWx0OwotICAgICAgaWYgKHdpdGhPcCkgc3RhcnRPcGVyYXRpb24odGhp
cy5jbSk7Ci0gICAgICB0cnkgeyByZXN1bHQgPSBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0K
LSAgICAgIGZpbmFsbHkgeyBpZiAod2l0aE9wKSBlbmRPcGVyYXRpb24odGhpcy5jbSk7IH0KLSAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICBpZiAodGhpcy5jdXJPcCkgcmV0dXJuIGYuYXBwbHko
dGhpcywgYXJndW1lbnRzKTsKKyAgICAgIHN0YXJ0T3BlcmF0aW9uKHRoaXMpOworICAgICAgdHJ5
IHsgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQorICAgICAgZmluYWxseSB7IGVu
ZE9wZXJhdGlvbih0aGlzKTsgfQogICAgIH07CiAgIH0KLSAgZnVuY3Rpb24gcnVuSW5PcChjbSwg
ZikgewotICAgIHZhciB3aXRoT3AgPSAhY20uY3VyT3AsIHJlc3VsdDsKLSAgICBpZiAod2l0aE9w
KSBzdGFydE9wZXJhdGlvbihjbSk7Ci0gICAgdHJ5IHsgcmVzdWx0ID0gZigpOyB9Ci0gICAgZmlu
YWxseSB7IGlmICh3aXRoT3ApIGVuZE9wZXJhdGlvbihjbSk7IH0KLSAgICByZXR1cm4gcmVzdWx0
OworICBmdW5jdGlvbiBkb2NNZXRob2RPcChmKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewor
ICAgICAgdmFyIGNtID0gdGhpcy5jbTsKKyAgICAgIGlmICghY20gfHwgY20uY3VyT3ApIHJldHVy
biBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICBzdGFydE9wZXJhdGlvbihjbSk7Cisg
ICAgICB0cnkgeyByZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9CisgICAgICBmaW5h
bGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfQorICAgIH07CisgIH0KKworICAvLyBWSUVXIFRSQUNL
SU5HCisKKyAgLy8gVGhlc2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlIHZpc2li
bGUgKGN1cnJlbnRseSBkcmF3bikKKyAgLy8gcGFydCBvZiB0aGUgZG9jdW1lbnQuIEEgTGluZVZp
ZXcgbWF5IGNvcnJlc3BvbmQgdG8gbXVsdGlwbGUKKyAgLy8gbG9naWNhbCBsaW5lcywgaWYgdGhv
c2UgYXJlIGNvbm5lY3RlZCBieSBjb2xsYXBzZWQgcmFuZ2VzLgorICBmdW5jdGlvbiBMaW5lVmll
dyhkb2MsIGxpbmUsIGxpbmVOKSB7CisgICAgLy8gVGhlIHN0YXJ0aW5nIGxpbmUKKyAgICB0aGlz
LmxpbmUgPSBsaW5lOworICAgIC8vIENvbnRpbnVpbmcgbGluZXMsIGlmIGFueQorICAgIHRoaXMu
cmVzdCA9IHZpc3VhbExpbmVDb250aW51ZWQobGluZSk7CisgICAgLy8gTnVtYmVyIG9mIGxvZ2lj
YWwgbGluZXMgaW4gdGhpcyB2aXN1YWwgbGluZQorICAgIHRoaXMuc2l6ZSA9IHRoaXMucmVzdCA/
IGxpbmVObyhsc3QodGhpcy5yZXN0KSkgLSBsaW5lTiArIDEgOiAxOworICAgIHRoaXMubm9kZSA9
IHRoaXMudGV4dCA9IG51bGw7CisgICAgdGhpcy5oaWRkZW4gPSBsaW5lSXNIaWRkZW4oZG9jLCBs
aW5lKTsKKyAgfQorCisgIC8vIENyZWF0ZSBhIHJhbmdlIG9mIExpbmVWaWV3IG9iamVjdHMgZm9y
IHRoZSBnaXZlbiBsaW5lcy4KKyAgZnVuY3Rpb24gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIHRv
KSB7CisgICAgdmFyIGFycmF5ID0gW10sIG5leHRQb3M7CisgICAgZm9yICh2YXIgcG9zID0gZnJv
bTsgcG9zIDwgdG87IHBvcyA9IG5leHRQb3MpIHsKKyAgICAgIHZhciB2aWV3ID0gbmV3IExpbmVW
aWV3KGNtLmRvYywgZ2V0TGluZShjbS5kb2MsIHBvcyksIHBvcyk7CisgICAgICBuZXh0UG9zID0g
cG9zICsgdmlldy5zaXplOworICAgICAgYXJyYXkucHVzaCh2aWV3KTsKKyAgICB9CisgICAgcmV0
dXJuIGFycmF5OwogICB9CgorICAvLyBVcGRhdGVzIHRoZSBkaXNwbGF5LnZpZXcgZGF0YSBzdHJ1
Y3R1cmUgZm9yIGEgZ2l2ZW4gY2hhbmdlIHRvIHRoZQorICAvLyBkb2N1bWVudC4gRnJvbSBhbmQg
dG8gYXJlIGluIHByZS1jaGFuZ2UgY29vcmRpbmF0ZXMuIExlbmRpZmYgaXMKKyAgLy8gdGhlIGFt
b3VudCBvZiBsaW5lcyBhZGRlZCBvciBzdWJ0cmFjdGVkIGJ5IHRoZSBjaGFuZ2UuIFRoaXMgaXMK
KyAgLy8gdXNlZCBmb3IgY2hhbmdlcyB0aGF0IHNwYW4gbXVsdGlwbGUgbGluZXMsIG9yIGNoYW5n
ZSB0aGUgd2F5CisgIC8vIGxpbmVzIGFyZSBkaXZpZGVkIGludG8gdmlzdWFsIGxpbmVzLiByZWdM
aW5lQ2hhbmdlIChiZWxvdykKKyAgLy8gcmVnaXN0ZXJzIHNpbmdsZS1saW5lIGNoYW5nZXMuCiAg
IGZ1bmN0aW9uIHJlZ0NoYW5nZShjbSwgZnJvbSwgdG8sIGxlbmRpZmYpIHsKICAgICBpZiAoZnJv
bSA9PSBudWxsKSBmcm9tID0gY20uZG9jLmZpcnN0OwogICAgIGlmICh0byA9PSBudWxsKSB0byA9
IGNtLmRvYy5maXJzdCArIGNtLmRvYy5zaXplOwotICAgIGNtLmN1ck9wLmNoYW5nZXMucHVzaCh7
ZnJvbTogZnJvbSwgdG86IHRvLCBkaWZmOiBsZW5kaWZmfSk7CisgICAgaWYgKCFsZW5kaWZmKSBs
ZW5kaWZmID0gMDsKKworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICBpZiAobGVu
ZGlmZiAmJiB0byA8IGRpc3BsYXkudmlld1RvICYmCisgICAgICAgIChkaXNwbGF5LnVwZGF0ZUxp
bmVOdW1iZXJzID09IG51bGwgfHwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA+IGZyb20pKQor
ICAgICAgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9IGZyb207CisKKyAgICBjbS5jdXJPcC52
aWV3Q2hhbmdlZCA9IHRydWU7CisKKyAgICBpZiAoZnJvbSA+PSBkaXNwbGF5LnZpZXdUbykgeyAv
LyBDaGFuZ2UgYWZ0ZXIKKyAgICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucyAmJiB2aXN1YWxMaW5l
Tm8oY20uZG9jLCBmcm9tKSA8IGRpc3BsYXkudmlld1RvKQorICAgICAgICByZXNldFZpZXcoY20p
OworICAgIH0gZWxzZSBpZiAodG8gPD0gZGlzcGxheS52aWV3RnJvbSkgeyAvLyBDaGFuZ2UgYmVm
b3JlCisgICAgICBpZiAoc2F3Q29sbGFwc2VkU3BhbnMgJiYgdmlzdWFsTGluZUVuZE5vKGNtLmRv
YywgdG8gKyBsZW5kaWZmKSA+IGRpc3BsYXkudmlld0Zyb20pIHsKKyAgICAgICAgcmVzZXRWaWV3
KGNtKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRpc3BsYXkudmlld0Zyb20gKz0gbGVuZGlm
ZjsKKyAgICAgICAgZGlzcGxheS52aWV3VG8gKz0gbGVuZGlmZjsKKyAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKGZyb20gPD0gZGlzcGxheS52aWV3RnJvbSAmJiB0byA+PSBkaXNwbGF5LnZpZXdUbykg
eyAvLyBGdWxsIG92ZXJsYXAKKyAgICAgIHJlc2V0VmlldyhjbSk7CisgICAgfSBlbHNlIGlmIChm
cm9tIDw9IGRpc3BsYXkudmlld0Zyb20pIHsgLy8gVG9wIG92ZXJsYXAKKyAgICAgIHZhciBjdXQg
PSB2aWV3Q3V0dGluZ1BvaW50KGNtLCB0bywgdG8gKyBsZW5kaWZmLCAxKTsKKyAgICAgIGlmIChj
dXQpIHsKKyAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKGN1dC5pbmRl
eCk7CisgICAgICAgIGRpc3BsYXkudmlld0Zyb20gPSBjdXQubGluZU47CisgICAgICAgIGRpc3Bs
YXkudmlld1RvICs9IGxlbmRpZmY7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXNldFZpZXco
Y20pOworICAgICAgfQorICAgIH0gZWxzZSBpZiAodG8gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8g
Qm90dG9tIG92ZXJsYXAKKyAgICAgIHZhciBjdXQgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9t
LCBmcm9tLCAtMSk7CisgICAgICBpZiAoY3V0KSB7CisgICAgICAgIGRpc3BsYXkudmlldyA9IGRp
c3BsYXkudmlldy5zbGljZSgwLCBjdXQuaW5kZXgpOworICAgICAgICBkaXNwbGF5LnZpZXdUbyA9
IGN1dC5saW5lTjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlc2V0VmlldyhjbSk7CisgICAg
ICB9CisgICAgfSBlbHNlIHsgLy8gR2FwIGluIHRoZSBtaWRkbGUKKyAgICAgIHZhciBjdXRUb3Ag
PSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9tLCBmcm9tLCAtMSk7CisgICAgICB2YXIgY3V0Qm90
ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7CisgICAgICBpZiAo
Y3V0VG9wICYmIGN1dEJvdCkgeworICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcu
c2xpY2UoMCwgY3V0VG9wLmluZGV4KQorICAgICAgICAgIC5jb25jYXQoYnVpbGRWaWV3QXJyYXko
Y20sIGN1dFRvcC5saW5lTiwgY3V0Qm90LmxpbmVOKSkKKyAgICAgICAgICAuY29uY2F0KGRpc3Bs
YXkudmlldy5zbGljZShjdXRCb3QuaW5kZXgpKTsKKyAgICAgICAgZGlzcGxheS52aWV3VG8gKz0g
bGVuZGlmZjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlc2V0VmlldyhjbSk7CisgICAgICB9
CisgICAgfQorCisgICAgdmFyIGV4dCA9IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDsKKyAgICBp
ZiAoZXh0KSB7CisgICAgICBpZiAodG8gPCBleHQubGluZU4pCisgICAgICAgIGV4dC5saW5lTiAr
PSBsZW5kaWZmOworICAgICAgZWxzZSBpZiAoZnJvbSA8IGV4dC5saW5lTiArIGV4dC5zaXplKQor
ICAgICAgICBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOworICAgIH0KKyAgfQorCisg
IC8vIFJlZ2lzdGVyIGEgY2hhbmdlIHRvIGEgc2luZ2xlIGxpbmUuIFR5cGUgbXVzdCBiZSBvbmUg
b2YgInRleHQiLAorICAvLyAiZ3V0dGVyIiwgImNsYXNzIiwgIndpZGdldCIKKyAgZnVuY3Rpb24g
cmVnTGluZUNoYW5nZShjbSwgbGluZSwgdHlwZSkgeworICAgIGNtLmN1ck9wLnZpZXdDaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGV4dCA9IGNtLmRpc3BsYXku
ZXh0ZXJuYWxNZWFzdXJlZDsKKyAgICBpZiAoZXh0ICYmIGxpbmUgPj0gZXh0LmxpbmVOICYmIGxp
bmUgPCBleHQubGluZU4gKyBleHQuc2l6ZSkKKyAgICAgIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJl
ZCA9IG51bGw7CisKKyAgICBpZiAobGluZSA8IGRpc3BsYXkudmlld0Zyb20gfHwgbGluZSA+PSBk
aXNwbGF5LnZpZXdUbykgcmV0dXJuOworICAgIHZhciBsaW5lVmlldyA9IGRpc3BsYXkudmlld1tm
aW5kVmlld0luZGV4KGNtLCBsaW5lKV07CisgICAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbnVsbCkg
cmV0dXJuOworICAgIHZhciBhcnIgPSBsaW5lVmlldy5jaGFuZ2VzIHx8IChsaW5lVmlldy5jaGFu
Z2VzID0gW10pOworICAgIGlmIChpbmRleE9mKGFyciwgdHlwZSkgPT0gLTEpIGFyci5wdXNoKHR5
cGUpOworICB9CisKKyAgLy8gQ2xlYXIgdGhlIHZpZXcuCisgIGZ1bmN0aW9uIHJlc2V0Vmlldyhj
bSkgeworICAgIGNtLmRpc3BsYXkudmlld0Zyb20gPSBjbS5kaXNwbGF5LnZpZXdUbyA9IGNtLmRv
Yy5maXJzdDsKKyAgICBjbS5kaXNwbGF5LnZpZXcgPSBbXTsKKyAgICBjbS5kaXNwbGF5LnZpZXdP
ZmZzZXQgPSAwOworICB9CisKKyAgLy8gRmluZCB0aGUgdmlldyBlbGVtZW50IGNvcnJlc3BvbmRp
bmcgdG8gYSBnaXZlbiBsaW5lLiBSZXR1cm4gbnVsbAorICAvLyB3aGVuIHRoZSBsaW5lIGlzbid0
IHZpc2libGUuCisgIGZ1bmN0aW9uIGZpbmRWaWV3SW5kZXgoY20sIG4pIHsKKyAgICBpZiAobiA+
PSBjbS5kaXNwbGF5LnZpZXdUbykgcmV0dXJuIG51bGw7CisgICAgbiAtPSBjbS5kaXNwbGF5LnZp
ZXdGcm9tOworICAgIGlmIChuIDwgMCkgcmV0dXJuIG51bGw7CisgICAgdmFyIHZpZXcgPSBjbS5k
aXNwbGF5LnZpZXc7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7
CisgICAgICBuIC09IHZpZXdbaV0uc2l6ZTsKKyAgICAgIGlmIChuIDwgMCkgcmV0dXJuIGk7Cisg
ICAgfQorICB9CisKKyAgZnVuY3Rpb24gdmlld0N1dHRpbmdQb2ludChjbSwgb2xkTiwgbmV3Tiwg
ZGlyKSB7CisgICAgdmFyIGluZGV4ID0gZmluZFZpZXdJbmRleChjbSwgb2xkTiksIGRpZmYsIHZp
ZXcgPSBjbS5kaXNwbGF5LnZpZXc7CisgICAgaWYgKCFzYXdDb2xsYXBzZWRTcGFucykgcmV0dXJu
IHtpbmRleDogaW5kZXgsIGxpbmVOOiBuZXdOfTsKKyAgICBmb3IgKHZhciBpID0gMCwgbiA9IGNt
LmRpc3BsYXkudmlld0Zyb207IGkgPCBpbmRleDsgaSsrKQorICAgICAgbiArPSB2aWV3W2ldLnNp
emU7CisgICAgaWYgKG4gIT0gb2xkTikgeworICAgICAgaWYgKGRpciA+IDApIHsKKyAgICAgICAg
aWYgKGluZGV4ID09IHZpZXcubGVuZ3RoIC0gMSkgcmV0dXJuIG51bGw7CisgICAgICAgIGRpZmYg
PSAobiArIHZpZXdbaW5kZXhdLnNpemUpIC0gb2xkTjsKKyAgICAgICAgaW5kZXgrKzsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIGRpZmYgPSBuIC0gb2xkTjsKKyAgICAgIH0KKyAgICAgIG9sZE4g
Kz0gZGlmZjsgbmV3TiArPSBkaWZmOworICAgIH0KKyAgICB3aGlsZSAodmlzdWFsTGluZU5vKGNt
LmRvYywgbmV3TikgIT0gbmV3TikgeworICAgICAgaWYgKGluZGV4ID09IChkaXIgPCAwID8gMCA6
IHZpZXcubGVuZ3RoIC0gMSkpIHJldHVybiBudWxsOworICAgICAgbmV3TiArPSBkaXIgKiB2aWV3
W2luZGV4IC0gKGRpciA8IDAgPyAxIDogMCldLnNpemU7CisgICAgICBpbmRleCArPSBkaXI7Cisg
ICAgfQorICAgIHJldHVybiB7aW5kZXg6IGluZGV4LCBsaW5lTjogbmV3Tn07CisgIH0KKworICAv
LyBGb3JjZSB0aGUgdmlldyB0byBjb3ZlciBhIGdpdmVuIHJhbmdlLCBhZGRpbmcgZW1wdHkgdmll
dyBlbGVtZW50CisgIC8vIG9yIGNsaXBwaW5nIG9mZiBleGlzdGluZyBvbmVzIGFzIG5lZWRlZC4K
KyAgZnVuY3Rpb24gYWRqdXN0VmlldyhjbSwgZnJvbSwgdG8pIHsKKyAgICB2YXIgZGlzcGxheSA9
IGNtLmRpc3BsYXksIHZpZXcgPSBkaXNwbGF5LnZpZXc7CisgICAgaWYgKHZpZXcubGVuZ3RoID09
IDAgfHwgZnJvbSA+PSBkaXNwbGF5LnZpZXdUbyB8fCB0byA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7
CisgICAgICBkaXNwbGF5LnZpZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgdG8pOworICAg
ICAgZGlzcGxheS52aWV3RnJvbSA9IGZyb207CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChkaXNw
bGF5LnZpZXdGcm9tID4gZnJvbSkKKyAgICAgICAgZGlzcGxheS52aWV3ID0gYnVpbGRWaWV3QXJy
YXkoY20sIGZyb20sIGRpc3BsYXkudmlld0Zyb20pLmNvbmNhdChkaXNwbGF5LnZpZXcpOworICAg
ICAgZWxzZSBpZiAoZGlzcGxheS52aWV3RnJvbSA8IGZyb20pCisgICAgICAgIGRpc3BsYXkudmll
dyA9IGRpc3BsYXkudmlldy5zbGljZShmaW5kVmlld0luZGV4KGNtLCBmcm9tKSk7CisgICAgICBk
aXNwbGF5LnZpZXdGcm9tID0gZnJvbTsKKyAgICAgIGlmIChkaXNwbGF5LnZpZXdUbyA8IHRvKQor
ICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuY29uY2F0KGJ1aWxkVmlld0FycmF5
KGNtLCBkaXNwbGF5LnZpZXdUbywgdG8pKTsKKyAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld1Rv
ID4gdG8pCisgICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZSgwLCBmaW5k
Vmlld0luZGV4KGNtLCB0bykpOworICAgIH0KKyAgICBkaXNwbGF5LnZpZXdUbyA9IHRvOworICB9
CisKKyAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgdmlldyB3aG9zZSBET00g
cmVwcmVzZW50YXRpb24gaXMKKyAgLy8gb3V0IG9mIGRhdGUgKG9yIG5vbmV4aXN0ZW50KS4KKyAg
ZnVuY3Rpb24gY291bnREaXJ0eVZpZXcoY20pIHsKKyAgICB2YXIgdmlldyA9IGNtLmRpc3BsYXku
dmlldywgZGlydHkgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkr
KykgeworICAgICAgdmFyIGxpbmVWaWV3ID0gdmlld1tpXTsKKyAgICAgIGlmICghbGluZVZpZXcu
aGlkZGVuICYmICghbGluZVZpZXcubm9kZSB8fCBsaW5lVmlldy5jaGFuZ2VzKSkgKytkaXJ0eTsK
KyAgICB9CisgICAgcmV0dXJuIGRpcnR5OwogICB9CgogICAvLyBJTlBVVCBIQU5ETElORwoKKyAg
Ly8gUG9sbCBmb3IgaW5wdXQgY2hhbmdlcywgdXNpbmcgdGhlIG5vcm1hbCByYXRlIG9mIHBvbGxp
bmcuIFRoaXMKKyAgLy8gcnVucyBhcyBsb25nIGFzIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC4KICAg
ZnVuY3Rpb24gc2xvd1BvbGwoY20pIHsKICAgICBpZiAoY20uZGlzcGxheS5wb2xsaW5nRmFzdCkg
cmV0dXJuOwogICAgIGNtLmRpc3BsYXkucG9sbC5zZXQoY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWws
IGZ1bmN0aW9uKCkgewpAQCAtMTQ2Myw2ICsyMTk4LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgfSk7CiAgIH0KCisgIC8vIFdoZW4gYW4gZXZlbnQgaGFzIGp1c3Qg
Y29tZSBpbiB0aGF0IGlzIGxpa2VseSB0byBhZGQgb3IgY2hhbmdlCisgIC8vIHNvbWV0aGluZyBp
biB0aGUgaW5wdXQgdGV4dGFyZWEsIHdlIHBvbGwgZmFzdGVyLCB0byBlbnN1cmUgdGhhdAorICAv
LyB0aGUgY2hhbmdlIGFwcGVhcnMgb24gdGhlIHNjcmVlbiBxdWlja2x5LgogICBmdW5jdGlvbiBm
YXN0UG9sbChjbSkgewogICAgIHZhciBtaXNzZWQgPSBmYWxzZTsKICAgICBjbS5kaXNwbGF5LnBv
bGxpbmdGYXN0ID0gdHJ1ZTsKQEAgLTE0NzQsMTAwICsyMjEyLDE0NyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICBjbS5kaXNwbGF5LnBvbGwuc2V0KDIwLCBwKTsKICAg
fQoKLSAgLy8gcHJldklucHV0IGlzIGEgaGFjayB0byB3b3JrIHdpdGggSU1FLiBJZiB3ZSByZXNl
dCB0aGUgdGV4dGFyZWEKLSAgLy8gb24gZXZlcnkgY2hhbmdlLCB0aGF0IGJyZWFrcyBJTUUuIFNv
IHdlIGxvb2sgZm9yIGNoYW5nZXMKLSAgLy8gY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIGNvbnRl
bnQgaW5zdGVhZC4gKE1vZGVybiBicm93c2VycyBoYXZlCi0gIC8vIGV2ZW50cyB0aGF0IGluZGlj
YXRlIElNRSB0YWtpbmcgcGxhY2UsIGJ1dCB0aGVzZSBhcmUgbm90IHdpZGVseQotICAvLyBzdXBw
b3J0ZWQgb3IgY29tcGF0aWJsZSBlbm91Z2ggeWV0IHRvIHJlbHkgb24uKQorICAvLyBSZWFkIGlu
cHV0IGZyb20gdGhlIHRleHRhcmVhLCBhbmQgdXBkYXRlIHRoZSBkb2N1bWVudCB0byBtYXRjaC4K
KyAgLy8gV2hlbiBzb21ldGhpbmcgaXMgc2VsZWN0ZWQsIGl0IGlzIHByZXNlbnQgaW4gdGhlIHRl
eHRhcmVhLCBhbmQKKyAgLy8gc2VsZWN0ZWQgKHVubGVzcyBpdCBpcyBodWdlLCBpbiB3aGljaCBj
YXNlIGEgcGxhY2Vob2xkZXIgaXMKKyAgLy8gdXNlZCkuIFdoZW4gbm90aGluZyBpcyBzZWxlY3Rl
ZCwgdGhlIGN1cnNvciBzaXRzIGFmdGVyIHByZXZpb3VzbHkKKyAgLy8gc2VlbiB0ZXh0IChjYW4g
YmUgZW1wdHkpLCB3aGljaCBpcyBzdG9yZWQgaW4gcHJldklucHV0ICh3ZSBtdXN0CisgIC8vIG5v
dCByZXNldCB0aGUgdGV4dGFyZWEgd2hlbiB0eXBpbmcsIGJlY2F1c2UgdGhhdCBicmVha3MgSU1F
KS4KICAgZnVuY3Rpb24gcmVhZElucHV0KGNtKSB7Ci0gICAgdmFyIGlucHV0ID0gY20uZGlzcGxh
eS5pbnB1dCwgcHJldklucHV0ID0gY20uZGlzcGxheS5wcmV2SW5wdXQsIGRvYyA9IGNtLmRvYywg
c2VsID0gZG9jLnNlbDsKLSAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQgfHwgaGFzU2VsZWN0aW9u
KGlucHV0KSB8fCBpc1JlYWRPbmx5KGNtKSB8fCBjbS5zdGF0ZS5kaXNhYmxlSW5wdXQpIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoY20uc3RhdGUucGFzdGVJbmNvbWluZyAmJiBjbS5zdGF0ZS5mYWtl
ZExhc3RDaGFyKSB7Ci0gICAgICBpbnB1dC52YWx1ZSA9IGlucHV0LnZhbHVlLnN1YnN0cmluZygw
LCBpbnB1dC52YWx1ZS5sZW5ndGggLSAxKTsKLSAgICAgIGNtLnN0YXRlLmZha2VkTGFzdENoYXIg
PSBmYWxzZTsKLSAgICB9CisgICAgdmFyIGlucHV0ID0gY20uZGlzcGxheS5pbnB1dCwgcHJldklu
cHV0ID0gY20uZGlzcGxheS5wcmV2SW5wdXQsIGRvYyA9IGNtLmRvYzsKKyAgICAvLyBTaW5jZSB0
aGlzIGlzIGNhbGxlZCBhICpsb3QqLCB0cnkgdG8gYmFpbCBvdXQgYXMgY2hlYXBseSBhcworICAg
IC8vIHBvc3NpYmxlIHdoZW4gaXQgaXMgY2xlYXIgdGhhdCBub3RoaW5nIGhhcHBlbmVkLiBoYXNT
ZWxlY3Rpb24KKyAgICAvLyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gdGhlcmUgaXMgYSBsb3Qgb2Yg
dGV4dCBpbiB0aGUgdGV4dGFyZWEsCisgICAgLy8gaW4gd2hpY2ggY2FzZSByZWFkaW5nIGl0cyB2
YWx1ZSB3b3VsZCBiZSBleHBlbnNpdmUuCisgICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkIHx8IGhh
c1NlbGVjdGlvbihpbnB1dCkgfHwgaXNSZWFkT25seShjbSkgfHwgY20ub3B0aW9ucy5kaXNhYmxl
SW5wdXQpIHJldHVybiBmYWxzZTsKICAgICB2YXIgdGV4dCA9IGlucHV0LnZhbHVlOwotICAgIGlm
ICh0ZXh0ID09IHByZXZJbnB1dCAmJiBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChpZSAmJiAhaWVfbHQ5ICYmIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rp
b24gPT09IHRleHQpIHsKLSAgICAgIHJlc2V0SW5wdXQoY20sIHRydWUpOworICAgIC8vIElmIG5v
dGhpbmcgY2hhbmdlZCwgYmFpbC4KKyAgICBpZiAodGV4dCA9PSBwcmV2SW5wdXQgJiYgIWNtLnNv
bWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybiBmYWxzZTsKKyAgICAvLyBXb3JrIGFyb3VuZCBub25z
ZW5zaWNhbCBzZWxlY3Rpb24gcmVzZXR0aW5nIGluIElFOS8xMAorICAgIGlmIChpZSAmJiAhaWVf
dXB0bzggJiYgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9PT0gdGV4dCkgeworICAgICAg
cmVzZXRJbnB1dChjbSk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQoKICAgICB2YXIgd2l0
aE9wID0gIWNtLmN1ck9wOwogICAgIGlmICh3aXRoT3ApIHN0YXJ0T3BlcmF0aW9uKGNtKTsKLSAg
ICBzZWwuc2hpZnQgPSBmYWxzZTsKKyAgICBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7CisKKyAg
ICAvLyBGaW5kIHRoZSBwYXJ0IG9mIHRoZSBpbnB1dCB0aGF0IGlzIGFjdHVhbGx5IG5ldwogICAg
IHZhciBzYW1lID0gMCwgbCA9IE1hdGgubWluKHByZXZJbnB1dC5sZW5ndGgsIHRleHQubGVuZ3Ro
KTsKICAgICB3aGlsZSAoc2FtZSA8IGwgJiYgcHJldklucHV0LmNoYXJDb2RlQXQoc2FtZSkgPT0g
dGV4dC5jaGFyQ29kZUF0KHNhbWUpKSArK3NhbWU7Ci0gICAgdmFyIGZyb20gPSBzZWwuZnJvbSwg
dG8gPSBzZWwudG87Ci0gICAgaWYgKHNhbWUgPCBwcmV2SW5wdXQubGVuZ3RoKQotICAgICAgZnJv
bSA9IFBvcyhmcm9tLmxpbmUsIGZyb20uY2ggLSAocHJldklucHV0Lmxlbmd0aCAtIHNhbWUpKTsK
LSAgICBlbHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgcG9zRXEoZnJvbSwgdG8pICYmICFj
bS5zdGF0ZS5wYXN0ZUluY29taW5nKQotICAgICAgdG8gPSBQb3ModG8ubGluZSwgTWF0aC5taW4o
Z2V0TGluZShkb2MsIHRvLmxpbmUpLnRleHQubGVuZ3RoLCB0by5jaCArICh0ZXh0Lmxlbmd0aCAt
IHNhbWUpKSk7Ci0KLSAgICB2YXIgdXBkYXRlSW5wdXQgPSBjbS5jdXJPcC51cGRhdGVJbnB1dDsK
LSAgICB2YXIgY2hhbmdlRXZlbnQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBzcGxpdExp
bmVzKHRleHQuc2xpY2Uoc2FtZSkpLAotICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IGNt
LnN0YXRlLnBhc3RlSW5jb21pbmcgPyAicGFzdGUiIDogIitpbnB1dCJ9OwotICAgIG1ha2VDaGFu
Z2UoY20uZG9jLCBjaGFuZ2VFdmVudCwgImVuZCIpOworICAgIHZhciBpbnNlcnRlZCA9IHRleHQu
c2xpY2Uoc2FtZSksIHRleHRMaW5lcyA9IHNwbGl0TGluZXMoaW5zZXJ0ZWQpOworCisgICAgLy8g
V2hlbiBwYXNpbmcgTiBsaW5lcyBpbnRvIE4gc2VsZWN0aW9ucywgaW5zZXJ0IG9uZSBsaW5lIHBl
ciBzZWxlY3Rpb24KKyAgICB2YXIgbXVsdGlQYXN0ZSA9IGNtLnN0YXRlLnBhc3RlSW5jb21pbmcg
JiYgdGV4dExpbmVzLmxlbmd0aCA+IDEgJiYgZG9jLnNlbC5yYW5nZXMubGVuZ3RoID09IHRleHRM
aW5lcy5sZW5ndGg7CisKKyAgICAvLyBOb3JtYWwgYmVoYXZpb3IgaXMgdG8gaW5zZXJ0IHRoZSBu
ZXcgdGV4dCBpbnRvIGV2ZXJ5IHNlbGVjdGlvbgorICAgIGZvciAodmFyIGkgPSBkb2Muc2VsLnJh
bmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgdmFyIHJhbmdlID0gZG9jLnNl
bC5yYW5nZXNbaV07CisgICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb20oKSwgdG8gPSByYW5nZS50
bygpOworICAgICAgLy8gSGFuZGxlIGRlbGV0aW9uCisgICAgICBpZiAoc2FtZSA8IHByZXZJbnB1
dC5sZW5ndGgpCisgICAgICAgIGZyb20gPSBQb3MoZnJvbS5saW5lLCBmcm9tLmNoIC0gKHByZXZJ
bnB1dC5sZW5ndGggLSBzYW1lKSk7CisgICAgICAvLyBIYW5kbGUgb3ZlcndyaXRlCisgICAgICBl
bHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgcmFuZ2UuZW1wdHkoKSAmJiAhY20uc3RhdGUu
cGFzdGVJbmNvbWluZykKKyAgICAgICAgdG8gPSBQb3ModG8ubGluZSwgTWF0aC5taW4oZ2V0TGlu
ZShkb2MsIHRvLmxpbmUpLnRleHQubGVuZ3RoLCB0by5jaCArIGxzdCh0ZXh0TGluZXMpLmxlbmd0
aCkpOworICAgICAgdmFyIHVwZGF0ZUlucHV0ID0gY20uY3VyT3AudXBkYXRlSW5wdXQ7CisgICAg
ICB2YXIgY2hhbmdlRXZlbnQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBtdWx0aVBhc3Rl
ID8gW3RleHRMaW5lc1tpXV0gOiB0ZXh0TGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
b3JpZ2luOiBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID8gInBhc3RlIiA6IGNtLnN0YXRlLmN1dElu
Y29taW5nID8gImN1dCIgOiAiK2lucHV0In07CisgICAgICBtYWtlQ2hhbmdlKGNtLmRvYywgY2hh
bmdlRXZlbnQpOworICAgICAgc2lnbmFsTGF0ZXIoY20sICJpbnB1dFJlYWQiLCBjbSwgY2hhbmdl
RXZlbnQpOworICAgICAgLy8gV2hlbiBhbiAnZWxlY3RyaWMnIGNoYXJhY3RlciBpcyBpbnNlcnRl
ZCwgaW1tZWRpYXRlbHkgdHJpZ2dlciBhIHJlaW5kZW50CisgICAgICBpZiAoaW5zZXJ0ZWQgJiYg
IWNtLnN0YXRlLnBhc3RlSW5jb21pbmcgJiYgY20ub3B0aW9ucy5lbGVjdHJpY0NoYXJzICYmCisg
ICAgICAgICAgY20ub3B0aW9ucy5zbWFydEluZGVudCAmJiByYW5nZS5oZWFkLmNoIDwgMTAwICYm
CisgICAgICAgICAgKCFpIHx8IGRvYy5zZWwucmFuZ2VzW2kgLSAxXS5oZWFkLmxpbmUgIT0gcmFu
Z2UuaGVhZC5saW5lKSkgeworICAgICAgICB2YXIgbW9kZSA9IGNtLmdldE1vZGVBdChyYW5nZS5o
ZWFkKTsKKyAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNDaGFycykgeworICAgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgbW9kZS5lbGVjdHJpY0NoYXJzLmxlbmd0aDsgaisrKQorICAgICAgICAg
ICAgaWYgKGluc2VydGVkLmluZGV4T2YobW9kZS5lbGVjdHJpY0NoYXJzLmNoYXJBdChqKSkgPiAt
MSkgeworICAgICAgICAgICAgICBpbmRlbnRMaW5lKGNtLCByYW5nZS5oZWFkLmxpbmUsICJzbWFy
dCIpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChtb2RlLmVsZWN0cmljSW5wdXQpIHsKKyAgICAgICAgICB2YXIgZW5kID0gY2hhbmdlRW5k
KGNoYW5nZUV2ZW50KTsKKyAgICAgICAgICBpZiAobW9kZS5lbGVjdHJpY0lucHV0LnRlc3QoZ2V0
TGluZShkb2MsIGVuZC5saW5lKS50ZXh0LnNsaWNlKDAsIGVuZC5jaCkpKQorICAgICAgICAgICAg
aW5kZW50TGluZShjbSwgcmFuZ2UuaGVhZC5saW5lLCAic21hcnQiKTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgIH0KKyAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKTsKICAgICBjbS5jdXJPcC51
cGRhdGVJbnB1dCA9IHVwZGF0ZUlucHV0OwotICAgIHNpZ25hbExhdGVyKGNtLCAiaW5wdXRSZWFk
IiwgY20sIGNoYW5nZUV2ZW50KTsKKyAgICBjbS5jdXJPcC50eXBpbmcgPSB0cnVlOwoKKyAgICAv
LyBEb24ndCBsZWF2ZSBsb25nIHRleHQgaW4gdGhlIHRleHRhcmVhLCBzaW5jZSBpdCBtYWtlcyBm
dXJ0aGVyIHBvbGxpbmcgc2xvdwogICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDEwMDAgfHwgdGV4dC5p
bmRleE9mKCJcbiIpID4gLTEpIGlucHV0LnZhbHVlID0gY20uZGlzcGxheS5wcmV2SW5wdXQgPSAi
IjsKICAgICBlbHNlIGNtLmRpc3BsYXkucHJldklucHV0ID0gdGV4dDsKICAgICBpZiAod2l0aE9w
KSBlbmRPcGVyYXRpb24oY20pOwotICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSBmYWxzZTsK
KyAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gY20uc3RhdGUuY3V0SW5jb21pbmcgPSBmYWxz
ZTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQoKLSAgZnVuY3Rpb24gcmVzZXRJbnB1dChjbSwgdXNl
cikgeworICAvLyBSZXNldCB0aGUgaW5wdXQgdG8gY29ycmVzcG9uZCB0byB0aGUgc2VsZWN0aW9u
IChvciB0byBiZSBlbXB0eSwKKyAgLy8gd2hlbiBub3QgdHlwaW5nIGFuZCBub3RoaW5nIGlzIHNl
bGVjdGVkKQorICBmdW5jdGlvbiByZXNldElucHV0KGNtLCB0eXBpbmcpIHsKICAgICB2YXIgbWlu
aW1hbCwgc2VsZWN0ZWQsIGRvYyA9IGNtLmRvYzsKLSAgICBpZiAoIXBvc0VxKGRvYy5zZWwuZnJv
bSwgZG9jLnNlbC50bykpIHsKKyAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgewogICAg
ICAgY20uZGlzcGxheS5wcmV2SW5wdXQgPSAiIjsKKyAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwu
cHJpbWFyeSgpOwogICAgICAgbWluaW1hbCA9IGhhc0NvcHlFdmVudCAmJgotICAgICAgICAoZG9j
LnNlbC50by5saW5lIC0gZG9jLnNlbC5mcm9tLmxpbmUgPiAxMDAgfHwgKHNlbGVjdGVkID0gY20u
Z2V0U2VsZWN0aW9uKCkpLmxlbmd0aCA+IDEwMDApOworICAgICAgICAocmFuZ2UudG8oKS5saW5l
IC0gcmFuZ2UuZnJvbSgpLmxpbmUgPiAxMDAgfHwgKHNlbGVjdGVkID0gY20uZ2V0U2VsZWN0aW9u
KCkpLmxlbmd0aCA+IDEwMDApOwogICAgICAgdmFyIGNvbnRlbnQgPSBtaW5pbWFsID8gIi0iIDog
c2VsZWN0ZWQgfHwgY20uZ2V0U2VsZWN0aW9uKCk7CiAgICAgICBjbS5kaXNwbGF5LmlucHV0LnZh
bHVlID0gY29udGVudDsKICAgICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBzZWxlY3RJbnB1dChj
bS5kaXNwbGF5LmlucHV0KTsKLSAgICAgIGlmIChpZSAmJiAhaWVfbHQ5KSBjbS5kaXNwbGF5Lmlu
cHV0SGFzU2VsZWN0aW9uID0gY29udGVudDsKLSAgICB9IGVsc2UgaWYgKHVzZXIpIHsKKyAgICAg
IGlmIChpZSAmJiAhaWVfdXB0bzgpIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBjb250
ZW50OworICAgIH0gZWxzZSBpZiAoIXR5cGluZykgewogICAgICAgY20uZGlzcGxheS5wcmV2SW5w
dXQgPSBjbS5kaXNwbGF5LmlucHV0LnZhbHVlID0gIiI7Ci0gICAgICBpZiAoaWUgJiYgIWllX2x0
OSkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IG51bGw7CisgICAgICBpZiAoaWUgJiYg
IWllX3VwdG84KSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gbnVsbDsKICAgICB9CiAg
ICAgY20uZGlzcGxheS5pbmFjY3VyYXRlU2VsZWN0aW9uID0gbWluaW1hbDsKICAgfQoKICAgZnVu
Y3Rpb24gZm9jdXNJbnB1dChjbSkgewotICAgIGlmIChjbS5vcHRpb25zLnJlYWRPbmx5ICE9ICJu
b2N1cnNvciIgJiYgKCFtb2JpbGUgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPSBjbS5kaXNw
bGF5LmlucHV0KSkKKyAgICBpZiAoY20ub3B0aW9ucy5yZWFkT25seSAhPSAibm9jdXJzb3IiICYm
ICghbW9iaWxlIHx8IGFjdGl2ZUVsdCgpICE9IGNtLmRpc3BsYXkuaW5wdXQpKQogICAgICAgY20u
ZGlzcGxheS5pbnB1dC5mb2N1cygpOwogICB9CgorICBmdW5jdGlvbiBlbnN1cmVGb2N1cyhjbSkg
eworICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgeyBmb2N1c0lucHV0KGNtKTsgb25Gb2N1cyhj
bSk7IH0KKyAgfQorCiAgIGZ1bmN0aW9uIGlzUmVhZE9ubHkoY20pIHsKICAgICByZXR1cm4gY20u
b3B0aW9ucy5yZWFkT25seSB8fCBjbS5kb2MuY2FudEVkaXQ7CiAgIH0KCiAgIC8vIEVWRU5UIEhB
TkRMRVJTCgorICAvLyBBdHRhY2ggdGhlIG5lY2Vzc2FyeSBldmVudCBoYW5kbGVycyB3aGVuIGlu
aXRpYWxpemluZyB0aGUgZWRpdG9yCiAgIGZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRIYW5kbGVycyhj
bSkgewogICAgIHZhciBkID0gY20uZGlzcGxheTsKICAgICBvbihkLnNjcm9sbGVyLCAibW91c2Vk
b3duIiwgb3BlcmF0aW9uKGNtLCBvbk1vdXNlRG93bikpOwotICAgIGlmIChpZSkKKyAgICAvLyBP
bGRlciBJRSdzIHdpbGwgbm90IGZpcmUgYSBzZWNvbmQgbW91c2Vkb3duIGZvciBhIGRvdWJsZSBj
bGljaworICAgIGlmIChpZV91cHRvMTApCiAgICAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xpY2si
LCBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgaWYgKHNpZ25hbERPTUV2ZW50
KGNtLCBlKSkgcmV0dXJuOwogICAgICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKTsK
ICAgICAgICAgaWYgKCFwb3MgfHwgY2xpY2tJbkd1dHRlcihjbSwgZSkgfHwgZXZlbnRJbldpZGdl
dChjbS5kaXNwbGF5LCBlKSkgcmV0dXJuOwogICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwot
ICAgICAgICB2YXIgd29yZCA9IGZpbmRXb3JkQXQoZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKS50
ZXh0LCBwb3MpOwotICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmZyb20sIHdv
cmQudG8pOworICAgICAgICB2YXIgd29yZCA9IGZpbmRXb3JkQXQoY20uZG9jLCBwb3MpOworICAg
ICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmFuY2hvciwgd29yZC5oZWFkKTsKICAg
ICAgIH0pKTsKICAgICBlbHNlCiAgICAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xpY2siLCBmdW5j
dGlvbihlKSB7IHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBlX3ByZXZlbnREZWZhdWx0KGUpOyB9
KTsKKyAgICAvLyBQcmV2ZW50IG5vcm1hbCBzZWxlY3Rpb24gaW4gdGhlIGVkaXRvciAod2UgaGFu
ZGxlIG91ciBvd24pCiAgICAgb24oZC5saW5lU3BhY2UsICJzZWxlY3RzdGFydCIsIGZ1bmN0aW9u
KGUpIHsKICAgICAgIGlmICghZXZlbnRJbldpZGdldChkLCBlKSkgZV9wcmV2ZW50RGVmYXVsdChl
KTsKICAgICB9KTsKLSAgICAvLyBHZWNrbyBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRl
ciogb3BlbmluZyB0aGUgbWVudSwgYXQKKyAgICAvLyBTb21lIGJyb3dzZXJzIGZpcmUgY29udGV4
dG1lbnUgKmFmdGVyKiBvcGVuaW5nIHRoZSBtZW51LCBhdAogICAgIC8vIHdoaWNoIHBvaW50IHdl
IGNhbid0IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXMKLSAgICAvLyBoYW5k
bGVkIGluIG9uTW91c2VEb3duIGZvciBHZWNrby4KLSAgICBpZiAoIWNhcHR1cmVNaWRkbGVDbGlj
aykgb24oZC5zY3JvbGxlciwgImNvbnRleHRtZW51IiwgZnVuY3Rpb24oZSkge29uQ29udGV4dE1l
bnUoY20sIGUpO30pOworICAgIC8vIGhhbmRsZWQgaW4gb25Nb3VzZURvd24gZm9yIHRoZXNlIGJy
b3dzZXJzLgorICAgIGlmICghY2FwdHVyZVJpZ2h0Q2xpY2spIG9uKGQuc2Nyb2xsZXIsICJjb250
ZXh0bWVudSIsIGZ1bmN0aW9uKGUpIHtvbkNvbnRleHRNZW51KGNtLCBlKTt9KTsKCisgICAgLy8g
U3luYyBzY3JvbGxpbmcgYmV0d2VlbiBmYWtlIHNjcm9sbGJhcnMgYW5kIHJlYWwgc2Nyb2xsYWJs
ZQorICAgIC8vIGFyZWEsIGVuc3VyZSB2aWV3cG9ydCBpcyB1cGRhdGVkIHdoZW4gc2Nyb2xsaW5n
LgogICAgIG9uKGQuc2Nyb2xsZXIsICJzY3JvbGwiLCBmdW5jdGlvbigpIHsKICAgICAgIGlmIChk
LnNjcm9sbGVyLmNsaWVudEhlaWdodCkgewogICAgICAgICBzZXRTY3JvbGxUb3AoY20sIGQuc2Ny
b2xsZXIuc2Nyb2xsVG9wKTsKQEAgLTE1ODIsNDIgKzIzNjcsNDAgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHNl
dFNjcm9sbExlZnQoY20sIGQuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KTsKICAgICB9KTsKCisgICAg
Ly8gTGlzdGVuIHRvIHdoZWVsIGV2ZW50cyBpbiBvcmRlciB0byB0cnkgYW5kIHVwZGF0ZSB0aGUg
dmlld3BvcnQgb24gdGltZS4KICAgICBvbihkLnNjcm9sbGVyLCAibW91c2V3aGVlbCIsIGZ1bmN0
aW9uKGUpe29uU2Nyb2xsV2hlZWwoY20sIGUpO30pOwogICAgIG9uKGQuc2Nyb2xsZXIsICJET01N
b3VzZVNjcm9sbCIsIGZ1bmN0aW9uKGUpe29uU2Nyb2xsV2hlZWwoY20sIGUpO30pOwoKKyAgICAv
LyBQcmV2ZW50IGNsaWNrcyBpbiB0aGUgc2Nyb2xsYmFycyBmcm9tIGtpbGxpbmcgZm9jdXMKICAg
ICBmdW5jdGlvbiByZUZvY3VzKCkgeyBpZiAoY20uc3RhdGUuZm9jdXNlZCkgc2V0VGltZW91dChi
aW5kKGZvY3VzSW5wdXQsIGNtKSwgMCk7IH0KICAgICBvbihkLnNjcm9sbGJhckgsICJtb3VzZWRv
d24iLCByZUZvY3VzKTsKICAgICBvbihkLnNjcm9sbGJhclYsICJtb3VzZWRvd24iLCByZUZvY3Vz
KTsKICAgICAvLyBQcmV2ZW50IHdyYXBwZXIgZnJvbSBldmVyIHNjcm9sbGluZwogICAgIG9uKGQu
d3JhcHBlciwgInNjcm9sbCIsIGZ1bmN0aW9uKCkgeyBkLndyYXBwZXIuc2Nyb2xsVG9wID0gZC53
cmFwcGVyLnNjcm9sbExlZnQgPSAwOyB9KTsKCisgICAgLy8gV2hlbiB0aGUgd2luZG93IHJlc2l6
ZXMsIHdlIG5lZWQgdG8gcmVmcmVzaCBhY3RpdmUgZWRpdG9ycy4KICAgICB2YXIgcmVzaXplVGlt
ZXI7CiAgICAgZnVuY3Rpb24gb25SZXNpemUoKSB7CiAgICAgICBpZiAocmVzaXplVGltZXIgPT0g
bnVsbCkgcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICByZXNp
emVUaW1lciA9IG51bGw7CiAgICAgICAgIC8vIE1pZ2h0IGJlIGEgdGV4dCBzY2FsaW5nIG9wZXJh
dGlvbiwgY2xlYXIgc2l6ZSBjYWNoZXMuCi0gICAgICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5j
YWNoZWRUZXh0SGVpZ2h0ID0ga25vd25TY3JvbGxiYXJXaWR0aCA9IG51bGw7Ci0gICAgICAgIGNs
ZWFyQ2FjaGVzKGNtKTsKLSAgICAgICAgcnVuSW5PcChjbSwgYmluZChyZWdDaGFuZ2UsIGNtKSk7
CisgICAgICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5jYWNo
ZWRQYWRkaW5nSCA9IGtub3duU2Nyb2xsYmFyV2lkdGggPSBudWxsOworICAgICAgICBjbS5zZXRT
aXplKCk7CiAgICAgICB9LCAxMDApOwogICAgIH0KICAgICBvbih3aW5kb3csICJyZXNpemUiLCBv
blJlc2l6ZSk7Ci0gICAgLy8gQWJvdmUgaGFuZGxlciBob2xkcyBvbiB0byB0aGUgZWRpdG9yIGFu
ZCBpdHMgZGF0YSBzdHJ1Y3R1cmVzLgotICAgIC8vIEhlcmUgd2UgcG9sbCB0byB1bnJlZ2lzdGVy
IGl0IHdoZW4gdGhlIGVkaXRvciBpcyBubyBsb25nZXIgaW4KLSAgICAvLyB0aGUgZG9jdW1lbnQs
IHNvIHRoYXQgaXQgY2FuIGJlIGdhcmJhZ2UtY29sbGVjdGVkLgorICAgIC8vIFRoZSBhYm92ZSBo
YW5kbGVyIGhvbGRzIG9uIHRvIHRoZSBlZGl0b3IgYW5kIGl0cyBkYXRhCisgICAgLy8gc3RydWN0
dXJlcy4gSGVyZSB3ZSBwb2xsIHRvIHVucmVnaXN0ZXIgaXQgd2hlbiB0aGUgZWRpdG9yIGlzIG5v
CisgICAgLy8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCwgc28gdGhhdCBpdCBjYW4gYmUgZ2FyYmFn
ZS1jb2xsZWN0ZWQuCiAgICAgZnVuY3Rpb24gdW5yZWdpc3RlcigpIHsKLSAgICAgIGZvciAodmFy
IHAgPSBkLndyYXBwZXIucGFyZW50Tm9kZTsgcCAmJiBwICE9IGRvY3VtZW50LmJvZHk7IHAgPSBw
LnBhcmVudE5vZGUpIHt9Ci0gICAgICBpZiAocCkgc2V0VGltZW91dCh1bnJlZ2lzdGVyLCA1MDAw
KTsKKyAgICAgIGlmIChjb250YWlucyhkb2N1bWVudC5ib2R5LCBkLndyYXBwZXIpKSBzZXRUaW1l
b3V0KHVucmVnaXN0ZXIsIDUwMDApOwogICAgICAgZWxzZSBvZmYod2luZG93LCAicmVzaXplIiwg
b25SZXNpemUpOwogICAgIH0KICAgICBzZXRUaW1lb3V0KHVucmVnaXN0ZXIsIDUwMDApOwoKLSAg
ICBvbihkLmlucHV0LCAia2V5dXAiLCBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKGUpIHsKLSAgICAg
IGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgY20ub3B0aW9ucy5vbktleUV2ZW50ICYmIGNt
Lm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKLSAgICAgIGlmIChl
LmtleUNvZGUgPT0gMTYpIGNtLmRvYy5zZWwuc2hpZnQgPSBmYWxzZTsKLSAgICB9KSk7CisgICAg
b24oZC5pbnB1dCwgImtleXVwIiwgb3BlcmF0aW9uKGNtLCBvbktleVVwKSk7CiAgICAgb24oZC5p
bnB1dCwgImlucHV0IiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoaWUgJiYgIWllX2x0OSAmJiBj
bS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uKSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9u
ID0gbnVsbDsKKyAgICAgIGlmIChpZSAmJiAhaWVfdXB0bzggJiYgY20uZGlzcGxheS5pbnB1dEhh
c1NlbGVjdGlvbikgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IG51bGw7CiAgICAgICBm
YXN0UG9sbChjbSk7CiAgICAgfSk7CiAgICAgb24oZC5pbnB1dCwgImtleWRvd24iLCBvcGVyYXRp
b24oY20sIG9uS2V5RG93bikpOwpAQCAtMTYyNiw4ICsyNDA5LDcgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgb24oZC5pbnB1dCwgImJsdXIiLCBiaW5kKG9uQmx1ciwg
Y20pKTsKCiAgICAgZnVuY3Rpb24gZHJhZ18oZSkgewotICAgICAgaWYgKHNpZ25hbERPTUV2ZW50
KGNtLCBlKSB8fCBjbS5vcHRpb25zLm9uRHJhZ0V2ZW50ICYmIGNtLm9wdGlvbnMub25EcmFnRXZl
bnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47Ci0gICAgICBlX3N0b3AoZSk7CisgICAgICBpZiAo
IXNpZ25hbERPTUV2ZW50KGNtLCBlKSkgZV9zdG9wKGUpOwogICAgIH0KICAgICBpZiAoY20ub3B0
aW9ucy5kcmFnRHJvcCkgewogICAgICAgb24oZC5zY3JvbGxlciwgImRyYWdzdGFydCIsIGZ1bmN0
aW9uKGUpe29uRHJhZ1N0YXJ0KGNtLCBlKTt9KTsKQEAgLTE2MzcsNzAgKzI0MTksOTggQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICAgIG9uKGQuc2Nyb2xsZXIs
ICJwYXN0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgIGlmIChldmVudEluV2lkZ2V0KGQsIGUpKSBy
ZXR1cm47CisgICAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gdHJ1ZTsKICAgICAgIGZvY3Vz
SW5wdXQoY20pOwogICAgICAgZmFzdFBvbGwoY20pOwogICAgIH0pOwogICAgIG9uKGQuaW5wdXQs
ICJwYXN0ZSIsIGZ1bmN0aW9uKCkgewotICAgICAgLy8gV29ya2Fyb3VuZCBmb3Igd2Via2l0IGJ1
ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAyMDYKLSAgICAgIC8v
IEFkZCBhIGNoYXIgdG8gdGhlIGVuZCBvZiB0ZXh0YXJlYSBiZWZvcmUgcGFzdGUgb2NjdXIgc28g
dGhhdAotICAgICAgLy8gc2VsZWN0aW9uIGRvZXNuJ3Qgc3BhbiB0byB0aGUgZW5kIG9mIHRleHRh
cmVhLgotICAgICAgaWYgKHdlYmtpdCAmJiAhY20uc3RhdGUuZmFrZWRMYXN0Q2hhciAmJiAhKG5l
dyBEYXRlIC0gY20uc3RhdGUubGFzdE1pZGRsZURvd24gPCAyMDApKSB7Ci0gICAgICAgIHZhciBz
dGFydCA9IGQuaW5wdXQuc2VsZWN0aW9uU3RhcnQsIGVuZCA9IGQuaW5wdXQuc2VsZWN0aW9uRW5k
OwotICAgICAgICBkLmlucHV0LnZhbHVlICs9ICIkIjsKLSAgICAgICAgZC5pbnB1dC5zZWxlY3Rp
b25TdGFydCA9IHN0YXJ0OwotICAgICAgICBkLmlucHV0LnNlbGVjdGlvbkVuZCA9IGVuZDsKLSAg
ICAgICAgY20uc3RhdGUuZmFrZWRMYXN0Q2hhciA9IHRydWU7Ci0gICAgICB9CiAgICAgICBjbS5z
dGF0ZS5wYXN0ZUluY29taW5nID0gdHJ1ZTsKICAgICAgIGZhc3RQb2xsKGNtKTsKICAgICB9KTsK
Ci0gICAgZnVuY3Rpb24gcHJlcGFyZUNvcHkoKSB7Ci0gICAgICBpZiAoZC5pbmFjY3VyYXRlU2Vs
ZWN0aW9uKSB7Ci0gICAgICAgIGQucHJldklucHV0ID0gIiI7Ci0gICAgICAgIGQuaW5hY2N1cmF0
ZVNlbGVjdGlvbiA9IGZhbHNlOwotICAgICAgICBkLmlucHV0LnZhbHVlID0gY20uZ2V0U2VsZWN0
aW9uKCk7Ci0gICAgICAgIHNlbGVjdElucHV0KGQuaW5wdXQpOworICAgIGZ1bmN0aW9uIHByZXBh
cmVDb3B5Q3V0KGUpIHsKKyAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7CisgICAg
ICAgIGlmIChkLmluYWNjdXJhdGVTZWxlY3Rpb24pIHsKKyAgICAgICAgICBkLnByZXZJbnB1dCA9
ICIiOworICAgICAgICAgIGQuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IGZhbHNlOworICAgICAgICAg
IGQuaW5wdXQudmFsdWUgPSBjbS5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICBzZWxlY3RJbnB1
dChkLmlucHV0KTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHRleHQg
PSAiIiwgcmFuZ2VzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZG9jLnNl
bC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICB2YXIgbGluZSA9IGNtLmRvYy5zZWwu
cmFuZ2VzW2ldLmhlYWQubGluZTsKKyAgICAgICAgICB2YXIgbGluZVJhbmdlID0ge2FuY2hvcjog
UG9zKGxpbmUsIDApLCBoZWFkOiBQb3MobGluZSArIDEsIDApfTsKKyAgICAgICAgICByYW5nZXMu
cHVzaChsaW5lUmFuZ2UpOworICAgICAgICAgIHRleHQgKz0gY20uZ2V0UmFuZ2UobGluZVJhbmdl
LmFuY2hvciwgbGluZVJhbmdlLmhlYWQpOworICAgICAgICB9CisgICAgICAgIGlmIChlLnR5cGUg
PT0gImN1dCIpIHsKKyAgICAgICAgICBjbS5zZXRTZWxlY3Rpb25zKHJhbmdlcywgbnVsbCwgc2Vs
X2RvbnRTY3JvbGwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGQucHJldklucHV0ID0g
IiI7CisgICAgICAgICAgZC5pbnB1dC52YWx1ZSA9IHRleHQ7CisgICAgICAgICAgc2VsZWN0SW5w
dXQoZC5pbnB1dCk7CisgICAgICAgIH0KICAgICAgIH0KKyAgICAgIGlmIChlLnR5cGUgPT0gImN1
dCIpIGNtLnN0YXRlLmN1dEluY29taW5nID0gdHJ1ZTsKICAgICB9Ci0gICAgb24oZC5pbnB1dCwg
ImN1dCIsIHByZXBhcmVDb3B5KTsKLSAgICBvbihkLmlucHV0LCAiY29weSIsIHByZXBhcmVDb3B5
KTsKKyAgICBvbihkLmlucHV0LCAiY3V0IiwgcHJlcGFyZUNvcHlDdXQpOworICAgIG9uKGQuaW5w
dXQsICJjb3B5IiwgcHJlcGFyZUNvcHlDdXQpOwoKICAgICAvLyBOZWVkZWQgdG8gaGFuZGxlIFRh
YiBrZXkgaW4gS0hUTUwKICAgICBpZiAoa2h0bWwpIG9uKGQuc2l6ZXIsICJtb3VzZXVwIiwgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGQuaW5wdXQp
IGQuaW5wdXQuYmx1cigpOwotICAgICAgICBmb2N1c0lucHV0KGNtKTsKKyAgICAgIGlmIChhY3Rp
dmVFbHQoKSA9PSBkLmlucHV0KSBkLmlucHV0LmJsdXIoKTsKKyAgICAgIGZvY3VzSW5wdXQoY20p
OwogICAgIH0pOwogICB9CgorICAvLyBNT1VTRSBFVkVOVFMKKworICAvLyBSZXR1cm4gdHJ1ZSB3
aGVuIHRoZSBnaXZlbiBtb3VzZSBldmVudCBoYXBwZW5lZCBpbiBhIHdpZGdldAogICBmdW5jdGlv
biBldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpIHsKICAgICBmb3IgKHZhciBuID0gZV90YXJnZXQo
ZSk7IG4gIT0gZGlzcGxheS53cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKSB7CiAgICAgICBpZiAo
IW4gfHwgbi5pZ25vcmVFdmVudHMgfHwgbi5wYXJlbnROb2RlID09IGRpc3BsYXkuc2l6ZXIgJiYg
biAhPSBkaXNwbGF5Lm1vdmVyKSByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KCi0gIGZ1bmN0aW9u
IHBvc0Zyb21Nb3VzZShjbSwgZSwgbGliZXJhbCkgeworICAvLyBHaXZlbiBhIG1vdXNlIGV2ZW50
LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aW9uLiBJZiBsaWJlcmFsCisgIC8vIGlzIGZh
bHNlLCBpdCBjaGVja3Mgd2hldGhlciBhIGd1dHRlciBvciBzY3JvbGxiYXIgd2FzIGNsaWNrZWQs
CisgIC8vIGFuZCByZXR1cm5zIG51bGwgaWYgaXQgd2FzLiBmb3JSZWN0IGlzIHVzZWQgYnkgcmVj
dGFuZ3VsYXIKKyAgLy8gc2VsZWN0aW9ucywgYW5kIHRyaWVzIHRvIGVzdGltYXRlIGEgY2hhcmFj
dGVyIHBvc2l0aW9uIGV2ZW4gZm9yCisgIC8vIGNvb3JkaW5hdGVzIGJleW9uZCB0aGUgcmlnaHQg
b2YgdGhlIHRleHQuCisgIGZ1bmN0aW9uIHBvc0Zyb21Nb3VzZShjbSwgZSwgbGliZXJhbCwgZm9y
UmVjdCkgewogICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKICAgICBpZiAoIWxpYmVyYWwp
IHsKICAgICAgIHZhciB0YXJnZXQgPSBlX3RhcmdldChlKTsKLSAgICAgIGlmICh0YXJnZXQgPT0g
ZGlzcGxheS5zY3JvbGxiYXJIIHx8IHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckguZmlyc3RD
aGlsZCB8fAotICAgICAgICAgIHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhclYgfHwgdGFyZ2V0
ID09IGRpc3BsYXkuc2Nyb2xsYmFyVi5maXJzdENoaWxkIHx8CisgICAgICBpZiAodGFyZ2V0ID09
IGRpc3BsYXkuc2Nyb2xsYmFySCB8fCB0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJWIHx8CiAg
ICAgICAgICAgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyIHx8IHRhcmdldCA9PSBk
aXNwbGF5Lmd1dHRlckZpbGxlcikgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIHZhciB4LCB5LCBz
cGFjZSA9IGdldFJlY3QoZGlzcGxheS5saW5lU3BhY2UpOworICAgIHZhciB4LCB5LCBzcGFjZSA9
IGRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgIC8vIEZhaWxz
IHVucHJlZGljdGFibHkgb24gSUVbNjddIHdoZW4gbW91c2UgaXMgZHJhZ2dlZCBhcm91bmQgcXVp
Y2tseS4KLSAgICB0cnkgeyB4ID0gZS5jbGllbnRYOyB5ID0gZS5jbGllbnRZOyB9IGNhdGNoIChl
KSB7IHJldHVybiBudWxsOyB9Ci0gICAgcmV0dXJuIGNvb3Jkc0NoYXIoY20sIHggLSBzcGFjZS5s
ZWZ0LCB5IC0gc3BhY2UudG9wKTsKKyAgICB0cnkgeyB4ID0gZS5jbGllbnRYIC0gc3BhY2UubGVm
dDsgeSA9IGUuY2xpZW50WSAtIHNwYWNlLnRvcDsgfQorICAgIGNhdGNoIChlKSB7IHJldHVybiBu
dWxsOyB9CisgICAgdmFyIGNvb3JkcyA9IGNvb3Jkc0NoYXIoY20sIHgsIHkpLCBsaW5lOworICAg
IGlmIChmb3JSZWN0ICYmIGNvb3Jkcy54UmVsID09IDEgJiYgKGxpbmUgPSBnZXRMaW5lKGNtLmRv
YywgY29vcmRzLmxpbmUpLnRleHQpLmxlbmd0aCA9PSBjb29yZHMuY2gpIHsKKyAgICAgIHZhciBj
b2xEaWZmID0gY291bnRDb2x1bW4obGluZSwgbGluZS5sZW5ndGgsIGNtLm9wdGlvbnMudGFiU2l6
ZSkgLSBsaW5lLmxlbmd0aDsKKyAgICAgIGNvb3JkcyA9IFBvcyhjb29yZHMubGluZSwgTWF0aC5y
b3VuZCgoeCAtIHBhZGRpbmdIKGNtLmRpc3BsYXkpLmxlZnQpIC8gY2hhcldpZHRoKGNtLmRpc3Bs
YXkpKSAtIGNvbERpZmYpOworICAgIH0KKyAgICByZXR1cm4gY29vcmRzOwogICB9CgotICB2YXIg
bGFzdENsaWNrLCBsYXN0RG91YmxlQ2xpY2s7CisgIC8vIEEgbW91c2UgZG93biBjYW4gYmUgYSBz
aW5nbGUgY2xpY2ssIGRvdWJsZSBjbGljaywgdHJpcGxlIGNsaWNrLAorICAvLyBzdGFydCBvZiBz
ZWxlY3Rpb24gZHJhZywgc3RhcnQgb2YgdGV4dCBkcmFnLCBuZXcgY3Vyc29yCisgIC8vIChjdHJs
LWNsaWNrKSwgcmVjdGFuZ2xlIGRyYWcgKGFsdC1kcmFnKSwgb3IgeHdpbgorICAvLyBtaWRkbGUt
Y2xpY2stcGFzdGUuIE9yIGl0IG1pZ2h0IGJlIGEgY2xpY2sgb24gc29tZXRoaW5nIHdlIHNob3Vs
ZAorICAvLyBub3QgaW50ZXJmZXJlIHdpdGgsIHN1Y2ggYXMgYSBzY3JvbGxiYXIgb3Igd2lkZ2V0
LgogICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7CiAgICAgaWYgKHNpZ25hbERPTUV2ZW50KHRo
aXMsIGUpKSByZXR1cm47Ci0gICAgdmFyIGNtID0gdGhpcywgZGlzcGxheSA9IGNtLmRpc3BsYXks
IGRvYyA9IGNtLmRvYywgc2VsID0gZG9jLnNlbDsKLSAgICBzZWwuc2hpZnQgPSBlLnNoaWZ0S2V5
OworICAgIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5OworICAgIGRpc3BsYXku
c2hpZnQgPSBlLnNoaWZ0S2V5OwoKICAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSkg
ewogICAgICAgaWYgKCF3ZWJraXQpIHsKKyAgICAgICAgLy8gQnJpZWZseSB0dXJuIG9mZiBkcmFn
Z2FiaWxpdHksIHRvIGFsbG93IHdpZGdldHMgdG8gZG8KKyAgICAgICAgLy8gbm9ybWFsIGRyYWdn
aW5nIHRoaW5ncy4KICAgICAgICAgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSBmYWxzZTsK
ICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe2Rpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxl
ID0gdHJ1ZTt9LCAxMDApOwogICAgICAgfQpAQCAtMTcwOCw4OSArMjUxOCwxNjggQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICAgIGlmIChjbGlja0luR3V0dGVy
KGNtLCBlKSkgcmV0dXJuOwogICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7Cisg
ICAgd2luZG93LmZvY3VzKCk7CgogICAgIHN3aXRjaCAoZV9idXR0b24oZSkpIHsKLSAgICBjYXNl
IDM6Ci0gICAgICBpZiAoY2FwdHVyZU1pZGRsZUNsaWNrKSBvbkNvbnRleHRNZW51LmNhbGwoY20s
IGNtLCBlKTsKLSAgICAgIHJldHVybjsKKyAgICBjYXNlIDE6CisgICAgICBpZiAoc3RhcnQpCisg
ICAgICAgIGxlZnRCdXR0b25Eb3duKGNtLCBlLCBzdGFydCk7CisgICAgICBlbHNlIGlmIChlX3Rh
cmdldChlKSA9PSBkaXNwbGF5LnNjcm9sbGVyKQorICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUp
OworICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgogICAgICAgaWYgKHdlYmtpdCkgY20uc3RhdGUu
bGFzdE1pZGRsZURvd24gPSArbmV3IERhdGU7CiAgICAgICBpZiAoc3RhcnQpIGV4dGVuZFNlbGVj
dGlvbihjbS5kb2MsIHN0YXJ0KTsKICAgICAgIHNldFRpbWVvdXQoYmluZChmb2N1c0lucHV0LCBj
bSksIDIwKTsKICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICByZXR1cm47CisgICAg
ICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIG9uQ29u
dGV4dE1lbnUoY20sIGUpOworICAgICAgYnJlYWs7CiAgICAgfQotICAgIC8vIEZvciBidXR0b24g
MSwgaWYgaXQgd2FzIGNsaWNrZWQgaW5zaWRlIHRoZSBlZGl0b3IKLSAgICAvLyAocG9zRnJvbU1v
dXNlIHJldHVybmluZyBub24tbnVsbCksIHdlIGhhdmUgdG8gYWRqdXN0IHRoZQotICAgIC8vIHNl
bGVjdGlvbi4KLSAgICBpZiAoIXN0YXJ0KSB7aWYgKGVfdGFyZ2V0KGUpID09IGRpc3BsYXkuc2Ny
b2xsZXIpIGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9CisgIH0KCi0gICAgaWYgKCFjbS5z
dGF0ZS5mb2N1c2VkKSBvbkZvY3VzKGNtKTsKKyAgdmFyIGxhc3RDbGljaywgbGFzdERvdWJsZUNs
aWNrOworICBmdW5jdGlvbiBsZWZ0QnV0dG9uRG93bihjbSwgZSwgc3RhcnQpIHsKKyAgICBzZXRU
aW1lb3V0KGJpbmQoZW5zdXJlRm9jdXMsIGNtKSwgMCk7CgotICAgIHZhciBub3cgPSArbmV3IERh
dGUsIHR5cGUgPSAic2luZ2xlIjsKLSAgICBpZiAobGFzdERvdWJsZUNsaWNrICYmIGxhc3REb3Vi
bGVDbGljay50aW1lID4gbm93IC0gNDAwICYmIHBvc0VxKGxhc3REb3VibGVDbGljay5wb3MsIHN0
YXJ0KSkgeworICAgIHZhciBub3cgPSArbmV3IERhdGUsIHR5cGU7CisgICAgaWYgKGxhc3REb3Vi
bGVDbGljayAmJiBsYXN0RG91YmxlQ2xpY2sudGltZSA+IG5vdyAtIDQwMCAmJiBjbXAobGFzdERv
dWJsZUNsaWNrLnBvcywgc3RhcnQpID09IDApIHsKICAgICAgIHR5cGUgPSAidHJpcGxlIjsKLSAg
ICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICBzZXRUaW1lb3V0KGJpbmQoZm9jdXNJbnB1
dCwgY20pLCAyMCk7Ci0gICAgICBzZWxlY3RMaW5lKGNtLCBzdGFydC5saW5lKTsKLSAgICB9IGVs
c2UgaWYgKGxhc3RDbGljayAmJiBsYXN0Q2xpY2sudGltZSA+IG5vdyAtIDQwMCAmJiBwb3NFcShs
YXN0Q2xpY2sucG9zLCBzdGFydCkpIHsKKyAgICB9IGVsc2UgaWYgKGxhc3RDbGljayAmJiBsYXN0
Q2xpY2sudGltZSA+IG5vdyAtIDQwMCAmJiBjbXAobGFzdENsaWNrLnBvcywgc3RhcnQpID09IDAp
IHsKICAgICAgIHR5cGUgPSAiZG91YmxlIjsKICAgICAgIGxhc3REb3VibGVDbGljayA9IHt0aW1l
OiBub3csIHBvczogc3RhcnR9OwotICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAgIHZh
ciB3b3JkID0gZmluZFdvcmRBdChnZXRMaW5lKGRvYywgc3RhcnQubGluZSkudGV4dCwgc3RhcnQp
OwotICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5mcm9tLCB3b3JkLnRvKTsKLSAg
ICB9IGVsc2UgeyBsYXN0Q2xpY2sgPSB7dGltZTogbm93LCBwb3M6IHN0YXJ0fTsgfQotCi0gICAg
dmFyIGxhc3QgPSBzdGFydDsKLSAgICBpZiAoY20ub3B0aW9ucy5kcmFnRHJvcCAmJiBkcmFnQW5k
RHJvcCAmJiAhaXNSZWFkT25seShjbSkgJiYgIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pICYmCi0g
ICAgICAgICFwb3NMZXNzKHN0YXJ0LCBzZWwuZnJvbSkgJiYgIXBvc0xlc3Moc2VsLnRvLCBzdGFy
dCkgJiYgdHlwZSA9PSAic2luZ2xlIikgewotICAgICAgdmFyIGRyYWdFbmQgPSBvcGVyYXRpb24o
Y20sIGZ1bmN0aW9uKGUyKSB7Ci0gICAgICAgIGlmICh3ZWJraXQpIGRpc3BsYXkuc2Nyb2xsZXIu
ZHJhZ2dhYmxlID0gZmFsc2U7Ci0gICAgICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dCA9IGZhbHNl
OwotICAgICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZXVwIiwgZHJhZ0VuZCk7Ci0gICAgICAgIG9m
ZihkaXNwbGF5LnNjcm9sbGVyLCAiZHJvcCIsIGRyYWdFbmQpOwotICAgICAgICBpZiAoTWF0aC5h
YnMoZS5jbGllbnRYIC0gZTIuY2xpZW50WCkgKyBNYXRoLmFicyhlLmNsaWVudFkgLSBlMi5jbGll
bnRZKSA8IDEwKSB7Ci0gICAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlMik7Ci0gICAgICAgICAg
ZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3RhcnQpOwotICAgICAgICAgIGZvY3VzSW5wdXQoY20p
OwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIC8vIExldCB0aGUgZHJhZyBoYW5kbGVyIGhh
bmRsZSB0aGlzLgotICAgICAgaWYgKHdlYmtpdCkgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUg
PSB0cnVlOwotICAgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZHJhZ0VuZDsKLSAgICAgIC8v
IElFJ3MgYXBwcm9hY2ggdG8gZHJhZ2dhYmxlCi0gICAgICBpZiAoZGlzcGxheS5zY3JvbGxlci5k
cmFnRHJvcCkgZGlzcGxheS5zY3JvbGxlci5kcmFnRHJvcCgpOwotICAgICAgb24oZG9jdW1lbnQs
ICJtb3VzZXVwIiwgZHJhZ0VuZCk7Ci0gICAgICBvbihkaXNwbGF5LnNjcm9sbGVyLCAiZHJvcCIs
IGRyYWdFbmQpOwotICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICB0eXBlID0gInNp
bmdsZSI7CisgICAgICBsYXN0Q2xpY2sgPSB7dGltZTogbm93LCBwb3M6IHN0YXJ0fTsKICAgICB9
Ci0gICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICBpZiAodHlwZSA9PSAic2luZ2xlIikgZXh0
ZW5kU2VsZWN0aW9uKGNtLmRvYywgY2xpcFBvcyhkb2MsIHN0YXJ0KSk7CgotICAgIHZhciBzdGFy
dHN0YXJ0ID0gc2VsLmZyb20sIHN0YXJ0ZW5kID0gc2VsLnRvLCBsYXN0UG9zID0gc3RhcnQ7Ci0K
LSAgICBmdW5jdGlvbiBkb1NlbGVjdChjdXIpIHsKLSAgICAgIGlmIChwb3NFcShsYXN0UG9zLCBj
dXIpKSByZXR1cm47Ci0gICAgICBsYXN0UG9zID0gY3VyOworICAgIHZhciBzZWwgPSBjbS5kb2Mu
c2VsLCBhZGROZXcgPSBtYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXk7CisgICAgaWYgKGNtLm9w
dGlvbnMuZHJhZ0Ryb3AgJiYgZHJhZ0FuZERyb3AgJiYgIWFkZE5ldyAmJiAhaXNSZWFkT25seShj
bSkgJiYKKyAgICAgICAgdHlwZSA9PSAic2luZ2xlIiAmJiBzZWwuY29udGFpbnMoc3RhcnQpID4g
LTEgJiYgc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCkpCisgICAgICBsZWZ0QnV0dG9uU3RhcnREcmFn
KGNtLCBlLCBzdGFydCk7CisgICAgZWxzZQorICAgICAgbGVmdEJ1dHRvblNlbGVjdChjbSwgZSwg
c3RhcnQsIHR5cGUsIGFkZE5ldyk7CisgIH0KCi0gICAgICBpZiAodHlwZSA9PSAic2luZ2xlIikg
ewotICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBjbGlwUG9zKGRvYywgc3RhcnQpLCBj
dXIpOwotICAgICAgICByZXR1cm47CisgIC8vIFN0YXJ0IGEgdGV4dCBkcmFnLiBXaGVuIGl0IGVu
ZHMsIHNlZSBpZiBhbnkgZHJhZ2dpbmcgYWN0dWFsbHkKKyAgLy8gaGFwcGVuLCBhbmQgdHJlYXQg
YXMgYSBjbGljayBpZiBpdCBkaWRuJ3QuCisgIGZ1bmN0aW9uIGxlZnRCdXR0b25TdGFydERyYWco
Y20sIGUsIHN0YXJ0KSB7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OworICAgIHZhciBk
cmFnRW5kID0gb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlMikgeworICAgICAgaWYgKHdlYmtpdCkg
ZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSBmYWxzZTsKKyAgICAgIGNtLnN0YXRlLmRyYWdn
aW5nVGV4dCA9IGZhbHNlOworICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2V1cCIsIGRyYWdFbmQp
OworICAgICAgb2ZmKGRpc3BsYXkuc2Nyb2xsZXIsICJkcm9wIiwgZHJhZ0VuZCk7CisgICAgICBp
ZiAoTWF0aC5hYnMoZS5jbGllbnRYIC0gZTIuY2xpZW50WCkgKyBNYXRoLmFicyhlLmNsaWVudFkg
LSBlMi5jbGllbnRZKSA8IDEwKSB7CisgICAgICAgIGVfcHJldmVudERlZmF1bHQoZTIpOworICAg
ICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydCk7CisgICAgICAgIGZvY3VzSW5wdXQo
Y20pOworICAgICAgICAvLyBXb3JrIGFyb3VuZCB1bmV4cGxhaW5hYmxlIGZvY3VzIHByb2JsZW0g
aW4gSUU5ICgjMjEyNykKKyAgICAgICAgaWYgKGllX3VwdG8xMCAmJiAhaWVfdXB0bzgpCisgICAg
ICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtkb2N1bWVudC5ib2R5LmZvY3VzKCk7IGZvY3Vz
SW5wdXQoY20pO30sIDIwKTsKICAgICAgIH0KKyAgICB9KTsKKyAgICAvLyBMZXQgdGhlIGRyYWcg
aGFuZGxlciBoYW5kbGUgdGhpcy4KKyAgICBpZiAod2Via2l0KSBkaXNwbGF5LnNjcm9sbGVyLmRy
YWdnYWJsZSA9IHRydWU7CisgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZHJhZ0VuZDsKKyAg
ICAvLyBJRSdzIGFwcHJvYWNoIHRvIGRyYWdnYWJsZQorICAgIGlmIChkaXNwbGF5LnNjcm9sbGVy
LmRyYWdEcm9wKSBkaXNwbGF5LnNjcm9sbGVyLmRyYWdEcm9wKCk7CisgICAgb24oZG9jdW1lbnQs
ICJtb3VzZXVwIiwgZHJhZ0VuZCk7CisgICAgb24oZGlzcGxheS5zY3JvbGxlciwgImRyb3AiLCBk
cmFnRW5kKTsKKyAgfQorCisgIC8vIE5vcm1hbCBzZWxlY3Rpb24sIGFzIG9wcG9zZWQgdG8gdGV4
dCBkcmFnZ2luZy4KKyAgZnVuY3Rpb24gbGVmdEJ1dHRvblNlbGVjdChjbSwgZSwgc3RhcnQsIHR5
cGUsIGFkZE5ldykgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9j
OworICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisKKyAgICB2YXIgb3VyUmFuZ2UsIG91ckluZGV4
LCBzdGFydFNlbCA9IGRvYy5zZWw7CisgICAgaWYgKGFkZE5ldykgeworICAgICAgb3VySW5kZXgg
PSBkb2Muc2VsLmNvbnRhaW5zKHN0YXJ0KTsKKyAgICAgIGlmIChvdXJJbmRleCA+IC0xKQorICAg
ICAgICBvdXJSYW5nZSA9IGRvYy5zZWwucmFuZ2VzW291ckluZGV4XTsKKyAgICAgIGVsc2UKKyAg
ICAgICAgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsKKyAgICB9IGVsc2Ugewor
ICAgICAgb3VyUmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTsKKyAgICB9CisKKyAgICBpZiAoZS5h
bHRLZXkpIHsKKyAgICAgIHR5cGUgPSAicmVjdCI7CisgICAgICBpZiAoIWFkZE5ldykgb3VyUmFu
Z2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsKKyAgICAgIHN0YXJ0ID0gcG9zRnJvbU1vdXNl
KGNtLCBlLCB0cnVlLCB0cnVlKTsKKyAgICAgIG91ckluZGV4ID0gLTE7CisgICAgfSBlbHNlIGlm
ICh0eXBlID09ICJkb3VibGUiKSB7CisgICAgICB2YXIgd29yZCA9IGZpbmRXb3JkQXQoZG9jLCBz
dGFydCk7CisgICAgICBpZiAoY20uZGlzcGxheS5zaGlmdCB8fCBkb2MuZXh0ZW5kKQorICAgICAg
ICBvdXJSYW5nZSA9IGV4dGVuZFJhbmdlKGRvYywgb3VyUmFuZ2UsIHdvcmQuYW5jaG9yLCB3b3Jk
LmhlYWQpOworICAgICAgZWxzZQorICAgICAgICBvdXJSYW5nZSA9IHdvcmQ7CisgICAgfSBlbHNl
IGlmICh0eXBlID09ICJ0cmlwbGUiKSB7CisgICAgICB2YXIgbGluZSA9IG5ldyBSYW5nZShQb3Mo
c3RhcnQubGluZSwgMCksIGNsaXBQb3MoZG9jLCBQb3Moc3RhcnQubGluZSArIDEsIDApKSk7Cisg
ICAgICBpZiAoY20uZGlzcGxheS5zaGlmdCB8fCBkb2MuZXh0ZW5kKQorICAgICAgICBvdXJSYW5n
ZSA9IGV4dGVuZFJhbmdlKGRvYywgb3VyUmFuZ2UsIGxpbmUuYW5jaG9yLCBsaW5lLmhlYWQpOwor
ICAgICAgZWxzZQorICAgICAgICBvdXJSYW5nZSA9IGxpbmU7CisgICAgfSBlbHNlIHsKKyAgICAg
IG91clJhbmdlID0gZXh0ZW5kUmFuZ2UoZG9jLCBvdXJSYW5nZSwgc3RhcnQpOworICAgIH0KCi0g
ICAgICBzdGFydHN0YXJ0ID0gY2xpcFBvcyhkb2MsIHN0YXJ0c3RhcnQpOwotICAgICAgc3RhcnRl
bmQgPSBjbGlwUG9zKGRvYywgc3RhcnRlbmQpOwotICAgICAgaWYgKHR5cGUgPT0gImRvdWJsZSIp
IHsKLSAgICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGdldExpbmUoZG9jLCBjdXIubGluZSku
dGV4dCwgY3VyKTsKLSAgICAgICAgaWYgKHBvc0xlc3MoY3VyLCBzdGFydHN0YXJ0KSkgZXh0ZW5k
U2VsZWN0aW9uKGNtLmRvYywgd29yZC5mcm9tLCBzdGFydGVuZCk7Ci0gICAgICAgIGVsc2UgZXh0
ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3RhcnRzdGFydCwgd29yZC50byk7Ci0gICAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gInRyaXBsZSIpIHsKLSAgICAgICAgaWYgKHBvc0xlc3MoY3VyLCBzdGFydHN0
YXJ0KSkgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3RhcnRlbmQsIGNsaXBQb3MoZG9jLCBQb3Mo
Y3VyLmxpbmUsIDApKSk7Ci0gICAgICAgIGVsc2UgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3Rh
cnRzdGFydCwgY2xpcFBvcyhkb2MsIFBvcyhjdXIubGluZSArIDEsIDApKSk7CisgICAgaWYgKCFh
ZGROZXcpIHsKKyAgICAgIG91ckluZGV4ID0gMDsKKyAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5l
dyBTZWxlY3Rpb24oW291clJhbmdlXSwgMCksIHNlbF9tb3VzZSk7CisgICAgfSBlbHNlIGlmIChv
dXJJbmRleCA+IC0xKSB7CisgICAgICByZXBsYWNlT25lU2VsZWN0aW9uKGRvYywgb3VySW5kZXgs
IG91clJhbmdlLCBzZWxfbW91c2UpOworICAgIH0gZWxzZSB7CisgICAgICBvdXJJbmRleCA9IGRv
Yy5zZWwucmFuZ2VzLmxlbmd0aDsKKyAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNl
bGVjdGlvbihkb2Muc2VsLnJhbmdlcy5jb25jYXQoW291clJhbmdlXSksIG91ckluZGV4KSwKKyAg
ICAgICAgICAgICAgICAgICB7c2Nyb2xsOiBmYWxzZSwgb3JpZ2luOiAiKm1vdXNlIn0pOworICAg
IH0KKworICAgIHZhciBsYXN0UG9zID0gc3RhcnQ7CisgICAgZnVuY3Rpb24gZXh0ZW5kVG8ocG9z
KSB7CisgICAgICBpZiAoY21wKGxhc3RQb3MsIHBvcykgPT0gMCkgcmV0dXJuOworICAgICAgbGFz
dFBvcyA9IHBvczsKKworICAgICAgaWYgKHR5cGUgPT0gInJlY3QiKSB7CisgICAgICAgIHZhciBy
YW5nZXMgPSBbXSwgdGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTsKKyAgICAgICAgdmFyIHN0
YXJ0Q29sID0gY291bnRDb2x1bW4oZ2V0TGluZShkb2MsIHN0YXJ0LmxpbmUpLnRleHQsIHN0YXJ0
LmNoLCB0YWJTaXplKTsKKyAgICAgICAgdmFyIHBvc0NvbCA9IGNvdW50Q29sdW1uKGdldExpbmUo
ZG9jLCBwb3MubGluZSkudGV4dCwgcG9zLmNoLCB0YWJTaXplKTsKKyAgICAgICAgdmFyIGxlZnQg
PSBNYXRoLm1pbihzdGFydENvbCwgcG9zQ29sKSwgcmlnaHQgPSBNYXRoLm1heChzdGFydENvbCwg
cG9zQ29sKTsKKyAgICAgICAgZm9yICh2YXIgbGluZSA9IE1hdGgubWluKHN0YXJ0LmxpbmUsIHBv
cy5saW5lKSwgZW5kID0gTWF0aC5taW4oY20ubGFzdExpbmUoKSwgTWF0aC5tYXgoc3RhcnQubGlu
ZSwgcG9zLmxpbmUpKTsKKyAgICAgICAgICAgICBsaW5lIDw9IGVuZDsgbGluZSsrKSB7CisgICAg
ICAgICAgdmFyIHRleHQgPSBnZXRMaW5lKGRvYywgbGluZSkudGV4dCwgbGVmdFBvcyA9IGZpbmRD
b2x1bW4odGV4dCwgbGVmdCwgdGFiU2l6ZSk7CisgICAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQp
CisgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQ
b3MobGluZSwgbGVmdFBvcykpKTsKKyAgICAgICAgICBlbHNlIGlmICh0ZXh0Lmxlbmd0aCA+IGxl
ZnRQb3MpCisgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQ
b3MpLCBQb3MobGluZSwgZmluZENvbHVtbih0ZXh0LCByaWdodCwgdGFiU2l6ZSkpKSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoKSByYW5nZXMucHVzaChuZXcgUmFuZ2Uo
c3RhcnQsIHN0YXJ0KSk7CisgICAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVj
dGlvbihzdGFydFNlbC5yYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5nZXMpLCBv
dXJJbmRleCksIHNlbF9tb3VzZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgb2xkUmFu
Z2UgPSBvdXJSYW5nZTsKKyAgICAgICAgdmFyIGFuY2hvciA9IG9sZFJhbmdlLmFuY2hvciwgaGVh
ZCA9IHBvczsKKyAgICAgICAgaWYgKHR5cGUgIT0gInNpbmdsZSIpIHsKKyAgICAgICAgICBpZiAo
dHlwZSA9PSAiZG91YmxlIikKKyAgICAgICAgICAgIHZhciByYW5nZSA9IGZpbmRXb3JkQXQoZG9j
LCBwb3MpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5n
ZShQb3MocG9zLmxpbmUsIDApLCBjbGlwUG9zKGRvYywgUG9zKHBvcy5saW5lICsgMSwgMCkpKTsK
KyAgICAgICAgICBpZiAoY21wKHJhbmdlLmFuY2hvciwgYW5jaG9yKSA+IDApIHsKKyAgICAgICAg
ICAgIGhlYWQgPSByYW5nZS5oZWFkOworICAgICAgICAgICAgYW5jaG9yID0gbWluUG9zKG9sZFJh
bmdlLmZyb20oKSwgcmFuZ2UuYW5jaG9yKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaGVhZCA9IHJhbmdlLmFuY2hvcjsKKyAgICAgICAgICAgIGFuY2hvciA9IG1heFBvcyhvbGRS
YW5nZS50bygpLCByYW5nZS5oZWFkKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
dmFyIHJhbmdlcyA9IHN0YXJ0U2VsLnJhbmdlcy5zbGljZSgwKTsKKyAgICAgICAgcmFuZ2VzW291
ckluZGV4XSA9IG5ldyBSYW5nZShjbGlwUG9zKGRvYywgYW5jaG9yKSwgaGVhZCk7CisgICAgICAg
IHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIG91ckluZGV4KSwg
c2VsX21vdXNlKTsKICAgICAgIH0KICAgICB9CgotICAgIHZhciBlZGl0b3JTaXplID0gZ2V0UmVj
dChkaXNwbGF5LndyYXBwZXIpOworICAgIHZhciBlZGl0b3JTaXplID0gZGlzcGxheS53cmFwcGVy
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgIC8vIFVzZWQgdG8gZW5zdXJlIHRpbWVvdXQg
cmUtdHJpZXMgZG9uJ3QgZmlyZSB3aGVuIGFub3RoZXIgZXh0ZW5kCiAgICAgLy8gaGFwcGVuZWQg
aW4gdGhlIG1lYW50aW1lIChjbGVhclRpbWVvdXQgaXNuJ3QgcmVsaWFibGUgLS0gYXQKICAgICAv
LyBsZWFzdCBvbiBDaHJvbWUsIHRoZSB0aW1lb3V0cyBzdGlsbCBoYXBwZW4gZXZlbiB3aGVuIGNs
ZWFyZWQsCkBAIC0xNzk5LDEyICsyNjg4LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewoKICAgICBmdW5jdGlvbiBleHRlbmQoZSkgewogICAgICAgdmFyIGN1ckNvdW50ID0g
Kytjb3VudGVyOwotICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSk7Cisg
ICAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGNtLCBlLCB0cnVlLCB0eXBlID09ICJyZWN0Iik7
CiAgICAgICBpZiAoIWN1cikgcmV0dXJuOwotICAgICAgaWYgKCFwb3NFcShjdXIsIGxhc3QpKSB7
Ci0gICAgICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgb25Gb2N1cyhjbSk7Ci0gICAgICAgIGxh
c3QgPSBjdXI7Ci0gICAgICAgIGRvU2VsZWN0KGN1cik7CisgICAgICBpZiAoY21wKGN1ciwgbGFz
dFBvcykgIT0gMCkgeworICAgICAgICBlbnN1cmVGb2N1cyhjbSk7CisgICAgICAgIGV4dGVuZFRv
KGN1cik7CiAgICAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGRvYyk7
CiAgICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJs
ZS5mcm9tKQogICAgICAgICAgIHNldFRpbWVvdXQob3BlcmF0aW9uKGNtLCBmdW5jdGlvbigpe2lm
IChjb3VudGVyID09IGN1ckNvdW50KSBleHRlbmQoZSk7fSksIDE1MCk7CkBAIC0xODI0LDEwICsy
NzEyLDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZm9jdXNJ
bnB1dChjbSk7CiAgICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZW1vdmUiLCBtb3ZlKTsKICAgICAg
IG9mZihkb2N1bWVudCwgIm1vdXNldXAiLCB1cCk7CisgICAgICBkb2MuaGlzdG9yeS5sYXN0U2Vs
T3JpZ2luID0gbnVsbDsKICAgICB9CgogICAgIHZhciBtb3ZlID0gb3BlcmF0aW9uKGNtLCBmdW5j
dGlvbihlKSB7Ci0gICAgICBpZiAoIWllICYmICFlX2J1dHRvbihlKSkgZG9uZShlKTsKKyAgICAg
IGlmICgoaWUgJiYgIWllX3VwdG85KSA/ICAhZS5idXR0b25zIDogIWVfYnV0dG9uKGUpKSBkb25l
KGUpOwogICAgICAgZWxzZSBleHRlbmQoZSk7CiAgICAgfSk7CiAgICAgdmFyIHVwID0gb3BlcmF0
aW9uKGNtLCBkb25lKTsKQEAgLTE4MzUsMjEgKzI3MjQsMjMgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgb24oZG9jdW1lbnQsICJtb3VzZXVwIiwgdXApOwogICB9Cgor
ICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gZXZlbnQgaGFwcGVuZWQgaW4gdGhlIGd1dHRlciwg
YW5kIGZpcmVzIHRoZQorICAvLyBoYW5kbGVycyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQu
CiAgIGZ1bmN0aW9uIGd1dHRlckV2ZW50KGNtLCBlLCB0eXBlLCBwcmV2ZW50LCBzaWduYWxmbikg
ewogICAgIHRyeSB7IHZhciBtWCA9IGUuY2xpZW50WCwgbVkgPSBlLmNsaWVudFk7IH0KICAgICBj
YXRjaChlKSB7IHJldHVybiBmYWxzZTsgfQotICAgIGlmIChtWCA+PSBNYXRoLmZsb29yKGdldFJl
Y3QoY20uZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpIHJldHVybiBmYWxzZTsKKyAgICBpZiAobVgg
Pj0gTWF0aC5mbG9vcihjbS5kaXNwbGF5Lmd1dHRlcnMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCku
cmlnaHQpKSByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHByZXZlbnQpIGVfcHJldmVudERlZmF1bHQo
ZSk7CgogICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICB2YXIgbGluZUJveCA9IGdl
dFJlY3QoZGlzcGxheS5saW5lRGl2KTsKKyAgICB2YXIgbGluZUJveCA9IGRpc3BsYXkubGluZURp
di5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCiAgICAgaWYgKG1ZID4gbGluZUJveC5ib3R0b20g
fHwgIWhhc0hhbmRsZXIoY20sIHR5cGUpKSByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpOwog
ICAgIG1ZIC09IGxpbmVCb3gudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0OwoKICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsraSkgewogICAgICAgdmFy
IGcgPSBkaXNwbGF5Lmd1dHRlcnMuY2hpbGROb2Rlc1tpXTsKLSAgICAgIGlmIChnICYmIGdldFJl
Y3QoZykucmlnaHQgPj0gbVgpIHsKKyAgICAgIGlmIChnICYmIGcuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCkucmlnaHQgPj0gbVgpIHsKICAgICAgICAgdmFyIGxpbmUgPSBsaW5lQXRIZWlnaHQoY20u
ZG9jLCBtWSk7CiAgICAgICAgIHZhciBndXR0ZXIgPSBjbS5vcHRpb25zLmd1dHRlcnNbaV07CiAg
ICAgICAgIHNpZ25hbGZuKGNtLCB0eXBlLCBjbSwgbGluZSwgZ3V0dGVyLCBlKTsKQEAgLTE4NTgs
MTEgKzI3NDksNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAg
IH0KCi0gIGZ1bmN0aW9uIGNvbnRleHRNZW51SW5HdXR0ZXIoY20sIGUpIHsKLSAgICBpZiAoIWhh
c0hhbmRsZXIoY20sICJndXR0ZXJDb250ZXh0TWVudSIpKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIGd1dHRlckV2ZW50KGNtLCBlLCAiZ3V0dGVyQ29udGV4dE1lbnUiLCBmYWxzZSwgc2lnbmFs
KTsKLSAgfQotCiAgIGZ1bmN0aW9uIGNsaWNrSW5HdXR0ZXIoY20sIGUpIHsKICAgICByZXR1cm4g
Z3V0dGVyRXZlbnQoY20sIGUsICJndXR0ZXJDbGljayIsIHRydWUsIHNpZ25hbExhdGVyKTsKICAg
fQpAQCAtMTg3MywyOSArMjc1OSwzMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKCiAgIGZ1bmN0aW9uIG9uRHJvcChlKSB7CiAgICAgdmFyIGNtID0gdGhpczsKLSAgICBpZiAo
c2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwg
KGNtLm9wdGlvbnMub25EcmFnRXZlbnQgJiYgY20ub3B0aW9ucy5vbkRyYWdFdmVudChjbSwgYWRk
U3RvcChlKSkpKQorICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgZXZlbnRJbldpZGdl
dChjbS5kaXNwbGF5LCBlKSkKICAgICAgIHJldHVybjsKICAgICBlX3ByZXZlbnREZWZhdWx0KGUp
OwotICAgIGlmIChpZSkgbGFzdERyb3AgPSArbmV3IERhdGU7CisgICAgaWYgKGllX3VwdG8xMCkg
bGFzdERyb3AgPSArbmV3IERhdGU7CiAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSwg
dHJ1ZSksIGZpbGVzID0gZS5kYXRhVHJhbnNmZXIuZmlsZXM7CiAgICAgaWYgKCFwb3MgfHwgaXNS
ZWFkT25seShjbSkpIHJldHVybjsKKyAgICAvLyBNaWdodCBiZSBhIGZpbGUgZHJvcCwgaW4gd2hp
Y2ggY2FzZSB3ZSBzaW1wbHkgZXh0cmFjdCB0aGUgdGV4dAorICAgIC8vIGFuZCBpbnNlcnQgaXQu
CiAgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiB3
aW5kb3cuRmlsZSkgewogICAgICAgdmFyIG4gPSBmaWxlcy5sZW5ndGgsIHRleHQgPSBBcnJheShu
KSwgcmVhZCA9IDA7CiAgICAgICB2YXIgbG9hZEZpbGUgPSBmdW5jdGlvbihmaWxlLCBpKSB7CiAg
ICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcjsKLSAgICAgICAgcmVhZGVyLm9ubG9h
ZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZWFkZXIub25sb2FkID0gb3BlcmF0aW9uKGNtLCBm
dW5jdGlvbigpIHsKICAgICAgICAgICB0ZXh0W2ldID0gcmVhZGVyLnJlc3VsdDsKICAgICAgICAg
ICBpZiAoKytyZWFkID09IG4pIHsKICAgICAgICAgICAgIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBw
b3MpOwotICAgICAgICAgICAgbWFrZUNoYW5nZShjbS5kb2MsIHtmcm9tOiBwb3MsIHRvOiBwb3Ms
IHRleHQ6IHNwbGl0TGluZXModGV4dC5qb2luKCJcbiIpKSwgb3JpZ2luOiAicGFzdGUifSwgImFy
b3VuZCIpOworICAgICAgICAgICAgdmFyIGNoYW5nZSA9IHtmcm9tOiBwb3MsIHRvOiBwb3MsIHRl
eHQ6IHNwbGl0TGluZXModGV4dC5qb2luKCJcbiIpKSwgb3JpZ2luOiAicGFzdGUifTsKKyAgICAg
ICAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2UpOworICAgICAgICAgICAgc2V0U2VsZWN0
aW9uUmVwbGFjZUhpc3RvcnkoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zLCBjaGFuZ2VFbmQo
Y2hhbmdlKSkpOwogICAgICAgICAgIH0KLSAgICAgICAgfTsKKyAgICAgICAgfSk7CiAgICAgICAg
IHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOwogICAgICAgfTsKICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbjsgKytpKSBsb2FkRmlsZShmaWxlc1tpXSwgaSk7Ci0gICAgfSBlbHNlIHsKKyAgICB9
IGVsc2UgeyAvLyBOb3JtYWwgZHJvcAogICAgICAgLy8gRG9uJ3QgZG8gYSByZXBsYWNlIGlmIHRo
ZSBkcm9wIGhhcHBlbmVkIGluc2lkZSBvZiB0aGUgc2VsZWN0ZWQgdGV4dC4KLSAgICAgIGlmIChj
bS5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgIShwb3NMZXNzKHBvcywgY20uZG9jLnNlbC5mcm9tKSB8
fCBwb3NMZXNzKGNtLmRvYy5zZWwudG8sIHBvcykpKSB7CisgICAgICBpZiAoY20uc3RhdGUuZHJh
Z2dpbmdUZXh0ICYmIGNtLmRvYy5zZWwuY29udGFpbnMocG9zKSA+IC0xKSB7CiAgICAgICAgIGNt
LnN0YXRlLmRyYWdnaW5nVGV4dChlKTsKICAgICAgICAgLy8gRW5zdXJlIHRoZSBlZGl0b3IgaXMg
cmUtZm9jdXNlZAogICAgICAgICBzZXRUaW1lb3V0KGJpbmQoZm9jdXNJbnB1dCwgY20pLCAyMCk7
CkBAIC0xOTA0LDEwICsyNzk0LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgdHJ5IHsKICAgICAgICAgdmFyIHRleHQgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRh
KCJUZXh0Iik7CiAgICAgICAgIGlmICh0ZXh0KSB7Ci0gICAgICAgICAgdmFyIGN1ckZyb20gPSBj
bS5kb2Muc2VsLmZyb20sIGN1clRvID0gY20uZG9jLnNlbC50bzsKLSAgICAgICAgICBzZXRTZWxl
Y3Rpb24oY20uZG9jLCBwb3MsIHBvcyk7Ci0gICAgICAgICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5n
VGV4dCkgcmVwbGFjZVJhbmdlKGNtLmRvYywgIiIsIGN1ckZyb20sIGN1clRvLCAicGFzdGUiKTsK
LSAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHRleHQsIG51bGwsICJwYXN0ZSIpOworICAg
ICAgICAgIHZhciBzZWxlY3RlZCA9IGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiBjbS5saXN0U2Vs
ZWN0aW9ucygpOworICAgICAgICAgIHNldFNlbGVjdGlvbk5vVW5kbyhjbS5kb2MsIHNpbXBsZVNl
bGVjdGlvbihwb3MsIHBvcykpOworICAgICAgICAgIGlmIChzZWxlY3RlZCkgZm9yICh2YXIgaSA9
IDA7IGkgPCBzZWxlY3RlZC5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHJlcGxhY2VSYW5nZShj
bS5kb2MsICIiLCBzZWxlY3RlZFtpXS5hbmNob3IsIHNlbGVjdGVkW2ldLmhlYWQsICJkcmFnIik7
CisgICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbih0ZXh0LCAiYXJvdW5kIiwgInBhc3RlIik7
CiAgICAgICAgICAgZm9jdXNJbnB1dChjbSk7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTE5MTYs
MzcgKzI4MDcsNDIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KCiAg
IGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGNtLCBlKSB7Ci0gICAgaWYgKGllICYmICghY20uc3RhdGUu
ZHJhZ2dpbmdUZXh0IHx8ICtuZXcgRGF0ZSAtIGxhc3REcm9wIDwgMTAwKSkgeyBlX3N0b3AoZSk7
IHJldHVybjsgfQorICAgIGlmIChpZV91cHRvMTAgJiYgKCFjbS5zdGF0ZS5kcmFnZ2luZ1RleHQg
fHwgK25ldyBEYXRlIC0gbGFzdERyb3AgPCAxMDApKSB7IGVfc3RvcChlKTsgcmV0dXJuOyB9CiAg
ICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXks
IGUpKSByZXR1cm47CgotICAgIHZhciB0eHQgPSBjbS5nZXRTZWxlY3Rpb24oKTsKLSAgICBlLmRh
dGFUcmFuc2Zlci5zZXREYXRhKCJUZXh0IiwgdHh0KTsKKyAgICBlLmRhdGFUcmFuc2Zlci5zZXRE
YXRhKCJUZXh0IiwgY20uZ2V0U2VsZWN0aW9uKCkpOwoKICAgICAvLyBVc2UgZHVtbXkgaW1hZ2Ug
aW5zdGVhZCBvZiBkZWZhdWx0IGJyb3dzZXJzIGltYWdlLgogICAgIC8vIFJlY2VudCBTYWZhcmkg
KH42LjAuMikgaGF2ZSBhIHRlbmRlbmN5IHRvIHNlZ2ZhdWx0IHdoZW4gdGhpcyBoYXBwZW5zLCBz
byB3ZSBkb24ndCBkbyBpdCB0aGVyZS4KICAgICBpZiAoZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0lt
YWdlICYmICFzYWZhcmkpIHsKICAgICAgIHZhciBpbWcgPSBlbHQoImltZyIsIG51bGwsIG51bGws
ICJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDsiKTsKICAgICAgIGltZy5zcmMgPSAi
ZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBQUFBQ0g1QkFFS0FBRUFMQUFBQUFB
QkFBRUFBQUlDVEFFQU93PT0iOwotICAgICAgaWYgKG9wZXJhKSB7CisgICAgICBpZiAocHJlc3Rv
KSB7CiAgICAgICAgIGltZy53aWR0aCA9IGltZy5oZWlnaHQgPSAxOwogICAgICAgICBjbS5kaXNw
bGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTsKICAgICAgICAgLy8gRm9yY2UgYSByZWxheW91
dCwgb3IgT3BlcmEgd29uJ3QgdXNlIG91ciBpbWFnZSBmb3Igc29tZSBvYnNjdXJlIHJlYXNvbgog
ICAgICAgICBpbWcuX3RvcCA9IGltZy5vZmZzZXRUb3A7CiAgICAgICB9CiAgICAgICBlLmRhdGFU
cmFuc2Zlci5zZXREcmFnSW1hZ2UoaW1nLCAwLCAwKTsKLSAgICAgIGlmIChvcGVyYSkgaW1nLnBh
cmVudE5vZGUucmVtb3ZlQ2hpbGQoaW1nKTsKKyAgICAgIGlmIChwcmVzdG8pIGltZy5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKGltZyk7CiAgICAgfQogICB9CgorICAvLyBTQ1JPTEwgRVZFTlRTCisK
KyAgLy8gU3luYyB0aGUgc2Nyb2xsYWJsZSBhcmVhIGFuZCBzY3JvbGxiYXJzLCBlbnN1cmUgdGhl
IHZpZXdwb3J0CisgIC8vIGNvdmVycyB0aGUgdmlzaWJsZSBhcmVhLgogICBmdW5jdGlvbiBzZXRT
Y3JvbGxUb3AoY20sIHZhbCkgewogICAgIGlmIChNYXRoLmFicyhjbS5kb2Muc2Nyb2xsVG9wIC0g
dmFsKSA8IDIpIHJldHVybjsKICAgICBjbS5kb2Muc2Nyb2xsVG9wID0gdmFsOwotICAgIGlmICgh
Z2Vja28pIHVwZGF0ZURpc3BsYXkoY20sIFtdLCB2YWwpOworICAgIGlmICghZ2Vja28pIHVwZGF0
ZURpc3BsYXkoY20sIHt0b3A6IHZhbH0pOwogICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNj
cm9sbFRvcCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gdmFsOwogICAg
IGlmIChjbS5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wICE9IHZhbCkgY20uZGlzcGxheS5z
Y3JvbGxiYXJWLnNjcm9sbFRvcCA9IHZhbDsKLSAgICBpZiAoZ2Vja28pIHVwZGF0ZURpc3BsYXko
Y20sIFtdKTsKKyAgICBpZiAoZ2Vja28pIHVwZGF0ZURpc3BsYXkoY20pOwogICAgIHN0YXJ0V29y
a2VyKGNtLCAxMDApOwogICB9CisgIC8vIFN5bmMgc2Nyb2xsZXIgYW5kIHNjcm9sbGJhciwgZW5z
dXJlIHRoZSBndXR0ZXIgZWxlbWVudHMgYXJlCisgIC8vIGFsaWduZWQuCiAgIGZ1bmN0aW9uIHNl
dFNjcm9sbExlZnQoY20sIHZhbCwgaXNTY3JvbGxlcikgewogICAgIGlmIChpc1Njcm9sbGVyID8g
dmFsID09IGNtLmRvYy5zY3JvbGxMZWZ0IDogTWF0aC5hYnMoY20uZG9jLnNjcm9sbExlZnQgLSB2
YWwpIDwgMikgcmV0dXJuOwogICAgIHZhbCA9IE1hdGgubWluKHZhbCwgY20uZGlzcGxheS5zY3Jv
bGxlci5zY3JvbGxXaWR0aCAtIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpOwpAQCAt
MTk5MywxMCArMjg4OSwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAvLyBUaGlzIGhhY2sgKHNlZSByZWxhdGVkIGNvZGUgaW4gcGF0Y2hEaXNwbGF5KSBtYWtlcyBz
dXJlIHRoZQogICAgIC8vIGVsZW1lbnQgaXMga2VwdCBhcm91bmQuCiAgICAgaWYgKGR5ICYmIG1h
YyAmJiB3ZWJraXQpIHsKLSAgICAgIGZvciAodmFyIGN1ciA9IGUudGFyZ2V0OyBjdXIgIT0gc2Ny
b2xsOyBjdXIgPSBjdXIucGFyZW50Tm9kZSkgewotICAgICAgICBpZiAoY3VyLmxpbmVPYmopIHsK
LSAgICAgICAgICBjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCA9IGN1cjsKLSAgICAgICAg
ICBicmVhazsKKyAgICAgIG91dGVyOiBmb3IgKHZhciBjdXIgPSBlLnRhcmdldCwgdmlldyA9IGRp
c3BsYXkudmlldzsgY3VyICE9IHNjcm9sbDsgY3VyID0gY3VyLnBhcmVudE5vZGUpIHsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgaWYg
KHZpZXdbaV0ubm9kZSA9PSBjdXIpIHsKKyAgICAgICAgICAgIGNtLmRpc3BsYXkuY3VycmVudFdo
ZWVsVGFyZ2V0ID0gY3VyOworICAgICAgICAgICAgYnJlYWsgb3V0ZXI7CisgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMjAwNyw3ICsyOTA1LDcgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gZXN0aW1hdGVkIHBpeGVscy9kZWx0YSB2
YWx1ZSwgd2UganVzdCBoYW5kbGUgaG9yaXpvbnRhbAogICAgIC8vIHNjcm9sbGluZyBlbnRpcmVs
eSBoZXJlLiBJdCdsbCBiZSBzbGlnaHRseSBvZmYgZnJvbSBuYXRpdmUsIGJ1dAogICAgIC8vIGJl
dHRlciB0aGFuIGdsaXRjaGluZyBvdXQuCi0gICAgaWYgKGR4ICYmICFnZWNrbyAmJiAhb3BlcmEg
JiYgd2hlZWxQaXhlbHNQZXJVbml0ICE9IG51bGwpIHsKKyAgICBpZiAoZHggJiYgIWdlY2tvICYm
ICFwcmVzdG8gJiYgd2hlZWxQaXhlbHNQZXJVbml0ICE9IG51bGwpIHsKICAgICAgIGlmIChkeSkK
ICAgICAgICAgc2V0U2Nyb2xsVG9wKGNtLCBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGwuc2Ny
b2xsVG9wICsgZHkgKiB3aGVlbFBpeGVsc1BlclVuaXQsIHNjcm9sbC5zY3JvbGxIZWlnaHQgLSBz
Y3JvbGwuY2xpZW50SGVpZ2h0KSkpOwogICAgICAgc2V0U2Nyb2xsTGVmdChjbSwgTWF0aC5tYXgo
MCwgTWF0aC5taW4oc2Nyb2xsLnNjcm9sbExlZnQgKyBkeCAqIHdoZWVsUGl4ZWxzUGVyVW5pdCwg
c2Nyb2xsLnNjcm9sbFdpZHRoIC0gc2Nyb2xsLmNsaWVudFdpZHRoKSkpOwpAQCAtMjAxNiwxMiAr
MjkxNCwxNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVy
bjsKICAgICB9CgorICAgIC8vICdQcm9qZWN0JyB0aGUgdmlzaWJsZSB2aWV3cG9ydCB0byBjb3Zl
ciB0aGUgYXJlYSB0aGF0IGlzIGJlaW5nCisgICAgLy8gc2Nyb2xsZWQgaW50byB2aWV3IChpZiB3
ZSBrbm93IGVub3VnaCB0byBlc3RpbWF0ZSBpdCkuCiAgICAgaWYgKGR5ICYmIHdoZWVsUGl4ZWxz
UGVyVW5pdCAhPSBudWxsKSB7CiAgICAgICB2YXIgcGl4ZWxzID0gZHkgKiB3aGVlbFBpeGVsc1Bl
clVuaXQ7CiAgICAgICB2YXIgdG9wID0gY20uZG9jLnNjcm9sbFRvcCwgYm90ID0gdG9wICsgZGlz
cGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKICAgICAgIGlmIChwaXhlbHMgPCAwKSB0b3AgPSBN
YXRoLm1heCgwLCB0b3AgKyBwaXhlbHMgLSA1MCk7CiAgICAgICBlbHNlIGJvdCA9IE1hdGgubWlu
KGNtLmRvYy5oZWlnaHQsIGJvdCArIHBpeGVscyArIDUwKTsKLSAgICAgIHVwZGF0ZURpc3BsYXko
Y20sIFtdLCB7dG9wOiB0b3AsIGJvdHRvbTogYm90fSk7CisgICAgICB1cGRhdGVEaXNwbGF5KGNt
LCB7dG9wOiB0b3AsIGJvdHRvbTogYm90fSk7CiAgICAgfQoKICAgICBpZiAod2hlZWxTYW1wbGVz
IDwgMjApIHsKQEAgLTIwNDUsNiArMjk0NSw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIH0KICAgfQoKKyAgLy8gS0VZIEVWRU5UUworCisgIC8vIFJ1biBhIGhhbmRs
ZXIgdGhhdCB3YXMgYm91bmQgdG8gYSBrZXkuCiAgIGZ1bmN0aW9uIGRvSGFuZGxlQmluZGluZyhj
bSwgYm91bmQsIGRyb3BTaGlmdCkgewogICAgIGlmICh0eXBlb2YgYm91bmQgPT0gInN0cmluZyIp
IHsKICAgICAgIGJvdW5kID0gY29tbWFuZHNbYm91bmRdOwpAQCAtMjA1MywxOCArMjk1NiwxOSBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAvLyBFbnN1cmUgcHJldmlv
dXMgaW5wdXQgaGFzIGJlZW4gcmVhZCwgc28gdGhhdCB0aGUgaGFuZGxlciBzZWVzIGEKICAgICAv
LyBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGRvY3VtZW50CiAgICAgaWYgKGNtLmRpc3BsYXkucG9s
bGluZ0Zhc3QgJiYgcmVhZElucHV0KGNtKSkgY20uZGlzcGxheS5wb2xsaW5nRmFzdCA9IGZhbHNl
OwotICAgIHZhciBkb2MgPSBjbS5kb2MsIHByZXZTaGlmdCA9IGRvYy5zZWwuc2hpZnQsIGRvbmUg
PSBmYWxzZTsKKyAgICB2YXIgcHJldlNoaWZ0ID0gY20uZGlzcGxheS5zaGlmdCwgZG9uZSA9IGZh
bHNlOwogICAgIHRyeSB7CiAgICAgICBpZiAoaXNSZWFkT25seShjbSkpIGNtLnN0YXRlLnN1cHBy
ZXNzRWRpdHMgPSB0cnVlOwotICAgICAgaWYgKGRyb3BTaGlmdCkgZG9jLnNlbC5zaGlmdCA9IGZh
bHNlOworICAgICAgaWYgKGRyb3BTaGlmdCkgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlOwogICAg
ICAgZG9uZSA9IGJvdW5kKGNtKSAhPSBQYXNzOwogICAgIH0gZmluYWxseSB7Ci0gICAgICBkb2Mu
c2VsLnNoaWZ0ID0gcHJldlNoaWZ0OworICAgICAgY20uZGlzcGxheS5zaGlmdCA9IHByZXZTaGlm
dDsKICAgICAgIGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIGRvbmU7CiAgIH0KCisgIC8vIENvbGxlY3QgdGhlIGN1cnJlbnRseSBhY3RpdmUga2V5bWFw
cy4KICAgZnVuY3Rpb24gYWxsS2V5TWFwcyhjbSkgewogICAgIHZhciBtYXBzID0gY20uc3RhdGUu
a2V5TWFwcy5zbGljZSgwKTsKICAgICBpZiAoY20ub3B0aW9ucy5leHRyYUtleXMpIG1hcHMucHVz
aChjbS5vcHRpb25zLmV4dHJhS2V5cyk7CkBAIC0yMDczLDggKzI5NzcsOSBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgfQoKICAgdmFyIG1heWJlVHJhbnNpdGlvbjsKKyAg
Ly8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleWRvd24gZXZlbnQuCiAgIGZ1bmN0aW9uIGhhbmRs
ZUtleUJpbmRpbmcoY20sIGUpIHsKLSAgICAvLyBIYW5kbGUgYXV0byBrZXltYXAgdHJhbnNpdGlv
bnMKKyAgICAvLyBIYW5kbGUgYXV0b21hdGljIGtleW1hcCB0cmFuc2l0aW9ucwogICAgIHZhciBz
dGFydE1hcCA9IGdldEtleU1hcChjbS5vcHRpb25zLmtleU1hcCksIG5leHQgPSBzdGFydE1hcC5h
dXRvOwogICAgIGNsZWFyVGltZW91dChtYXliZVRyYW5zaXRpb24pOwogICAgIGlmIChuZXh0ICYm
ICFpc01vZGlmaWVyS2V5KGUpKSBtYXliZVRyYW5zaXRpb24gPSBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgewpAQCAtMjEwNCwxMiArMzAwOSwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBpZiAoaGFuZGxlZCkgewogICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAg
ICAgIHJlc3RhcnRCbGluayhjbSk7Ci0gICAgICBpZiAoaWVfbHQ5KSB7IGUub2xkS2V5Q29kZSA9
IGUua2V5Q29kZTsgZS5rZXlDb2RlID0gMDsgfQogICAgICAgc2lnbmFsTGF0ZXIoY20sICJrZXlI
YW5kbGVkIiwgY20sIG5hbWUsIGUpOwogICAgIH0KICAgICByZXR1cm4gaGFuZGxlZDsKICAgfQoK
KyAgLy8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleXByZXNzIGV2ZW50CiAgIGZ1bmN0aW9uIGhh
bmRsZUNoYXJCaW5kaW5nKGNtLCBlLCBjaCkgewogICAgIHZhciBoYW5kbGVkID0gbG9va3VwS2V5
KCInIiArIGNoICsgIiciLCBhbGxLZXlNYXBzKGNtKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbihiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpOyB9
KTsKQEAgLTIxMjQsNDcgKzMwMjksNjcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgIHZhciBsYXN0U3RvcHBlZEtleSA9IG51bGw7CiAgIGZ1bmN0aW9uIG9uS2V5RG93bihl
KSB7CiAgICAgdmFyIGNtID0gdGhpczsKLSAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIG9uRm9j
dXMoY20pOwotICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgY20ub3B0aW9ucy5vbktl
eUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsK
LSAgICBpZiAoaWUgJiYgZS5rZXlDb2RlID09IDI3KSBlLnJldHVyblZhbHVlID0gZmFsc2U7Ci0g
ICAgdmFyIGNvZGUgPSBlLmtleUNvZGU7CisgICAgZW5zdXJlRm9jdXMoY20pOworICAgIGlmIChz
aWduYWxET01FdmVudChjbSwgZSkpIHJldHVybjsKICAgICAvLyBJRSBkb2VzIHN0cmFuZ2UgdGhp
bmdzIHdpdGggZXNjYXBlLgotICAgIGNtLmRvYy5zZWwuc2hpZnQgPSBjb2RlID09IDE2IHx8IGUu
c2hpZnRLZXk7Ci0gICAgLy8gRmlyc3QgZ2l2ZSBvbktleUV2ZW50IG9wdGlvbiBhIGNoYW5jZSB0
byBoYW5kbGUgdGhpcy4KKyAgICBpZiAoaWVfdXB0bzEwICYmIGUua2V5Q29kZSA9PSAyNykgZS5y
ZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgIHZhciBjb2RlID0gZS5rZXlDb2RlOworICAgIGNtLmRp
c3BsYXkuc2hpZnQgPSBjb2RlID09IDE2IHx8IGUuc2hpZnRLZXk7CiAgICAgdmFyIGhhbmRsZWQg
PSBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKTsKLSAgICBpZiAob3BlcmEpIHsKKyAgICBpZiAocHJl
c3RvKSB7CiAgICAgICBsYXN0U3RvcHBlZEtleSA9IGhhbmRsZWQgPyBjb2RlIDogbnVsbDsKICAg
ICAgIC8vIE9wZXJhIGhhcyBubyBjdXQgZXZlbnQuLi4gd2UgdHJ5IHRvIGF0IGxlYXN0IGNhdGNo
IHRoZSBrZXkgY29tYm8KICAgICAgIGlmICghaGFuZGxlZCAmJiBjb2RlID09IDg4ICYmICFoYXND
b3B5RXZlbnQgJiYgKG1hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleSkpCi0gICAgICAgIGNtLnJl
cGxhY2VTZWxlY3Rpb24oIiIpOworICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKCIiLCBudWxs
LCAiY3V0Iik7CisgICAgfQorCisgICAgLy8gVHVybiBtb3VzZSBpbnRvIGNyb3NzaGFpciB3aGVu
IEFsdCBpcyBoZWxkIG9uIE1hYy4KKyAgICBpZiAoY29kZSA9PSAxOCAmJiAhL1xiQ29kZU1pcnJv
ci1jcm9zc2hhaXJcYi8udGVzdChjbS5kaXNwbGF5LmxpbmVEaXYuY2xhc3NOYW1lKSkKKyAgICAg
IHNob3dDcm9zc0hhaXIoY20pOworICB9CisKKyAgZnVuY3Rpb24gc2hvd0Nyb3NzSGFpcihjbSkg
eworICAgIHZhciBsaW5lRGl2ID0gY20uZGlzcGxheS5saW5lRGl2OworICAgIGFkZENsYXNzKGxp
bmVEaXYsICJDb2RlTWlycm9yLWNyb3NzaGFpciIpOworCisgICAgZnVuY3Rpb24gdXAoZSkgewor
ICAgICAgaWYgKGUua2V5Q29kZSA9PSAxOCB8fCAhZS5hbHRLZXkpIHsKKyAgICAgICAgcm1DbGFz
cyhsaW5lRGl2LCAiQ29kZU1pcnJvci1jcm9zc2hhaXIiKTsKKyAgICAgICAgb2ZmKGRvY3VtZW50
LCAia2V5dXAiLCB1cCk7CisgICAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNlb3ZlciIsIHVwKTsK
KyAgICAgIH0KICAgICB9CisgICAgb24oZG9jdW1lbnQsICJrZXl1cCIsIHVwKTsKKyAgICBvbihk
b2N1bWVudCwgIm1vdXNlb3ZlciIsIHVwKTsKKyAgfQorCisgIGZ1bmN0aW9uIG9uS2V5VXAoZSkg
eworICAgIGlmIChzaWduYWxET01FdmVudCh0aGlzLCBlKSkgcmV0dXJuOworICAgIGlmIChlLmtl
eUNvZGUgPT0gMTYpIHRoaXMuZG9jLnNlbC5zaGlmdCA9IGZhbHNlOwogICB9CgogICBmdW5jdGlv
biBvbktleVByZXNzKGUpIHsKICAgICB2YXIgY20gPSB0aGlzOwotICAgIGlmIChzaWduYWxET01F
dmVudChjbSwgZSkgfHwgY20ub3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlF
dmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKKyAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20s
IGUpKSByZXR1cm47CiAgICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUsIGNoYXJDb2RlID0gZS5j
aGFyQ29kZTsKLSAgICBpZiAob3BlcmEgJiYga2V5Q29kZSA9PSBsYXN0U3RvcHBlZEtleSkge2xh
c3RTdG9wcGVkS2V5ID0gbnVsbDsgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJuO30KLSAgICBp
ZiAoKChvcGVyYSAmJiAoIWUud2hpY2ggfHwgZS53aGljaCA8IDEwKSkgfHwga2h0bWwpICYmIGhh
bmRsZUtleUJpbmRpbmcoY20sIGUpKSByZXR1cm47CisgICAgaWYgKHByZXN0byAmJiBrZXlDb2Rl
ID09IGxhc3RTdG9wcGVkS2V5KSB7bGFzdFN0b3BwZWRLZXkgPSBudWxsOyBlX3ByZXZlbnREZWZh
dWx0KGUpOyByZXR1cm47fQorICAgIGlmICgoKHByZXN0byAmJiAoIWUud2hpY2ggfHwgZS53aGlj
aCA8IDEwKSkgfHwga2h0bWwpICYmIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpKSByZXR1cm47CiAg
ICAgdmFyIGNoID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSA9PSBudWxsID8ga2V5Q29k
ZSA6IGNoYXJDb2RlKTsKLSAgICBpZiAodGhpcy5vcHRpb25zLmVsZWN0cmljQ2hhcnMgJiYgdGhp
cy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzICYmCi0gICAgICAgIHRoaXMub3B0aW9ucy5zbWFydElu
ZGVudCAmJiAhaXNSZWFkT25seSh0aGlzKSAmJgotICAgICAgICB0aGlzLmRvYy5tb2RlLmVsZWN0
cmljQ2hhcnMuaW5kZXhPZihjaCkgPiAtMSkKLSAgICAgIHNldFRpbWVvdXQob3BlcmF0aW9uKGNt
LCBmdW5jdGlvbigpIHtpbmRlbnRMaW5lKGNtLCBjbS5kb2Muc2VsLnRvLmxpbmUsICJzbWFydCIp
O30pLCA3NSk7CiAgICAgaWYgKGhhbmRsZUNoYXJCaW5kaW5nKGNtLCBlLCBjaCkpIHJldHVybjsK
LSAgICBpZiAoaWUgJiYgIWllX2x0OSkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IG51
bGw7CisgICAgaWYgKGllICYmICFpZV91cHRvOCkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlv
biA9IG51bGw7CiAgICAgZmFzdFBvbGwoY20pOwogICB9CgorICAvLyBGT0NVUy9CTFVSIEVWRU5U
UworCiAgIGZ1bmN0aW9uIG9uRm9jdXMoY20pIHsKICAgICBpZiAoY20ub3B0aW9ucy5yZWFkT25s
eSA9PSAibm9jdXJzb3IiKSByZXR1cm47CiAgICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSB7CiAg
ICAgICBzaWduYWwoY20sICJmb2N1cyIsIGNtKTsKICAgICAgIGNtLnN0YXRlLmZvY3VzZWQgPSB0
cnVlOwotICAgICAgaWYgKGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNv
ZGVNaXJyb3ItZm9jdXNlZFxiLykgPT0gLTEpCi0gICAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5j
bGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLWZvY3VzZWQiOworICAgICAgYWRkQ2xhc3MoY20uZGlz
cGxheS53cmFwcGVyLCAiQ29kZU1pcnJvci1mb2N1c2VkIik7CiAgICAgICBpZiAoIWNtLmN1ck9w
KSB7Ci0gICAgICAgIHJlc2V0SW5wdXQoY20sIHRydWUpOworICAgICAgICByZXNldElucHV0KGNt
KTsKICAgICAgICAgaWYgKHdlYmtpdCkgc2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQsIGNtLCB0
cnVlKSwgMCk7IC8vIElzc3VlICMxNzMwCiAgICAgICB9CiAgICAgfQpAQCAtMjE3NSw0MCArMzEw
MCw0OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoY20uc3Rh
dGUuZm9jdXNlZCkgewogICAgICAgc2lnbmFsKGNtLCAiYmx1ciIsIGNtKTsKICAgICAgIGNtLnN0
YXRlLmZvY3VzZWQgPSBmYWxzZTsKLSAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUg
PSBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3Vz
ZWQiLCAiIik7CisgICAgICBybUNsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3It
Zm9jdXNlZCIpOwogICAgIH0KICAgICBjbGVhckludGVydmFsKGNtLmRpc3BsYXkuYmxpbmtlcik7
Ci0gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIGNtLmRv
Yy5zZWwuc2hpZnQgPSBmYWxzZTt9LCAxNTApOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
aWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7fSwgMTUwKTsK
ICAgfQoKKyAgLy8gQ09OVEVYVCBNRU5VIEhBTkRMSU5HCisKICAgdmFyIGRldGVjdGluZ1NlbGVj
dEFsbDsKKyAgLy8gVG8gbWFrZSB0aGUgY29udGV4dCBtZW51IHdvcmssIHdlIG5lZWQgdG8gYnJp
ZWZseSB1bmhpZGUgdGhlCisgIC8vIHRleHRhcmVhIChtYWtpbmcgaXQgYXMgdW5vYnRydXNpdmUg
YXMgcG9zc2libGUpIHRvIGxldCB0aGUKKyAgLy8gcmlnaHQtY2xpY2sgdGFrZSBlZmZlY3Qgb24g
aXQuCiAgIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnUoY20sIGUpIHsKICAgICBpZiAoc2lnbmFsRE9N
RXZlbnQoY20sIGUsICJjb250ZXh0bWVudSIpKSByZXR1cm47Ci0gICAgdmFyIGRpc3BsYXkgPSBj
bS5kaXNwbGF5LCBzZWwgPSBjbS5kb2Muc2VsOworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxh
eTsKICAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB8fCBjb250ZXh0TWVudUluR3V0
dGVyKGNtLCBlKSkgcmV0dXJuOwoKICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKSwg
c2Nyb2xsUG9zID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7Ci0gICAgaWYgKCFwb3MgfHwg
b3BlcmEpIHJldHVybjsgLy8gT3BlcmEgaXMgZGlmZmljdWx0LgorICAgIGlmICghcG9zIHx8IHBy
ZXN0bykgcmV0dXJuOyAvLyBPcGVyYSBpcyBkaWZmaWN1bHQuCgogICAgIC8vIFJlc2V0IHRoZSBj
dXJyZW50IHRleHQgc2VsZWN0aW9uIG9ubHkgaWYgdGhlIGNsaWNrIGlzIGRvbmUgb3V0c2lkZSBv
ZiB0aGUgc2VsZWN0aW9uCiAgICAgLy8gYW5kICdyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUn
IG9wdGlvbiBpcyB0cnVlLgogICAgIHZhciByZXNldCA9IGNtLm9wdGlvbnMucmVzZXRTZWxlY3Rp
b25PbkNvbnRleHRNZW51OwotICAgIGlmIChyZXNldCAmJiAocG9zRXEoc2VsLmZyb20sIHNlbC50
bykgfHwgcG9zTGVzcyhwb3MsIHNlbC5mcm9tKSB8fCAhcG9zTGVzcyhwb3MsIHNlbC50bykpKQot
ICAgICAgb3BlcmF0aW9uKGNtLCBzZXRTZWxlY3Rpb24pKGNtLmRvYywgcG9zLCBwb3MpOworICAg
IGlmIChyZXNldCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPT0gLTEpCisgICAgICBvcGVy
YXRpb24oY20sIHNldFNlbGVjdGlvbikoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zKSwgc2Vs
X2RvbnRTY3JvbGwpOwoKICAgICB2YXIgb2xkQ1NTID0gZGlzcGxheS5pbnB1dC5zdHlsZS5jc3NU
ZXh0OwogICAgIGRpc3BsYXkuaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwog
ICAgIGRpc3BsYXkuaW5wdXQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4ZWQ7IHdpZHRo
OiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIiArIChlLmNsaWVudFkgLSA1KSArCi0gICAgICAi
cHg7IGxlZnQ6ICIgKyAoZS5jbGllbnRYIC0gNSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tn
cm91bmQ6IHdoaXRlOyBvdXRsaW5lOiBub25lOyIgKwotICAgICAgImJvcmRlci13aWR0aDogMDsg
b3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyAtbXMtb3BhY2l0
eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7IjsKKyAgICAgICJweDsgbGVmdDogIiAr
IChlLmNsaWVudFggLSA1KSArICJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogIiArCisg
ICAgICAoaWUgPyAicmdiYSgyNTUsIDI1NSwgMjU1LCAuMDUpIiA6ICJ0cmFuc3BhcmVudCIpICsK
KyAgICAgICI7IG91dGxpbmU6IG5vbmU7IGJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsg
b3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7
IjsKICAgICBmb2N1c0lucHV0KGNtKTsKLSAgICByZXNldElucHV0KGNtLCB0cnVlKTsKKyAgICBy
ZXNldElucHV0KGNtKTsKICAgICAvLyBBZGRzICJTZWxlY3QgYWxsIiB0byBjb250ZXh0IG1lbnUg
aW4gRkYKLSAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykpIGRpc3BsYXkuaW5wdXQudmFs
dWUgPSBkaXNwbGF5LnByZXZJbnB1dCA9ICIgIjsKKyAgICBpZiAoIWNtLnNvbWV0aGluZ1NlbGVj
dGVkKCkpIGRpc3BsYXkuaW5wdXQudmFsdWUgPSBkaXNwbGF5LnByZXZJbnB1dCA9ICIgIjsKCisg
ICAgLy8gU2VsZWN0LWFsbCB3aWxsIGJlIGdyZXllZCBvdXQgaWYgdGhlcmUncyBub3RoaW5nIHRv
IHNlbGVjdCwgc28KKyAgICAvLyB0aGlzIGFkZHMgYSB6ZXJvLXdpZHRoIHNwYWNlIHNvIHRoYXQg
d2UgY2FuIGxhdGVyIGNoZWNrIHdoZXRoZXIKKyAgICAvLyBpdCBnb3Qgc2VsZWN0ZWQuCiAgICAg
ZnVuY3Rpb24gcHJlcGFyZVNlbGVjdEFsbEhhY2soKSB7CiAgICAgICBpZiAoZGlzcGxheS5pbnB1
dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7Ci0gICAgICAgIHZhciBleHR2YWwgPSBkaXNwbGF5
LmlucHV0LnZhbHVlID0gIlx1MjAwYiIgKyAocG9zRXEoc2VsLmZyb20sIHNlbC50bykgPyAiIiA6
IGRpc3BsYXkuaW5wdXQudmFsdWUpOworICAgICAgICB2YXIgZXh0dmFsID0gZGlzcGxheS5pbnB1
dC52YWx1ZSA9ICJcdTIwMGIiICsgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkgPyBkaXNwbGF5Lmlu
cHV0LnZhbHVlIDogIiIpOwogICAgICAgICBkaXNwbGF5LnByZXZJbnB1dCA9ICJcdTIwMGIiOwog
ICAgICAgICBkaXNwbGF5LmlucHV0LnNlbGVjdGlvblN0YXJ0ID0gMTsgZGlzcGxheS5pbnB1dC5z
ZWxlY3Rpb25FbmQgPSBleHR2YWwubGVuZ3RoOwogICAgICAgfQpAQCAtMjIxNiwxNSArMzE1MCwx
NSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBmdW5jdGlvbiByZWhp
ZGUoKSB7CiAgICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZl
IjsKICAgICAgIGRpc3BsYXkuaW5wdXQuc3R5bGUuY3NzVGV4dCA9IG9sZENTUzsKLSAgICAgIGlm
IChpZV9sdDkpIGRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSBkaXNwbGF5LnNjcm9sbGVy
LnNjcm9sbFRvcCA9IHNjcm9sbFBvczsKKyAgICAgIGlmIChpZV91cHRvOCkgZGlzcGxheS5zY3Jv
bGxiYXJWLnNjcm9sbFRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9z
OwogICAgICAgc2xvd1BvbGwoY20pOwoKICAgICAgIC8vIFRyeSB0byBkZXRlY3QgdGhlIHVzZXIg
Y2hvb3Npbmcgc2VsZWN0LWFsbAogICAgICAgaWYgKGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3Rh
cnQgIT0gbnVsbCkgewotICAgICAgICBpZiAoIWllIHx8IGllX2x0OSkgcHJlcGFyZVNlbGVjdEFs
bEhhY2soKTsKKyAgICAgICAgaWYgKCFpZSB8fCBpZV91cHRvOCkgcHJlcGFyZVNlbGVjdEFsbEhh
Y2soKTsKICAgICAgICAgY2xlYXJUaW1lb3V0KGRldGVjdGluZ1NlbGVjdEFsbCk7CiAgICAgICAg
IHZhciBpID0gMCwgcG9sbCA9IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgaWYgKGRpc3BsYXkucHJl
dklucHV0ID09ICIgIiAmJiBkaXNwbGF5LmlucHV0LnNlbGVjdGlvblN0YXJ0ID09IDApCisgICAg
ICAgICAgaWYgKGRpc3BsYXkucHJldklucHV0ID09ICJcdTIwMGIiICYmIGRpc3BsYXkuaW5wdXQu
c2VsZWN0aW9uU3RhcnQgPT0gMCkKICAgICAgICAgICAgIG9wZXJhdGlvbihjbSwgY29tbWFuZHMu
c2VsZWN0QWxsKShjbSk7CiAgICAgICAgICAgZWxzZSBpZiAoaSsrIDwgMTApIGRldGVjdGluZ1Nl
bGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgNTAwKTsKICAgICAgICAgICBlbHNlIHJlc2V0SW5w
dXQoY20pOwpAQCAtMjIzMyw4ICszMTY3LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgICB9CiAgICAgfQoKLSAgICBpZiAoaWUgJiYgIWllX2x0OSkgcHJlcGFyZVNl
bGVjdEFsbEhhY2soKTsKLSAgICBpZiAoY2FwdHVyZU1pZGRsZUNsaWNrKSB7CisgICAgaWYgKGll
ICYmICFpZV91cHRvOCkgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsKKyAgICBpZiAoY2FwdHVyZVJp
Z2h0Q2xpY2spIHsKICAgICAgIGVfc3RvcChlKTsKICAgICAgIHZhciBtb3VzZXVwID0gZnVuY3Rp
b24oKSB7CiAgICAgICAgIG9mZih3aW5kb3csICJtb3VzZXVwIiwgbW91c2V1cCk7CkBAIC0yMjQ2
LDU0ICszMTgwLDcxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0K
ICAgfQoKKyAgZnVuY3Rpb24gY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkgeworICAgIGlmICgh
aGFzSGFuZGxlcihjbSwgImd1dHRlckNvbnRleHRNZW51IikpIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gZ3V0dGVyRXZlbnQoY20sIGUsICJndXR0ZXJDb250ZXh0TWVudSIsIGZhbHNlLCBzaWdu
YWwpOworICB9CisKICAgLy8gVVBEQVRJTkcKCisgIC8vIENvbXB1dGUgdGhlIHBvc2l0aW9uIG9m
IHRoZSBlbmQgb2YgYSBjaGFuZ2UgKGl0cyAndG8nIHByb3BlcnR5CisgIC8vIHJlZmVycyB0byB0
aGUgcHJlLWNoYW5nZSBlbmQpLgogICB2YXIgY2hhbmdlRW5kID0gQ29kZU1pcnJvci5jaGFuZ2VF
bmQgPSBmdW5jdGlvbihjaGFuZ2UpIHsKICAgICBpZiAoIWNoYW5nZS50ZXh0KSByZXR1cm4gY2hh
bmdlLnRvOwogICAgIHJldHVybiBQb3MoY2hhbmdlLmZyb20ubGluZSArIGNoYW5nZS50ZXh0Lmxl
bmd0aCAtIDEsCiAgICAgICAgICAgICAgICBsc3QoY2hhbmdlLnRleHQpLmxlbmd0aCArIChjaGFu
Z2UudGV4dC5sZW5ndGggPT0gMSA/IGNoYW5nZS5mcm9tLmNoIDogMCkpOwogICB9OwoKLSAgLy8g
TWFrZSBzdXJlIGEgcG9zaXRpb24gd2lsbCBiZSB2YWxpZCBhZnRlciB0aGUgZ2l2ZW4gY2hhbmdl
LgotICBmdW5jdGlvbiBjbGlwUG9zdENoYW5nZShkb2MsIGNoYW5nZSwgcG9zKSB7Ci0gICAgaWYg
KCFwb3NMZXNzKGNoYW5nZS5mcm9tLCBwb3MpKSByZXR1cm4gY2xpcFBvcyhkb2MsIHBvcyk7Ci0g
ICAgdmFyIGRpZmYgPSAoY2hhbmdlLnRleHQubGVuZ3RoIC0gMSkgLSAoY2hhbmdlLnRvLmxpbmUg
LSBjaGFuZ2UuZnJvbS5saW5lKTsKLSAgICBpZiAocG9zLmxpbmUgPiBjaGFuZ2UudG8ubGluZSAr
IGRpZmYpIHsKLSAgICAgIHZhciBwcmVMaW5lID0gcG9zLmxpbmUgLSBkaWZmLCBsYXN0TGluZSA9
IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTsKLSAgICAgIGlmIChwcmVMaW5lID4gbGFzdExpbmUp
IHJldHVybiBQb3MobGFzdExpbmUsIGdldExpbmUoZG9jLCBsYXN0TGluZSkudGV4dC5sZW5ndGgp
OwotICAgICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGdldExpbmUoZG9jLCBwcmVMaW5lKS50ZXh0
Lmxlbmd0aCk7Ci0gICAgfQotICAgIGlmIChwb3MubGluZSA9PSBjaGFuZ2UudG8ubGluZSArIGRp
ZmYpCi0gICAgICByZXR1cm4gY2xpcFRvTGVuKHBvcywgbHN0KGNoYW5nZS50ZXh0KS5sZW5ndGgg
KyAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgPyBjaGFuZ2UuZnJvbS5jaCA6IDApICsKLSAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0TGluZShkb2MsIGNoYW5nZS50by5saW5lKS50ZXh0Lmxlbmd0
aCAtIGNoYW5nZS50by5jaCk7Ci0gICAgdmFyIGluc2lkZSA9IHBvcy5saW5lIC0gY2hhbmdlLmZy
b20ubGluZTsKLSAgICByZXR1cm4gY2xpcFRvTGVuKHBvcywgY2hhbmdlLnRleHRbaW5zaWRlXS5s
ZW5ndGggKyAoaW5zaWRlID8gMCA6IGNoYW5nZS5mcm9tLmNoKSk7Ci0gIH0KLQotICAvLyBIaW50
IGNhbiBiZSBudWxsfCJlbmQifCJzdGFydCJ8ImFyb3VuZCJ8e2FuY2hvcixoZWFkfQotICBmdW5j
dGlvbiBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIGhpbnQpIHsKLSAgICBpZiAo
aGludCAmJiB0eXBlb2YgaGludCA9PSAib2JqZWN0IikgLy8gQXNzdW1lZCB0byBiZSB7YW5jaG9y
LCBoZWFkfSBvYmplY3QKLSAgICAgIHJldHVybiB7YW5jaG9yOiBjbGlwUG9zdENoYW5nZShkb2Ms
IGNoYW5nZSwgaGludC5hbmNob3IpLAotICAgICAgICAgICAgICBoZWFkOiBjbGlwUG9zdENoYW5n
ZShkb2MsIGNoYW5nZSwgaGludC5oZWFkKX07Ci0KLSAgICBpZiAoaGludCA9PSAic3RhcnQiKSBy
ZXR1cm4ge2FuY2hvcjogY2hhbmdlLmZyb20sIGhlYWQ6IGNoYW5nZS5mcm9tfTsKLQotICAgIHZh
ciBlbmQgPSBjaGFuZ2VFbmQoY2hhbmdlKTsKLSAgICBpZiAoaGludCA9PSAiYXJvdW5kIikgcmV0
dXJuIHthbmNob3I6IGNoYW5nZS5mcm9tLCBoZWFkOiBlbmR9OwotICAgIGlmIChoaW50ID09ICJl
bmQiKSByZXR1cm4ge2FuY2hvcjogZW5kLCBoZWFkOiBlbmR9OwotCi0gICAgLy8gaGludCBpcyBu
dWxsLCBsZWF2ZSB0aGUgc2VsZWN0aW9uIGFsb25lIGFzIG11Y2ggYXMgcG9zc2libGUKLSAgICB2
YXIgYWRqdXN0UG9zID0gZnVuY3Rpb24ocG9zKSB7Ci0gICAgICBpZiAocG9zTGVzcyhwb3MsIGNo
YW5nZS5mcm9tKSkgcmV0dXJuIHBvczsKLSAgICAgIGlmICghcG9zTGVzcyhjaGFuZ2UudG8sIHBv
cykpIHJldHVybiBlbmQ7Ci0KLSAgICAgIHZhciBsaW5lID0gcG9zLmxpbmUgKyBjaGFuZ2UudGV4
dC5sZW5ndGggLSAoY2hhbmdlLnRvLmxpbmUgLSBjaGFuZ2UuZnJvbS5saW5lKSAtIDEsIGNoID0g
cG9zLmNoOwotICAgICAgaWYgKHBvcy5saW5lID09IGNoYW5nZS50by5saW5lKSBjaCArPSBlbmQu
Y2ggLSBjaGFuZ2UudG8uY2g7Ci0gICAgICByZXR1cm4gUG9zKGxpbmUsIGNoKTsKLSAgICB9Owot
ICAgIHJldHVybiB7YW5jaG9yOiBhZGp1c3RQb3MoZG9jLnNlbC5hbmNob3IpLCBoZWFkOiBhZGp1
c3RQb3MoZG9jLnNlbC5oZWFkKX07CisgIC8vIEFkanVzdCBhIHBvc2l0aW9uIHRvIHJlZmVyIHRv
IHRoZSBwb3N0LWNoYW5nZSBwb3NpdGlvbiBvZiB0aGUKKyAgLy8gc2FtZSB0ZXh0LCBvciB0aGUg
ZW5kIG9mIHRoZSBjaGFuZ2UgaWYgdGhlIGNoYW5nZSBjb3ZlcnMgaXQuCisgIGZ1bmN0aW9uIGFk
anVzdEZvckNoYW5nZShwb3MsIGNoYW5nZSkgeworICAgIGlmIChjbXAocG9zLCBjaGFuZ2UuZnJv
bSkgPCAwKSByZXR1cm4gcG9zOworICAgIGlmIChjbXAocG9zLCBjaGFuZ2UudG8pIDw9IDApIHJl
dHVybiBjaGFuZ2VFbmQoY2hhbmdlKTsKKworICAgIHZhciBsaW5lID0gcG9zLmxpbmUgKyBjaGFu
Z2UudGV4dC5sZW5ndGggLSAoY2hhbmdlLnRvLmxpbmUgLSBjaGFuZ2UuZnJvbS5saW5lKSAtIDEs
IGNoID0gcG9zLmNoOworICAgIGlmIChwb3MubGluZSA9PSBjaGFuZ2UudG8ubGluZSkgY2ggKz0g
Y2hhbmdlRW5kKGNoYW5nZSkuY2ggLSBjaGFuZ2UudG8uY2g7CisgICAgcmV0dXJuIFBvcyhsaW5l
LCBjaCk7CiAgIH0KCisgIGZ1bmN0aW9uIGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5n
ZSkgeworICAgIHZhciBvdXQgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwu
cmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tp
XTsKKyAgICAgIG91dC5wdXNoKG5ldyBSYW5nZShhZGp1c3RGb3JDaGFuZ2UocmFuZ2UuYW5jaG9y
LCBjaGFuZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdEZvckNoYW5nZShyYW5n
ZS5oZWFkLCBjaGFuZ2UpKSk7CisgICAgfQorICAgIHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24o
b3V0LCBkb2Muc2VsLnByaW1JbmRleCk7CisgIH0KKworICBmdW5jdGlvbiBvZmZzZXRQb3MocG9z
LCBvbGQsIG53KSB7CisgICAgaWYgKHBvcy5saW5lID09IG9sZC5saW5lKQorICAgICAgcmV0dXJu
IFBvcyhudy5saW5lLCBwb3MuY2ggLSBvbGQuY2ggKyBudy5jaCk7CisgICAgZWxzZQorICAgICAg
cmV0dXJuIFBvcyhudy5saW5lICsgKHBvcy5saW5lIC0gb2xkLmxpbmUpLCBwb3MuY2gpOworICB9
CisKKyAgLy8gVXNlZCBieSByZXBsYWNlU2VsZWN0aW9ucyB0byBhbGxvdyBtb3ZpbmcgdGhlIHNl
bGVjdGlvbiB0byB0aGUKKyAgLy8gc3RhcnQgb3IgYXJvdW5kIHRoZSByZXBsYWNlZCB0ZXN0LiBI
aW50IG1heSBiZSAic3RhcnQiIG9yICJhcm91bmQiLgorICBmdW5jdGlvbiBjb21wdXRlUmVwbGFj
ZWRTZWwoZG9jLCBjaGFuZ2VzLCBoaW50KSB7CisgICAgdmFyIG91dCA9IFtdOworICAgIHZhciBv
bGRQcmV2ID0gUG9zKGRvYy5maXJzdCwgMCksIG5ld1ByZXYgPSBvbGRQcmV2OworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIGNoYW5nZSA9
IGNoYW5nZXNbaV07CisgICAgICB2YXIgZnJvbSA9IG9mZnNldFBvcyhjaGFuZ2UuZnJvbSwgb2xk
UHJldiwgbmV3UHJldik7CisgICAgICB2YXIgdG8gPSBvZmZzZXRQb3MoY2hhbmdlRW5kKGNoYW5n
ZSksIG9sZFByZXYsIG5ld1ByZXYpOworICAgICAgb2xkUHJldiA9IGNoYW5nZS50bzsKKyAgICAg
IG5ld1ByZXYgPSB0bzsKKyAgICAgIGlmIChoaW50ID09ICJhcm91bmQiKSB7CisgICAgICAgIHZh
ciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldLCBpbnYgPSBjbXAocmFuZ2UuaGVhZCwgcmFuZ2Uu
YW5jaG9yKSA8IDA7CisgICAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShpbnYgPyB0byA6IGZyb20s
IGludiA/IGZyb20gOiB0byk7CisgICAgICB9IGVsc2UgeworICAgICAgICBvdXRbaV0gPSBuZXcg
UmFuZ2UoZnJvbSwgZnJvbSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBuZXcgU2VsZWN0
aW9uKG91dCwgZG9jLnNlbC5wcmltSW5kZXgpOworICB9CisKKyAgLy8gQWxsb3cgImJlZm9yZUNo
YW5nZSIgZXZlbnQgaGFuZGxlcnMgdG8gaW5mbHVlbmNlIGEgY2hhbmdlCiAgIGZ1bmN0aW9uIGZp
bHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdXBkYXRlKSB7CiAgICAgdmFyIG9iaiA9IHsKICAgICAg
IGNhbmNlbGVkOiBmYWxzZSwKQEAgLTIzMTYsMTEgKzMyNjcsMTEgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIHtmcm9tOiBvYmouZnJvbSwgdG86IG9iai50
bywgdGV4dDogb2JqLnRleHQsIG9yaWdpbjogb2JqLm9yaWdpbn07CiAgIH0KCi0gIC8vIFJlcGxh
Y2UgdGhlIHJhbmdlIGZyb20gZnJvbSB0byB0byBieSB0aGUgc3RyaW5ncyBpbiByZXBsYWNlbWVu
dC4KLSAgLy8gY2hhbmdlIGlzIGEge2Zyb20sIHRvLCB0ZXh0IFssIG9yaWdpbl19IG9iamVjdAot
ICBmdW5jdGlvbiBtYWtlQ2hhbmdlKGRvYywgY2hhbmdlLCBzZWxVcGRhdGUsIGlnbm9yZVJlYWRP
bmx5KSB7CisgIC8vIEFwcGx5IGEgY2hhbmdlIHRvIGEgZG9jdW1lbnQsIGFuZCBhZGQgaXQgdG8g
dGhlIGRvY3VtZW50J3MKKyAgLy8gaGlzdG9yeSwgYW5kIHByb3BhZ2F0aW5nIGl0IHRvIGFsbCBs
aW5rZWQgZG9jdW1lbnRzLgorICBmdW5jdGlvbiBtYWtlQ2hhbmdlKGRvYywgY2hhbmdlLCBpZ25v
cmVSZWFkT25seSkgewogICAgIGlmIChkb2MuY20pIHsKLSAgICAgIGlmICghZG9jLmNtLmN1ck9w
KSByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFrZUNoYW5nZSkoZG9jLCBjaGFuZ2UsIHNlbFVw
ZGF0ZSwgaWdub3JlUmVhZE9ubHkpOworICAgICAgaWYgKCFkb2MuY20uY3VyT3ApIHJldHVybiBv
cGVyYXRpb24oZG9jLmNtLCBtYWtlQ2hhbmdlKShkb2MsIGNoYW5nZSwgaWdub3JlUmVhZE9ubHkp
OwogICAgICAgaWYgKGRvYy5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKSByZXR1cm47CiAgICAgfQoK
QEAgLTIzMzMsMTkgKzMyODQsMTcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgLy8gb2YgcmVhZC1vbmx5IHNwYW5zIGluIGl0cyByYW5nZS4KICAgICB2YXIgc3BsaXQg
PSBzYXdSZWFkT25seVNwYW5zICYmICFpZ25vcmVSZWFkT25seSAmJiByZW1vdmVSZWFkT25seVJh
bmdlcyhkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pOwogICAgIGlmIChzcGxpdCkgewotICAg
ICAgZm9yICh2YXIgaSA9IHNwbGl0Lmxlbmd0aCAtIDE7IGkgPj0gMTsgLS1pKQotICAgICAgICBt
YWtlQ2hhbmdlTm9SZWFkb25seShkb2MsIHtmcm9tOiBzcGxpdFtpXS5mcm9tLCB0bzogc3BsaXRb
aV0udG8sIHRleHQ6IFsiIl19KTsKLSAgICAgIGlmIChzcGxpdC5sZW5ndGgpCi0gICAgICAgIG1h
a2VDaGFuZ2VOb1JlYWRvbmx5KGRvYywge2Zyb206IHNwbGl0WzBdLmZyb20sIHRvOiBzcGxpdFsw
XS50bywgdGV4dDogY2hhbmdlLnRleHR9LCBzZWxVcGRhdGUpOworICAgICAgZm9yICh2YXIgaSA9
IHNwbGl0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICBtYWtlQ2hhbmdlSW5uZXIo
ZG9jLCB7ZnJvbTogc3BsaXRbaV0uZnJvbSwgdG86IHNwbGl0W2ldLnRvLCB0ZXh0OiBpID8gWyIi
XSA6IGNoYW5nZS50ZXh0fSk7CiAgICAgfSBlbHNlIHsKLSAgICAgIG1ha2VDaGFuZ2VOb1JlYWRv
bmx5KGRvYywgY2hhbmdlLCBzZWxVcGRhdGUpOworICAgICAgbWFrZUNoYW5nZUlubmVyKGRvYywg
Y2hhbmdlKTsKICAgICB9CiAgIH0KCi0gIGZ1bmN0aW9uIG1ha2VDaGFuZ2VOb1JlYWRvbmx5KGRv
YywgY2hhbmdlLCBzZWxVcGRhdGUpIHsKLSAgICBpZiAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEg
JiYgY2hhbmdlLnRleHRbMF0gPT0gIiIgJiYgcG9zRXEoY2hhbmdlLmZyb20sIGNoYW5nZS50bykp
IHJldHVybjsKLSAgICB2YXIgc2VsQWZ0ZXIgPSBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBj
aGFuZ2UsIHNlbFVwZGF0ZSk7Ci0gICAgYWRkVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRl
ciwgZG9jLmNtID8gZG9jLmNtLmN1ck9wLmlkIDogTmFOKTsKKyAgZnVuY3Rpb24gbWFrZUNoYW5n
ZUlubmVyKGRvYywgY2hhbmdlKSB7CisgICAgaWYgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxICYm
IGNoYW5nZS50ZXh0WzBdID09ICIiICYmIGNtcChjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSA9PSAw
KSByZXR1cm47CisgICAgdmFyIHNlbEFmdGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywg
Y2hhbmdlKTsKKyAgICBhZGRDaGFuZ2VUb0hpc3RvcnkoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBk
b2MuY20gPyBkb2MuY20uY3VyT3AuaWQgOiBOYU4pOwoKICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9j
KGRvYywgY2hhbmdlLCBzZWxBZnRlciwgc3RyZXRjaFNwYW5zT3ZlckNoYW5nZShkb2MsIGNoYW5n
ZSkpOwogICAgIHZhciByZWJhc2VkID0gW107CkBAIC0yMzU5LDE3ICszMzA4LDQxIEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0pOwogICB9CgotICBmdW5jdGlvbiBt
YWtlQ2hhbmdlRnJvbUhpc3RvcnkoZG9jLCB0eXBlKSB7CisgIC8vIFJldmVydCBhIGNoYW5nZSBz
dG9yZWQgaW4gYSBkb2N1bWVudCdzIGhpc3RvcnkuCisgIGZ1bmN0aW9uIG1ha2VDaGFuZ2VGcm9t
SGlzdG9yeShkb2MsIHR5cGUsIGFsbG93U2VsZWN0aW9uT25seSkgewogICAgIGlmIChkb2MuY20g
JiYgZG9jLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpIHJldHVybjsKCi0gICAgdmFyIGhpc3QgPSBk
b2MuaGlzdG9yeTsKLSAgICB2YXIgZXZlbnQgPSAodHlwZSA9PSAidW5kbyIgPyBoaXN0LmRvbmUg
OiBoaXN0LnVuZG9uZSkucG9wKCk7Ci0gICAgaWYgKCFldmVudCkgcmV0dXJuOworICAgIHZhciBo
aXN0ID0gZG9jLmhpc3RvcnksIGV2ZW50LCBzZWxBZnRlciA9IGRvYy5zZWw7CisgICAgdmFyIHNv
dXJjZSA9IHR5cGUgPT0gInVuZG8iID8gaGlzdC5kb25lIDogaGlzdC51bmRvbmUsIGRlc3QgPSB0
eXBlID09ICJ1bmRvIiA/IGhpc3QudW5kb25lIDogaGlzdC5kb25lOworCisgICAgLy8gVmVyaWZ5
IHRoYXQgdGhlcmUgaXMgYSB1c2VhYmxlIGV2ZW50IChzbyB0aGF0IGN0cmwteiB3b24ndAorICAg
IC8vIG5lZWRsZXNzbHkgY2xlYXIgc2VsZWN0aW9uIGV2ZW50cykKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykgeworICAgICAgZXZlbnQgPSBzb3VyY2VbaV07Cisg
ICAgICBpZiAoYWxsb3dTZWxlY3Rpb25Pbmx5ID8gZXZlbnQucmFuZ2VzICYmICFldmVudC5lcXVh
bHMoZG9jLnNlbCkgOiAhZXZlbnQucmFuZ2VzKQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
aWYgKGkgPT0gc291cmNlLmxlbmd0aCkgcmV0dXJuOworICAgIGhpc3QubGFzdE9yaWdpbiA9IGhp
c3QubGFzdFNlbE9yaWdpbiA9IG51bGw7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICBldmVudCA9
IHNvdXJjZS5wb3AoKTsKKyAgICAgIGlmIChldmVudC5yYW5nZXMpIHsKKyAgICAgICAgcHVzaFNl
bGVjdGlvblRvSGlzdG9yeShldmVudCwgZGVzdCk7CisgICAgICAgIGlmIChhbGxvd1NlbGVjdGlv
bk9ubHkgJiYgIWV2ZW50LmVxdWFscyhkb2Muc2VsKSkgeworICAgICAgICAgIHNldFNlbGVjdGlv
bihkb2MsIGV2ZW50LCB7Y2xlYXJSZWRvOiBmYWxzZX0pOworICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBzZWxBZnRlciA9IGV2ZW50OworICAgICAgfQorICAgICAgZWxzZSBi
cmVhazsKKyAgICB9CgotICAgIHZhciBhbnRpID0ge2NoYW5nZXM6IFtdLCBhbmNob3JCZWZvcmU6
IGV2ZW50LmFuY2hvckFmdGVyLCBoZWFkQmVmb3JlOiBldmVudC5oZWFkQWZ0ZXIsCi0gICAgICAg
ICAgICAgICAgYW5jaG9yQWZ0ZXI6IGV2ZW50LmFuY2hvckJlZm9yZSwgaGVhZEFmdGVyOiBldmVu
dC5oZWFkQmVmb3JlLAotICAgICAgICAgICAgICAgIGdlbmVyYXRpb246IGhpc3QuZ2VuZXJhdGlv
bn07Ci0gICAgKHR5cGUgPT0gInVuZG8iID8gaGlzdC51bmRvbmUgOiBoaXN0LmRvbmUpLnB1c2go
YW50aSk7CisgICAgLy8gQnVpbGQgdXAgYSByZXZlcnNlIGNoYW5nZSBvYmplY3QgdG8gYWRkIHRv
IHRoZSBvcHBvc2l0ZSBoaXN0b3J5CisgICAgLy8gc3RhY2sgKHJlZG8gd2hlbiB1bmRvaW5nLCBh
bmQgdmljZSB2ZXJzYSkuCisgICAgdmFyIGFudGlDaGFuZ2VzID0gW107CisgICAgcHVzaFNlbGVj
dGlvblRvSGlzdG9yeShzZWxBZnRlciwgZGVzdCk7CisgICAgZGVzdC5wdXNoKHtjaGFuZ2VzOiBh
bnRpQ2hhbmdlcywgZ2VuZXJhdGlvbjogaGlzdC5nZW5lcmF0aW9ufSk7CiAgICAgaGlzdC5nZW5l
cmF0aW9uID0gZXZlbnQuZ2VuZXJhdGlvbiB8fCArK2hpc3QubWF4R2VuZXJhdGlvbjsKCiAgICAg
dmFyIGZpbHRlciA9IGhhc0hhbmRsZXIoZG9jLCAiYmVmb3JlQ2hhbmdlIikgfHwgZG9jLmNtICYm
IGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3JlQ2hhbmdlIik7CkBAIC0yMzc4LDE3ICszMzUxLDE4
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIGNoYW5nZSA9
IGV2ZW50LmNoYW5nZXNbaV07CiAgICAgICBjaGFuZ2Uub3JpZ2luID0gdHlwZTsKICAgICAgIGlm
IChmaWx0ZXIgJiYgIWZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgZmFsc2UpKSB7Ci0gICAgICAg
ICh0eXBlID09ICJ1bmRvIiA/IGhpc3QuZG9uZSA6IGhpc3QudW5kb25lKS5sZW5ndGggPSAwOwor
ICAgICAgICBzb3VyY2UubGVuZ3RoID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgICAgfQoKLSAg
ICAgIGFudGkuY2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdl
KSk7CisgICAgICBhbnRpQ2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywg
Y2hhbmdlKSk7CgotICAgICAgdmFyIGFmdGVyID0gaSA/IGNvbXB1dGVTZWxBZnRlckNoYW5nZShk
b2MsIGNoYW5nZSwgbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgOiB7YW5jaG9yOiBldmVudC5h
bmNob3JCZWZvcmUsIGhlYWQ6IGV2ZW50LmhlYWRCZWZvcmV9OworICAgICAgdmFyIGFmdGVyID0g
aSA/IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSwgbnVsbCkgOiBsc3Qoc291cmNl
KTsKICAgICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIGFmdGVyLCBtZXJnZU9s
ZFNwYW5zKGRvYywgY2hhbmdlKSk7CisgICAgICBpZiAoZG9jLmNtKSBlbnN1cmVDdXJzb3JWaXNp
YmxlKGRvYy5jbSk7CiAgICAgICB2YXIgcmViYXNlZCA9IFtdOwoKKyAgICAgIC8vIFByb3BhZ2F0
ZSB0byB0aGUgbGlua2VkIGRvY3VtZW50cwogICAgICAgbGlua2VkRG9jcyhkb2MsIGZ1bmN0aW9u
KGRvYywgc2hhcmVkSGlzdCkgewogICAgICAgICBpZiAoIXNoYXJlZEhpc3QgJiYgaW5kZXhPZihy
ZWJhc2VkLCBkb2MuaGlzdG9yeSkgPT0gLTEpIHsKICAgICAgICAgICByZWJhc2VIaXN0KGRvYy5o
aXN0b3J5LCBjaGFuZ2UpOwpAQCAtMjM5OSwxNCArMzM3MywxOSBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgIH0KCisgIC8vIFN1Yi12aWV3cyBuZWVkIHRoZWly
IGxpbmUgbnVtYmVycyBzaGlmdGVkIHdoZW4gdGV4dCBpcyBhZGRlZAorICAvLyBhYm92ZSBvciBi
ZWxvdyB0aGVtIGluIHRoZSBwYXJlbnQgZG9jdW1lbnQuCiAgIGZ1bmN0aW9uIHNoaWZ0RG9jKGRv
YywgZGlzdGFuY2UpIHsKLSAgICBmdW5jdGlvbiBzaGlmdFBvcyhwb3MpIHtyZXR1cm4gUG9zKHBv
cy5saW5lICsgZGlzdGFuY2UsIHBvcy5jaCk7fQogICAgIGRvYy5maXJzdCArPSBkaXN0YW5jZTsK
LSAgICBpZiAoZG9jLmNtKSByZWdDaGFuZ2UoZG9jLmNtLCBkb2MuZmlyc3QsIGRvYy5maXJzdCwg
ZGlzdGFuY2UpOwotICAgIGRvYy5zZWwuaGVhZCA9IHNoaWZ0UG9zKGRvYy5zZWwuaGVhZCk7IGRv
Yy5zZWwuYW5jaG9yID0gc2hpZnRQb3MoZG9jLnNlbC5hbmNob3IpOwotICAgIGRvYy5zZWwuZnJv
bSA9IHNoaWZ0UG9zKGRvYy5zZWwuZnJvbSk7IGRvYy5zZWwudG8gPSBzaGlmdFBvcyhkb2Muc2Vs
LnRvKTsKKyAgICBkb2Muc2VsID0gbmV3IFNlbGVjdGlvbihtYXAoZG9jLnNlbC5yYW5nZXMsIGZ1
bmN0aW9uKHJhbmdlKSB7CisgICAgICByZXR1cm4gbmV3IFJhbmdlKFBvcyhyYW5nZS5hbmNob3Iu
bGluZSArIGRpc3RhbmNlLCByYW5nZS5hbmNob3IuY2gpLAorICAgICAgICAgICAgICAgICAgICAg
ICBQb3MocmFuZ2UuaGVhZC5saW5lICsgZGlzdGFuY2UsIHJhbmdlLmhlYWQuY2gpKTsKKyAgICB9
KSwgZG9jLnNlbC5wcmltSW5kZXgpOworICAgIGlmIChkb2MuY20pIHJlZ0NoYW5nZShkb2MuY20s
IGRvYy5maXJzdCwgZG9jLmZpcnN0IC0gZGlzdGFuY2UsIGRpc3RhbmNlKTsKICAgfQoKKyAgLy8g
TW9yZSBsb3dlci1sZXZlbCBjaGFuZ2UgZnVuY3Rpb24sIGhhbmRsaW5nIG9ubHkgYSBzaW5nbGUg
ZG9jdW1lbnQKKyAgLy8gKG5vdCBsaW5rZWQgb25lcykuCiAgIGZ1bmN0aW9uIG1ha2VDaGFuZ2VT
aW5nbGVEb2MoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzcGFucykgewogICAgIGlmIChkb2MuY20g
JiYgIWRvYy5jbS5jdXJPcCkKICAgICAgIHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYWtlQ2hh
bmdlU2luZ2xlRG9jKShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHNwYW5zKTsKQEAgLTI0MzMsMTYg
KzM0MTIsMTkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgY2hhbmdl
LnJlbW92ZWQgPSBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byk7CgogICAg
IGlmICghc2VsQWZ0ZXIpIHNlbEFmdGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hh
bmdlLCBudWxsKTsKLSAgICBpZiAoZG9jLmNtKSBtYWtlQ2hhbmdlU2luZ2xlRG9jSW5FZGl0b3Io
ZG9jLmNtLCBjaGFuZ2UsIHNwYW5zLCBzZWxBZnRlcik7Ci0gICAgZWxzZSB1cGRhdGVEb2MoZG9j
LCBjaGFuZ2UsIHNwYW5zLCBzZWxBZnRlcik7CisgICAgaWYgKGRvYy5jbSkgbWFrZUNoYW5nZVNp
bmdsZURvY0luRWRpdG9yKGRvYy5jbSwgY2hhbmdlLCBzcGFucyk7CisgICAgZWxzZSB1cGRhdGVE
b2MoZG9jLCBjaGFuZ2UsIHNwYW5zKTsKKyAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWxB
ZnRlciwgc2VsX2RvbnRTY3JvbGwpOwogICB9CgotICBmdW5jdGlvbiBtYWtlQ2hhbmdlU2luZ2xl
RG9jSW5FZGl0b3IoY20sIGNoYW5nZSwgc3BhbnMsIHNlbEFmdGVyKSB7CisgIC8vIEhhbmRsZSB0
aGUgaW50ZXJhY3Rpb24gb2YgYSBjaGFuZ2UgdG8gYSBkb2N1bWVudCB3aXRoIHRoZSBlZGl0b3IK
KyAgLy8gdGhhdCB0aGlzIGRvY3VtZW50IGlzIHBhcnQgb2YuCisgIGZ1bmN0aW9uIG1ha2VDaGFu
Z2VTaW5nbGVEb2NJbkVkaXRvcihjbSwgY2hhbmdlLCBzcGFucykgewogICAgIHZhciBkb2MgPSBj
bS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBmcm9tID0gY2hhbmdlLmZyb20sIHRvID0gY2hh
bmdlLnRvOwoKICAgICB2YXIgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2UsIGNoZWNrV2lkdGhT
dGFydCA9IGZyb20ubGluZTsKICAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7Ci0g
ICAgICBjaGVja1dpZHRoU3RhcnQgPSBsaW5lTm8odmlzdWFsTGluZShkb2MsIGdldExpbmUoZG9j
LCBmcm9tLmxpbmUpKSk7CisgICAgICBjaGVja1dpZHRoU3RhcnQgPSBsaW5lTm8odmlzdWFsTGlu
ZShnZXRMaW5lKGRvYywgZnJvbS5saW5lKSkpOwogICAgICAgZG9jLml0ZXIoY2hlY2tXaWR0aFN0
YXJ0LCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICBpZiAobGluZSA9PSBk
aXNwbGF5Lm1heExpbmUpIHsKICAgICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSB0cnVlOwpA
QCAtMjQ1MSwxNCArMzQzMywxNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICAgIH0pOwogICAgIH0KCi0gICAgaWYgKCFwb3NMZXNzKGRvYy5zZWwuaGVhZCwgY2hhbmdl
LmZyb20pICYmICFwb3NMZXNzKGNoYW5nZS50bywgZG9jLnNlbC5oZWFkKSkKKyAgICBpZiAoZG9j
LnNlbC5jb250YWlucyhjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSA+IC0xKQogICAgICAgY20uY3Vy
T3AuY3Vyc29yQWN0aXZpdHkgPSB0cnVlOwoKLSAgICB1cGRhdGVEb2MoZG9jLCBjaGFuZ2UsIHNw
YW5zLCBzZWxBZnRlciwgZXN0aW1hdGVIZWlnaHQoY20pKTsKKyAgICB1cGRhdGVEb2MoZG9jLCBj
aGFuZ2UsIHNwYW5zLCBlc3RpbWF0ZUhlaWdodChjbSkpOwoKICAgICBpZiAoIWNtLm9wdGlvbnMu
bGluZVdyYXBwaW5nKSB7CiAgICAgICBkb2MuaXRlcihjaGVja1dpZHRoU3RhcnQsIGZyb20ubGlu
ZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCwgZnVuY3Rpb24obGluZSkgewotICAgICAgICB2YXIgbGVu
ID0gbGluZUxlbmd0aChkb2MsIGxpbmUpOworICAgICAgICB2YXIgbGVuID0gbGluZUxlbmd0aChs
aW5lKTsKICAgICAgICAgaWYgKGxlbiA+IGRpc3BsYXkubWF4TGluZUxlbmd0aCkgewogICAgICAg
ICAgIGRpc3BsYXkubWF4TGluZSA9IGxpbmU7CiAgICAgICAgICAgZGlzcGxheS5tYXhMaW5lTGVu
Z3RoID0gbGVuOwpAQCAtMjQ3NSwxOTIgKzM0NTcsNDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CgogICAgIHZhciBsZW5kaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gKHRv
LmxpbmUgLSBmcm9tLmxpbmUpIC0gMTsKICAgICAvLyBSZW1lbWJlciB0aGF0IHRoZXNlIGxpbmVz
IGNoYW5nZWQsIGZvciB1cGRhdGluZyB0aGUgZGlzcGxheQotICAgIHJlZ0NoYW5nZShjbSwgZnJv
bS5saW5lLCB0by5saW5lICsgMSwgbGVuZGlmZik7Ci0KLSAgICBpZiAoaGFzSGFuZGxlcihjbSwg
ImNoYW5nZSIpKSB7Ci0gICAgICB2YXIgY2hhbmdlT2JqID0ge2Zyb206IGZyb20sIHRvOiB0bywK
LSAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogY2hhbmdlLnRleHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgIHJlbW92ZWQ6IGNoYW5nZS5yZW1vdmVkLAotICAgICAgICAgICAgICAgICAgICAg
ICBvcmlnaW46IGNoYW5nZS5vcmlnaW59OwotICAgICAgaWYgKGNtLmN1ck9wLnRleHRDaGFuZ2Vk
KSB7Ci0gICAgICAgIGZvciAodmFyIGN1ciA9IGNtLmN1ck9wLnRleHRDaGFuZ2VkOyBjdXIubmV4
dDsgY3VyID0gY3VyLm5leHQpIHt9Ci0gICAgICAgIGN1ci5uZXh0ID0gY2hhbmdlT2JqOwotICAg
ICAgfSBlbHNlIGNtLmN1ck9wLnRleHRDaGFuZ2VkID0gY2hhbmdlT2JqOwotICAgIH0KKyAgICBp
ZiAoZnJvbS5saW5lID09IHRvLmxpbmUgJiYgY2hhbmdlLnRleHQubGVuZ3RoID09IDEgJiYgIWlz
V2hvbGVMaW5lVXBkYXRlKGNtLmRvYywgY2hhbmdlKSkKKyAgICAgIHJlZ0xpbmVDaGFuZ2UoY20s
IGZyb20ubGluZSwgInRleHQiKTsKKyAgICBlbHNlCisgICAgICByZWdDaGFuZ2UoY20sIGZyb20u
bGluZSwgdG8ubGluZSArIDEsIGxlbmRpZmYpOworCisgICAgaWYgKGhhc0hhbmRsZXIoY20sICJj
aGFuZ2UiKSB8fCBoYXNIYW5kbGVyKGNtLCAiY2hhbmdlcyIpKQorICAgICAgKGNtLmN1ck9wLmNo
YW5nZU9ianMgfHwgKGNtLmN1ck9wLmNoYW5nZU9ianMgPSBbXSkpLnB1c2goeworICAgICAgICBm
cm9tOiBmcm9tLCB0bzogdG8sCisgICAgICAgIHRleHQ6IGNoYW5nZS50ZXh0LAorICAgICAgICBy
ZW1vdmVkOiBjaGFuZ2UucmVtb3ZlZCwKKyAgICAgICAgb3JpZ2luOiBjaGFuZ2Uub3JpZ2luCisg
ICAgICB9KTsKICAgfQoKICAgZnVuY3Rpb24gcmVwbGFjZVJhbmdlKGRvYywgY29kZSwgZnJvbSwg
dG8sIG9yaWdpbikgewogICAgIGlmICghdG8pIHRvID0gZnJvbTsKLSAgICBpZiAocG9zTGVzcyh0
bywgZnJvbSkpIHsgdmFyIHRtcCA9IHRvOyB0byA9IGZyb207IGZyb20gPSB0bXA7IH0KKyAgICBp
ZiAoY21wKHRvLCBmcm9tKSA8IDApIHsgdmFyIHRtcCA9IHRvOyB0byA9IGZyb207IGZyb20gPSB0
bXA7IH0KICAgICBpZiAodHlwZW9mIGNvZGUgPT0gInN0cmluZyIpIGNvZGUgPSBzcGxpdExpbmVz
KGNvZGUpOwotICAgIG1ha2VDaGFuZ2UoZG9jLCB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBj
b2RlLCBvcmlnaW46IG9yaWdpbn0sIG51bGwpOwotICB9Ci0KLSAgLy8gUE9TSVRJT04gT0JKRUNU
Ci0KLSAgZnVuY3Rpb24gUG9zKGxpbmUsIGNoKSB7Ci0gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9m
IFBvcykpIHJldHVybiBuZXcgUG9zKGxpbmUsIGNoKTsKLSAgICB0aGlzLmxpbmUgPSBsaW5lOyB0
aGlzLmNoID0gY2g7Ci0gIH0KLSAgQ29kZU1pcnJvci5Qb3MgPSBQb3M7Ci0KLSAgZnVuY3Rpb24g
cG9zRXEoYSwgYikge3JldHVybiBhLmxpbmUgPT0gYi5saW5lICYmIGEuY2ggPT0gYi5jaDt9Ci0g
IGZ1bmN0aW9uIHBvc0xlc3MoYSwgYikge3JldHVybiBhLmxpbmUgPCBiLmxpbmUgfHwgKGEubGlu
ZSA9PSBiLmxpbmUgJiYgYS5jaCA8IGIuY2gpO30KLSAgZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0
dXJuIFBvcyh4LmxpbmUsIHguY2gpO30KLQotICAvLyBTRUxFQ1RJT04KLQotICBmdW5jdGlvbiBj
bGlwTGluZShkb2MsIG4pIHtyZXR1cm4gTWF0aC5tYXgoZG9jLmZpcnN0LCBNYXRoLm1pbihuLCBk
b2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpKTt9Ci0gIGZ1bmN0aW9uIGNsaXBQb3MoZG9jLCBwb3Mp
IHsKLSAgICBpZiAocG9zLmxpbmUgPCBkb2MuZmlyc3QpIHJldHVybiBQb3MoZG9jLmZpcnN0LCAw
KTsKLSAgICB2YXIgbGFzdCA9IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTsKLSAgICBpZiAocG9z
LmxpbmUgPiBsYXN0KSByZXR1cm4gUG9zKGxhc3QsIGdldExpbmUoZG9jLCBsYXN0KS50ZXh0Lmxl
bmd0aCk7Ci0gICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGdldExpbmUoZG9jLCBwb3MubGluZSku
dGV4dC5sZW5ndGgpOwotICB9Ci0gIGZ1bmN0aW9uIGNsaXBUb0xlbihwb3MsIGxpbmVsZW4pIHsK
LSAgICB2YXIgY2ggPSBwb3MuY2g7Ci0gICAgaWYgKGNoID09IG51bGwgfHwgY2ggPiBsaW5lbGVu
KSByZXR1cm4gUG9zKHBvcy5saW5lLCBsaW5lbGVuKTsKLSAgICBlbHNlIGlmIChjaCA8IDApIHJl
dHVybiBQb3MocG9zLmxpbmUsIDApOwotICAgIGVsc2UgcmV0dXJuIHBvczsKLSAgfQotICBmdW5j
dGlvbiBpc0xpbmUoZG9jLCBsKSB7cmV0dXJuIGwgPj0gZG9jLmZpcnN0ICYmIGwgPCBkb2MuZmly
c3QgKyBkb2Muc2l6ZTt9Ci0KLSAgLy8gSWYgc2hpZnQgaXMgaGVsZCwgdGhpcyB3aWxsIG1vdmUg
dGhlIHNlbGVjdGlvbiBhbmNob3IuIE90aGVyd2lzZSwKLSAgLy8gaXQnbGwgc2V0IHRoZSB3aG9s
ZSBzZWxlY3Rpb24uCi0gIGZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbihkb2MsIHBvcywgb3RoZXIs
IGJpYXMpIHsKLSAgICBpZiAoZG9jLnNlbC5zaGlmdCB8fCBkb2Muc2VsLmV4dGVuZCkgewotICAg
ICAgdmFyIGFuY2hvciA9IGRvYy5zZWwuYW5jaG9yOwotICAgICAgaWYgKG90aGVyKSB7Ci0gICAg
ICAgIHZhciBwb3NCZWZvcmUgPSBwb3NMZXNzKHBvcywgYW5jaG9yKTsKLSAgICAgICAgaWYgKHBv
c0JlZm9yZSAhPSBwb3NMZXNzKG90aGVyLCBhbmNob3IpKSB7Ci0gICAgICAgICAgYW5jaG9yID0g
cG9zOwotICAgICAgICAgIHBvcyA9IG90aGVyOwotICAgICAgICB9IGVsc2UgaWYgKHBvc0JlZm9y
ZSAhPSBwb3NMZXNzKHBvcywgb3RoZXIpKSB7Ci0gICAgICAgICAgcG9zID0gb3RoZXI7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICAgIHNldFNlbGVjdGlvbihkb2MsIGFuY2hvciwgcG9zLCBiaWFz
KTsKLSAgICB9IGVsc2UgewotICAgICAgc2V0U2VsZWN0aW9uKGRvYywgcG9zLCBvdGhlciB8fCBw
b3MsIGJpYXMpOwotICAgIH0KLSAgICBpZiAoZG9jLmNtKSBkb2MuY20uY3VyT3AudXNlclNlbENo
YW5nZSA9IHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9j
LCBhbmNob3IsIGhlYWQpIHsKLSAgICB2YXIgb2JqID0ge2FuY2hvcjogYW5jaG9yLCBoZWFkOiBo
ZWFkfTsKLSAgICBzaWduYWwoZG9jLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIiwgZG9jLCBvYmop
OwotICAgIGlmIChkb2MuY20pIHNpZ25hbChkb2MuY20sICJiZWZvcmVTZWxlY3Rpb25DaGFuZ2Ui
LCBkb2MuY20sIG9iaik7Ci0gICAgb2JqLmFuY2hvciA9IGNsaXBQb3MoZG9jLCBvYmouYW5jaG9y
KTsgb2JqLmhlYWQgPSBjbGlwUG9zKGRvYywgb2JqLmhlYWQpOwotICAgIHJldHVybiBvYmo7Ci0g
IH0KLQotICAvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbi4gTGFzdCB0d28gYXJncyBhcmUgb25seSB1
c2VkIGJ5Ci0gIC8vIHVwZGF0ZURvYywgc2luY2UgdGhleSBoYXZlIHRvIGJlIGV4cHJlc3NlZCBp
biB0aGUgbGluZQotICAvLyBudW1iZXJzIGJlZm9yZSB0aGUgdXBkYXRlLgotICBmdW5jdGlvbiBz
ZXRTZWxlY3Rpb24oZG9jLCBhbmNob3IsIGhlYWQsIGJpYXMsIGNoZWNrQXRvbWljKSB7Ci0gICAg
aWYgKCFjaGVja0F0b21pYyAmJiBoYXNIYW5kbGVyKGRvYywgImJlZm9yZVNlbGVjdGlvbkNoYW5n
ZSIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgImJlZm9yZVNlbGVjdGlvbkNoYW5n
ZSIpKSB7Ci0gICAgICB2YXIgZmlsdGVyZWQgPSBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBh
bmNob3IsIGhlYWQpOwotICAgICAgaGVhZCA9IGZpbHRlcmVkLmhlYWQ7Ci0gICAgICBhbmNob3Ig
PSBmaWx0ZXJlZC5hbmNob3I7Ci0gICAgfQotCi0gICAgdmFyIHNlbCA9IGRvYy5zZWw7Ci0gICAg
c2VsLmdvYWxDb2x1bW4gPSBudWxsOwotICAgIGlmIChiaWFzID09IG51bGwpIGJpYXMgPSBwb3NM
ZXNzKGhlYWQsIHNlbC5oZWFkKSA/IC0xIDogMTsKLSAgICAvLyBTa2lwIG92ZXIgYXRvbWljIHNw
YW5zLgotICAgIGlmIChjaGVja0F0b21pYyB8fCAhcG9zRXEoYW5jaG9yLCBzZWwuYW5jaG9yKSkK
LSAgICAgIGFuY2hvciA9IHNraXBBdG9taWMoZG9jLCBhbmNob3IsIGJpYXMsIGNoZWNrQXRvbWlj
ICE9ICJwdXNoIik7Ci0gICAgaWYgKGNoZWNrQXRvbWljIHx8ICFwb3NFcShoZWFkLCBzZWwuaGVh
ZCkpCi0gICAgICBoZWFkID0gc2tpcEF0b21pYyhkb2MsIGhlYWQsIGJpYXMsIGNoZWNrQXRvbWlj
ICE9ICJwdXNoIik7Ci0KLSAgICBpZiAocG9zRXEoc2VsLmFuY2hvciwgYW5jaG9yKSAmJiBwb3NF
cShzZWwuaGVhZCwgaGVhZCkpIHJldHVybjsKLQotICAgIHNlbC5hbmNob3IgPSBhbmNob3I7IHNl
bC5oZWFkID0gaGVhZDsKLSAgICB2YXIgaW52ID0gcG9zTGVzcyhoZWFkLCBhbmNob3IpOwotICAg
IHNlbC5mcm9tID0gaW52ID8gaGVhZCA6IGFuY2hvcjsKLSAgICBzZWwudG8gPSBpbnYgPyBhbmNo
b3IgOiBoZWFkOwotCi0gICAgaWYgKGRvYy5jbSkKLSAgICAgIGRvYy5jbS5jdXJPcC51cGRhdGVJ
bnB1dCA9IGRvYy5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0KLSAgICAgICAgZG9jLmNtLmN1
ck9wLmN1cnNvckFjdGl2aXR5ID0gdHJ1ZTsKLQotICAgIHNpZ25hbExhdGVyKGRvYywgImN1cnNv
ckFjdGl2aXR5IiwgZG9jKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlQ2hlY2tTZWxlY3Rpb24oY20p
IHsKLSAgICBzZXRTZWxlY3Rpb24oY20uZG9jLCBjbS5kb2Muc2VsLmZyb20sIGNtLmRvYy5zZWwu
dG8sIG51bGwsICJwdXNoIik7Ci0gIH0KLQotICBmdW5jdGlvbiBza2lwQXRvbWljKGRvYywgcG9z
LCBiaWFzLCBtYXlDbGVhcikgewotICAgIHZhciBmbGlwcGVkID0gZmFsc2UsIGN1clBvcyA9IHBv
czsKLSAgICB2YXIgZGlyID0gYmlhcyB8fCAxOwotICAgIGRvYy5jYW50RWRpdCA9IGZhbHNlOwot
ICAgIHNlYXJjaDogZm9yICg7OykgewotICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgY3Vy
UG9zLmxpbmUpOwotICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIHsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
dmFyIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXSwgbSA9IHNwLm1hcmtlcjsKLSAgICAgICAgICBp
ZiAoKHNwLmZyb20gPT0gbnVsbCB8fCAobS5pbmNsdXNpdmVMZWZ0ID8gc3AuZnJvbSA8PSBjdXJQ
b3MuY2ggOiBzcC5mcm9tIDwgY3VyUG9zLmNoKSkgJiYKLSAgICAgICAgICAgICAgKHNwLnRvID09
IG51bGwgfHwgKG0uaW5jbHVzaXZlUmlnaHQgPyBzcC50byA+PSBjdXJQb3MuY2ggOiBzcC50byA+
IGN1clBvcy5jaCkpKSB7Ci0gICAgICAgICAgICBpZiAobWF5Q2xlYXIpIHsKLSAgICAgICAgICAg
ICAgc2lnbmFsKG0sICJiZWZvcmVDdXJzb3JFbnRlciIpOwotICAgICAgICAgICAgICBpZiAobS5l
eHBsaWNpdGx5Q2xlYXJlZCkgewotICAgICAgICAgICAgICAgIGlmICghbGluZS5tYXJrZWRTcGFu
cykgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZWxzZSB7LS1pOyBjb250aW51ZTt9Ci0gICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghbS5hdG9taWMpIGNvbnRp
bnVlOwotICAgICAgICAgICAgdmFyIG5ld1BvcyA9IG0uZmluZCgpW2RpciA8IDAgPyAiZnJvbSIg
OiAidG8iXTsKLSAgICAgICAgICAgIGlmIChwb3NFcShuZXdQb3MsIGN1clBvcykpIHsKLSAgICAg
ICAgICAgICAgbmV3UG9zLmNoICs9IGRpcjsKLSAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5jaCA8
IDApIHsKLSAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUgPiBkb2MuZmlyc3QpIG5ld1Bv
cyA9IGNsaXBQb3MoZG9jLCBQb3MobmV3UG9zLmxpbmUgLSAxKSk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBuZXdQb3MgPSBudWxsOwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld1Bvcy5jaCA+
IGxpbmUudGV4dC5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUgPCBk
b2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpIG5ld1BvcyA9IFBvcyhuZXdQb3MubGluZSArIDEsIDAp
OwotICAgICAgICAgICAgICAgIGVsc2UgbmV3UG9zID0gbnVsbDsKLSAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICBpZiAoIW5ld1BvcykgewotICAgICAgICAgICAgICAgIGlmIChmbGlwcGVk
KSB7Ci0gICAgICAgICAgICAgICAgICAvLyBEcml2ZW4gaW4gYSBjb3JuZXIgLS0gbm8gdmFsaWQg
Y3Vyc29yIHBvc2l0aW9uIGZvdW5kIGF0IGFsbAotICAgICAgICAgICAgICAgICAgLy8gLS0gdHJ5
IGFnYWluICp3aXRoKiBjbGVhcmluZywgaWYgd2UgZGlkbid0IGFscmVhZHkKLSAgICAgICAgICAg
ICAgICAgIGlmICghbWF5Q2xlYXIpIHJldHVybiBza2lwQXRvbWljKGRvYywgcG9zLCBiaWFzLCB0
cnVlKTsKLSAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdHVybiBvZmYgZWRpdGluZyB1
bnRpbCBmdXJ0aGVyIG5vdGljZSwgYW5kIHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGRvYwotICAg
ICAgICAgICAgICAgICAgZG9jLmNhbnRFZGl0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIHJl
dHVybiBQb3MoZG9jLmZpcnN0LCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZmxpcHBlZCA9IHRydWU7IG5ld1BvcyA9IHBvczsgZGlyID0gLWRpcjsKLSAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyUG9zID0gbmV3UG9zOwotICAgICAg
ICAgICAgY29udGludWUgc2VhcmNoOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgcmV0dXJuIGN1clBvczsKLSAgICB9CisgICAgbWFrZUNoYW5nZShkb2MsIHtmcm9tOiBm
cm9tLCB0bzogdG8sIHRleHQ6IGNvZGUsIG9yaWdpbjogb3JpZ2lufSk7CiAgIH0KCi0gIC8vIFND
Uk9MTElORworICAvLyBTQ1JPTExJTkcgVEhJTkdTIElOVE8gVklFVwoKLSAgZnVuY3Rpb24gc2Ny
b2xsQ3Vyc29ySW50b1ZpZXcoY20pIHsKLSAgICB2YXIgY29vcmRzID0gc2Nyb2xsUG9zSW50b1Zp
ZXcoY20sIGNtLmRvYy5zZWwuaGVhZCwgbnVsbCwgY20ub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJn
aW4pOwotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgcmV0dXJuOwotICAgIHZhciBkaXNwbGF5
ID0gY20uZGlzcGxheSwgYm94ID0gZ2V0UmVjdChkaXNwbGF5LnNpemVyKSwgZG9TY3JvbGwgPSBu
dWxsOworICAvLyBJZiBhbiBlZGl0b3Igc2l0cyBvbiB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUg
d2luZG93LCBwYXJ0aWFsbHkKKyAgLy8gc2Nyb2xsZWQgb3V0IG9mIHZpZXcsIHRoaXMgZW5zdXJl
cyB0aGF0IHRoZSBjdXJzb3IgaXMgdmlzaWJsZS4KKyAgZnVuY3Rpb24gbWF5YmVTY3JvbGxXaW5k
b3coY20sIGNvb3JkcykgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgYm94ID0gZGlz
cGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZG9TY3JvbGwgPSBudWxsOwogICAg
IGlmIChjb29yZHMudG9wICsgYm94LnRvcCA8IDApIGRvU2Nyb2xsID0gdHJ1ZTsKICAgICBlbHNl
IGlmIChjb29yZHMuYm90dG9tICsgYm94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIGRvU2Nyb2xsID0gZmFsc2U7CiAg
ICAgaWYgKGRvU2Nyb2xsICE9IG51bGwgJiYgIXBoYW50b20pIHsKLSAgICAgIHZhciBoaWRkZW4g
PSBkaXNwbGF5LmN1cnNvci5zdHlsZS5kaXNwbGF5ID09ICJub25lIjsKLSAgICAgIGlmIChoaWRk
ZW4pIHsKLSAgICAgICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAg
ICBkaXNwbGF5LmN1cnNvci5zdHlsZS5sZWZ0ID0gY29vcmRzLmxlZnQgKyAicHgiOwotICAgICAg
ICBkaXNwbGF5LmN1cnNvci5zdHlsZS50b3AgPSAoY29vcmRzLnRvcCAtIGRpc3BsYXkudmlld09m
ZnNldCkgKyAicHgiOwotICAgICAgfQotICAgICAgZGlzcGxheS5jdXJzb3Iuc2Nyb2xsSW50b1Zp
ZXcoZG9TY3JvbGwpOwotICAgICAgaWYgKGhpZGRlbikgZGlzcGxheS5jdXJzb3Iuc3R5bGUuZGlz
cGxheSA9ICJub25lIjsKKyAgICAgIHZhciBzY3JvbGxOb2RlID0gZWx0KCJkaXYiLCAiXHUyMDBi
IiwgbnVsbCwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAiICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjb29yZHMudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0IC0gcGFkZGluZ1RvcChj
bS5kaXNwbGF5KSkgKyAicHg7IGhlaWdodDogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY29vcmRzLmJvdHRvbSAtIGNvb3Jkcy50b3AgKyBzY3JvbGxlckN1dE9mZikgKyAicHg7IGxl
ZnQ6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzLmxlZnQgKyAicHg7IHdp
ZHRoOiAycHg7Iik7CisgICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5hcHBlbmRDaGlsZChzY3Jv
bGxOb2RlKTsKKyAgICAgIHNjcm9sbE5vZGUuc2Nyb2xsSW50b1ZpZXcoZG9TY3JvbGwpOworICAg
ICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoc2Nyb2xsTm9kZSk7CiAgICAgfQog
ICB9CgorICAvLyBTY3JvbGwgYSBnaXZlbiBwb3NpdGlvbiBpbnRvIHZpZXcgKGltbWVkaWF0ZWx5
KSwgdmVyaWZ5aW5nIHRoYXQKKyAgLy8gaXQgYWN0dWFsbHkgYmVjYW1lIHZpc2libGUgKGFzIGxp
bmUgaGVpZ2h0cyBhcmUgYWNjdXJhdGVseQorICAvLyBtZWFzdXJlZCwgdGhlIHBvc2l0aW9uIG9m
IHNvbWV0aGluZyBtYXkgJ2RyaWZ0JyBkdXJpbmcgZHJhd2luZykuCiAgIGZ1bmN0aW9uIHNjcm9s
bFBvc0ludG9WaWV3KGNtLCBwb3MsIGVuZCwgbWFyZ2luKSB7CiAgICAgaWYgKG1hcmdpbiA9PSBu
dWxsKSBtYXJnaW4gPSAwOwogICAgIGZvciAoOzspIHsKQEAgLTI2ODMsMTYgKzM1MjIsMjIgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CgorICAvLyBTY3Jv
bGwgYSBnaXZlbiBzZXQgb2YgY29vcmRpbmF0ZXMgaW50byB2aWV3IChpbW1lZGlhdGVseSkuCiAg
IGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KGNtLCB4MSwgeTEsIHgyLCB5MikgewogICAgIHZhciBz
Y3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHgxLCB5MSwgeDIsIHkyKTsKICAgICBp
ZiAoc2Nyb2xsUG9zLnNjcm9sbFRvcCAhPSBudWxsKSBzZXRTY3JvbGxUb3AoY20sIHNjcm9sbFBv
cy5zY3JvbGxUb3ApOwogICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsTGVmdCAhPSBudWxsKSBzZXRT
Y3JvbGxMZWZ0KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCk7CiAgIH0KCisgIC8vIENhbGN1bGF0
ZSBhIG5ldyBzY3JvbGwgcG9zaXRpb24gbmVlZGVkIHRvIHNjcm9sbCB0aGUgZ2l2ZW4KKyAgLy8g
cmVjdGFuZ2xlIGludG8gdmlldy4gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBzY3JvbGxUb3AgYW5k
CisgIC8vIHNjcm9sbExlZnQgcHJvcGVydGllcy4gV2hlbiB0aGVzZSBhcmUgdW5kZWZpbmVkLCB0
aGUKKyAgLy8gdmVydGljYWwvaG9yaXpvbnRhbCBwb3NpdGlvbiBkb2VzIG5vdCBuZWVkIHRvIGJl
IGFkanVzdGVkLgogICBmdW5jdGlvbiBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHgxLCB5MSwgeDIs
IHkyKSB7CiAgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzbmFwTWFyZ2luID0gdGV4dEhl
aWdodChjbS5kaXNwbGF5KTsKICAgICBpZiAoeTEgPCAwKSB5MSA9IDA7Ci0gICAgdmFyIHNjcmVl
biA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYsIHNjcmVl
bnRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wLCByZXN1bHQgPSB7fTsKKyAgICB2YXIg
c2NyZWVudG9wID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsVG9wICE9IG51bGwgPyBjbS5j
dXJPcC5zY3JvbGxUb3AgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDsKKyAgICB2YXIgc2Ny
ZWVuID0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQgLSBzY3JvbGxlckN1dE9mZiwgcmVz
dWx0ID0ge307CiAgICAgdmFyIGRvY0JvdHRvbSA9IGNtLmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVy
dChkaXNwbGF5KTsKICAgICB2YXIgYXRUb3AgPSB5MSA8IHNuYXBNYXJnaW4sIGF0Qm90dG9tID0g
eTIgPiBkb2NCb3R0b20gLSBzbmFwTWFyZ2luOwogICAgIGlmICh5MSA8IHNjcmVlbnRvcCkgewpA
QCAtMjcwMiw3ICszNTQ3LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICBpZiAobmV3VG9wICE9IHNjcmVlbnRvcCkgcmVzdWx0LnNjcm9sbFRvcCA9IG5ld1RvcDsK
ICAgICB9CgotICAgIHZhciBzY3JlZW53ID0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCAt
IHNjcm9sbGVyQ3V0T2ZmLCBzY3JlZW5sZWZ0ID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0
OworICAgIHZhciBzY3JlZW5sZWZ0ID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsTGVmdCAh
PSBudWxsID8gY20uY3VyT3Auc2Nyb2xsTGVmdCA6IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVm
dDsKKyAgICB2YXIgc2NyZWVudyA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggLSBzY3Jv
bGxlckN1dE9mZjsKICAgICB4MSArPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7IHgyICs9
IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aDsKICAgICB2YXIgZ3V0dGVydyA9IGRpc3BsYXku
Z3V0dGVycy5vZmZzZXRXaWR0aDsKICAgICB2YXIgYXRMZWZ0ID0geDEgPCBndXR0ZXJ3ICsgMTA7
CkBAIC0yNzE1LDMyICszNTYxLDcwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KCi0gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbFBvcyhj
bSwgbGVmdCwgdG9wKSB7Ci0gICAgY20uY3VyT3AudXBkYXRlU2Nyb2xsUG9zID0ge3Njcm9sbExl
ZnQ6IGxlZnQgPT0gbnVsbCA/IGNtLmRvYy5zY3JvbGxMZWZ0IDogbGVmdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiB0b3AgPT0gbnVsbCA/IGNtLmRvYy5zY3Jv
bGxUb3AgOiB0b3B9OworICAvLyBTdG9yZSBhIHJlbGF0aXZlIGFkanVzdG1lbnQgdG8gdGhlIHNj
cm9sbCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudAorICAvLyBvcGVyYXRpb24gKHRvIGJlIGFwcGxp
ZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGZpbmlzaGVzKS4KKyAgZnVuY3Rpb24gYWRkVG9TY3JvbGxQ
b3MoY20sIGxlZnQsIHRvcCkgeworICAgIGlmIChsZWZ0ICE9IG51bGwgfHwgdG9wICE9IG51bGwp
IHJlc29sdmVTY3JvbGxUb1BvcyhjbSk7CisgICAgaWYgKGxlZnQgIT0gbnVsbCkKKyAgICAgIGNt
LmN1ck9wLnNjcm9sbExlZnQgPSAoY20uY3VyT3Auc2Nyb2xsTGVmdCA9PSBudWxsID8gY20uZG9j
LnNjcm9sbExlZnQgOiBjbS5jdXJPcC5zY3JvbGxMZWZ0KSArIGxlZnQ7CisgICAgaWYgKHRvcCAh
PSBudWxsKQorICAgICAgY20uY3VyT3Auc2Nyb2xsVG9wID0gKGNtLmN1ck9wLnNjcm9sbFRvcCA9
PSBudWxsID8gY20uZG9jLnNjcm9sbFRvcCA6IGNtLmN1ck9wLnNjcm9sbFRvcCkgKyB0b3A7Cisg
IH0KKworICAvLyBNYWtlIHN1cmUgdGhhdCBhdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb24gdGhl
IGN1cnJlbnQgY3Vyc29yIGlzCisgIC8vIHNob3duLgorICBmdW5jdGlvbiBlbnN1cmVDdXJzb3JW
aXNpYmxlKGNtKSB7CisgICAgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTsKKyAgICB2YXIgY3VyID0g
Y20uZ2V0Q3Vyc29yKCksIGZyb20gPSBjdXIsIHRvID0gY3VyOworICAgIGlmICghY20ub3B0aW9u
cy5saW5lV3JhcHBpbmcpIHsKKyAgICAgIGZyb20gPSBjdXIuY2ggPyBQb3MoY3VyLmxpbmUsIGN1
ci5jaCAtIDEpIDogY3VyOworICAgICAgdG8gPSBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpOwor
ICAgIH0KKyAgICBjbS5jdXJPcC5zY3JvbGxUb1BvcyA9IHtmcm9tOiBmcm9tLCB0bzogdG8sIG1h
cmdpbjogY20ub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4sIGlzQ3Vyc29yOiB0cnVlfTsKICAg
fQoKLSAgZnVuY3Rpb24gYWRkVG9TY3JvbGxQb3MoY20sIGxlZnQsIHRvcCkgewotICAgIHZhciBw
b3MgPSBjbS5jdXJPcC51cGRhdGVTY3JvbGxQb3MgfHwgKGNtLmN1ck9wLnVwZGF0ZVNjcm9sbFBv
cyA9IHtzY3JvbGxMZWZ0OiBjbS5kb2Muc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wOiBjbS5kb2Muc2Ny
b2xsVG9wfSk7Ci0gICAgdmFyIHNjcm9sbCA9IGNtLmRpc3BsYXkuc2Nyb2xsZXI7Ci0gICAgcG9z
LnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbC5zY3JvbGxIZWlnaHQgLSBz
Y3JvbGwuY2xpZW50SGVpZ2h0LCBwb3Muc2Nyb2xsVG9wICsgdG9wKSk7Ci0gICAgcG9zLnNjcm9s
bExlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGwuc2Nyb2xsV2lkdGggLSBzY3JvbGwu
Y2xpZW50V2lkdGgsIHBvcy5zY3JvbGxMZWZ0ICsgbGVmdCkpOworICAvLyBXaGVuIGFuIG9wZXJh
dGlvbiBoYXMgaXRzIHNjcm9sbFRvUG9zIHByb3BlcnR5IHNldCwgYW5kIGFub3RoZXIKKyAgLy8g
c2Nyb2xsIGFjdGlvbiBpcyBhcHBsaWVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb24s
IHRoaXMKKyAgLy8gJ3NpbXVsYXRlcycgc2Nyb2xsaW5nIHRoYXQgcG9zaXRpb24gaW50byB2aWV3
IGluIGEgY2hlYXAgd2F5LCBzbworICAvLyB0aGF0IHRoZSBlZmZlY3Qgb2YgaW50ZXJtZWRpYXRl
IHNjcm9sbCBjb21tYW5kcyBpcyBub3QgaWdub3JlZC4KKyAgZnVuY3Rpb24gcmVzb2x2ZVNjcm9s
bFRvUG9zKGNtKSB7CisgICAgdmFyIHJhbmdlID0gY20uY3VyT3Auc2Nyb2xsVG9Qb3M7CisgICAg
aWYgKHJhbmdlKSB7CisgICAgICBjbS5jdXJPcC5zY3JvbGxUb1BvcyA9IG51bGw7CisgICAgICB2
YXIgZnJvbSA9IGVzdGltYXRlQ29vcmRzKGNtLCByYW5nZS5mcm9tKSwgdG8gPSBlc3RpbWF0ZUNv
b3JkcyhjbSwgcmFuZ2UudG8pOworICAgICAgdmFyIHNQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3Mo
Y20sIE1hdGgubWluKGZyb20ubGVmdCwgdG8ubGVmdCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNYXRoLm1pbihmcm9tLnRvcCwgdG8udG9wKSAtIHJhbmdlLm1hcmdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGZyb20ucmlnaHQs
IHRvLnJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4
KGZyb20uYm90dG9tLCB0by5ib3R0b20pICsgcmFuZ2UubWFyZ2luKTsKKyAgICAgIGNtLnNjcm9s
bFRvKHNQb3Muc2Nyb2xsTGVmdCwgc1Bvcy5zY3JvbGxUb3ApOworICAgIH0KICAgfQoKICAgLy8g
QVBJIFVUSUxJVElFUwoKKyAgLy8gSW5kZW50IHRoZSBnaXZlbiBsaW5lLiBUaGUgaG93IHBhcmFt
ZXRlciBjYW4gYmUgInNtYXJ0IiwKKyAgLy8gImFkZCIvbnVsbCwgInN1YnRyYWN0Iiwgb3IgInBy
ZXYiLiBXaGVuIGFnZ3Jlc3NpdmUgaXMgZmFsc2UKKyAgLy8gKHR5cGljYWxseSBzZXQgdG8gdHJ1
ZSBmb3IgZm9yY2VkIHNpbmdsZS1saW5lIGluZGVudHMpLCBlbXB0eQorICAvLyBsaW5lcyBhcmUg
bm90IGluZGVudGVkLCBhbmQgcGxhY2VzIHdoZXJlIHRoZSBtb2RlIHJldHVybnMgUGFzcworICAv
LyBhcmUgbGVmdCBhbG9uZS4KICAgZnVuY3Rpb24gaW5kZW50TGluZShjbSwgbiwgaG93LCBhZ2dy
ZXNzaXZlKSB7Ci0gICAgdmFyIGRvYyA9IGNtLmRvYzsKKyAgICB2YXIgZG9jID0gY20uZG9jLCBz
dGF0ZTsKICAgICBpZiAoaG93ID09IG51bGwpIGhvdyA9ICJhZGQiOwogICAgIGlmIChob3cgPT0g
InNtYXJ0IikgeworICAgICAgLy8gRmFsbCBiYWNrIHRvICJwcmV2IiB3aGVuIHRoZSBtb2RlIGRv
ZXNuJ3QgaGF2ZSBhbiBpbmRlbnRhdGlvbgorICAgICAgLy8gbWV0aG9kLgogICAgICAgaWYgKCFj
bS5kb2MubW9kZS5pbmRlbnQpIGhvdyA9ICJwcmV2IjsKLSAgICAgIGVsc2UgdmFyIHN0YXRlID0g
Z2V0U3RhdGVCZWZvcmUoY20sIG4pOworICAgICAgZWxzZSBzdGF0ZSA9IGdldFN0YXRlQmVmb3Jl
KGNtLCBuKTsKICAgICB9CgogICAgIHZhciB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplOwog
ICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIG4pLCBjdXJTcGFjZSA9IGNvdW50Q29sdW1uKGxp
bmUudGV4dCwgbnVsbCwgdGFiU2l6ZSk7CisgICAgaWYgKGxpbmUuc3RhdGVBZnRlcikgbGluZS5z
dGF0ZUFmdGVyID0gbnVsbDsKICAgICB2YXIgY3VyU3BhY2VTdHJpbmcgPSBsaW5lLnRleHQubWF0
Y2goL15ccyovKVswXSwgaW5kZW50YXRpb247Ci0gICAgaWYgKGhvdyA9PSAic21hcnQiKSB7Cisg
ICAgaWYgKCFhZ2dyZXNzaXZlICYmICEvXFMvLnRlc3QobGluZS50ZXh0KSkgeworICAgICAgaW5k
ZW50YXRpb24gPSAwOworICAgICAgaG93ID0gIm5vdCI7CisgICAgfSBlbHNlIGlmIChob3cgPT0g
InNtYXJ0IikgewogICAgICAgaW5kZW50YXRpb24gPSBjbS5kb2MubW9kZS5pbmRlbnQoc3RhdGUs
IGxpbmUudGV4dC5zbGljZShjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCBsaW5lLnRleHQpOwogICAg
ICAgaWYgKGluZGVudGF0aW9uID09IFBhc3MpIHsKICAgICAgICAgaWYgKCFhZ2dyZXNzaXZlKSBy
ZXR1cm47CkBAIC0yNzY0LDIzICszNjQ4LDY5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgICAgZm9yICh2YXIgaSA9IE1hdGguZmxvb3IoaW5kZW50YXRpb24gLyB0YWJT
aXplKTsgaTsgLS1pKSB7cG9zICs9IHRhYlNpemU7IGluZGVudFN0cmluZyArPSAiXHQiO30KICAg
ICBpZiAocG9zIDwgaW5kZW50YXRpb24pIGluZGVudFN0cmluZyArPSBzcGFjZVN0cihpbmRlbnRh
dGlvbiAtIHBvcyk7CgotICAgIGlmIChpbmRlbnRTdHJpbmcgIT0gY3VyU3BhY2VTdHJpbmcpCisg
ICAgaWYgKGluZGVudFN0cmluZyAhPSBjdXJTcGFjZVN0cmluZykgewogICAgICAgcmVwbGFjZVJh
bmdlKGNtLmRvYywgaW5kZW50U3RyaW5nLCBQb3MobiwgMCksIFBvcyhuLCBjdXJTcGFjZVN0cmlu
Zy5sZW5ndGgpLCAiK2lucHV0Iik7Ci0gICAgZWxzZSBpZiAoZG9jLnNlbC5oZWFkLmxpbmUgPT0g
biAmJiBkb2Muc2VsLmhlYWQuY2ggPCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpCi0gICAgICBzZXRT
ZWxlY3Rpb24oZG9jLCBQb3MobiwgY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgUG9zKG4sIGN1clNw
YWNlU3RyaW5nLmxlbmd0aCksIDEpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBFbnN1cmUgdGhh
dCwgaWYgdGhlIGN1cnNvciB3YXMgaW4gdGhlIHdoaXRlc3BhY2UgYXQgdGhlIHN0YXJ0CisgICAg
ICAvLyBvZiB0aGUgbGluZSwgaXQgaXMgbW92ZWQgdG8gdGhlIGVuZCBvZiB0aGF0IHNwYWNlLgor
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykgewor
ICAgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTsKKyAgICAgICAgaWYgKHJhbmdl
LmhlYWQubGluZSA9PSBuICYmIHJhbmdlLmhlYWQuY2ggPCBjdXJTcGFjZVN0cmluZy5sZW5ndGgp
IHsKKyAgICAgICAgICB2YXIgcG9zID0gUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCk7Cisg
ICAgICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIGksIG5ldyBSYW5nZShwb3MsIHBvcykp
OworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQogICAgIGxpbmUu
c3RhdGVBZnRlciA9IG51bGw7CiAgIH0KCi0gIGZ1bmN0aW9uIGNoYW5nZUxpbmUoY20sIGhhbmRs
ZSwgb3ApIHsKKyAgLy8gVXRpbGl0eSBmb3IgYXBwbHlpbmcgYSBjaGFuZ2UgdG8gYSBsaW5lIGJ5
IGhhbmRsZSBvciBudW1iZXIsCisgIC8vIHJldHVybmluZyB0aGUgbnVtYmVyIGFuZCBvcHRpb25h
bGx5IHJlZ2lzdGVyaW5nIHRoZSBsaW5lIGFzCisgIC8vIGNoYW5nZWQuCisgIGZ1bmN0aW9uIGNo
YW5nZUxpbmUoY20sIGhhbmRsZSwgY2hhbmdlVHlwZSwgb3ApIHsKICAgICB2YXIgbm8gPSBoYW5k
bGUsIGxpbmUgPSBoYW5kbGUsIGRvYyA9IGNtLmRvYzsKICAgICBpZiAodHlwZW9mIGhhbmRsZSA9
PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoZG9jLCBjbGlwTGluZShkb2MsIGhhbmRsZSkpOwog
ICAgIGVsc2Ugbm8gPSBsaW5lTm8oaGFuZGxlKTsKICAgICBpZiAobm8gPT0gbnVsbCkgcmV0dXJu
IG51bGw7Ci0gICAgaWYgKG9wKGxpbmUsIG5vKSkgcmVnQ2hhbmdlKGNtLCBubywgbm8gKyAxKTsK
LSAgICBlbHNlIHJldHVybiBudWxsOworICAgIGlmIChvcChsaW5lLCBubykpIHJlZ0xpbmVDaGFu
Z2UoY20sIG5vLCBjaGFuZ2VUeXBlKTsKICAgICByZXR1cm4gbGluZTsKICAgfQoKKyAgLy8gSGVs
cGVyIGZvciBkZWxldGluZyB0ZXh0IG5lYXIgdGhlIHNlbGVjdGlvbihzKSwgdXNlZCB0byBpbXBs
ZW1lbnQKKyAgLy8gYmFja3NwYWNlLCBkZWxldGUsIGFuZCBzaW1pbGFyIGZ1bmN0aW9uYWxpdHku
CisgIGZ1bmN0aW9uIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGNvbXB1dGUpIHsKKyAgICB2YXIg
cmFuZ2VzID0gY20uZG9jLnNlbC5yYW5nZXMsIGtpbGwgPSBbXTsKKyAgICAvLyBCdWlsZCB1cCBh
IHNldCBvZiByYW5nZXMgdG8ga2lsbCBmaXJzdCwgbWVyZ2luZyBvdmVybGFwcGluZworICAgIC8v
IHJhbmdlcy4KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewor
ICAgICAgdmFyIHRvS2lsbCA9IGNvbXB1dGUocmFuZ2VzW2ldKTsKKyAgICAgIHdoaWxlIChraWxs
Lmxlbmd0aCAmJiBjbXAodG9LaWxsLmZyb20sIGxzdChraWxsKS50bykgPD0gMCkgeworICAgICAg
ICB2YXIgcmVwbGFjZWQgPSBraWxsLnBvcCgpOworICAgICAgICBpZiAoY21wKHJlcGxhY2VkLmZy
b20sIHRvS2lsbC5mcm9tKSA8IDApIHsKKyAgICAgICAgICB0b0tpbGwuZnJvbSA9IHJlcGxhY2Vk
LmZyb207CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGtpbGwu
cHVzaCh0b0tpbGwpOworICAgIH0KKyAgICAvLyBOZXh0LCByZW1vdmUgdGhvc2UgYWN0dWFsIHJh
bmdlcy4KKyAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKKyAgICAgIGZvciAodmFyIGkgPSBr
aWxsLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQorICAgICAgICByZXBsYWNlUmFuZ2UoY20uZG9j
LCAiIiwga2lsbFtpXS5mcm9tLCBraWxsW2ldLnRvLCAiK2RlbGV0ZSIpOworICAgICAgZW5zdXJl
Q3Vyc29yVmlzaWJsZShjbSk7CisgICAgfSk7CisgIH0KKworICAvLyBVc2VkIGZvciBob3Jpem9u
dGFsIHJlbGF0aXZlIG1vdGlvbi4gRGlyIGlzIC0xIG9yIDEgKGxlZnQgb3IKKyAgLy8gcmlnaHQp
LCB1bml0IGNhbiBiZSAiY2hhciIsICJjb2x1bW4iIChsaWtlIGNoYXIsIGJ1dCBkb2Vzbid0Cisg
IC8vIGNyb3NzIGxpbmUgYm91bmRhcmllcyksICJ3b3JkIiAoYWNyb3NzIG5leHQgd29yZCksIG9y
ICJncm91cCIgKHRvCisgIC8vIHRoZSBzdGFydCBvZiBuZXh0IGdyb3VwIG9mIHdvcmQgb3Igbm9u
LXdvcmQtbm9uLXdoaXRlc3BhY2UKKyAgLy8gY2hhcnMpLiBUaGUgdmlzdWFsbHkgcGFyYW0gY29u
dHJvbHMgd2hldGhlciwgaW4gcmlnaHQtdG8tbGVmdAorICAvLyB0ZXh0LCBkaXJlY3Rpb24gMSBt
ZWFucyB0byBtb3ZlIHRvd2FyZHMgdGhlIG5leHQgaW5kZXggaW4gdGhlCisgIC8vIHN0cmluZywg
b3IgdG93YXJkcyB0aGUgY2hhcmFjdGVyIHRvIHRoZSByaWdodCBvZiB0aGUgY3VycmVudAorICAv
LyBwb3NpdGlvbi4gVGhlIHJlc3VsdGluZyBwb3NpdGlvbiB3aWxsIGhhdmUgYSBoaXRTaWRlPXRy
dWUKKyAgLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4K
ICAgZnVuY3Rpb24gZmluZFBvc0goZG9jLCBwb3MsIGRpciwgdW5pdCwgdmlzdWFsbHkpIHsKICAg
ICB2YXIgbGluZSA9IHBvcy5saW5lLCBjaCA9IHBvcy5jaCwgb3JpZ0RpciA9IGRpcjsKICAgICB2
YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTsKQEAgLTI4MTAsMTMgKzM3NDAsMTUgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChkaXIgPCAwICYm
ICFtb3ZlT25jZSghZmlyc3QpKSBicmVhazsKICAgICAgICAgdmFyIGN1ciA9IGxpbmVPYmoudGV4
dC5jaGFyQXQoY2gpIHx8ICJcbiI7CiAgICAgICAgIHZhciB0eXBlID0gaXNXb3JkQ2hhcihjdXIp
ID8gInciCi0gICAgICAgICAgOiAhZ3JvdXAgPyBudWxsCi0gICAgICAgICAgOiAvXHMvLnRlc3Qo
Y3VyKSA/IG51bGwKKyAgICAgICAgICA6IGdyb3VwICYmIGN1ciA9PSAiXG4iID8gIm4iCisgICAg
ICAgICAgOiAhZ3JvdXAgfHwgL1xzLy50ZXN0KGN1cikgPyBudWxsCiAgICAgICAgICAgOiAicCI7
CisgICAgICAgIGlmIChncm91cCAmJiAhZmlyc3QgJiYgIXR5cGUpIHR5cGUgPSAicyI7CiAgICAg
ICAgIGlmIChzYXdUeXBlICYmIHNhd1R5cGUgIT0gdHlwZSkgewogICAgICAgICAgIGlmIChkaXIg
PCAwKSB7ZGlyID0gMTsgbW92ZU9uY2UoKTt9CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
KwogICAgICAgICBpZiAodHlwZSkgc2F3VHlwZSA9IHR5cGU7CiAgICAgICAgIGlmIChkaXIgPiAw
ICYmICFtb3ZlT25jZSghZmlyc3QpKSBicmVhazsKICAgICAgIH0KQEAgLTI4MjYsNiArMzc1OCw5
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiByZXN1bHQ7
CiAgIH0KCisgIC8vIEZvciByZWxhdGl2ZSB2ZXJ0aWNhbCBtb3ZlbWVudC4gRGlyIG1heSBiZSAt
MSBvciAxLiBVbml0IGNhbiBiZQorICAvLyAicGFnZSIgb3IgImxpbmUiLiBUaGUgcmVzdWx0aW5n
IHBvc2l0aW9uIHdpbGwgaGF2ZSBhIGhpdFNpZGU9dHJ1ZQorICAvLyBwcm9wZXJ0eSBpZiBpdCBy
ZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LgogICBmdW5jdGlvbiBmaW5kUG9zVihjbSwg
cG9zLCBkaXIsIHVuaXQpIHsKICAgICB2YXIgZG9jID0gY20uZG9jLCB4ID0gcG9zLmxlZnQsIHk7
CiAgICAgaWYgKHVuaXQgPT0gInBhZ2UiKSB7CkBAIC0yODQzLDcgKzM3NzgsOSBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gdGFyZ2V0OwogICB9CgotICBm
dW5jdGlvbiBmaW5kV29yZEF0KGxpbmUsIHBvcykgeworICAvLyBGaW5kIHRoZSB3b3JkIGF0IHRo
ZSBnaXZlbiBwb3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgY29vcmRzQ2hhcikuCisgIGZ1bmN0aW9u
IGZpbmRXb3JkQXQoZG9jLCBwb3MpIHsKKyAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBwb3Mu
bGluZSkudGV4dDsKICAgICB2YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHBvcy5jaDsKICAgICBp
ZiAobGluZSkgewogICAgICAgaWYgKChwb3MueFJlbCA8IDAgfHwgZW5kID09IGxpbmUubGVuZ3Ro
KSAmJiBzdGFydCkgLS1zdGFydDsgZWxzZSArK2VuZDsKQEAgLTI4NTQsMTcgKzM3OTEsMTggQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB3aGlsZSAoc3RhcnQgPiAw
ICYmIGNoZWNrKGxpbmUuY2hhckF0KHN0YXJ0IC0gMSkpKSAtLXN0YXJ0OwogICAgICAgd2hpbGUg
KGVuZCA8IGxpbmUubGVuZ3RoICYmIGNoZWNrKGxpbmUuY2hhckF0KGVuZCkpKSArK2VuZDsKICAg
ICB9Ci0gICAgcmV0dXJuIHtmcm9tOiBQb3MocG9zLmxpbmUsIHN0YXJ0KSwgdG86IFBvcyhwb3Mu
bGluZSwgZW5kKX07CisgICAgcmV0dXJuIG5ldyBSYW5nZShQb3MocG9zLmxpbmUsIHN0YXJ0KSwg
UG9zKHBvcy5saW5lLCBlbmQpKTsKICAgfQoKLSAgZnVuY3Rpb24gc2VsZWN0TGluZShjbSwgbGlu
ZSkgewotICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIFBvcyhsaW5lLCAwKSwgY2xpcFBvcyhj
bS5kb2MsIFBvcyhsaW5lICsgMSwgMCkpKTsKLSAgfQorICAvLyBFRElUT1IgTUVUSE9EUwoKLSAg
Ly8gUFJPVE9UWVBFCisgIC8vIFRoZSBwdWJsaWNseSB2aXNpYmxlIEFQSS4gTm90ZSB0aGF0IG1l
dGhvZE9wKGYpIG1lYW5zCisgIC8vICd3cmFwIGYgaW4gYW4gb3BlcmF0aW9uLCBwZXJmb3JtZWQg
b24gaXRzIGB0aGlzYCBwYXJhbWV0ZXInLgoKLSAgLy8gVGhlIHB1YmxpY2x5IHZpc2libGUgQVBJ
LiBOb3RlIHRoYXQgb3BlcmF0aW9uKG51bGwsIGYpIG1lYW5zCi0gIC8vICd3cmFwIGYgaW4gYW4g
b3BlcmF0aW9uLCBwZXJmb3JtZWQgb24gaXRzIGB0aGlzYCBwYXJhbWV0ZXInCisgIC8vIFRoaXMg
aXMgbm90IHRoZSBjb21wbGV0ZSBzZXQgb2YgZWRpdG9yIG1ldGhvZHMuIE1vc3Qgb2YgdGhlCisg
IC8vIG1ldGhvZHMgZGVmaW5lZCBvbiB0aGUgRG9jIHR5cGUgYXJlIGFsc28gaW5qZWN0ZWQgaW50
bworICAvLyBDb2RlTWlycm9yLnByb3RvdHlwZSwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
IGFuZAorICAvLyBjb252ZW5pZW5jZS4KCiAgIENvZGVNaXJyb3IucHJvdG90eXBlID0gewogICAg
IGNvbnN0cnVjdG9yOiBDb2RlTWlycm9yLApAQCAtMjg5MywxNCArMzgzMSwxNCBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgfQogICAgIH0sCgotICAgIGFkZE92
ZXJsYXk6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihzcGVjLCBvcHRpb25zKSB7CisgICAgYWRk
T3ZlcmxheTogbWV0aG9kT3AoZnVuY3Rpb24oc3BlYywgb3B0aW9ucykgewogICAgICAgdmFyIG1v
ZGUgPSBzcGVjLnRva2VuID8gc3BlYyA6IENvZGVNaXJyb3IuZ2V0TW9kZSh0aGlzLm9wdGlvbnMs
IHNwZWMpOwogICAgICAgaWYgKG1vZGUuc3RhcnRTdGF0ZSkgdGhyb3cgbmV3IEVycm9yKCJPdmVy
bGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLiIpOwogICAgICAgdGhpcy5zdGF0ZS5vdmVybGF5cy5w
dXNoKHttb2RlOiBtb2RlLCBtb2RlU3BlYzogc3BlYywgb3BhcXVlOiBvcHRpb25zICYmIG9wdGlv
bnMub3BhcXVlfSk7CiAgICAgICB0aGlzLnN0YXRlLm1vZGVHZW4rKzsKICAgICAgIHJlZ0NoYW5n
ZSh0aGlzKTsKICAgICB9KSwKLSAgICByZW1vdmVPdmVybGF5OiBvcGVyYXRpb24obnVsbCwgZnVu
Y3Rpb24oc3BlYykgeworICAgIHJlbW92ZU92ZXJsYXk6IG1ldGhvZE9wKGZ1bmN0aW9uKHNwZWMp
IHsKICAgICAgIHZhciBvdmVybGF5cyA9IHRoaXMuc3RhdGUub3ZlcmxheXM7CiAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG92ZXJsYXlzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgIHZhciBjdXIg
PSBvdmVybGF5c1tpXS5tb2RlU3BlYzsKQEAgLTI5MTMsMTggKzM4NTEsMjkgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB9CiAgICAgfSksCgotICAgIGluZGVudExp
bmU6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihuLCBkaXIsIGFnZ3Jlc3NpdmUpIHsKKyAgICBp
bmRlbnRMaW5lOiBtZXRob2RPcChmdW5jdGlvbihuLCBkaXIsIGFnZ3Jlc3NpdmUpIHsKICAgICAg
IGlmICh0eXBlb2YgZGlyICE9ICJzdHJpbmciICYmIHR5cGVvZiBkaXIgIT0gIm51bWJlciIpIHsK
ICAgICAgICAgaWYgKGRpciA9PSBudWxsKSBkaXIgPSB0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQg
PyAic21hcnQiIDogInByZXYiOwogICAgICAgICBlbHNlIGRpciA9IGRpciA/ICJhZGQiIDogInN1
YnRyYWN0IjsKICAgICAgIH0KICAgICAgIGlmIChpc0xpbmUodGhpcy5kb2MsIG4pKSBpbmRlbnRM
aW5lKHRoaXMsIG4sIGRpciwgYWdncmVzc2l2ZSk7CiAgICAgfSksCi0gICAgaW5kZW50U2VsZWN0
aW9uOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oaG93KSB7Ci0gICAgICB2YXIgc2VsID0gdGhp
cy5kb2Muc2VsOwotICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXR1cm4gaW5k
ZW50TGluZSh0aGlzLCBzZWwuZnJvbS5saW5lLCBob3cpOwotICAgICAgdmFyIGUgPSBzZWwudG8u
bGluZSAtIChzZWwudG8uY2ggPyAwIDogMSk7Ci0gICAgICBmb3IgKHZhciBpID0gc2VsLmZyb20u
bGluZTsgaSA8PSBlOyArK2kpIGluZGVudExpbmUodGhpcywgaSwgaG93KTsKKyAgICBpbmRlbnRT
ZWxlY3Rpb246IG1ldGhvZE9wKGZ1bmN0aW9uKGhvdykgeworICAgICAgdmFyIHJhbmdlcyA9IHRo
aXMuZG9jLnNlbC5yYW5nZXMsIGVuZCA9IC0xOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
YW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldOworICAg
ICAgICBpZiAoIXJhbmdlLmVtcHR5KCkpIHsKKyAgICAgICAgICB2YXIgc3RhcnQgPSBNYXRoLm1h
eChlbmQsIHJhbmdlLmZyb20oKS5saW5lKTsKKyAgICAgICAgICB2YXIgdG8gPSByYW5nZS50bygp
OworICAgICAgICAgIGVuZCA9IE1hdGgubWluKHRoaXMubGFzdExpbmUoKSwgdG8ubGluZSAtICh0
by5jaCA/IDAgOiAxKSkgKyAxOworICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydDsgaiA8IGVu
ZDsgKytqKQorICAgICAgICAgICAgaW5kZW50TGluZSh0aGlzLCBqLCBob3cpOworICAgICAgICB9
IGVsc2UgaWYgKHJhbmdlLmhlYWQubGluZSA+IGVuZCkgeworICAgICAgICAgIGluZGVudExpbmUo
dGhpcywgcmFuZ2UuaGVhZC5saW5lLCBob3csIHRydWUpOworICAgICAgICAgIGVuZCA9IHJhbmdl
LmhlYWQubGluZTsKKyAgICAgICAgICBpZiAoaSA9PSB0aGlzLmRvYy5zZWwucHJpbUluZGV4KSBl
bnN1cmVDdXJzb3JWaXNpYmxlKHRoaXMpOworICAgICAgICB9CisgICAgICB9CiAgICAgfSksCgog
ICAgIC8vIEZldGNoIHRoZSBwYXJzZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2Vm
dWwgZm9yIGhhY2tzCkBAIC0yOTM3LDEyICszODg2LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0obGluZS50
ZXh0LCB0aGlzLm9wdGlvbnMudGFiU2l6ZSk7CiAgICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IHBv
cy5jaCAmJiAhc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5w
b3M7Ci0gICAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CisgICAg
ICAgIHZhciBzdHlsZSA9IHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlKTsKICAgICAgIH0K
ICAgICAgIHJldHVybiB7c3RhcnQ6IHN0cmVhbS5zdGFydCwKICAgICAgICAgICAgICAgZW5kOiBz
dHJlYW0ucG9zLAogICAgICAgICAgICAgICBzdHJpbmc6IHN0cmVhbS5jdXJyZW50KCksCi0gICAg
ICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGUgfHwgbnVsbCwgLy8gRGVwcmVjYXRlZCwgdXNlICd0
eXBlJyBpbnN0ZWFkCiAgICAgICAgICAgICAgIHR5cGU6IHN0eWxlIHx8IG51bGwsCiAgICAgICAg
ICAgICAgIHN0YXRlOiBzdGF0ZX07CiAgICAgfSwKQEAgLTI5NjcsMTEgKzM5MTUsMzEgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfSwKCiAgICAgZ2V0SGVscGVyOiBm
dW5jdGlvbihwb3MsIHR5cGUpIHsKLSAgICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0
eXBlKSkgcmV0dXJuOworICAgICAgcmV0dXJuIHRoaXMuZ2V0SGVscGVycyhwb3MsIHR5cGUpWzBd
OworICAgIH0sCisKKyAgICBnZXRIZWxwZXJzOiBmdW5jdGlvbihwb3MsIHR5cGUpIHsKKyAgICAg
IHZhciBmb3VuZCA9IFtdOworICAgICAgaWYgKCFoZWxwZXJzLmhhc093blByb3BlcnR5KHR5cGUp
KSByZXR1cm4gaGVscGVyczsKICAgICAgIHZhciBoZWxwID0gaGVscGVyc1t0eXBlXSwgbW9kZSA9
IHRoaXMuZ2V0TW9kZUF0KHBvcyk7Ci0gICAgICByZXR1cm4gbW9kZVt0eXBlXSAmJiBoZWxwW21v
ZGVbdHlwZV1dIHx8Ci0gICAgICAgIG1vZGUuaGVscGVyVHlwZSAmJiBoZWxwW21vZGUuaGVscGVy
VHlwZV0gfHwKLSAgICAgICAgaGVscFttb2RlLm5hbWVdOworICAgICAgaWYgKHR5cGVvZiBtb2Rl
W3R5cGVdID09ICJzdHJpbmciKSB7CisgICAgICAgIGlmIChoZWxwW21vZGVbdHlwZV1dKSBmb3Vu
ZC5wdXNoKGhlbHBbbW9kZVt0eXBlXV0pOworICAgICAgfSBlbHNlIGlmIChtb2RlW3R5cGVdKSB7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZVt0eXBlXS5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgIHZhciB2YWwgPSBoZWxwW21vZGVbdHlwZV1baV1dOworICAgICAgICAgIGlmICh2
YWwpIGZvdW5kLnB1c2godmFsKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChtb2RlLmhl
bHBlclR5cGUgJiYgaGVscFttb2RlLmhlbHBlclR5cGVdKSB7CisgICAgICAgIGZvdW5kLnB1c2go
aGVscFttb2RlLmhlbHBlclR5cGVdKTsKKyAgICAgIH0gZWxzZSBpZiAoaGVscFttb2RlLm5hbWVd
KSB7CisgICAgICAgIGZvdW5kLnB1c2goaGVscFttb2RlLm5hbWVdKTsKKyAgICAgIH0KKyAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgaGVscC5fZ2xvYmFsLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
IHZhciBjdXIgPSBoZWxwLl9nbG9iYWxbaV07CisgICAgICAgIGlmIChjdXIucHJlZChtb2RlLCB0
aGlzKSAmJiBpbmRleE9mKGZvdW5kLCBjdXIudmFsKSA9PSAtMSkKKyAgICAgICAgICBmb3VuZC5w
dXNoKGN1ci52YWwpOworICAgICAgfQorICAgICAgcmV0dXJuIGZvdW5kOwogICAgIH0sCgogICAg
IGdldFN0YXRlQWZ0ZXI6IGZ1bmN0aW9uKGxpbmUsIHByZWNpc2UpIHsKQEAgLTI5ODEsMTAgKzM5
NDksMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfSwKCiAgICAg
Y3Vyc29yQ29vcmRzOiBmdW5jdGlvbihzdGFydCwgbW9kZSkgewotICAgICAgdmFyIHBvcywgc2Vs
ID0gdGhpcy5kb2Muc2VsOwotICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHBvcyA9IHNlbC5oZWFk
OworICAgICAgdmFyIHBvcywgcmFuZ2UgPSB0aGlzLmRvYy5zZWwucHJpbWFyeSgpOworICAgICAg
aWYgKHN0YXJ0ID09IG51bGwpIHBvcyA9IHJhbmdlLmhlYWQ7CiAgICAgICBlbHNlIGlmICh0eXBl
b2Ygc3RhcnQgPT0gIm9iamVjdCIpIHBvcyA9IGNsaXBQb3ModGhpcy5kb2MsIHN0YXJ0KTsKLSAg
ICAgIGVsc2UgcG9zID0gc3RhcnQgPyBzZWwuZnJvbSA6IHNlbC50bzsKKyAgICAgIGVsc2UgcG9z
ID0gc3RhcnQgPyByYW5nZS5mcm9tKCkgOiByYW5nZS50bygpOwogICAgICAgcmV0dXJuIGN1cnNv
ckNvb3Jkcyh0aGlzLCBwb3MsIG1vZGUgfHwgInBhZ2UiKTsKICAgICB9LAoKQEAgLTMwMDYsMTUg
KzM5NzQsMTUgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBpZiAo
bGluZSA8IHRoaXMuZG9jLmZpcnN0KSBsaW5lID0gdGhpcy5kb2MuZmlyc3Q7CiAgICAgICBlbHNl
IGlmIChsaW5lID4gbGFzdCkgeyBsaW5lID0gbGFzdDsgZW5kID0gdHJ1ZTsgfQogICAgICAgdmFy
IGxpbmVPYmogPSBnZXRMaW5lKHRoaXMuZG9jLCBsaW5lKTsKLSAgICAgIHJldHVybiBpbnRvQ29v
cmRTeXN0ZW0odGhpcywgZ2V0TGluZSh0aGlzLmRvYywgbGluZSksIHt0b3A6IDAsIGxlZnQ6IDB9
LCBtb2RlIHx8ICJwYWdlIikudG9wICsKLSAgICAgICAgKGVuZCA/IGxpbmVPYmouaGVpZ2h0IDog
MCk7CisgICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMsIGxpbmVPYmosIHt0b3A6IDAs
IGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdlIikudG9wICsKKyAgICAgICAgKGVuZCA/IHRoaXMuZG9j
LmhlaWdodCAtIGhlaWdodEF0TGluZShsaW5lT2JqKSA6IDApOwogICAgIH0sCgogICAgIGRlZmF1
bHRUZXh0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRleHRIZWlnaHQodGhpcy5kaXNwbGF5
KTsgfSwKICAgICBkZWZhdWx0Q2hhcldpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNoYXJXaWR0
aCh0aGlzLmRpc3BsYXkpOyB9LAoKLSAgICBzZXRHdXR0ZXJNYXJrZXI6IG9wZXJhdGlvbihudWxs
LCBmdW5jdGlvbihsaW5lLCBndXR0ZXJJRCwgdmFsdWUpIHsKLSAgICAgIHJldHVybiBjaGFuZ2VM
aW5lKHRoaXMsIGxpbmUsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICBzZXRHdXR0ZXJNYXJrZXI6IG1l
dGhvZE9wKGZ1bmN0aW9uKGxpbmUsIGd1dHRlcklELCB2YWx1ZSkgeworICAgICAgcmV0dXJuIGNo
YW5nZUxpbmUodGhpcywgbGluZSwgImd1dHRlciIsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAg
dmFyIG1hcmtlcnMgPSBsaW5lLmd1dHRlck1hcmtlcnMgfHwgKGxpbmUuZ3V0dGVyTWFya2VycyA9
IHt9KTsKICAgICAgICAgbWFya2Vyc1tndXR0ZXJJRF0gPSB2YWx1ZTsKICAgICAgICAgaWYgKCF2
YWx1ZSAmJiBpc0VtcHR5KG1hcmtlcnMpKSBsaW5lLmd1dHRlck1hcmtlcnMgPSBudWxsOwpAQCAt
MzAyMiwyMCArMzk5MCwyMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgIH0pOwogICAgIH0pLAoKLSAgICBjbGVhckd1dHRlcjogb3BlcmF0aW9uKG51bGwsIGZ1bmN0
aW9uKGd1dHRlcklEKSB7CisgICAgY2xlYXJHdXR0ZXI6IG1ldGhvZE9wKGZ1bmN0aW9uKGd1dHRl
cklEKSB7CiAgICAgICB2YXIgY20gPSB0aGlzLCBkb2MgPSBjbS5kb2MsIGkgPSBkb2MuZmlyc3Q7
CiAgICAgICBkb2MuaXRlcihmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgIGlmIChsaW5lLmd1dHRl
ck1hcmtlcnMgJiYgbGluZS5ndXR0ZXJNYXJrZXJzW2d1dHRlcklEXSkgewogICAgICAgICAgIGxp
bmUuZ3V0dGVyTWFya2Vyc1tndXR0ZXJJRF0gPSBudWxsOwotICAgICAgICAgIHJlZ0NoYW5nZShj
bSwgaSwgaSArIDEpOworICAgICAgICAgIHJlZ0xpbmVDaGFuZ2UoY20sIGksICJndXR0ZXIiKTsK
ICAgICAgICAgICBpZiAoaXNFbXB0eShsaW5lLmd1dHRlck1hcmtlcnMpKSBsaW5lLmd1dHRlck1h
cmtlcnMgPSBudWxsOwogICAgICAgICB9CiAgICAgICAgICsraTsKICAgICAgIH0pOwogICAgIH0p
LAoKLSAgICBhZGRMaW5lQ2xhc3M6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihoYW5kbGUsIHdo
ZXJlLCBjbHMpIHsKLSAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgZnVuY3Rp
b24obGluZSkgeworICAgIGFkZExpbmVDbGFzczogbWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCB3
aGVyZSwgY2xzKSB7CisgICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBoYW5kbGUsICJjbGFz
cyIsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSAidGV4dCIg
PyAidGV4dENsYXNzIiA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNzIiA6ICJ3cmFw
Q2xhc3MiOwogICAgICAgICBpZiAoIWxpbmVbcHJvcF0pIGxpbmVbcHJvcF0gPSBjbHM7CiAgICAg
ICAgIGVsc2UgaWYgKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIgKyBjbHMgKyAiKD86JHxcXHMpIiku
dGVzdChsaW5lW3Byb3BdKSkgcmV0dXJuIGZhbHNlOwpAQCAtMzA0NCw4ICs0MDEyLDggQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB9KTsKICAgICB9KSwKCi0gICAg
cmVtb3ZlTGluZUNsYXNzOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oaGFuZGxlLCB3aGVyZSwg
Y2xzKSB7Ci0gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBoYW5kbGUsIGZ1bmN0aW9uKGxp
bmUpIHsKKyAgICByZW1vdmVMaW5lQ2xhc3M6IG1ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgd2hl
cmUsIGNscykgeworICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCAiY2xhc3Mi
LCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gInRleHQiID8g
InRleHRDbGFzcyIgOiB3aGVyZSA9PSAiYmFja2dyb3VuZCIgPyAiYmdDbGFzcyIgOiAid3JhcENs
YXNzIjsKICAgICAgICAgdmFyIGN1ciA9IGxpbmVbcHJvcF07CiAgICAgICAgIGlmICghY3VyKSBy
ZXR1cm4gZmFsc2U7CkBAIC0zMDYwLDcgKzQwMjgsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIH0pOwogICAgIH0pLAoKLSAgICBhZGRMaW5lV2lkZ2V0OiBvcGVy
YXRpb24obnVsbCwgZnVuY3Rpb24oaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7CisgICAgYWRkTGlu
ZVdpZGdldDogbWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7CiAgICAg
ICByZXR1cm4gYWRkTGluZVdpZGdldCh0aGlzLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpOwogICAg
IH0pLAoKQEAgLTMwODEsNyArNDA0OSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICB3aWRnZXRzOiBsaW5lLndpZGdldHN9OwogICAgIH0sCgotICAg
IGdldFZpZXdwb3J0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHtmcm9tOiB0aGlzLmRpc3BsYXkuc2hv
d2luZ0Zyb20sIHRvOiB0aGlzLmRpc3BsYXkuc2hvd2luZ1RvfTt9LAorICAgIGdldFZpZXdwb3J0
OiBmdW5jdGlvbigpIHsgcmV0dXJuIHtmcm9tOiB0aGlzLmRpc3BsYXkudmlld0Zyb20sIHRvOiB0
aGlzLmRpc3BsYXkudmlld1RvfTt9LAoKICAgICBhZGRXaWRnZXQ6IGZ1bmN0aW9uKHBvcywgbm9k
ZSwgc2Nyb2xsLCB2ZXJ0LCBob3JpeikgewogICAgICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3Bs
YXk7CkBAIC0zMTE2LDkgKzQwODQsMTQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICAgIHNjcm9sbEludG9WaWV3KHRoaXMsIGxlZnQsIHRvcCwgbGVmdCArIG5vZGUu
b2Zmc2V0V2lkdGgsIHRvcCArIG5vZGUub2Zmc2V0SGVpZ2h0KTsKICAgICB9LAoKLSAgICB0cmln
Z2VyT25LZXlEb3duOiBvcGVyYXRpb24obnVsbCwgb25LZXlEb3duKSwKKyAgICB0cmlnZ2VyT25L
ZXlEb3duOiBtZXRob2RPcChvbktleURvd24pLAorICAgIHRyaWdnZXJPbktleVByZXNzOiBtZXRo
b2RPcChvbktleVByZXNzKSwKKyAgICB0cmlnZ2VyT25LZXlVcDogbWV0aG9kT3Aob25LZXlVcCks
CgotICAgIGV4ZWNDb21tYW5kOiBmdW5jdGlvbihjbWQpIHtyZXR1cm4gY29tbWFuZHNbY21kXSh0
aGlzKTt9LAorICAgIGV4ZWNDb21tYW5kOiBmdW5jdGlvbihjbWQpIHsKKyAgICAgIGlmIChjb21t
YW5kcy5oYXNPd25Qcm9wZXJ0eShjbWQpKQorICAgICAgICByZXR1cm4gY29tbWFuZHNbY21kXSh0
aGlzKTsKKyAgICB9LAoKICAgICBmaW5kUG9zSDogZnVuY3Rpb24oZnJvbSwgYW1vdW50LCB1bml0
LCB2aXN1YWxseSkgewogICAgICAgdmFyIGRpciA9IDE7CkBAIC0zMTMwLDIwICs0MTAzLDI1IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIGN1cjsKICAg
ICB9LAoKLSAgICBtb3ZlSDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRpciwgdW5pdCkgewot
ICAgICAgdmFyIHNlbCA9IHRoaXMuZG9jLnNlbCwgcG9zOwotICAgICAgaWYgKHNlbC5zaGlmdCB8
fCBzZWwuZXh0ZW5kIHx8IHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKQotICAgICAgICBwb3MgPSBm
aW5kUG9zSCh0aGlzLmRvYywgc2VsLmhlYWQsIGRpciwgdW5pdCwgdGhpcy5vcHRpb25zLnJ0bE1v
dmVWaXN1YWxseSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHBvcyA9IGRpciA8IDAgPyBzZWwuZnJv
bSA6IHNlbC50bzsKLSAgICAgIGV4dGVuZFNlbGVjdGlvbih0aGlzLmRvYywgcG9zLCBwb3MsIGRp
cik7CisgICAgbW92ZUg6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkgeworICAgICAgdmFy
IGNtID0gdGhpczsKKyAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkg
eworICAgICAgICBpZiAoY20uZGlzcGxheS5zaGlmdCB8fCBjbS5kb2MuZXh0ZW5kIHx8IHJhbmdl
LmVtcHR5KCkpCisgICAgICAgICAgcmV0dXJuIGZpbmRQb3NIKGNtLmRvYywgcmFuZ2UuaGVhZCwg
ZGlyLCB1bml0LCBjbS5vcHRpb25zLnJ0bE1vdmVWaXN1YWxseSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICByZXR1cm4gZGlyIDwgMCA/IHJhbmdlLmZyb20oKSA6IHJhbmdlLnRvKCk7CisgICAg
ICB9LCBzZWxfbW92ZSk7CiAgICAgfSksCgotICAgIGRlbGV0ZUg6IG9wZXJhdGlvbihudWxsLCBm
dW5jdGlvbihkaXIsIHVuaXQpIHsKLSAgICAgIHZhciBzZWwgPSB0aGlzLmRvYy5zZWw7Ci0gICAg
ICBpZiAoIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXBsYWNlUmFuZ2UodGhpcy5kb2MsICIi
LCBzZWwuZnJvbSwgc2VsLnRvLCAiK2RlbGV0ZSIpOwotICAgICAgZWxzZSByZXBsYWNlUmFuZ2Uo
dGhpcy5kb2MsICIiLCBzZWwuZnJvbSwgZmluZFBvc0godGhpcy5kb2MsIHNlbC5oZWFkLCBkaXIs
IHVuaXQsIGZhbHNlKSwgIitkZWxldGUiKTsKLSAgICAgIHRoaXMuY3VyT3AudXNlclNlbENoYW5n
ZSA9IHRydWU7CisgICAgZGVsZXRlSDogbWV0aG9kT3AoZnVuY3Rpb24oZGlyLCB1bml0KSB7Cisg
ICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsLCBkb2MgPSB0aGlzLmRvYzsKKyAgICAgIGlmIChz
ZWwuc29tZXRoaW5nU2VsZWN0ZWQoKSkKKyAgICAgICAgZG9jLnJlcGxhY2VTZWxlY3Rpb24oIiIs
IG51bGwsICIrZGVsZXRlIik7CisgICAgICBlbHNlCisgICAgICAgIGRlbGV0ZU5lYXJTZWxlY3Rp
b24odGhpcywgZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgICB2YXIgb3RoZXIgPSBmaW5kUG9z
SChkb2MsIHJhbmdlLmhlYWQsIGRpciwgdW5pdCwgZmFsc2UpOworICAgICAgICAgIHJldHVybiBk
aXIgPCAwID8ge2Zyb206IG90aGVyLCB0bzogcmFuZ2UuaGVhZH0gOiB7ZnJvbTogcmFuZ2UuaGVh
ZCwgdG86IG90aGVyfTsKKyAgICAgICAgfSk7CiAgICAgfSksCgogICAgIGZpbmRQb3NWOiBmdW5j
dGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIGdvYWxDb2x1bW4pIHsKQEAgLTMxNTksMjggKzQxMzcs
MzkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICByZXR1cm4gY3Vy
OwogICAgIH0sCgotICAgIG1vdmVWOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oZGlyLCB1bml0
KSB7Ci0gICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsOwotICAgICAgdmFyIHBvcyA9IGN1cnNv
ckNvb3Jkcyh0aGlzLCBzZWwuaGVhZCwgImRpdiIpOwotICAgICAgaWYgKHNlbC5nb2FsQ29sdW1u
ICE9IG51bGwpIHBvcy5sZWZ0ID0gc2VsLmdvYWxDb2x1bW47Ci0gICAgICB2YXIgdGFyZ2V0ID0g
ZmluZFBvc1YodGhpcywgcG9zLCBkaXIsIHVuaXQpOwotCi0gICAgICBpZiAodW5pdCA9PSAicGFn
ZSIpIGFkZFRvU2Nyb2xsUG9zKHRoaXMsIDAsIGNoYXJDb29yZHModGhpcywgdGFyZ2V0LCAiZGl2
IikudG9wIC0gcG9zLnRvcCk7Ci0gICAgICBleHRlbmRTZWxlY3Rpb24odGhpcy5kb2MsIHRhcmdl
dCwgdGFyZ2V0LCBkaXIpOwotICAgICAgc2VsLmdvYWxDb2x1bW4gPSBwb3MubGVmdDsKKyAgICBt
b3ZlVjogbWV0aG9kT3AoZnVuY3Rpb24oZGlyLCB1bml0KSB7CisgICAgICB2YXIgY20gPSB0aGlz
LCBkb2MgPSB0aGlzLmRvYywgZ29hbHMgPSBbXTsKKyAgICAgIHZhciBjb2xsYXBzZSA9ICFjbS5k
aXNwbGF5LnNoaWZ0ICYmICFkb2MuZXh0ZW5kICYmIGRvYy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQo
KTsKKyAgICAgIGRvYy5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAg
ICAgaWYgKGNvbGxhcHNlKQorICAgICAgICAgIHJldHVybiBkaXIgPCAwID8gcmFuZ2UuZnJvbSgp
IDogcmFuZ2UudG8oKTsKKyAgICAgICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHMoY20sIHJh
bmdlLmhlYWQsICJkaXYiKTsKKyAgICAgICAgaWYgKHJhbmdlLmdvYWxDb2x1bW4gIT0gbnVsbCkg
aGVhZFBvcy5sZWZ0ID0gcmFuZ2UuZ29hbENvbHVtbjsKKyAgICAgICAgZ29hbHMucHVzaChoZWFk
UG9zLmxlZnQpOworICAgICAgICB2YXIgcG9zID0gZmluZFBvc1YoY20sIGhlYWRQb3MsIGRpciwg
dW5pdCk7CisgICAgICAgIGlmICh1bml0ID09ICJwYWdlIiAmJiByYW5nZSA9PSBkb2Muc2VsLnBy
aW1hcnkoKSkKKyAgICAgICAgICBhZGRUb1Njcm9sbFBvcyhjbSwgbnVsbCwgY2hhckNvb3Jkcyhj
bSwgcG9zLCAiZGl2IikudG9wIC0gaGVhZFBvcy50b3ApOworICAgICAgICByZXR1cm4gcG9zOwor
ICAgICAgfSwgc2VsX21vdmUpOworICAgICAgaWYgKGdvYWxzLmxlbmd0aCkgZm9yICh2YXIgaSA9
IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgZG9jLnNlbC5yYW5n
ZXNbaV0uZ29hbENvbHVtbiA9IGdvYWxzW2ldOwogICAgIH0pLAoKICAgICB0b2dnbGVPdmVyd3Jp
dGU6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA9
PSB0aGlzLnN0YXRlLm92ZXJ3cml0ZSkgcmV0dXJuOwogICAgICAgaWYgKHRoaXMuc3RhdGUub3Zl
cndyaXRlID0gIXRoaXMuc3RhdGUub3ZlcndyaXRlKQotICAgICAgICB0aGlzLmRpc3BsYXkuY3Vy
c29yLmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3Itb3ZlcndyaXRlIjsKKyAgICAgICAgYWRkQ2xh
c3ModGhpcy5kaXNwbGF5LmN1cnNvckRpdiwgIkNvZGVNaXJyb3Itb3ZlcndyaXRlIik7CiAgICAg
ICBlbHNlCi0gICAgICAgIHRoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lID0gdGhpcy5kaXNw
bGF5LmN1cnNvci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itb3ZlcndyaXRlIiwgIiIp
OworICAgICAgICBybUNsYXNzKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsICJDb2RlTWlycm9yLW92
ZXJ3cml0ZSIpOworCisgICAgICBzaWduYWwodGhpcywgIm92ZXJ3cml0ZVRvZ2dsZSIsIHRoaXMs
IHRoaXMuc3RhdGUub3ZlcndyaXRlKTsKICAgICB9LAotICAgIGhhc0ZvY3VzOiBmdW5jdGlvbigp
IHsgcmV0dXJuIHRoaXMuc3RhdGUuZm9jdXNlZDsgfSwKKyAgICBoYXNGb2N1czogZnVuY3Rpb24o
KSB7IHJldHVybiBhY3RpdmVFbHQoKSA9PSB0aGlzLmRpc3BsYXkuaW5wdXQ7IH0sCgotICAgIHNj
cm9sbFRvOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oeCwgeSkgewotICAgICAgdXBkYXRlU2Ny
b2xsUG9zKHRoaXMsIHgsIHkpOworICAgIHNjcm9sbFRvOiBtZXRob2RPcChmdW5jdGlvbih4LCB5
KSB7CisgICAgICBpZiAoeCAhPSBudWxsIHx8IHkgIT0gbnVsbCkgcmVzb2x2ZVNjcm9sbFRvUG9z
KHRoaXMpOworICAgICAgaWYgKHggIT0gbnVsbCkgdGhpcy5jdXJPcC5zY3JvbGxMZWZ0ID0geDsK
KyAgICAgIGlmICh5ICE9IG51bGwpIHRoaXMuY3VyT3Auc2Nyb2xsVG9wID0geTsKICAgICB9KSwK
ICAgICBnZXRTY3JvbGxJbmZvOiBmdW5jdGlvbigpIHsKICAgICAgIHZhciBzY3JvbGxlciA9IHRo
aXMuZGlzcGxheS5zY3JvbGxlciwgY28gPSBzY3JvbGxlckN1dE9mZjsKQEAgLTMxODksNTQgKzQx
NzgsNjIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
IGNsaWVudEhlaWdodDogc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gY28sIGNsaWVudFdpZHRoOiBz
Y3JvbGxlci5jbGllbnRXaWR0aCAtIGNvfTsKICAgICB9LAoKLSAgICBzY3JvbGxJbnRvVmlldzog
b3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHJhbmdlLCBtYXJnaW4pIHsKLSAgICAgIGlmIChyYW5n
ZSA9PSBudWxsKSByYW5nZSA9IHtmcm9tOiB0aGlzLmRvYy5zZWwuaGVhZCwgdG86IG51bGx9Owot
ICAgICAgZWxzZSBpZiAodHlwZW9mIHJhbmdlID09ICJudW1iZXIiKSByYW5nZSA9IHtmcm9tOiBQ
b3MocmFuZ2UsIDApLCB0bzogbnVsbH07Ci0gICAgICBlbHNlIGlmIChyYW5nZS5mcm9tID09IG51
bGwpIHJhbmdlID0ge2Zyb206IHJhbmdlLCB0bzogbnVsbH07CisgICAgc2Nyb2xsSW50b1ZpZXc6
IG1ldGhvZE9wKGZ1bmN0aW9uKHJhbmdlLCBtYXJnaW4pIHsKKyAgICAgIGlmIChyYW5nZSA9PSBu
dWxsKSB7CisgICAgICAgIHJhbmdlID0ge2Zyb206IHRoaXMuZG9jLnNlbC5wcmltYXJ5KCkuaGVh
ZCwgdG86IG51bGx9OworICAgICAgICBpZiAobWFyZ2luID09IG51bGwpIG1hcmdpbiA9IHRoaXMu
b3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW47CisgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByYW5n
ZSA9PSAibnVtYmVyIikgeworICAgICAgICByYW5nZSA9IHtmcm9tOiBQb3MocmFuZ2UsIDApLCB0
bzogbnVsbH07CisgICAgICB9IGVsc2UgaWYgKHJhbmdlLmZyb20gPT0gbnVsbCkgeworICAgICAg
ICByYW5nZSA9IHtmcm9tOiByYW5nZSwgdG86IG51bGx9OworICAgICAgfQogICAgICAgaWYgKCFy
YW5nZS50bykgcmFuZ2UudG8gPSByYW5nZS5mcm9tOwotICAgICAgaWYgKCFtYXJnaW4pIG1hcmdp
biA9IDA7CisgICAgICByYW5nZS5tYXJnaW4gPSBtYXJnaW4gfHwgMDsKCi0gICAgICB2YXIgY29v
cmRzID0gcmFuZ2U7CiAgICAgICBpZiAocmFuZ2UuZnJvbS5saW5lICE9IG51bGwpIHsKLSAgICAg
ICAgdGhpcy5jdXJPcC5zY3JvbGxUb1BvcyA9IHtmcm9tOiByYW5nZS5mcm9tLCB0bzogcmFuZ2Uu
dG8sIG1hcmdpbjogbWFyZ2lufTsKLSAgICAgICAgY29vcmRzID0ge2Zyb206IGN1cnNvckNvb3Jk
cyh0aGlzLCByYW5nZS5mcm9tKSwKLSAgICAgICAgICAgICAgICAgIHRvOiBjdXJzb3JDb29yZHMo
dGhpcywgcmFuZ2UudG8pfTsKLSAgICAgIH0KLSAgICAgIHZhciBzUG9zID0gY2FsY3VsYXRlU2Ny
b2xsUG9zKHRoaXMsIE1hdGgubWluKGNvb3Jkcy5mcm9tLmxlZnQsIGNvb3Jkcy50by5sZWZ0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKGNvb3Jkcy5mcm9t
LnRvcCwgY29vcmRzLnRvLnRvcCkgLSBtYXJnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNYXRoLm1heChjb29yZHMuZnJvbS5yaWdodCwgY29vcmRzLnRvLnJpZ2h0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGNvb3Jkcy5mcm9t
LmJvdHRvbSwgY29vcmRzLnRvLmJvdHRvbSkgKyBtYXJnaW4pOwotICAgICAgdXBkYXRlU2Nyb2xs
UG9zKHRoaXMsIHNQb3Muc2Nyb2xsTGVmdCwgc1Bvcy5zY3JvbGxUb3ApOworICAgICAgICByZXNv
bHZlU2Nyb2xsVG9Qb3ModGhpcyk7CisgICAgICAgIHRoaXMuY3VyT3Auc2Nyb2xsVG9Qb3MgPSBy
YW5nZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBzUG9zID0gY2FsY3VsYXRlU2Nyb2xs
UG9zKHRoaXMsIE1hdGgubWluKHJhbmdlLmZyb20ubGVmdCwgcmFuZ2UudG8ubGVmdCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKHJhbmdlLmZyb20udG9w
LCByYW5nZS50by50b3ApIC0gcmFuZ2UubWFyZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNYXRoLm1heChyYW5nZS5mcm9tLnJpZ2h0LCByYW5nZS50by5yaWdodCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHJhbmdlLmZy
b20uYm90dG9tLCByYW5nZS50by5ib3R0b20pICsgcmFuZ2UubWFyZ2luKTsKKyAgICAgICAgdGhp
cy5zY3JvbGxUbyhzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTsKKyAgICAgIH0KICAg
ICB9KSwKCi0gICAgc2V0U2l6ZTogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHdpZHRoLCBoZWln
aHQpIHsKKyAgICBzZXRTaXplOiBtZXRob2RPcChmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CiAg
ICAgICBmdW5jdGlvbiBpbnRlcnByZXQodmFsKSB7CiAgICAgICAgIHJldHVybiB0eXBlb2YgdmFs
ID09ICJudW1iZXIiIHx8IC9eXGQrJC8udGVzdChTdHJpbmcodmFsKSkgPyB2YWwgKyAicHgiIDog
dmFsOwogICAgICAgfQogICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHRoaXMuZGlzcGxheS53cmFw
cGVyLnN0eWxlLndpZHRoID0gaW50ZXJwcmV0KHdpZHRoKTsKICAgICAgIGlmIChoZWlnaHQgIT0g
bnVsbCkgdGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gaW50ZXJwcmV0KGhlaWdo
dCk7Ci0gICAgICBpZiAodGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZykKLSAgICAgICAgdGhpcy5k
aXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoID0gdGhpcy5kaXNwbGF5Lm1lYXN1cmVMaW5l
Q2FjaGVQb3MgPSAwOworICAgICAgaWYgKHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcpIGNsZWFy
TGluZU1lYXN1cmVtZW50Q2FjaGUodGhpcyk7CiAgICAgICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRl
ID0gdHJ1ZTsKKyAgICAgIHNpZ25hbCh0aGlzLCAicmVmcmVzaCIsIHRoaXMpOwogICAgIH0pLAoK
ICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBydW5Jbk9wKHRoaXMsIGYpO30sCgot
ICAgIHJlZnJlc2g6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBiYWRI
ZWlnaHQgPSB0aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9PSBudWxsOwotICAgICAgY2xl
YXJDYWNoZXModGhpcyk7Ci0gICAgICB1cGRhdGVTY3JvbGxQb3ModGhpcywgdGhpcy5kb2Muc2Ny
b2xsTGVmdCwgdGhpcy5kb2Muc2Nyb2xsVG9wKTsKKyAgICByZWZyZXNoOiBtZXRob2RPcChmdW5j
dGlvbigpIHsKKyAgICAgIHZhciBvbGRIZWlnaHQgPSB0aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhl
aWdodDsKICAgICAgIHJlZ0NoYW5nZSh0aGlzKTsKLSAgICAgIGlmIChiYWRIZWlnaHQpIGVzdGlt
YXRlTGluZUhlaWdodHModGhpcyk7CisgICAgICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1
ZTsKKyAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpOworICAgICAgdGhpcy5zY3JvbGxUbyh0aGlzLmRv
Yy5zY3JvbGxMZWZ0LCB0aGlzLmRvYy5zY3JvbGxUb3ApOworICAgICAgdXBkYXRlR3V0dGVyU3Bh
Y2UodGhpcyk7CisgICAgICBpZiAob2xkSGVpZ2h0ID09IG51bGwgfHwgTWF0aC5hYnMob2xkSGVp
Z2h0IC0gdGV4dEhlaWdodCh0aGlzLmRpc3BsYXkpKSA+IC41KQorICAgICAgICBlc3RpbWF0ZUxp
bmVIZWlnaHRzKHRoaXMpOworICAgICAgc2lnbmFsKHRoaXMsICJyZWZyZXNoIiwgdGhpcyk7CiAg
ICAgfSksCgotICAgIHN3YXBEb2M6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihkb2MpIHsKKyAg
ICBzd2FwRG9jOiBtZXRob2RPcChmdW5jdGlvbihkb2MpIHsKICAgICAgIHZhciBvbGQgPSB0aGlz
LmRvYzsKICAgICAgIG9sZC5jbSA9IG51bGw7CiAgICAgICBhdHRhY2hEb2ModGhpcywgZG9jKTsK
ICAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpOwotICAgICAgcmVzZXRJbnB1dCh0aGlzLCB0cnVlKTsK
LSAgICAgIHVwZGF0ZVNjcm9sbFBvcyh0aGlzLCBkb2Muc2Nyb2xsTGVmdCwgZG9jLnNjcm9sbFRv
cCk7CisgICAgICByZXNldElucHV0KHRoaXMpOworICAgICAgdGhpcy5zY3JvbGxUbyhkb2Muc2Ny
b2xsTGVmdCwgZG9jLnNjcm9sbFRvcCk7CiAgICAgICBzaWduYWxMYXRlcih0aGlzLCAic3dhcERv
YyIsIHRoaXMsIG9sZCk7CiAgICAgICByZXR1cm4gb2xkOwogICAgIH0pLApAQCAtMzI1MCwxMCAr
NDI0NywxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKCiAgIC8vIE9QVElP
TiBERUZBVUxUUwoKLSAgdmFyIG9wdGlvbkhhbmRsZXJzID0gQ29kZU1pcnJvci5vcHRpb25IYW5k
bGVycyA9IHt9OwotCiAgIC8vIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KICAg
dmFyIGRlZmF1bHRzID0gQ29kZU1pcnJvci5kZWZhdWx0cyA9IHt9OworICAvLyBGdW5jdGlvbnMg
dG8gcnVuIHdoZW4gb3B0aW9ucyBhcmUgY2hhbmdlZC4KKyAgdmFyIG9wdGlvbkhhbmRsZXJzID0g
Q29kZU1pcnJvci5vcHRpb25IYW5kbGVycyA9IHt9OwoKICAgZnVuY3Rpb24gb3B0aW9uKG5hbWUs
IGRlZmx0LCBoYW5kbGUsIG5vdE9uSW5pdCkgewogICAgIENvZGVNaXJyb3IuZGVmYXVsdHNbbmFt
ZV0gPSBkZWZsdDsKQEAgLTMyNjEsNiArNDI1OCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgICAgbm90T25Jbml0ID8gZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7aWYg
KG9sZCAhPSBJbml0KSBoYW5kbGUoY20sIHZhbCwgb2xkKTt9IDogaGFuZGxlOwogICB9CgorICAv
LyBQYXNzZWQgdG8gb3B0aW9uIGhhbmRsZXJzIHdoZW4gdGhlcmUgaXMgbm8gb2xkIHZhbHVlLgog
ICB2YXIgSW5pdCA9IENvZGVNaXJyb3IuSW5pdCA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1
cm4gIkNvZGVNaXJyb3IuSW5pdCI7fX07CgogICAvLyBUaGVzZSB0d28gYXJlLCBvbiBpbml0LCBj
YWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IgYmVjYXVzZSB0aGV5CkBAIC0zMjc3LDcgKzQyNzUs
NyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgb3B0aW9uKCJpbmRlbnRX
aXRoVGFicyIsIGZhbHNlKTsKICAgb3B0aW9uKCJzbWFydEluZGVudCIsIHRydWUpOwogICBvcHRp
b24oInRhYlNpemUiLCA0LCBmdW5jdGlvbihjbSkgewotICAgIGxvYWRNb2RlKGNtKTsKKyAgICBy
ZXNldE1vZGVTdGF0ZShjbSk7CiAgICAgY2xlYXJDYWNoZXMoY20pOwogICAgIHJlZ0NoYW5nZShj
bSk7CiAgIH0sIHRydWUpOwpAQCAtMzI5Nyw5ICs0Mjk1LDYgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgIG9wdGlvbigia2V5TWFwIiwgImRlZmF1bHQiLCBrZXlNYXBDaGFu
Z2VkKTsKICAgb3B0aW9uKCJleHRyYUtleXMiLCBudWxsKTsKCi0gIG9wdGlvbigib25LZXlFdmVu
dCIsIG51bGwpOwotICBvcHRpb24oIm9uRHJhZ0V2ZW50IiwgbnVsbCk7Ci0KICAgb3B0aW9uKCJs
aW5lV3JhcHBpbmciLCBmYWxzZSwgd3JhcHBpbmdDaGFuZ2VkLCB0cnVlKTsKICAgb3B0aW9uKCJn
dXR0ZXJzIiwgW10sIGZ1bmN0aW9uKGNtKSB7CiAgICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJz
KGNtLm9wdGlvbnMpOwpAQCAtMzMyNyw5ICs0MzIyLDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgICAgY20uZGlzcGxheS5kaXNhYmxlZCA9IHRydWU7CiAgICAgfSBl
bHNlIHsKICAgICAgIGNtLmRpc3BsYXkuZGlzYWJsZWQgPSBmYWxzZTsKLSAgICAgIGlmICghdmFs
KSByZXNldElucHV0KGNtLCB0cnVlKTsKKyAgICAgIGlmICghdmFsKSByZXNldElucHV0KGNtKTsK
ICAgICB9CiAgIH0pOworICBvcHRpb24oImRpc2FibGVJbnB1dCIsIGZhbHNlLCBmdW5jdGlvbihj
bSwgdmFsKSB7aWYgKCF2YWwpIHJlc2V0SW5wdXQoY20pO30sIHRydWUpOwogICBvcHRpb24oImRy
YWdEcm9wIiwgdHJ1ZSk7CgogICBvcHRpb24oImN1cnNvckJsaW5rUmF0ZSIsIDUzMCk7CkBAIC0z
MzM3LDEzICs0MzMzLDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBv
cHRpb24oImN1cnNvckhlaWdodCIsIDEpOwogICBvcHRpb24oIndvcmtUaW1lIiwgMTAwKTsKICAg
b3B0aW9uKCJ3b3JrRGVsYXkiLCAxMDApOwotICBvcHRpb24oImZsYXR0ZW5TcGFucyIsIHRydWUp
OworICBvcHRpb24oImZsYXR0ZW5TcGFucyIsIHRydWUsIHJlc2V0TW9kZVN0YXRlLCB0cnVlKTsK
KyAgb3B0aW9uKCJhZGRNb2RlQ2xhc3MiLCBmYWxzZSwgcmVzZXRNb2RlU3RhdGUsIHRydWUpOwog
ICBvcHRpb24oInBvbGxJbnRlcnZhbCIsIDEwMCk7Ci0gIG9wdGlvbigidW5kb0RlcHRoIiwgNDAs
IGZ1bmN0aW9uKGNtLCB2YWwpe2NtLmRvYy5oaXN0b3J5LnVuZG9EZXB0aCA9IHZhbDt9KTsKLSAg
b3B0aW9uKCJoaXN0b3J5RXZlbnREZWxheSIsIDUwMCk7CisgIG9wdGlvbigidW5kb0RlcHRoIiwg
MjAwLCBmdW5jdGlvbihjbSwgdmFsKXtjbS5kb2MuaGlzdG9yeS51bmRvRGVwdGggPSB2YWw7fSk7
CisgIG9wdGlvbigiaGlzdG9yeUV2ZW50RGVsYXkiLCAxMjUwKTsKICAgb3B0aW9uKCJ2aWV3cG9y
dE1hcmdpbiIsIDEwLCBmdW5jdGlvbihjbSl7Y20ucmVmcmVzaCgpO30sIHRydWUpOwotICBvcHRp
b24oIm1heEhpZ2hsaWdodExlbmd0aCIsIDEwMDAwLCBmdW5jdGlvbihjbSl7bG9hZE1vZGUoY20p
OyBjbS5yZWZyZXNoKCk7fSwgdHJ1ZSk7Ci0gIG9wdGlvbigiY3J1ZGVNZWFzdXJpbmdGcm9tIiwg
MTAwMDApOworICBvcHRpb24oIm1heEhpZ2hsaWdodExlbmd0aCIsIDEwMDAwLCByZXNldE1vZGVT
dGF0ZSwgdHJ1ZSk7CiAgIG9wdGlvbigibW92ZUlucHV0V2l0aEN1cnNvciIsIHRydWUsIGZ1bmN0
aW9uKGNtLCB2YWwpIHsKICAgICBpZiAoIXZhbCkgY20uZGlzcGxheS5pbnB1dERpdi5zdHlsZS50
b3AgPSBjbS5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQgPSAwOwogICB9KTsKQEAgLTMzNTgs
NiArNDM1NCw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBLbm93
biBtb2RlcywgYnkgbmFtZSBhbmQgYnkgTUlNRQogICB2YXIgbW9kZXMgPSBDb2RlTWlycm9yLm1v
ZGVzID0ge30sIG1pbWVNb2RlcyA9IENvZGVNaXJyb3IubWltZU1vZGVzID0ge307CgorICAvLyBF
eHRyYSBhcmd1bWVudHMgYXJlIHN0b3JlZCBhcyB0aGUgbW9kZSdzIGRlcGVuZGVuY2llcywgd2hp
Y2ggaXMKKyAgLy8gdXNlZCBieSAobGVnYWN5KSBtZWNoYW5pc21zIGxpa2UgbG9hZG1vZGUuanMg
dG8gYXV0b21hdGljYWxseQorICAvLyBsb2FkIGEgbW9kZS4gKFByZWZlcnJlZCBtZWNoYW5pc20g
aXMgdGhlIHJlcXVpcmUvZGVmaW5lIGNhbGxzLikKICAgQ29kZU1pcnJvci5kZWZpbmVNb2RlID0g
ZnVuY3Rpb24obmFtZSwgbW9kZSkgewogICAgIGlmICghQ29kZU1pcnJvci5kZWZhdWx0cy5tb2Rl
ICYmIG5hbWUgIT0gIm51bGwiKSBDb2RlTWlycm9yLmRlZmF1bHRzLm1vZGUgPSBuYW1lOwogICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikgewpAQCAtMzM3MSwxMSArNDM3MCwxNCBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVj
OwogICB9OwoKKyAgLy8gR2l2ZW4gYSBNSU1FIHR5cGUsIGEge25hbWUsIC4uLm9wdGlvbnN9IGNv
bmZpZyBvYmplY3QsIG9yIGEgbmFtZQorICAvLyBzdHJpbmcsIHJldHVybiBhIG1vZGUgY29uZmln
IG9iamVjdC4KICAgQ29kZU1pcnJvci5yZXNvbHZlTW9kZSA9IGZ1bmN0aW9uKHNwZWMpIHsKICAg
ICBpZiAodHlwZW9mIHNwZWMgPT0gInN0cmluZyIgJiYgbWltZU1vZGVzLmhhc093blByb3BlcnR5
KHNwZWMpKSB7CiAgICAgICBzcGVjID0gbWltZU1vZGVzW3NwZWNdOwogICAgIH0gZWxzZSBpZiAo
c3BlYyAmJiB0eXBlb2Ygc3BlYy5uYW1lID09ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Q
cm9wZXJ0eShzcGVjLm5hbWUpKSB7CiAgICAgICB2YXIgZm91bmQgPSBtaW1lTW9kZXNbc3BlYy5u
YW1lXTsKKyAgICAgIGlmICh0eXBlb2YgZm91bmQgPT0gInN0cmluZyIpIGZvdW5kID0ge25hbWU6
IGZvdW5kfTsKICAgICAgIHNwZWMgPSBjcmVhdGVPYmooZm91bmQsIHNwZWMpOwogICAgICAgc3Bl
Yy5uYW1lID0gZm91bmQubmFtZTsKICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJp
bmciICYmIC9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChzcGVjKSkgewpAQCAtMzM4NSw2
ICs0Mzg3LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZWxzZSBy
ZXR1cm4gc3BlYyB8fCB7bmFtZTogIm51bGwifTsKICAgfTsKCisgIC8vIEdpdmVuIGEgbW9kZSBz
cGVjIChhbnl0aGluZyB0aGF0IHJlc29sdmVNb2RlIGFjY2VwdHMpLCBmaW5kIGFuZAorICAvLyBp
bml0aWFsaXplIGFuIGFjdHVhbCBtb2RlIG9iamVjdC4KICAgQ29kZU1pcnJvci5nZXRNb2RlID0g
ZnVuY3Rpb24ob3B0aW9ucywgc3BlYykgewogICAgIHZhciBzcGVjID0gQ29kZU1pcnJvci5yZXNv
bHZlTW9kZShzcGVjKTsKICAgICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1tzcGVjLm5hbWVdOwpAQCAt
MzM5OSwxNSArNDQwMywyMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgIH0KICAgICB9CiAgICAgbW9kZU9iai5uYW1lID0gc3BlYy5uYW1lOworICAgIGlmIChzcGVj
LmhlbHBlclR5cGUpIG1vZGVPYmouaGVscGVyVHlwZSA9IHNwZWMuaGVscGVyVHlwZTsKKyAgICBp
ZiAoc3BlYy5tb2RlUHJvcHMpIGZvciAodmFyIHByb3AgaW4gc3BlYy5tb2RlUHJvcHMpCisgICAg
ICBtb2RlT2JqW3Byb3BdID0gc3BlYy5tb2RlUHJvcHNbcHJvcF07CgogICAgIHJldHVybiBtb2Rl
T2JqOwogICB9OwoKKyAgLy8gTWluaW1hbCBkZWZhdWx0IG1vZGUuCiAgIENvZGVNaXJyb3IuZGVm
aW5lTW9kZSgibnVsbCIsIGZ1bmN0aW9uKCkgewogICAgIHJldHVybiB7dG9rZW46IGZ1bmN0aW9u
KHN0cmVhbSkge3N0cmVhbS5za2lwVG9FbmQoKTt9fTsKICAgfSk7CiAgIENvZGVNaXJyb3IuZGVm
aW5lTUlNRSgidGV4dC9wbGFpbiIsICJudWxsIik7CgorICAvLyBUaGlzIGNhbiBiZSB1c2VkIHRv
IGF0dGFjaCBwcm9wZXJ0aWVzIHRvIG1vZGUgb2JqZWN0cyBmcm9tCisgIC8vIG91dHNpZGUgdGhl
IGFjdHVhbCBtb2RlIGRlZmluaXRpb24uCiAgIHZhciBtb2RlRXh0ZW5zaW9ucyA9IENvZGVNaXJy
b3IubW9kZUV4dGVuc2lvbnMgPSB7fTsKICAgQ29kZU1pcnJvci5leHRlbmRNb2RlID0gZnVuY3Rp
b24obW9kZSwgcHJvcGVydGllcykgewogICAgIHZhciBleHRzID0gbW9kZUV4dGVuc2lvbnMuaGFz
T3duUHJvcGVydHkobW9kZSkgPyBtb2RlRXh0ZW5zaW9uc1ttb2RlXSA6IChtb2RlRXh0ZW5zaW9u
c1ttb2RlXSA9IHt9KTsKQEAgLTM0MjksMTkgKzQ0MzksMjAgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CgogICB2YXIgaGVscGVycyA9IENvZGVNaXJyb3IuaGVscGVycyA9IHt9
OwogICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgdmFs
dWUpIHsKLSAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIGhlbHBlcnNbdHlw
ZV0gPSBDb2RlTWlycm9yW3R5cGVdID0ge307CisgICAgaWYgKCFoZWxwZXJzLmhhc093blByb3Bl
cnR5KHR5cGUpKSBoZWxwZXJzW3R5cGVdID0gQ29kZU1pcnJvclt0eXBlXSA9IHtfZ2xvYmFsOiBb
XX07CiAgICAgaGVscGVyc1t0eXBlXVtuYW1lXSA9IHZhbHVlOwogICB9OwotCi0gIC8vIFVUSUxJ
VElFUwotCi0gIENvZGVNaXJyb3IuaXNXb3JkQ2hhciA9IGlzV29yZENoYXI7CisgIENvZGVNaXJy
b3IucmVnaXN0ZXJHbG9iYWxIZWxwZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBwcmVkaWNhdGUs
IHZhbHVlKSB7CisgICAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcih0eXBlLCBuYW1lLCB2YWx1
ZSk7CisgICAgaGVscGVyc1t0eXBlXS5fZ2xvYmFsLnB1c2goe3ByZWQ6IHByZWRpY2F0ZSwgdmFs
OiB2YWx1ZX0pOworICB9OwoKICAgLy8gTU9ERSBTVEFURSBIQU5ETElORwoKLSAgLy8gVXRpbGl0
eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBzdGF0ZS4gRXhwb3J0ZWQgYmVjYXVzZSBtb2Rl
cwotICAvLyBzb21ldGltZXMgbmVlZCB0byBkbyB0aGlzLgotICBmdW5jdGlvbiBjb3B5U3RhdGUo
bW9kZSwgc3RhdGUpIHsKKyAgLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBz
dGF0ZS4gRXhwb3J0ZWQgYmVjYXVzZSBuZXN0ZWQKKyAgLy8gbW9kZXMgbmVlZCB0byBkbyB0aGlz
IGZvciB0aGVpciBpbm5lciBtb2Rlcy4KKworICB2YXIgY29weVN0YXRlID0gQ29kZU1pcnJvci5j
b3B5U3RhdGUgPSBmdW5jdGlvbihtb2RlLCBzdGF0ZSkgewogICAgIGlmIChzdGF0ZSA9PT0gdHJ1
ZSkgcmV0dXJuIHN0YXRlOwogICAgIGlmIChtb2RlLmNvcHlTdGF0ZSkgcmV0dXJuIG1vZGUuY29w
eVN0YXRlKHN0YXRlKTsKICAgICB2YXIgbnN0YXRlID0ge307CkBAIC0zNDUxLDE0ICs0NDYyLDE0
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgbnN0YXRlW25dID0g
dmFsOwogICAgIH0KICAgICByZXR1cm4gbnN0YXRlOwotICB9Ci0gIENvZGVNaXJyb3IuY29weVN0
YXRlID0gY29weVN0YXRlOworICB9OwoKLSAgZnVuY3Rpb24gc3RhcnRTdGF0ZShtb2RlLCBhMSwg
YTIpIHsKKyAgdmFyIHN0YXJ0U3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUgPSBmdW5jdGlv
bihtb2RlLCBhMSwgYTIpIHsKICAgICByZXR1cm4gbW9kZS5zdGFydFN0YXRlID8gbW9kZS5zdGFy
dFN0YXRlKGExLCBhMikgOiB0cnVlOwotICB9Ci0gIENvZGVNaXJyb3Iuc3RhcnRTdGF0ZSA9IHN0
YXJ0U3RhdGU7CisgIH07CgorICAvLyBHaXZlbiBhIG1vZGUgYW5kIGEgc3RhdGUgKGZvciB0aGF0
IG1vZGUpLCBmaW5kIHRoZSBpbm5lciBtb2RlIGFuZAorICAvLyBzdGF0ZSBhdCB0aGUgcG9zaXRp
b24gdGhhdCB0aGUgc3RhdGUgcmVmZXJzIHRvLgogICBDb2RlTWlycm9yLmlubmVyTW9kZSA9IGZ1
bmN0aW9uKG1vZGUsIHN0YXRlKSB7CiAgICAgd2hpbGUgKG1vZGUuaW5uZXJNb2RlKSB7CiAgICAg
ICB2YXIgaW5mbyA9IG1vZGUuaW5uZXJNb2RlKHN0YXRlKTsKQEAgLTM0NzEsNDkgKzQ0ODIsNzMg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CgogICAvLyBTVEFOREFSRCBDT01N
QU5EUwoKKyAgLy8gQ29tbWFuZHMgYXJlIHBhcmFtZXRlci1sZXNzIGFjdGlvbnMgdGhhdCBjYW4g
YmUgcGVyZm9ybWVkIG9uIGFuCisgIC8vIGVkaXRvciwgbW9zdGx5IHVzZWQgZm9yIGtleWJpbmRp
bmdzLgogICB2YXIgY29tbWFuZHMgPSBDb2RlTWlycm9yLmNvbW1hbmRzID0gewotICAgIHNlbGVj
dEFsbDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24oUG9zKGNtLmZpcnN0TGluZSgpLCAw
KSwgUG9zKGNtLmxhc3RMaW5lKCkpKTt9LAorICAgIHNlbGVjdEFsbDogZnVuY3Rpb24oY20pIHtj
bS5zZXRTZWxlY3Rpb24oUG9zKGNtLmZpcnN0TGluZSgpLCAwKSwgUG9zKGNtLmxhc3RMaW5lKCkp
LCBzZWxfZG9udFNjcm9sbCk7fSwKKyAgICBzaW5nbGVTZWxlY3Rpb246IGZ1bmN0aW9uKGNtKSB7
CisgICAgICBjbS5zZXRTZWxlY3Rpb24oY20uZ2V0Q3Vyc29yKCJhbmNob3IiKSwgY20uZ2V0Q3Vy
c29yKCJoZWFkIiksIHNlbF9kb250U2Nyb2xsKTsKKyAgICB9LAogICAgIGtpbGxMaW5lOiBmdW5j
dGlvbihjbSkgewotICAgICAgdmFyIGZyb20gPSBjbS5nZXRDdXJzb3IodHJ1ZSksIHRvID0gY20u
Z2V0Q3Vyc29yKGZhbHNlKSwgc2VsID0gIXBvc0VxKGZyb20sIHRvKTsKLSAgICAgIGlmICghc2Vs
ICYmIGNtLmdldExpbmUoZnJvbS5saW5lKS5sZW5ndGggPT0gZnJvbS5jaCkKLSAgICAgICAgY20u
cmVwbGFjZVJhbmdlKCIiLCBmcm9tLCBQb3MoZnJvbS5saW5lICsgMSwgMCksICIrZGVsZXRlIik7
Ci0gICAgICBlbHNlIGNtLnJlcGxhY2VSYW5nZSgiIiwgZnJvbSwgc2VsID8gdG8gOiBQb3MoZnJv
bS5saW5lKSwgIitkZWxldGUiKTsKKyAgICAgIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0
aW9uKHJhbmdlKSB7CisgICAgICAgIGlmIChyYW5nZS5lbXB0eSgpKSB7CisgICAgICAgICAgdmFy
IGxlbiA9IGdldExpbmUoY20uZG9jLCByYW5nZS5oZWFkLmxpbmUpLnRleHQubGVuZ3RoOworICAg
ICAgICAgIGlmIChyYW5nZS5oZWFkLmNoID09IGxlbiAmJiByYW5nZS5oZWFkLmxpbmUgPCBjbS5s
YXN0TGluZSgpKQorICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiByYW5nZS5oZWFkLCB0bzogUG9z
KHJhbmdlLmhlYWQubGluZSArIDEsIDApfTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXR1cm4ge2Zyb206IHJhbmdlLmhlYWQsIHRvOiBQb3MocmFuZ2UuaGVhZC5saW5lLCBsZW4pfTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4ge2Zyb206IHJhbmdlLmZyb20oKSwg
dG86IHJhbmdlLnRvKCl9OworICAgICAgICB9CisgICAgICB9KTsKICAgICB9LAogICAgIGRlbGV0
ZUxpbmU6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICB2YXIgbCA9IGNtLmdldEN1cnNvcigpLmxpbmU7
Ci0gICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIsIFBvcyhsLCAwKSwgUG9zKGwpLCAiK2RlbGV0ZSIp
OworICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAg
ICAgcmV0dXJuIHtmcm9tOiBQb3MocmFuZ2UuZnJvbSgpLmxpbmUsIDApLAorICAgICAgICAgICAg
ICAgIHRvOiBjbGlwUG9zKGNtLmRvYywgUG9zKHJhbmdlLnRvKCkubGluZSArIDEsIDApKX07Cisg
ICAgICB9KTsKICAgICB9LAogICAgIGRlbExpbmVMZWZ0OiBmdW5jdGlvbihjbSkgewotICAgICAg
dmFyIGN1ciA9IGNtLmdldEN1cnNvcigpOwotICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCBQb3Mo
Y3VyLmxpbmUsIDApLCBjdXIsICIrZGVsZXRlIik7CisgICAgICBkZWxldGVOZWFyU2VsZWN0aW9u
KGNtLCBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICByZXR1cm4ge2Zyb206IFBvcyhyYW5nZS5m
cm9tKCkubGluZSwgMCksIHRvOiByYW5nZS5mcm9tKCl9OworICAgICAgfSk7CiAgICAgfSwKICAg
ICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9LAogICAgIHJlZG86IGZ1bmN0aW9uKGNt
KSB7Y20ucmVkbygpO30sCisgICAgdW5kb1NlbGVjdGlvbjogZnVuY3Rpb24oY20pIHtjbS51bmRv
U2VsZWN0aW9uKCk7fSwKKyAgICByZWRvU2VsZWN0aW9uOiBmdW5jdGlvbihjbSkge2NtLnJlZG9T
ZWxlY3Rpb24oKTt9LAogICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Y20uZXh0ZW5kU2Vs
ZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCkpO30sCiAgICAgZ29Eb2NFbmQ6IGZ1bmN0aW9u
KGNtKSB7Y20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhjbS5sYXN0TGluZSgpKSk7fSwKICAgICBnb0xp
bmVTdGFydDogZnVuY3Rpb24oY20pIHsKLSAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbihsaW5lU3Rh
cnQoY20sIGNtLmdldEN1cnNvcigpLmxpbmUpKTsKKyAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNC
eShmdW5jdGlvbihyYW5nZSkgeyByZXR1cm4gbGluZVN0YXJ0KGNtLCByYW5nZS5oZWFkLmxpbmUp
OyB9LCBzZWxfbW92ZSk7CiAgICAgfSwKICAgICBnb0xpbmVTdGFydFNtYXJ0OiBmdW5jdGlvbihj
bSkgewotICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBzdGFydCA9IGxpbmVTdGFydChj
bSwgY3VyLmxpbmUpOwotICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lSGFuZGxlKHN0YXJ0Lmxp
bmUpOwotICAgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7Ci0gICAgICBpZiAoIW9yZGVy
IHx8IG9yZGVyWzBdLmxldmVsID09IDApIHsKLSAgICAgICAgdmFyIGZpcnN0Tm9uV1MgPSBNYXRo
Lm1heCgwLCBsaW5lLnRleHQuc2VhcmNoKC9cUy8pKTsKLSAgICAgICAgdmFyIGluV1MgPSBjdXIu
bGluZSA9PSBzdGFydC5saW5lICYmIGN1ci5jaCA8PSBmaXJzdE5vbldTICYmIGN1ci5jaDsKLSAg
ICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhzdGFydC5saW5lLCBpbldTID8gMCA6IGZpcnN0
Tm9uV1MpKTsKLSAgICAgIH0gZWxzZSBjbS5leHRlbmRTZWxlY3Rpb24oc3RhcnQpOworICAgICAg
Y20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHZhciBzdGFy
dCA9IGxpbmVTdGFydChjbSwgcmFuZ2UuaGVhZC5saW5lKTsKKyAgICAgICAgdmFyIGxpbmUgPSBj
bS5nZXRMaW5lSGFuZGxlKHN0YXJ0LmxpbmUpOworICAgICAgICB2YXIgb3JkZXIgPSBnZXRPcmRl
cihsaW5lKTsKKyAgICAgICAgaWYgKCFvcmRlciB8fCBvcmRlclswXS5sZXZlbCA9PSAwKSB7Cisg
ICAgICAgICAgdmFyIGZpcnN0Tm9uV1MgPSBNYXRoLm1heCgwLCBsaW5lLnRleHQuc2VhcmNoKC9c
Uy8pKTsKKyAgICAgICAgICB2YXIgaW5XUyA9IHJhbmdlLmhlYWQubGluZSA9PSBzdGFydC5saW5l
ICYmIHJhbmdlLmhlYWQuY2ggPD0gZmlyc3ROb25XUyAmJiByYW5nZS5oZWFkLmNoOworICAgICAg
ICAgIHJldHVybiBQb3Moc3RhcnQubGluZSwgaW5XUyA/IDAgOiBmaXJzdE5vbldTKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gc3RhcnQ7CisgICAgICB9LCBzZWxfbW92ZSk7CiAgICAgfSwK
ICAgICBnb0xpbmVFbmQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICBjbS5leHRlbmRTZWxlY3Rpb24o
bGluZUVuZChjbSwgY20uZ2V0Q3Vyc29yKCkubGluZSkpOworICAgICAgY20uZXh0ZW5kU2VsZWN0
aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7IHJldHVybiBsaW5lRW5kKGNtLCByYW5nZS5oZWFkLmxp
bmUpOyB9LCBzZWxfbW92ZSk7CiAgICAgfSwKICAgICBnb0xpbmVSaWdodDogZnVuY3Rpb24oY20p
IHsKLSAgICAgIHZhciB0b3AgPSBjbS5jaGFyQ29vcmRzKGNtLmdldEN1cnNvcigpLCAiZGl2Iiku
dG9wICsgNTsKLSAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbihjbS5jb29yZHNDaGFyKHtsZWZ0OiBj
bS5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGggKyAxMDAsIHRvcDogdG9wfSwgImRpdiIpKTsK
KyAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB2
YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCAiZGl2IikudG9wICsgNTsKKyAgICAg
ICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZzZXRX
aWR0aCArIDEwMCwgdG9wOiB0b3B9LCAiZGl2Iik7CisgICAgICB9LCBzZWxfbW92ZSk7CiAgICAg
fSwKICAgICBnb0xpbmVMZWZ0OiBmdW5jdGlvbihjbSkgewotICAgICAgdmFyIHRvcCA9IGNtLmNo
YXJDb29yZHMoY20uZ2V0Q3Vyc29yKCksICJkaXYiKS50b3AgKyA1OwotICAgICAgY20uZXh0ZW5k
U2VsZWN0aW9uKGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IDAsIHRvcDogdG9wfSwgImRpdiIpKTsKKyAg
ICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgeworICAgICAgICB2YXIg
dG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCAiZGl2IikudG9wICsgNTsKKyAgICAgICAg
cmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IDAsIHRvcDogdG9wfSwgImRpdiIpOworICAgICAg
fSwgc2VsX21vdmUpOwogICAgIH0sCiAgICAgZ29MaW5lVXA6IGZ1bmN0aW9uKGNtKSB7Y20ubW92
ZVYoLTEsICJsaW5lIik7fSwKICAgICBnb0xpbmVEb3duOiBmdW5jdGlvbihjbSkge2NtLm1vdmVW
KDEsICJsaW5lIik7fSwKQEAgLTM1MzYsMjIgKzQ1NzEsNDEgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgaW5kZW50QXV0bzogZnVuY3Rpb24oY20pIHtjbS5pbmRlbnRT
ZWxlY3Rpb24oInNtYXJ0Iik7fSwKICAgICBpbmRlbnRNb3JlOiBmdW5jdGlvbihjbSkge2NtLmlu
ZGVudFNlbGVjdGlvbigiYWRkIik7fSwKICAgICBpbmRlbnRMZXNzOiBmdW5jdGlvbihjbSkge2Nt
LmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKTt9LAotICAgIGluc2VydFRhYjogZnVuY3Rpb24o
Y20pIHtjbS5yZXBsYWNlU2VsZWN0aW9uKCJcdCIsICJlbmQiLCAiK2lucHV0Iik7fSwKKyAgICBp
bnNlcnRUYWI6IGZ1bmN0aW9uKGNtKSB7Y20ucmVwbGFjZVNlbGVjdGlvbigiXHQiKTt9LAorICAg
IGluc2VydFNvZnRUYWI6IGZ1bmN0aW9uKGNtKSB7CisgICAgICB2YXIgc3BhY2VzID0gW10sIHJh
bmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCksIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemU7
CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAg
ICB2YXIgcG9zID0gcmFuZ2VzW2ldLmZyb20oKTsKKyAgICAgICAgdmFyIGNvbCA9IGNvdW50Q29s
dW1uKGNtLmdldExpbmUocG9zLmxpbmUpLCBwb3MuY2gsIHRhYlNpemUpOworICAgICAgICBzcGFj
ZXMucHVzaChuZXcgQXJyYXkodGFiU2l6ZSAtIGNvbCAlIHRhYlNpemUgKyAxKS5qb2luKCIgIikp
OworICAgICAgfQorICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbnMoc3BhY2VzKTsKKyAgICB9LAog
ICAgIGRlZmF1bHRUYWI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgICBpZiAoY20uc29tZXRoaW5nU2Vs
ZWN0ZWQoKSkgY20uaW5kZW50U2VsZWN0aW9uKCJhZGQiKTsKLSAgICAgIGVsc2UgY20ucmVwbGFj
ZVNlbGVjdGlvbigiXHQiLCAiZW5kIiwgIitpbnB1dCIpOworICAgICAgZWxzZSBjbS5leGVjQ29t
bWFuZCgiaW5zZXJ0VGFiIik7CiAgICAgfSwKICAgICB0cmFuc3Bvc2VDaGFyczogZnVuY3Rpb24o
Y20pIHsKLSAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgbGluZSA9IGNtLmdldExpbmUo
Y3VyLmxpbmUpOwotICAgICAgaWYgKGN1ci5jaCA+IDAgJiYgY3VyLmNoIDwgbGluZS5sZW5ndGgg
LSAxKQotICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoY3VyLmNoKSArIGxpbmUu
Y2hhckF0KGN1ci5jaCAtIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgUG9zKGN1ci5saW5l
LCBjdXIuY2ggLSAxKSwgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKSk7CisgICAgICBydW5Jbk9w
KGNtLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25z
KCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgdmFyIGN1ciA9IHJhbmdlc1tpXS5oZWFkLCBsaW5lID0gZ2V0TGluZShjbS5kb2Ms
IGN1ci5saW5lKS50ZXh0OworICAgICAgICAgIGlmIChjdXIuY2ggPiAwICYmIGN1ci5jaCA8IGxp
bmUubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdChj
dXIuY2gpICsgbGluZS5jaGFyQXQoY3VyLmNoIC0gMSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAxKSwgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAx
KSk7CisgICAgICAgIH0KKyAgICAgIH0pOwogICAgIH0sCiAgICAgbmV3bGluZUFuZEluZGVudDog
ZnVuY3Rpb24oY20pIHsKLSAgICAgIG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oKSB7Ci0gICAgICAg
IGNtLnJlcGxhY2VTZWxlY3Rpb24oIlxuIiwgImVuZCIsICIraW5wdXQiKTsKLSAgICAgICAgY20u
aW5kZW50TGluZShjbS5nZXRDdXJzb3IoKS5saW5lLCBudWxsLCB0cnVlKTsKLSAgICAgIH0pKCk7
CisgICAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxlbiA9IGNtLmxp
c3RTZWxlY3Rpb25zKCkubGVuZ3RoOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsg
aSsrKSB7CisgICAgICAgICAgdmFyIHJhbmdlID0gY20ubGlzdFNlbGVjdGlvbnMoKVtpXTsKKyAg
ICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoIlxuIiwgcmFuZ2UuYW5jaG9yLCByYW5nZS5oZWFkLCAi
K2lucHV0Iik7CisgICAgICAgICAgY20uaW5kZW50TGluZShyYW5nZS5mcm9tKCkubGluZSArIDEs
IG51bGwsIHRydWUpOworICAgICAgICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pOworICAgICAg
ICB9CisgICAgICB9KTsKICAgICB9LAogICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24oY20p
IHtjbS50b2dnbGVPdmVyd3JpdGUoKTt9CiAgIH07CkBAIC0zNTY0LDE3ICs0NjE4LDIwIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICJFbmQiOiAiZ29MaW5lRW5kIiwg
IkhvbWUiOiAiZ29MaW5lU3RhcnRTbWFydCIsICJQYWdlVXAiOiAiZ29QYWdlVXAiLCAiUGFnZURv
d24iOiAiZ29QYWdlRG93biIsCiAgICAgIkRlbGV0ZSI6ICJkZWxDaGFyQWZ0ZXIiLCAiQmFja3Nw
YWNlIjogImRlbENoYXJCZWZvcmUiLCAiU2hpZnQtQmFja3NwYWNlIjogImRlbENoYXJCZWZvcmUi
LAogICAgICJUYWIiOiAiZGVmYXVsdFRhYiIsICJTaGlmdC1UYWIiOiAiaW5kZW50QXV0byIsCi0g
ICAgIkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnQiLCAiSW5zZXJ0IjogInRvZ2dsZU92ZXJ3cml0
ZSIKKyAgICAiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudCIsICJJbnNlcnQiOiAidG9nZ2xlT3Zl
cndyaXRlIiwKKyAgICAiRXNjIjogInNpbmdsZVNlbGVjdGlvbiIKICAgfTsKICAgLy8gTm90ZSB0
aGF0IHRoZSBzYXZlIGFuZCBmaW5kLXJlbGF0ZWQgY29tbWFuZHMgYXJlbid0IGRlZmluZWQgYnkK
LSAgLy8gZGVmYXVsdC4gVW5rbm93biBjb21tYW5kcyBhcmUgc2ltcGx5IGlnbm9yZWQuCisgIC8v
IGRlZmF1bHQuIFVzZXIgY29kZSBvciBhZGRvbnMgY2FuIGRlZmluZSB0aGVtLiBVbmtub3duIGNv
bW1hbmRzCisgIC8vIGFyZSBzaW1wbHkgaWdub3JlZC4KICAga2V5TWFwLnBjRGVmYXVsdCA9IHsK
ICAgICAiQ3RybC1BIjogInNlbGVjdEFsbCIsICJDdHJsLUQiOiAiZGVsZXRlTGluZSIsICJDdHJs
LVoiOiAidW5kbyIsICJTaGlmdC1DdHJsLVoiOiAicmVkbyIsICJDdHJsLVkiOiAicmVkbyIsCi0g
ICAgIkN0cmwtSG9tZSI6ICJnb0RvY1N0YXJ0IiwgIkFsdC1VcCI6ICJnb0RvY1N0YXJ0IiwgIkN0
cmwtRW5kIjogImdvRG9jRW5kIiwgIkN0cmwtRG93biI6ICJnb0RvY0VuZCIsCisgICAgIkN0cmwt
SG9tZSI6ICJnb0RvY1N0YXJ0IiwgIkN0cmwtVXAiOiAiZ29Eb2NTdGFydCIsICJDdHJsLUVuZCI6
ICJnb0RvY0VuZCIsICJDdHJsLURvd24iOiAiZ29Eb2NFbmQiLAogICAgICJDdHJsLUxlZnQiOiAi
Z29Hcm91cExlZnQiLCAiQ3RybC1SaWdodCI6ICJnb0dyb3VwUmlnaHQiLCAiQWx0LUxlZnQiOiAi
Z29MaW5lU3RhcnQiLCAiQWx0LVJpZ2h0IjogImdvTGluZUVuZCIsCiAgICAgIkN0cmwtQmFja3Nw
YWNlIjogImRlbEdyb3VwQmVmb3JlIiwgIkN0cmwtRGVsZXRlIjogImRlbEdyb3VwQWZ0ZXIiLCAi
Q3RybC1TIjogInNhdmUiLCAiQ3RybC1GIjogImZpbmQiLAogICAgICJDdHJsLUciOiAiZmluZE5l
eHQiLCAiU2hpZnQtQ3RybC1HIjogImZpbmRQcmV2IiwgIlNoaWZ0LUN0cmwtRiI6ICJyZXBsYWNl
IiwgIlNoaWZ0LUN0cmwtUiI6ICJyZXBsYWNlQWxsIiwKICAgICAiQ3RybC1bIjogImluZGVudExl
c3MiLCAiQ3RybC1dIjogImluZGVudE1vcmUiLAorICAgICJDdHJsLVUiOiAidW5kb1NlbGVjdGlv
biIsICJTaGlmdC1DdHJsLVUiOiAicmVkb1NlbGVjdGlvbiIsICJBbHQtVSI6ICJyZWRvU2VsZWN0
aW9uIiwKICAgICBmYWxsdGhyb3VnaDogImJhc2ljIgogICB9OwogICBrZXlNYXAubWFjRGVmYXVs
dCA9IHsKQEAgLTM1ODQsMTUgKzQ2NDEsMTcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgIkN0cmwtQWx0LUJhY2tzcGFjZSI6ICJkZWxHcm91cEFmdGVyIiwgIkFsdC1E
ZWxldGUiOiAiZGVsR3JvdXBBZnRlciIsICJDbWQtUyI6ICJzYXZlIiwgIkNtZC1GIjogImZpbmQi
LAogICAgICJDbWQtRyI6ICJmaW5kTmV4dCIsICJTaGlmdC1DbWQtRyI6ICJmaW5kUHJldiIsICJD
bWQtQWx0LUYiOiAicmVwbGFjZSIsICJTaGlmdC1DbWQtQWx0LUYiOiAicmVwbGFjZUFsbCIsCiAg
ICAgIkNtZC1bIjogImluZGVudExlc3MiLCAiQ21kLV0iOiAiaW5kZW50TW9yZSIsICJDbWQtQmFj
a3NwYWNlIjogImRlbExpbmVMZWZ0IiwKKyAgICAiQ21kLVUiOiAidW5kb1NlbGVjdGlvbiIsICJT
aGlmdC1DbWQtVSI6ICJyZWRvU2VsZWN0aW9uIiwKICAgICBmYWxsdGhyb3VnaDogWyJiYXNpYyIs
ICJlbWFjc3kiXQogICB9OwotICBrZXlNYXBbImRlZmF1bHQiXSA9IG1hYyA/IGtleU1hcC5tYWNE
ZWZhdWx0IDoga2V5TWFwLnBjRGVmYXVsdDsKKyAgLy8gVmVyeSBiYXNpYyByZWFkbGluZS9lbWFj
cy1zdHlsZSBiaW5kaW5ncywgd2hpY2ggYXJlIHN0YW5kYXJkIG9uIE1hYy4KICAga2V5TWFwLmVt
YWNzeSA9IHsKICAgICAiQ3RybC1GIjogImdvQ2hhclJpZ2h0IiwgIkN0cmwtQiI6ICJnb0NoYXJM
ZWZ0IiwgIkN0cmwtUCI6ICJnb0xpbmVVcCIsICJDdHJsLU4iOiAiZ29MaW5lRG93biIsCiAgICAg
IkFsdC1GIjogImdvV29yZFJpZ2h0IiwgIkFsdC1CIjogImdvV29yZExlZnQiLCAiQ3RybC1BIjog
ImdvTGluZVN0YXJ0IiwgIkN0cmwtRSI6ICJnb0xpbmVFbmQiLAogICAgICJDdHJsLVYiOiAiZ29Q
YWdlRG93biIsICJTaGlmdC1DdHJsLVYiOiAiZ29QYWdlVXAiLCAiQ3RybC1EIjogImRlbENoYXJB
ZnRlciIsICJDdHJsLUgiOiAiZGVsQ2hhckJlZm9yZSIsCiAgICAgIkFsdC1EIjogImRlbFdvcmRB
ZnRlciIsICJBbHQtQmFja3NwYWNlIjogImRlbFdvcmRCZWZvcmUiLCAiQ3RybC1LIjogImtpbGxM
aW5lIiwgIkN0cmwtVCI6ICJ0cmFuc3Bvc2VDaGFycyIKICAgfTsKKyAga2V5TWFwWyJkZWZhdWx0
Il0gPSBtYWMgPyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7CgogICAvLyBL
RVlNQVAgRElTUEFUQ0gKCkBAIC0zNjAxLDcgKzQ2NjAsMTEgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgZWxzZSByZXR1cm4gdmFsOwogICB9CgotICBmdW5jdGlvbiBs
b29rdXBLZXkobmFtZSwgbWFwcywgaGFuZGxlKSB7CisgIC8vIEdpdmVuIGFuIGFycmF5IG9mIGtl
eW1hcHMgYW5kIGEga2V5IG5hbWUsIGNhbGwgaGFuZGxlIG9uIGFueQorICAvLyBiaW5kaW5ncyBm
b3VuZCwgdW50aWwgdGhhdCByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLCBhdCB3aGljaCBwb2ludAor
ICAvLyB3ZSBjb25zaWRlciB0aGUga2V5IGhhbmRsZWQuIEltcGxlbWVudHMgdGhpbmdzIGxpa2Ug
YmluZGluZyBhIGtleQorICAvLyB0byBmYWxzZSBzdG9wcGluZyBmdXJ0aGVyIGhhbmRsaW5nIGFu
ZCBrZXltYXAgZmFsbHRocm91Z2guCisgIHZhciBsb29rdXBLZXkgPSBDb2RlTWlycm9yLmxvb2t1
cEtleSA9IGZ1bmN0aW9uKG5hbWUsIG1hcHMsIGhhbmRsZSkgewogICAgIGZ1bmN0aW9uIGxvb2t1
cChtYXApIHsKICAgICAgIG1hcCA9IGdldEtleU1hcChtYXApOwogICAgICAgdmFyIGZvdW5kID0g
bWFwW25hbWVdOwpAQCAtMzYxMyw3ICs0Njc2LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgICBpZiAoZmFsbHRocm91Z2ggPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwog
ICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmYWxsdGhyb3VnaCkgIT0g
IltvYmplY3QgQXJyYXldIikKICAgICAgICAgcmV0dXJuIGxvb2t1cChmYWxsdGhyb3VnaCk7Ci0g
ICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGZhbGx0aHJvdWdoLmxlbmd0aDsgaSA8IGU7ICsraSkg
eworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWxsdGhyb3VnaC5sZW5ndGg7ICsraSkgewog
ICAgICAgICB2YXIgZG9uZSA9IGxvb2t1cChmYWxsdGhyb3VnaFtpXSk7CiAgICAgICAgIGlmIChk
b25lKSByZXR1cm4gZG9uZTsKICAgICAgIH0KQEAgLTM2MjQsMTMgKzQ2ODcsMTggQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgZG9uZSA9IGxvb2t1cChtYXBz
W2ldKTsKICAgICAgIGlmIChkb25lKSByZXR1cm4gZG9uZSAhPSAic3RvcCI7CiAgICAgfQotICB9
Ci0gIGZ1bmN0aW9uIGlzTW9kaWZpZXJLZXkoZXZlbnQpIHsKKyAgfTsKKworICAvLyBNb2RpZmll
ciBrZXkgcHJlc3NlcyBkb24ndCBjb3VudCBhcyAncmVhbCcga2V5IHByZXNzZXMgZm9yIHRoZQor
ICAvLyBwdXJwb3NlIG9mIGtleW1hcCBmYWxsdGhyb3VnaC4KKyAgdmFyIGlzTW9kaWZpZXJLZXkg
PSBDb2RlTWlycm9yLmlzTW9kaWZpZXJLZXkgPSBmdW5jdGlvbihldmVudCkgewogICAgIHZhciBu
YW1lID0ga2V5TmFtZXNbZXZlbnQua2V5Q29kZV07CiAgICAgcmV0dXJuIG5hbWUgPT0gIkN0cmwi
IHx8IG5hbWUgPT0gIkFsdCIgfHwgbmFtZSA9PSAiU2hpZnQiIHx8IG5hbWUgPT0gIk1vZCI7Ci0g
IH0KLSAgZnVuY3Rpb24ga2V5TmFtZShldmVudCwgbm9TaGlmdCkgewotICAgIGlmIChvcGVyYSAm
JiBldmVudC5rZXlDb2RlID09IDM0ICYmIGV2ZW50WyJjaGFyIl0pIHJldHVybiBmYWxzZTsKKyAg
fTsKKworICAvLyBMb29rIHVwIHRoZSBuYW1lIG9mIGEga2V5IGFzIGluZGljYXRlZCBieSBhbiBl
dmVudCBvYmplY3QuCisgIHZhciBrZXlOYW1lID0gQ29kZU1pcnJvci5rZXlOYW1lID0gZnVuY3Rp
b24oZXZlbnQsIG5vU2hpZnQpIHsKKyAgICBpZiAocHJlc3RvICYmIGV2ZW50LmtleUNvZGUgPT0g
MzQgJiYgZXZlbnRbImNoYXIiXSkgcmV0dXJuIGZhbHNlOwogICAgIHZhciBuYW1lID0ga2V5TmFt
ZXNbZXZlbnQua2V5Q29kZV07CiAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBldmVudC5hbHRHcmFw
aEtleSkgcmV0dXJuIGZhbHNlOwogICAgIGlmIChldmVudC5hbHRLZXkpIG5hbWUgPSAiQWx0LSIg
KyBuYW1lOwpAQCAtMzYzOCwxMCArNDcwNiw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIGlmIChmbGlwQ3RybENtZCA/IGV2ZW50LmN0cmxLZXkgOiBldmVudC5tZXRh
S2V5KSBuYW1lID0gIkNtZC0iICsgbmFtZTsKICAgICBpZiAoIW5vU2hpZnQgJiYgZXZlbnQuc2hp
ZnRLZXkpIG5hbWUgPSAiU2hpZnQtIiArIG5hbWU7CiAgICAgcmV0dXJuIG5hbWU7Ci0gIH0KLSAg
Q29kZU1pcnJvci5sb29rdXBLZXkgPSBsb29rdXBLZXk7Ci0gIENvZGVNaXJyb3IuaXNNb2RpZmll
cktleSA9IGlzTW9kaWZpZXJLZXk7Ci0gIENvZGVNaXJyb3Iua2V5TmFtZSA9IGtleU5hbWU7Cisg
IH07CgogICAvLyBGUk9NVEVYVEFSRUEKCkBAIC0zNjU1LDkgKzQ3MjAsNyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAvLyBTZXQgYXV0b2ZvY3VzIHRvIHRydWUgaWYg
dGhpcyB0ZXh0YXJlYSBpcyBmb2N1c2VkLCBvciBpZiBpdCBoYXMKICAgICAvLyBhdXRvZm9jdXMg
YW5kIG5vIG90aGVyIGVsZW1lbnQgaXMgZm9jdXNlZC4KICAgICBpZiAob3B0aW9ucy5hdXRvZm9j
dXMgPT0gbnVsbCkgewotICAgICAgdmFyIGhhc0ZvY3VzID0gZG9jdW1lbnQuYm9keTsKLSAgICAg
IC8vIGRvYy5hY3RpdmVFbGVtZW50IG9jY2FzaW9uYWxseSB0aHJvd3Mgb24gSUUKLSAgICAgIHRy
eSB7IGhhc0ZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsgfSBjYXRjaChlKSB7fQorICAg
ICAgdmFyIGhhc0ZvY3VzID0gYWN0aXZlRWx0KCk7CiAgICAgICBvcHRpb25zLmF1dG9mb2N1cyA9
IGhhc0ZvY3VzID09IHRleHRhcmVhIHx8CiAgICAgICAgIHRleHRhcmVhLmdldEF0dHJpYnV0ZSgi
YXV0b2ZvY3VzIikgIT0gbnVsbCAmJiBoYXNGb2N1cyA9PSBkb2N1bWVudC5ib2R5OwogICAgIH0K
QEAgLTM3MDMsMTcgKzQ3NjYsMTcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgIC8vIEZlZCB0byB0aGUgbW9kZSBwYXJzZXJzLCBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25z
IHRvIG1ha2UKICAgLy8gcGFyc2VycyBtb3JlIHN1Y2NpbmN0LgoKLSAgLy8gVGhlIGNoYXJhY3Rl
ciBzdHJlYW0gdXNlZCBieSBhIG1vZGUncyBwYXJzZXIuCi0gIGZ1bmN0aW9uIFN0cmluZ1N0cmVh
bShzdHJpbmcsIHRhYlNpemUpIHsKKyAgdmFyIFN0cmluZ1N0cmVhbSA9IENvZGVNaXJyb3IuU3Ry
aW5nU3RyZWFtID0gZnVuY3Rpb24oc3RyaW5nLCB0YWJTaXplKSB7CiAgICAgdGhpcy5wb3MgPSB0
aGlzLnN0YXJ0ID0gMDsKICAgICB0aGlzLnN0cmluZyA9IHN0cmluZzsKICAgICB0aGlzLnRhYlNp
emUgPSB0YWJTaXplIHx8IDg7CiAgICAgdGhpcy5sYXN0Q29sdW1uUG9zID0gdGhpcy5sYXN0Q29s
dW1uVmFsdWUgPSAwOwotICB9CisgICAgdGhpcy5saW5lU3RhcnQgPSAwOworICB9OwoKICAgU3Ry
aW5nU3RyZWFtLnByb3RvdHlwZSA9IHsKICAgICBlb2w6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlz
LnBvcyA+PSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKLSAgICBzb2w6IGZ1bmN0aW9uKCkge3JldHVy
biB0aGlzLnBvcyA9PSAwO30sCisgICAgc29sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3Mg
PT0gdGhpcy5saW5lU3RhcnQ7fSwKICAgICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5z
dHJpbmcuY2hhckF0KHRoaXMucG9zKSB8fCB1bmRlZmluZWQ7fSwKICAgICBuZXh0OiBmdW5jdGlv
bigpIHsKICAgICAgIGlmICh0aGlzLnBvcyA8IHRoaXMuc3RyaW5nLmxlbmd0aCkKQEAgLTM3NDYs
OSArNDgwOSwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAg
dGhpcy5sYXN0Q29sdW1uVmFsdWUgPSBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5zdGFy
dCwgdGhpcy50YWJTaXplLCB0aGlzLmxhc3RDb2x1bW5Qb3MsIHRoaXMubGFzdENvbHVtblZhbHVl
KTsKICAgICAgICAgdGhpcy5sYXN0Q29sdW1uUG9zID0gdGhpcy5zdGFydDsKICAgICAgIH0KLSAg
ICAgIHJldHVybiB0aGlzLmxhc3RDb2x1bW5WYWx1ZTsKKyAgICAgIHJldHVybiB0aGlzLmxhc3RD
b2x1bW5WYWx1ZSAtICh0aGlzLmxpbmVTdGFydCA/IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0
aGlzLmxpbmVTdGFydCwgdGhpcy50YWJTaXplKSA6IDApOworICAgIH0sCisgICAgaW5kZW50YXRp
b246IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCBu
dWxsLCB0aGlzLnRhYlNpemUpIC0KKyAgICAgICAgKHRoaXMubGluZVN0YXJ0ID8gY291bnRDb2x1
bW4odGhpcy5zdHJpbmcsIHRoaXMubGluZVN0YXJ0LCB0aGlzLnRhYlNpemUpIDogMCk7CiAgICAg
fSwKLSAgICBpbmRlbnRhdGlvbjogZnVuY3Rpb24oKSB7cmV0dXJuIGNvdW50Q29sdW1uKHRoaXMu
c3RyaW5nLCBudWxsLCB0aGlzLnRhYlNpemUpO30sCiAgICAgbWF0Y2g6IGZ1bmN0aW9uKHBhdHRl
cm4sIGNvbnN1bWUsIGNhc2VJbnNlbnNpdGl2ZSkgewogICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJu
ID09ICJzdHJpbmciKSB7CiAgICAgICAgIHZhciBjYXNlZCA9IGZ1bmN0aW9uKHN0cikge3JldHVy
biBjYXNlSW5zZW5zaXRpdmUgPyBzdHIudG9Mb3dlckNhc2UoKSA6IHN0cjt9OwpAQCAtMzc2NCwy
MCArNDgzMCwzNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAg
cmV0dXJuIG1hdGNoOwogICAgICAgfQogICAgIH0sCi0gICAgY3VycmVudDogZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5wb3MpO30KKyAgICBjdXJy
ZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LCB0aGlz
LnBvcyk7fSwKKyAgICBoaWRlRmlyc3RDaGFyczogZnVuY3Rpb24obiwgaW5uZXIpIHsKKyAgICAg
IHRoaXMubGluZVN0YXJ0ICs9IG47CisgICAgICB0cnkgeyByZXR1cm4gaW5uZXIoKTsgfQorICAg
ICAgZmluYWxseSB7IHRoaXMubGluZVN0YXJ0IC09IG47IH0KKyAgICB9CiAgIH07Ci0gIENvZGVN
aXJyb3IuU3RyaW5nU3RyZWFtID0gU3RyaW5nU3RyZWFtOwoKICAgLy8gVEVYVE1BUktFUlMKCi0g
IGZ1bmN0aW9uIFRleHRNYXJrZXIoZG9jLCB0eXBlKSB7CisgIC8vIENyZWF0ZWQgd2l0aCBtYXJr
VGV4dCBhbmQgc2V0Qm9va21hcmsgbWV0aG9kcy4gQSBUZXh0TWFya2VyIGlzIGEKKyAgLy8gaGFu
ZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xlYXIgb3IgZmluZCBhIG1hcmtlZCBwb3NpdGlvbiBp
biB0aGUKKyAgLy8gZG9jdW1lbnQuIExpbmUgb2JqZWN0cyBob2xkIGFycmF5cyAobWFya2VkU3Bh
bnMpIGNvbnRhaW5pbmcKKyAgLy8ge2Zyb20sIHRvLCBtYXJrZXJ9IG9iamVjdCBwb2ludGluZyB0
byBzdWNoIG1hcmtlciBvYmplY3RzLCBhbmQKKyAgLy8gaW5kaWNhdGluZyB0aGF0IHN1Y2ggYSBt
YXJrZXIgaXMgcHJlc2VudCBvbiB0aGF0IGxpbmUuIE11bHRpcGxlCisgIC8vIGxpbmVzIG1heSBw
b2ludCB0byB0aGUgc2FtZSBtYXJrZXIgd2hlbiBpdCBzcGFucyBhY3Jvc3MgbGluZXMuCisgIC8v
IFRoZSBzcGFucyB3aWxsIGhhdmUgbnVsbCBmb3IgdGhlaXIgZnJvbS90byBwcm9wZXJ0aWVzIHdo
ZW4gdGhlCisgIC8vIG1hcmtlciBjb250aW51ZXMgYmV5b25kIHRoZSBzdGFydC9lbmQgb2YgdGhl
IGxpbmUuIE1hcmtlcnMgaGF2ZQorICAvLyBsaW5rcyBiYWNrIHRvIHRoZSBsaW5lcyB0aGV5IGN1
cnJlbnRseSB0b3VjaC4KKworICB2YXIgVGV4dE1hcmtlciA9IENvZGVNaXJyb3IuVGV4dE1hcmtl
ciA9IGZ1bmN0aW9uKGRvYywgdHlwZSkgewogICAgIHRoaXMubGluZXMgPSBbXTsKICAgICB0aGlz
LnR5cGUgPSB0eXBlOwogICAgIHRoaXMuZG9jID0gZG9jOwotICB9Ci0gIENvZGVNaXJyb3IuVGV4
dE1hcmtlciA9IFRleHRNYXJrZXI7CisgIH07CiAgIGV2ZW50TWl4aW4oVGV4dE1hcmtlcik7Cgor
ICAvLyBDbGVhciB0aGUgbWFya2VyLgogICBUZXh0TWFya2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1
bmN0aW9uKCkgewogICAgIGlmICh0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKSByZXR1cm47CiAgICAg
dmFyIGNtID0gdGhpcy5kb2MuY20sIHdpdGhPcCA9IGNtICYmICFjbS5jdXJPcDsKQEAgLTM3OTAs
MTUgKzQ4NzAsMTcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpKSB7CiAgICAgICB2YXIgbGlu
ZSA9IHRoaXMubGluZXNbaV07CiAgICAgICB2YXIgc3BhbiA9IGdldE1hcmtlZFNwYW5Gb3IobGlu
ZS5tYXJrZWRTcGFucywgdGhpcyk7Ci0gICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSBtYXggPSBs
aW5lTm8obGluZSk7CisgICAgICBpZiAoY20gJiYgIXRoaXMuY29sbGFwc2VkKSByZWdMaW5lQ2hh
bmdlKGNtLCBsaW5lTm8obGluZSksICJ0ZXh0Iik7CisgICAgICBlbHNlIGlmIChjbSkgeworICAg
ICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSBtYXggPSBsaW5lTm8obGluZSk7CisgICAgICAgIGlm
IChzcGFuLmZyb20gIT0gbnVsbCkgbWluID0gbGluZU5vKGxpbmUpOworICAgICAgfQogICAgICAg
bGluZS5tYXJrZWRTcGFucyA9IHJlbW92ZU1hcmtlZFNwYW4obGluZS5tYXJrZWRTcGFucywgc3Bh
bik7Ci0gICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpCi0gICAgICAgIG1pbiA9IGxpbmVObyhs
aW5lKTsKLSAgICAgIGVsc2UgaWYgKHRoaXMuY29sbGFwc2VkICYmICFsaW5lSXNIaWRkZW4odGhp
cy5kb2MsIGxpbmUpICYmIGNtKQorICAgICAgaWYgKHNwYW4uZnJvbSA9PSBudWxsICYmIHRoaXMu
Y29sbGFwc2VkICYmICFsaW5lSXNIaWRkZW4odGhpcy5kb2MsIGxpbmUpICYmIGNtKQogICAgICAg
ICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIHRleHRIZWlnaHQoY20uZGlzcGxheSkpOwogICAgIH0K
ICAgICBpZiAoY20gJiYgdGhpcy5jb2xsYXBzZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5n
KSBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZh
ciB2aXN1YWwgPSB2aXN1YWxMaW5lKGNtLmRvYywgdGhpcy5saW5lc1tpXSksIGxlbiA9IGxpbmVM
ZW5ndGgoY20uZG9jLCB2aXN1YWwpOworICAgICAgdmFyIHZpc3VhbCA9IHZpc3VhbExpbmUodGhp
cy5saW5lc1tpXSksIGxlbiA9IGxpbmVMZW5ndGgodmlzdWFsKTsKICAgICAgIGlmIChsZW4gPiBj
bS5kaXNwbGF5Lm1heExpbmVMZW5ndGgpIHsKICAgICAgICAgY20uZGlzcGxheS5tYXhMaW5lID0g
dmlzdWFsOwogICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGggPSBsZW47CkBAIC0zODA2
LDQ2ICs0ODg4LDYyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAg
fQogICAgIH0KCi0gICAgaWYgKG1pbiAhPSBudWxsICYmIGNtKSByZWdDaGFuZ2UoY20sIG1pbiwg
bWF4ICsgMSk7CisgICAgaWYgKG1pbiAhPSBudWxsICYmIGNtICYmIHRoaXMuY29sbGFwc2VkKSBy
ZWdDaGFuZ2UoY20sIG1pbiwgbWF4ICsgMSk7CiAgICAgdGhpcy5saW5lcy5sZW5ndGggPSAwOwog
ICAgIHRoaXMuZXhwbGljaXRseUNsZWFyZWQgPSB0cnVlOwogICAgIGlmICh0aGlzLmF0b21pYyAm
JiB0aGlzLmRvYy5jYW50RWRpdCkgewogICAgICAgdGhpcy5kb2MuY2FudEVkaXQgPSBmYWxzZTsK
LSAgICAgIGlmIChjbSkgcmVDaGVja1NlbGVjdGlvbihjbSk7CisgICAgICBpZiAoY20pIHJlQ2hl
Y2tTZWxlY3Rpb24oY20uZG9jKTsKICAgICB9CisgICAgaWYgKGNtKSBzaWduYWxMYXRlcihjbSwg
Im1hcmtlckNsZWFyZWQiLCBjbSwgdGhpcyk7CiAgICAgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9u
KGNtKTsKKyAgICBpZiAodGhpcy5wYXJlbnQpIHRoaXMucGFyZW50LmNsZWFyKCk7CiAgIH07Cgot
ICBUZXh0TWFya2VyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24oKSB7CisgIC8vIEZpbmQgdGhl
IHBvc2l0aW9uIG9mIHRoZSBtYXJrZXIgaW4gdGhlIGRvY3VtZW50LiBSZXR1cm5zIGEge2Zyb20s
CisgIC8vIHRvfSBvYmplY3QgYnkgZGVmYXVsdC4gU2lkZSBjYW4gYmUgcGFzc2VkIHRvIGdldCBh
IHNwZWNpZmljIHNpZGUKKyAgLy8gLS0gMCAoYm90aCksIC0xIChsZWZ0KSwgb3IgMSAocmlnaHQp
LiBXaGVuIGxpbmVPYmogaXMgdHJ1ZSwgdGhlCisgIC8vIFBvcyBvYmplY3RzIHJldHVybmVkIGNv
bnRhaW4gYSBsaW5lIG9iamVjdCwgcmF0aGVyIHRoYW4gYSBsaW5lCisgIC8vIG51bWJlciAodXNl
ZCB0byBwcmV2ZW50IGxvb2tpbmcgdXAgdGhlIHNhbWUgbGluZSB0d2ljZSkuCisgIFRleHRNYXJr
ZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihzaWRlLCBsaW5lT2JqKSB7CisgICAgaWYgKHNp
ZGUgPT0gbnVsbCAmJiB0aGlzLnR5cGUgPT0gImJvb2ttYXJrIikgc2lkZSA9IDE7CiAgICAgdmFy
IGZyb20sIHRvOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsr
aSkgewogICAgICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldOwogICAgICAgdmFyIHNwYW4gPSBn
ZXRNYXJrZWRTcGFuRm9yKGxpbmUubWFya2VkU3BhbnMsIHRoaXMpOwotICAgICAgaWYgKHNwYW4u
ZnJvbSAhPSBudWxsIHx8IHNwYW4udG8gIT0gbnVsbCkgewotICAgICAgICB2YXIgZm91bmQgPSBs
aW5lTm8obGluZSk7Ci0gICAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCkgZnJvbSA9IFBvcyhm
b3VuZCwgc3Bhbi5mcm9tKTsKLSAgICAgICAgaWYgKHNwYW4udG8gIT0gbnVsbCkgdG8gPSBQb3Mo
Zm91bmQsIHNwYW4udG8pOworICAgICAgaWYgKHNwYW4uZnJvbSAhPSBudWxsKSB7CisgICAgICAg
IGZyb20gPSBQb3MobGluZU9iaiA/IGxpbmUgOiBsaW5lTm8obGluZSksIHNwYW4uZnJvbSk7Cisg
ICAgICAgIGlmIChzaWRlID09IC0xKSByZXR1cm4gZnJvbTsKKyAgICAgIH0KKyAgICAgIGlmIChz
cGFuLnRvICE9IG51bGwpIHsKKyAgICAgICAgdG8gPSBQb3MobGluZU9iaiA/IGxpbmUgOiBsaW5l
Tm8obGluZSksIHNwYW4udG8pOworICAgICAgICBpZiAoc2lkZSA9PSAxKSByZXR1cm4gdG87CiAg
ICAgICB9CiAgICAgfQotICAgIGlmICh0aGlzLnR5cGUgPT0gImJvb2ttYXJrIikgcmV0dXJuIGZy
b207CiAgICAgcmV0dXJuIGZyb20gJiYge2Zyb206IGZyb20sIHRvOiB0b307CiAgIH07CgorICAv
LyBTaWduYWxzIHRoYXQgdGhlIG1hcmtlcidzIHdpZGdldCBjaGFuZ2VkLCBhbmQgc3Vycm91bmRp
bmcgbGF5b3V0CisgIC8vIHNob3VsZCBiZSByZWNvbXB1dGVkLgogICBUZXh0TWFya2VyLnByb3Rv
dHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBvcyA9IHRoaXMuZmluZCgpLCBj
bSA9IHRoaXMuZG9jLmNtOworICAgIHZhciBwb3MgPSB0aGlzLmZpbmQoLTEsIHRydWUpLCB3aWRn
ZXQgPSB0aGlzLCBjbSA9IHRoaXMuZG9jLmNtOwogICAgIGlmICghcG9zIHx8ICFjbSkgcmV0dXJu
OwotICAgIGlmICh0aGlzLnR5cGUgIT0gImJvb2ttYXJrIikgcG9zID0gcG9zLmZyb207Ci0gICAg
dmFyIGxpbmUgPSBnZXRMaW5lKHRoaXMuZG9jLCBwb3MubGluZSk7Ci0gICAgY2xlYXJDYWNoZWRN
ZWFzdXJlbWVudChjbSwgbGluZSk7Ci0gICAgaWYgKHBvcy5saW5lID49IGNtLmRpc3BsYXkuc2hv
d2luZ0Zyb20gJiYgcG9zLmxpbmUgPCBjbS5kaXNwbGF5LnNob3dpbmdUbykgewotICAgICAgZm9y
ICh2YXIgbm9kZSA9IGNtLmRpc3BsYXkubGluZURpdi5maXJzdENoaWxkOyBub2RlOyBub2RlID0g
bm9kZS5uZXh0U2libGluZykgaWYgKG5vZGUubGluZU9iaiA9PSBsaW5lKSB7Ci0gICAgICAgIGlm
IChub2RlLm9mZnNldEhlaWdodCAhPSBsaW5lLmhlaWdodCkgdXBkYXRlTGluZUhlaWdodChsaW5l
LCBub2RlLm9mZnNldEhlaWdodCk7Ci0gICAgICAgIGJyZWFrOworICAgIHJ1bkluT3AoY20sIGZ1
bmN0aW9uKCkgeworICAgICAgdmFyIGxpbmUgPSBwb3MubGluZSwgbGluZU4gPSBsaW5lTm8ocG9z
LmxpbmUpOworICAgICAgdmFyIHZpZXcgPSBmaW5kVmlld0ZvckxpbmUoY20sIGxpbmVOKTsKKyAg
ICAgIGlmICh2aWV3KSB7CisgICAgICAgIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGVGb3Iodmll
dyk7CisgICAgICAgIGNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSBjbS5jdXJPcC5mb3JjZVVw
ZGF0ZSA9IHRydWU7CiAgICAgICB9Ci0gICAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IGNtLmN1ck9wLmZvcmNlVXBkYXRlID0g
Y20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7Ci0gICAgICB9KTsKLSAgICB9CisgICAgICBj
bS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTsKKyAgICAgIGlmICghbGluZUlzSGlkZGVuKHdp
ZGdldC5kb2MsIGxpbmUpICYmIHdpZGdldC5oZWlnaHQgIT0gbnVsbCkgeworICAgICAgICB2YXIg
b2xkSGVpZ2h0ID0gd2lkZ2V0LmhlaWdodDsKKyAgICAgICAgd2lkZ2V0LmhlaWdodCA9IG51bGw7
CisgICAgICAgIHZhciBkSGVpZ2h0ID0gd2lkZ2V0SGVpZ2h0KHdpZGdldCkgLSBvbGRIZWlnaHQ7
CisgICAgICAgIGlmIChkSGVpZ2h0KQorICAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwg
bGluZS5oZWlnaHQgKyBkSGVpZ2h0KTsKKyAgICAgIH0KKyAgICB9KTsKICAgfTsKCiAgIFRleHRN
YXJrZXIucHJvdG90eXBlLmF0dGFjaExpbmUgPSBmdW5jdGlvbihsaW5lKSB7CkBAIC0zODY0LDQy
ICs0OTYyLDUzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAg
fTsKCisgIC8vIENvbGxhcHNlZCBtYXJrZXJzIGhhdmUgdW5pcXVlIGlkcywgaW4gb3JkZXIgdG8g
YmUgYWJsZSB0byBvcmRlcgorICAvLyB0aGVtLCB3aGljaCBpcyBuZWVkZWQgZm9yIHVuaXF1ZWx5
IGRldGVybWluaW5nIGFuIG91dGVyIG1hcmtlcgorICAvLyB3aGVuIHRoZXkgb3ZlcmxhcCAodGhl
eSBtYXkgbmVzdCwgYnV0IG5vdCBwYXJ0aWFsbHkgb3ZlcmxhcCkuCisgIHZhciBuZXh0TWFya2Vy
SWQgPSAwOworCisgIC8vIENyZWF0ZSBhIG1hcmtlciwgd2lyZSBpdCB1cCB0byB0aGUgcmlnaHQg
bGluZXMsIGFuZAogICBmdW5jdGlvbiBtYXJrVGV4dChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0
eXBlKSB7CisgICAgLy8gU2hhcmVkIG1hcmtlcnMgKGFjcm9zcyBsaW5rZWQgZG9jdW1lbnRzKSBh
cmUgaGFuZGxlZCBzZXBhcmF0ZWx5CisgICAgLy8gKG1hcmtUZXh0U2hhcmVkIHdpbGwgY2FsbCBv
dXQgdG8gdGhpcyBhZ2Fpbiwgb25jZSBwZXIKKyAgICAvLyBkb2N1bWVudCkuCiAgICAgaWYgKG9w
dGlvbnMgJiYgb3B0aW9ucy5zaGFyZWQpIHJldHVybiBtYXJrVGV4dFNoYXJlZChkb2MsIGZyb20s
IHRvLCBvcHRpb25zLCB0eXBlKTsKKyAgICAvLyBFbnN1cmUgd2UgYXJlIGluIGFuIG9wZXJhdGlv
bi4KICAgICBpZiAoZG9jLmNtICYmICFkb2MuY20uY3VyT3ApIHJldHVybiBvcGVyYXRpb24oZG9j
LmNtLCBtYXJrVGV4dCkoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSk7CgotICAgIHZhciBt
YXJrZXIgPSBuZXcgVGV4dE1hcmtlcihkb2MsIHR5cGUpOwotICAgIGlmIChwb3NMZXNzKHRvLCBm
cm9tKSB8fCBwb3NFcShmcm9tLCB0bykgJiYgdHlwZSA9PSAicmFuZ2UiICYmCi0gICAgICAgICEo
b3B0aW9ucy5pbmNsdXNpdmVMZWZ0ICYmIG9wdGlvbnMuaW5jbHVzaXZlUmlnaHQpKQorICAgIHZh
ciBtYXJrZXIgPSBuZXcgVGV4dE1hcmtlcihkb2MsIHR5cGUpLCBkaWZmID0gY21wKGZyb20sIHRv
KTsKKyAgICBpZiAob3B0aW9ucykgY29weU9iaihvcHRpb25zLCBtYXJrZXIsIGZhbHNlKTsKKyAg
ICAvLyBEb24ndCBjb25uZWN0IGVtcHR5IG1hcmtlcnMgdW5sZXNzIGNsZWFyV2hlbkVtcHR5IGlz
IGZhbHNlCisgICAgaWYgKGRpZmYgPiAwIHx8IGRpZmYgPT0gMCAmJiBtYXJrZXIuY2xlYXJXaGVu
RW1wdHkgIT09IGZhbHNlKQogICAgICAgcmV0dXJuIG1hcmtlcjsKLSAgICBpZiAob3B0aW9ucykg
Y29weU9iaihvcHRpb25zLCBtYXJrZXIpOwogICAgIGlmIChtYXJrZXIucmVwbGFjZWRXaXRoKSB7
CisgICAgICAvLyBTaG93aW5nIHVwIGFzIGEgd2lkZ2V0IGltcGxpZXMgY29sbGFwc2VkICh3aWRn
ZXQgcmVwbGFjZXMgdGV4dCkKICAgICAgIG1hcmtlci5jb2xsYXBzZWQgPSB0cnVlOwotICAgICAg
bWFya2VyLnJlcGxhY2VkV2l0aCA9IGVsdCgic3BhbiIsIFttYXJrZXIucmVwbGFjZWRXaXRoXSwg
IkNvZGVNaXJyb3Itd2lkZ2V0Iik7Ci0gICAgICBpZiAoIW9wdGlvbnMuaGFuZGxlTW91c2VFdmVu
dHMpIG1hcmtlci5yZXBsYWNlZFdpdGguaWdub3JlRXZlbnRzID0gdHJ1ZTsKKyAgICAgIG1hcmtl
ci53aWRnZXROb2RlID0gZWx0KCJzcGFuIiwgW21hcmtlci5yZXBsYWNlZFdpdGhdLCAiQ29kZU1p
cnJvci13aWRnZXQiKTsKKyAgICAgIGlmICghb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50cykgbWFy
a2VyLndpZGdldE5vZGUuaWdub3JlRXZlbnRzID0gdHJ1ZTsKKyAgICAgIGlmIChvcHRpb25zLmlu
c2VydExlZnQpIG1hcmtlci53aWRnZXROb2RlLmluc2VydExlZnQgPSB0cnVlOworICAgIH0KKyAg
ICBpZiAobWFya2VyLmNvbGxhcHNlZCkgeworICAgICAgaWYgKGNvbmZsaWN0aW5nQ29sbGFwc2Vk
UmFuZ2UoZG9jLCBmcm9tLmxpbmUsIGZyb20sIHRvLCBtYXJrZXIpIHx8CisgICAgICAgICAgZnJv
bS5saW5lICE9IHRvLmxpbmUgJiYgY29uZmxpY3RpbmdDb2xsYXBzZWRSYW5nZShkb2MsIHRvLmxp
bmUsIGZyb20sIHRvLCBtYXJrZXIpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkluc2VydGlu
ZyBjb2xsYXBzZWQgbWFya2VyIHBhcnRpYWxseSBvdmVybGFwcGluZyBhbiBleGlzdGluZyBvbmUi
KTsKKyAgICAgIHNhd0NvbGxhcHNlZFNwYW5zID0gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKG1hcmtl
ci5jb2xsYXBzZWQpIHNhd0NvbGxhcHNlZFNwYW5zID0gdHJ1ZTsKCiAgICAgaWYgKG1hcmtlci5h
ZGRUb0hpc3RvcnkpCi0gICAgICBhZGRUb0hpc3RvcnkoZG9jLCB7ZnJvbTogZnJvbSwgdG86IHRv
LCBvcmlnaW46ICJtYXJrVGV4dCJ9LAotICAgICAgICAgICAgICAgICAgIHtoZWFkOiBkb2Muc2Vs
LmhlYWQsIGFuY2hvcjogZG9jLnNlbC5hbmNob3J9LCBOYU4pOworICAgICAgYWRkQ2hhbmdlVG9I
aXN0b3J5KGRvYywge2Zyb206IGZyb20sIHRvOiB0bywgb3JpZ2luOiAibWFya1RleHQifSwgZG9j
LnNlbCwgTmFOKTsKCi0gICAgdmFyIGN1ckxpbmUgPSBmcm9tLmxpbmUsIHNpemUgPSAwLCBjb2xs
YXBzZWRBdFN0YXJ0LCBjb2xsYXBzZWRBdEVuZCwgY20gPSBkb2MuY20sIHVwZGF0ZU1heExpbmU7
CisgICAgdmFyIGN1ckxpbmUgPSBmcm9tLmxpbmUsIGNtID0gZG9jLmNtLCB1cGRhdGVNYXhMaW5l
OwogICAgIGRvYy5pdGVyKGN1ckxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7Ci0g
ICAgICBpZiAoY20gJiYgbWFya2VyLmNvbGxhcHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBp
bmcgJiYgdmlzdWFsTGluZShkb2MsIGxpbmUpID09IGNtLmRpc3BsYXkubWF4TGluZSkKKyAgICAg
IGlmIChjbSAmJiBtYXJrZXIuY29sbGFwc2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAm
JiB2aXN1YWxMaW5lKGxpbmUpID09IGNtLmRpc3BsYXkubWF4TGluZSkKICAgICAgICAgdXBkYXRl
TWF4TGluZSA9IHRydWU7Ci0gICAgICB2YXIgc3BhbiA9IHtmcm9tOiBudWxsLCB0bzogbnVsbCwg
bWFya2VyOiBtYXJrZXJ9OwotICAgICAgc2l6ZSArPSBsaW5lLnRleHQubGVuZ3RoOwotICAgICAg
aWYgKGN1ckxpbmUgPT0gZnJvbS5saW5lKSB7c3Bhbi5mcm9tID0gZnJvbS5jaDsgc2l6ZSAtPSBm
cm9tLmNoO30KLSAgICAgIGlmIChjdXJMaW5lID09IHRvLmxpbmUpIHtzcGFuLnRvID0gdG8uY2g7
IHNpemUgLT0gbGluZS50ZXh0Lmxlbmd0aCAtIHRvLmNoO30KLSAgICAgIGlmIChtYXJrZXIuY29s
bGFwc2VkKSB7Ci0gICAgICAgIGlmIChjdXJMaW5lID09IHRvLmxpbmUpIGNvbGxhcHNlZEF0RW5k
ID0gY29sbGFwc2VkU3BhbkF0KGxpbmUsIHRvLmNoKTsKLSAgICAgICAgaWYgKGN1ckxpbmUgPT0g
ZnJvbS5saW5lKSBjb2xsYXBzZWRBdFN0YXJ0ID0gY29sbGFwc2VkU3BhbkF0KGxpbmUsIGZyb20u
Y2gpOwotICAgICAgICBlbHNlIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7Ci0gICAgICB9Ci0g
ICAgICBhZGRNYXJrZWRTcGFuKGxpbmUsIHNwYW4pOworICAgICAgaWYgKG1hcmtlci5jb2xsYXBz
ZWQgJiYgY3VyTGluZSAhPSBmcm9tLmxpbmUpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7Cisg
ICAgICBhZGRNYXJrZWRTcGFuKGxpbmUsIG5ldyBNYXJrZWRTcGFuKG1hcmtlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGluZSA9PSBmcm9tLmxpbmUgPyBm
cm9tLmNoIDogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyTGluZSA9PSB0by5saW5lID8gdG8uY2ggOiBudWxsKSk7CiAgICAgICArK2N1ckxpbmU7CiAg
ICAgfSk7CisgICAgLy8gbGluZUlzSGlkZGVuIGRlcGVuZHMgb24gdGhlIHByZXNlbmNlIG9mIHRo
ZSBzcGFucywgc28gbmVlZHMgYSBzZWNvbmQgcGFzcwogICAgIGlmIChtYXJrZXIuY29sbGFwc2Vk
KSBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7CiAgICAg
ICBpZiAobGluZUlzSGlkZGVuKGRvYywgbGluZSkpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7
CiAgICAgfSk7CkBAIC0zOTEyLDMxICs1MDIxLDMzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgICAgICBkb2MuY2xlYXJIaXN0b3J5KCk7CiAgICAgfQogICAgIGlmICht
YXJrZXIuY29sbGFwc2VkKSB7Ci0gICAgICBpZiAoY29sbGFwc2VkQXRTdGFydCAhPSBjb2xsYXBz
ZWRBdEVuZCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnNlcnRpbmcgY29sbGFwc2VkIG1h
cmtlciBvdmVybGFwcGluZyBhbiBleGlzdGluZyBvbmUiKTsKLSAgICAgIG1hcmtlci5zaXplID0g
c2l6ZTsKKyAgICAgIG1hcmtlci5pZCA9ICsrbmV4dE1hcmtlcklkOwogICAgICAgbWFya2VyLmF0
b21pYyA9IHRydWU7CiAgICAgfQogICAgIGlmIChjbSkgeworICAgICAgLy8gU3luYyBlZGl0b3Ig
c3RhdGUKICAgICAgIGlmICh1cGRhdGVNYXhMaW5lKSBjbS5jdXJPcC51cGRhdGVNYXhMaW5lID0g
dHJ1ZTsKLSAgICAgIGlmIChtYXJrZXIuY2xhc3NOYW1lIHx8IG1hcmtlci50aXRsZSB8fCBtYXJr
ZXIuc3RhcnRTdHlsZSB8fCBtYXJrZXIuZW5kU3R5bGUgfHwgbWFya2VyLmNvbGxhcHNlZCkKKyAg
ICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKQogICAgICAgICByZWdDaGFuZ2UoY20sIGZyb20ubGlu
ZSwgdG8ubGluZSArIDEpOwotICAgICAgaWYgKG1hcmtlci5hdG9taWMpIHJlQ2hlY2tTZWxlY3Rp
b24oY20pOworICAgICAgZWxzZSBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBtYXJrZXIudGl0bGUg
fHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxlKQorICAgICAgICBmb3IgKHZh
ciBpID0gZnJvbS5saW5lOyBpIDw9IHRvLmxpbmU7IGkrKykgcmVnTGluZUNoYW5nZShjbSwgaSwg
InRleHQiKTsKKyAgICAgIGlmIChtYXJrZXIuYXRvbWljKSByZUNoZWNrU2VsZWN0aW9uKGNtLmRv
Yyk7CisgICAgICBzaWduYWxMYXRlcihjbSwgIm1hcmtlckFkZGVkIiwgY20sIG1hcmtlcik7CiAg
ICAgfQogICAgIHJldHVybiBtYXJrZXI7CiAgIH0KCiAgIC8vIFNIQVJFRCBURVhUTUFSS0VSUwoK
LSAgZnVuY3Rpb24gU2hhcmVkVGV4dE1hcmtlcihtYXJrZXJzLCBwcmltYXJ5KSB7CisgIC8vIEEg
c2hhcmVkIG1hcmtlciBzcGFucyBtdWx0aXBsZSBsaW5rZWQgZG9jdW1lbnRzLiBJdCBpcworICAv
LyBpbXBsZW1lbnRlZCBhcyBhIG1ldGEtbWFya2VyLW9iamVjdCBjb250cm9sbGluZyBtdWx0aXBs
ZSBub3JtYWwKKyAgLy8gbWFya2Vycy4KKyAgdmFyIFNoYXJlZFRleHRNYXJrZXIgPSBDb2RlTWly
cm9yLlNoYXJlZFRleHRNYXJrZXIgPSBmdW5jdGlvbihtYXJrZXJzLCBwcmltYXJ5KSB7CiAgICAg
dGhpcy5tYXJrZXJzID0gbWFya2VyczsKICAgICB0aGlzLnByaW1hcnkgPSBwcmltYXJ5OwotICAg
IGZvciAodmFyIGkgPSAwLCBtZSA9IHRoaXM7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKSB7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKQogICAgICAgbWFya2Vy
c1tpXS5wYXJlbnQgPSB0aGlzOwotICAgICAgb24obWFya2Vyc1tpXSwgImNsZWFyIiwgZnVuY3Rp
b24oKXttZS5jbGVhcigpO30pOwotICAgIH0KLSAgfQotICBDb2RlTWlycm9yLlNoYXJlZFRleHRN
YXJrZXIgPSBTaGFyZWRUZXh0TWFya2VyOworICB9OwogICBldmVudE1peGluKFNoYXJlZFRleHRN
YXJrZXIpOwoKICAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigp
IHsKQEAgLTM5NDYsMTcgKzUwNTcsMTcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICB0aGlzLm1hcmtlcnNbaV0uY2xlYXIoKTsKICAgICBzaWduYWxMYXRlcih0aGlz
LCAiY2xlYXIiKTsKICAgfTsKLSAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnByaW1hcnkuZmluZCgpOworICBTaGFyZWRUZXh0
TWFya2VyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24oc2lkZSwgbGluZU9iaikgeworICAgIHJl
dHVybiB0aGlzLnByaW1hcnkuZmluZChzaWRlLCBsaW5lT2JqKTsKICAgfTsKCiAgIGZ1bmN0aW9u
IG1hcmtUZXh0U2hhcmVkKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIHsKICAgICBvcHRp
b25zID0gY29weU9iaihvcHRpb25zKTsKICAgICBvcHRpb25zLnNoYXJlZCA9IGZhbHNlOwogICAg
IHZhciBtYXJrZXJzID0gW21hcmtUZXh0KGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpXSwg
cHJpbWFyeSA9IG1hcmtlcnNbMF07Ci0gICAgdmFyIHdpZGdldCA9IG9wdGlvbnMucmVwbGFjZWRX
aXRoOworICAgIHZhciB3aWRnZXQgPSBvcHRpb25zLndpZGdldE5vZGU7CiAgICAgbGlua2VkRG9j
cyhkb2MsIGZ1bmN0aW9uKGRvYykgewotICAgICAgaWYgKHdpZGdldCkgb3B0aW9ucy5yZXBsYWNl
ZFdpdGggPSB3aWRnZXQuY2xvbmVOb2RlKHRydWUpOworICAgICAgaWYgKHdpZGdldCkgb3B0aW9u
cy53aWRnZXROb2RlID0gd2lkZ2V0LmNsb25lTm9kZSh0cnVlKTsKICAgICAgIG1hcmtlcnMucHVz
aChtYXJrVGV4dChkb2MsIGNsaXBQb3MoZG9jLCBmcm9tKSwgY2xpcFBvcyhkb2MsIHRvKSwgb3B0
aW9ucywgdHlwZSkpOwogICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MubGlua2VkLmxlbmd0
aDsgKytpKQogICAgICAgICBpZiAoZG9jLmxpbmtlZFtpXS5pc1BhcmVudCkgcmV0dXJuOwpAQCAt
Mzk2NSw2MCArNTA3NiwxMDQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgcmV0dXJuIG5ldyBTaGFyZWRUZXh0TWFya2VyKG1hcmtlcnMsIHByaW1hcnkpOwogICB9Cgor
ICBmdW5jdGlvbiBmaW5kU2hhcmVkTWFya2Vycyhkb2MpIHsKKyAgICByZXR1cm4gZG9jLmZpbmRN
YXJrcyhQb3MoZG9jLmZpcnN0LCAwKSwgZG9jLmNsaXBQb3MoUG9zKGRvYy5sYXN0TGluZSgpKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24obSkgeyByZXR1cm4gbS5wYXJlbnQ7
IH0pOworICB9CisKKyAgZnVuY3Rpb24gY29weVNoYXJlZE1hcmtlcnMoZG9jLCBtYXJrZXJzKSB7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2
YXIgbWFya2VyID0gbWFya2Vyc1tpXSwgcG9zID0gbWFya2VyLmZpbmQoKTsKKyAgICAgIHZhciBt
RnJvbSA9IGRvYy5jbGlwUG9zKHBvcy5mcm9tKSwgbVRvID0gZG9jLmNsaXBQb3MocG9zLnRvKTsK
KyAgICAgIGlmIChjbXAobUZyb20sIG1UbykpIHsKKyAgICAgICAgdmFyIHN1Yk1hcmsgPSBtYXJr
VGV4dChkb2MsIG1Gcm9tLCBtVG8sIG1hcmtlci5wcmltYXJ5LCBtYXJrZXIucHJpbWFyeS50eXBl
KTsKKyAgICAgICAgbWFya2VyLm1hcmtlcnMucHVzaChzdWJNYXJrKTsKKyAgICAgICAgc3ViTWFy
ay5wYXJlbnQgPSBtYXJrZXI7CisgICAgICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gZGV0
YWNoU2hhcmVkTWFya2VycyhtYXJrZXJzKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJr
ZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgbWFya2VyID0gbWFya2Vyc1tpXSwgbGlua2Vk
ID0gW21hcmtlci5wcmltYXJ5LmRvY107OworICAgICAgbGlua2VkRG9jcyhtYXJrZXIucHJpbWFy
eS5kb2MsIGZ1bmN0aW9uKGQpIHsgbGlua2VkLnB1c2goZCk7IH0pOworICAgICAgZm9yICh2YXIg
aiA9IDA7IGogPCBtYXJrZXIubWFya2Vycy5sZW5ndGg7IGorKykgeworICAgICAgICB2YXIgc3Vi
TWFya2VyID0gbWFya2VyLm1hcmtlcnNbal07CisgICAgICAgIGlmIChpbmRleE9mKGxpbmtlZCwg
c3ViTWFya2VyLmRvYykgPT0gLTEpIHsKKyAgICAgICAgICBzdWJNYXJrZXIucGFyZW50ID0gbnVs
bDsKKyAgICAgICAgICBtYXJrZXIubWFya2Vycy5zcGxpY2Uoai0tLCAxKTsKKyAgICAgICAgfQor
ICAgICAgfQorICAgIH0KKyAgfQorCiAgIC8vIFRFWFRNQVJLRVIgU1BBTlMKCisgIGZ1bmN0aW9u
IE1hcmtlZFNwYW4obWFya2VyLCBmcm9tLCB0bykgeworICAgIHRoaXMubWFya2VyID0gbWFya2Vy
OworICAgIHRoaXMuZnJvbSA9IGZyb207IHRoaXMudG8gPSB0bzsKKyAgfQorCisgIC8vIFNlYXJj
aCBhbiBhcnJheSBvZiBzcGFucyBmb3IgYSBzcGFuIG1hdGNoaW5nIHRoZSBnaXZlbiBtYXJrZXIu
CiAgIGZ1bmN0aW9uIGdldE1hcmtlZFNwYW5Gb3Ioc3BhbnMsIG1hcmtlcikgewogICAgIGlmIChz
cGFucykgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgewogICAgICAgdmFy
IHNwYW4gPSBzcGFuc1tpXTsKICAgICAgIGlmIChzcGFuLm1hcmtlciA9PSBtYXJrZXIpIHJldHVy
biBzcGFuOwogICAgIH0KICAgfQorICAvLyBSZW1vdmUgYSBzcGFuIGZyb20gYW4gYXJyYXksIHJl
dHVybmluZyB1bmRlZmluZWQgaWYgbm8gc3BhbnMgYXJlCisgIC8vIGxlZnQgKHdlIGRvbid0IHN0
b3JlIGFycmF5cyBmb3IgbGluZXMgd2l0aG91dCBzcGFucykuCiAgIGZ1bmN0aW9uIHJlbW92ZU1h
cmtlZFNwYW4oc3BhbnMsIHNwYW4pIHsKICAgICBmb3IgKHZhciByLCBpID0gMDsgaSA8IHNwYW5z
Lmxlbmd0aDsgKytpKQogICAgICAgaWYgKHNwYW5zW2ldICE9IHNwYW4pIChyIHx8IChyID0gW10p
KS5wdXNoKHNwYW5zW2ldKTsKICAgICByZXR1cm4gcjsKICAgfQorICAvLyBBZGQgYSBzcGFuIHRv
IGEgbGluZS4KICAgZnVuY3Rpb24gYWRkTWFya2VkU3BhbihsaW5lLCBzcGFuKSB7CiAgICAgbGlu
ZS5tYXJrZWRTcGFucyA9IGxpbmUubWFya2VkU3BhbnMgPyBsaW5lLm1hcmtlZFNwYW5zLmNvbmNh
dChbc3Bhbl0pIDogW3NwYW5dOwogICAgIHNwYW4ubWFya2VyLmF0dGFjaExpbmUobGluZSk7CiAg
IH0KCisgIC8vIFVzZWQgZm9yIHRoZSBhbGdvcml0aG0gdGhhdCBhZGp1c3RzIG1hcmtlcnMgZm9y
IGEgY2hhbmdlIGluIHRoZQorICAvLyBkb2N1bWVudC4gVGhlc2UgZnVuY3Rpb25zIGN1dCBhbiBh
cnJheSBvZiBzcGFucyBhdCBhIGdpdmVuCisgIC8vIGNoYXJhY3RlciBwb3NpdGlvbiwgcmV0dXJu
aW5nIGFuIGFycmF5IG9mIHJlbWFpbmluZyBjaHVua3MgKG9yCisgIC8vIHVuZGVmaW5lZCBpZiBu
b3RoaW5nIHJlbWFpbnMpLgogICBmdW5jdGlvbiBtYXJrZWRTcGFuc0JlZm9yZShvbGQsIHN0YXJ0
Q2gsIGlzSW5zZXJ0KSB7CiAgICAgaWYgKG9sZCkgZm9yICh2YXIgaSA9IDAsIG53OyBpIDwgb2xk
Lmxlbmd0aDsgKytpKSB7CiAgICAgICB2YXIgc3BhbiA9IG9sZFtpXSwgbWFya2VyID0gc3Bhbi5t
YXJrZXI7CiAgICAgICB2YXIgc3RhcnRzQmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1h
cmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bhbi5mcm9tIDw9IHN0YXJ0Q2ggOiBzcGFuLmZyb20gPCBz
dGFydENoKTsKLSAgICAgIGlmIChzdGFydHNCZWZvcmUgfHwKLSAgICAgICAgICAobWFya2VyLmlu
Y2x1c2l2ZUxlZnQgJiYgbWFya2VyLmluY2x1c2l2ZVJpZ2h0IHx8IG1hcmtlci50eXBlID09ICJi
b29rbWFyayIpICYmCi0gICAgICAgICAgc3Bhbi5mcm9tID09IHN0YXJ0Q2ggJiYgKCFpc0luc2Vy
dCB8fCAhc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkpIHsKKyAgICAgIGlmIChzdGFydHNCZWZvcmUg
fHwgc3Bhbi5mcm9tID09IHN0YXJ0Q2ggJiYgbWFya2VyLnR5cGUgPT0gImJvb2ttYXJrIiAmJiAo
IWlzSW5zZXJ0IHx8ICFzcGFuLm1hcmtlci5pbnNlcnRMZWZ0KSkgewogICAgICAgICB2YXIgZW5k
c0FmdGVyID0gc3Bhbi50byA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyBzcGFu
LnRvID49IHN0YXJ0Q2ggOiBzcGFuLnRvID4gc3RhcnRDaCk7Ci0gICAgICAgIChudyB8fCAobncg
PSBbXSkpLnB1c2goe2Zyb206IHNwYW4uZnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG86IGVuZHNBZnRlciA/IG51bGwgOiBzcGFuLnRvLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXJrZXI6IG1hcmtlcn0pOworICAgICAgICAobncgfHwgKG53ID0gW10p
KS5wdXNoKG5ldyBNYXJrZWRTcGFuKG1hcmtlciwgc3Bhbi5mcm9tLCBlbmRzQWZ0ZXIgPyBudWxs
IDogc3Bhbi50bykpOwogICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbnc7CiAgIH0KLQogICBm
dW5jdGlvbiBtYXJrZWRTcGFuc0FmdGVyKG9sZCwgZW5kQ2gsIGlzSW5zZXJ0KSB7CiAgICAgaWYg
KG9sZCkgZm9yICh2YXIgaSA9IDAsIG53OyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7CiAgICAgICB2
YXIgc3BhbiA9IG9sZFtpXSwgbWFya2VyID0gc3Bhbi5tYXJrZXI7CiAgICAgICB2YXIgZW5kc0Fm
dGVyID0gc3Bhbi50byA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyBzcGFuLnRv
ID49IGVuZENoIDogc3Bhbi50byA+IGVuZENoKTsKLSAgICAgIGlmIChlbmRzQWZ0ZXIgfHwgbWFy
a2VyLnR5cGUgPT0gImJvb2ttYXJrIiAmJiBzcGFuLmZyb20gPT0gZW5kQ2ggJiYgKCFpc0luc2Vy
dCB8fCBzcGFuLm1hcmtlci5pbnNlcnRMZWZ0KSkgeworICAgICAgaWYgKGVuZHNBZnRlciB8fCBz
cGFuLmZyb20gPT0gZW5kQ2ggJiYgbWFya2VyLnR5cGUgPT0gImJvb2ttYXJrIiAmJiAoIWlzSW5z
ZXJ0IHx8IHNwYW4ubWFya2VyLmluc2VydExlZnQpKSB7CiAgICAgICAgIHZhciBzdGFydHNCZWZv
cmUgPSBzcGFuLmZyb20gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZUxlZnQgPyBzcGFuLmZy
b20gPD0gZW5kQ2ggOiBzcGFuLmZyb20gPCBlbmRDaCk7Ci0gICAgICAgIChudyB8fCAobncgPSBb
XSkpLnB1c2goe2Zyb206IHN0YXJ0c0JlZm9yZSA/IG51bGwgOiBzcGFuLmZyb20gLSBlbmRDaCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86IHNwYW4udG8gPT0gbnVsbCA/IG51
bGwgOiBzcGFuLnRvIC0gZW5kQ2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
cmtlcjogbWFya2VyfSk7CisgICAgICAgIChudyB8fCAobncgPSBbXSkpLnB1c2gobmV3IE1hcmtl
ZFNwYW4obWFya2VyLCBzdGFydHNCZWZvcmUgPyBudWxsIDogc3Bhbi5mcm9tIC0gZW5kQ2gsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi50byA9PSBu
dWxsID8gbnVsbCA6IHNwYW4udG8gLSBlbmRDaCkpOwogICAgICAgfQogICAgIH0KICAgICByZXR1
cm4gbnc7CiAgIH0KCisgIC8vIEdpdmVuIGEgY2hhbmdlIG9iamVjdCwgY29tcHV0ZSB0aGUgbmV3
IHNldCBvZiBtYXJrZXIgc3BhbnMgdGhhdAorICAvLyBjb3ZlciB0aGUgbGluZSBpbiB3aGljaCB0
aGUgY2hhbmdlIHRvb2sgcGxhY2UuIFJlbW92ZXMgc3BhbnMKKyAgLy8gZW50aXJlbHkgd2l0aGlu
IHRoZSBjaGFuZ2UsIHJlY29ubmVjdHMgc3BhbnMgYmVsb25naW5nIHRvIHRoZQorICAvLyBzYW1l
IG1hcmtlciB0aGF0IGFwcGVhciBvbiBib3RoIHNpZGVzIG9mIHRoZSBjaGFuZ2UsIGFuZCBjdXRz
IG9mZgorICAvLyBzcGFucyBwYXJ0aWFsbHkgd2l0aGluIHRoZSBjaGFuZ2UuIFJldHVybnMgYW4g
YXJyYXkgb2Ygc3BhbgorICAvLyBhcnJheXMgd2l0aCBvbmUgZWxlbWVudCBmb3IgZWFjaCBsaW5l
IGluIChhZnRlcikgdGhlIGNoYW5nZS4KICAgZnVuY3Rpb24gc3RyZXRjaFNwYW5zT3ZlckNoYW5n
ZShkb2MsIGNoYW5nZSkgewogICAgIHZhciBvbGRGaXJzdCA9IGlzTGluZShkb2MsIGNoYW5nZS5m
cm9tLmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFuZ2UuZnJvbS5saW5lKS5tYXJrZWRTcGFuczsK
ICAgICB2YXIgb2xkTGFzdCA9IGlzTGluZShkb2MsIGNoYW5nZS50by5saW5lKSAmJiBnZXRMaW5l
KGRvYywgY2hhbmdlLnRvLmxpbmUpLm1hcmtlZFNwYW5zOwogICAgIGlmICghb2xkRmlyc3QgJiYg
IW9sZExhc3QpIHJldHVybiBudWxsOwoKLSAgICB2YXIgc3RhcnRDaCA9IGNoYW5nZS5mcm9tLmNo
LCBlbmRDaCA9IGNoYW5nZS50by5jaCwgaXNJbnNlcnQgPSBwb3NFcShjaGFuZ2UuZnJvbSwgY2hh
bmdlLnRvKTsKKyAgICB2YXIgc3RhcnRDaCA9IGNoYW5nZS5mcm9tLmNoLCBlbmRDaCA9IGNoYW5n
ZS50by5jaCwgaXNJbnNlcnQgPSBjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMDsKICAg
ICAvLyBHZXQgdGhlIHNwYW5zIHRoYXQgJ3N0aWNrIG91dCcgb24gYm90aCBzaWRlcwogICAgIHZh
ciBmaXJzdCA9IG1hcmtlZFNwYW5zQmVmb3JlKG9sZEZpcnN0LCBzdGFydENoLCBpc0luc2VydCk7
CiAgICAgdmFyIGxhc3QgPSBtYXJrZWRTcGFuc0FmdGVyKG9sZExhc3QsIGVuZENoLCBpc0luc2Vy
dCk7CkBAIC00MDUzLDEzICs1MjA4LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHNhbWVMaW5lICYmIGZpcnN0
KSB7Ci0gICAgICAvLyBNYWtlIHN1cmUgd2UgZGlkbid0IGNyZWF0ZSBhbnkgemVyby1sZW5ndGgg
c3BhbnMKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlyc3QubGVuZ3RoOyArK2kpCi0gICAg
ICAgIGlmIChmaXJzdFtpXS5mcm9tICE9IG51bGwgJiYgZmlyc3RbaV0uZnJvbSA9PSBmaXJzdFtp
XS50byAmJiBmaXJzdFtpXS5tYXJrZXIudHlwZSAhPSAiYm9va21hcmsiKQotICAgICAgICAgIGZp
cnN0LnNwbGljZShpLS0sIDEpOwotICAgICAgaWYgKCFmaXJzdC5sZW5ndGgpIGZpcnN0ID0gbnVs
bDsKLSAgICB9CisgICAgLy8gTWFrZSBzdXJlIHdlIGRpZG4ndCBjcmVhdGUgYW55IHplcm8tbGVu
Z3RoIHNwYW5zCisgICAgaWYgKGZpcnN0KSBmaXJzdCA9IGNsZWFyRW1wdHlTcGFucyhmaXJzdCk7
CisgICAgaWYgKGxhc3QgJiYgbGFzdCAhPSBmaXJzdCkgbGFzdCA9IGNsZWFyRW1wdHlTcGFucyhs
YXN0KTsKCiAgICAgdmFyIG5ld01hcmtlcnMgPSBbZmlyc3RdOwogICAgIGlmICghc2FtZUxpbmUp
IHsKQEAgLTQwNjgsNyArNTIxOSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgaWYgKGdhcCA+IDAgJiYgZmlyc3QpCiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZmlyc3QubGVuZ3RoOyArK2kpCiAgICAgICAgICAgaWYgKGZpcnN0W2ldLnRvID09IG51bGwp
Ci0gICAgICAgICAgICAoZ2FwTWFya2VycyB8fCAoZ2FwTWFya2VycyA9IFtdKSkucHVzaCh7ZnJv
bTogbnVsbCwgdG86IG51bGwsIG1hcmtlcjogZmlyc3RbaV0ubWFya2VyfSk7CisgICAgICAgICAg
ICAoZ2FwTWFya2VycyB8fCAoZ2FwTWFya2VycyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3Bhbihm
aXJzdFtpXS5tYXJrZXIsIG51bGwsIG51bGwpKTsKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Z2FwOyArK2kpCiAgICAgICAgIG5ld01hcmtlcnMucHVzaChnYXBNYXJrZXJzKTsKICAgICAgIG5l
d01hcmtlcnMucHVzaChsYXN0KTsKQEAgLTQwNzYsNiArNTIyNywyMiBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gbmV3TWFya2VyczsKICAgfQoKKyAgLy8g
UmVtb3ZlIHNwYW5zIHRoYXQgYXJlIGVtcHR5IGFuZCBkb24ndCBoYXZlIGEgY2xlYXJXaGVuRW1w
dHkKKyAgLy8gb3B0aW9uIG9mIGZhbHNlLgorICBmdW5jdGlvbiBjbGVhckVtcHR5U3BhbnMoc3Bh
bnMpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7CisgICAg
ICB2YXIgc3BhbiA9IHNwYW5zW2ldOworICAgICAgaWYgKHNwYW4uZnJvbSAhPSBudWxsICYmIHNw
YW4uZnJvbSA9PSBzcGFuLnRvICYmIHNwYW4ubWFya2VyLmNsZWFyV2hlbkVtcHR5ICE9PSBmYWxz
ZSkKKyAgICAgICAgc3BhbnMuc3BsaWNlKGktLSwgMSk7CisgICAgfQorICAgIGlmICghc3BhbnMu
bGVuZ3RoKSByZXR1cm4gbnVsbDsKKyAgICByZXR1cm4gc3BhbnM7CisgIH0KKworICAvLyBVc2Vk
IGZvciB1bi9yZS1kb2luZyBjaGFuZ2VzIGZyb20gdGhlIGhpc3RvcnkuIENvbWJpbmVzIHRoZQor
ICAvLyByZXN1bHQgb2YgY29tcHV0aW5nIHRoZSBleGlzdGluZyBzcGFucyB3aXRoIHRoZSBzZXQg
b2Ygc3BhbnMgdGhhdAorICAvLyBleGlzdGVkIGluIHRoZSBoaXN0b3J5IChzbyB0aGF0IGRlbGV0
aW5nIGFyb3VuZCBhIHNwYW4gYW5kIHRoZW4KKyAgLy8gdW5kb2luZyBicmluZ3MgYmFjayB0aGUg
c3BhbikuCiAgIGZ1bmN0aW9uIG1lcmdlT2xkU3BhbnMoZG9jLCBjaGFuZ2UpIHsKICAgICB2YXIg
b2xkID0gZ2V0T2xkU3BhbnMoZG9jLCBjaGFuZ2UpOwogICAgIHZhciBzdHJldGNoZWQgPSBzdHJl
dGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKTsKQEAgLTQwOTgsNiArNTI2NSw3IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBvbGQ7CiAgIH0KCisg
IC8vIFVzZWQgdG8gJ2NsaXAnIG91dCByZWFkT25seSByYW5nZXMgd2hlbiBtYWtpbmcgYSBjaGFu
Z2UuCiAgIGZ1bmN0aW9uIHJlbW92ZVJlYWRPbmx5UmFuZ2VzKGRvYywgZnJvbSwgdG8pIHsKICAg
ICB2YXIgbWFya2VycyA9IG51bGw7CiAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsg
MSwgZnVuY3Rpb24obGluZSkgewpAQCAtNDExMCwxNCArNTI3OCwxNCBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoIW1hcmtlcnMpIHJldHVybiBudWxsOwogICAg
IHZhciBwYXJ0cyA9IFt7ZnJvbTogZnJvbSwgdG86IHRvfV07CiAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgbWsgPSBtYXJrZXJzW2ldLCBt
ID0gbWsuZmluZCgpOworICAgICAgdmFyIG1rID0gbWFya2Vyc1tpXSwgbSA9IG1rLmZpbmQoMCk7
CiAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcnRzLmxlbmd0aDsgKytqKSB7CiAgICAgICAg
IHZhciBwID0gcGFydHNbal07Ci0gICAgICAgIGlmIChwb3NMZXNzKHAudG8sIG0uZnJvbSkgfHwg
cG9zTGVzcyhtLnRvLCBwLmZyb20pKSBjb250aW51ZTsKLSAgICAgICAgdmFyIG5ld1BhcnRzID0g
W2osIDFdOwotICAgICAgICBpZiAocG9zTGVzcyhwLmZyb20sIG0uZnJvbSkgfHwgIW1rLmluY2x1
c2l2ZUxlZnQgJiYgcG9zRXEocC5mcm9tLCBtLmZyb20pKQorICAgICAgICBpZiAoY21wKHAudG8s
IG0uZnJvbSkgPCAwIHx8IGNtcChwLmZyb20sIG0udG8pID4gMCkgY29udGludWU7CisgICAgICAg
IHZhciBuZXdQYXJ0cyA9IFtqLCAxXSwgZGZyb20gPSBjbXAocC5mcm9tLCBtLmZyb20pLCBkdG8g
PSBjbXAocC50bywgbS50byk7CisgICAgICAgIGlmIChkZnJvbSA8IDAgfHwgIW1rLmluY2x1c2l2
ZUxlZnQgJiYgIWRmcm9tKQogICAgICAgICAgIG5ld1BhcnRzLnB1c2goe2Zyb206IHAuZnJvbSwg
dG86IG0uZnJvbX0pOwotICAgICAgICBpZiAocG9zTGVzcyhtLnRvLCBwLnRvKSB8fCAhbWsuaW5j
bHVzaXZlUmlnaHQgJiYgcG9zRXEocC50bywgbS50bykpCisgICAgICAgIGlmIChkdG8gPiAwIHx8
ICFtay5pbmNsdXNpdmVSaWdodCAmJiAhZHRvKQogICAgICAgICAgIG5ld1BhcnRzLnB1c2goe2Zy
b206IG0udG8sIHRvOiBwLnRvfSk7CiAgICAgICAgIHBhcnRzLnNwbGljZS5hcHBseShwYXJ0cywg
bmV3UGFydHMpOwogICAgICAgICBqICs9IG5ld1BhcnRzLmxlbmd0aCAtIDE7CkBAIC00MTI2LDcx
ICs1Mjk0LDE0OCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1
cm4gcGFydHM7CiAgIH0KCi0gIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdChsaW5lLCBjaCkgewor
ICAvLyBDb25uZWN0IG9yIGRpc2Nvbm5lY3Qgc3BhbnMgZnJvbSBhIGxpbmUuCisgIGZ1bmN0aW9u
IGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpIHsKKyAgICB2YXIgc3BhbnMgPSBsaW5lLm1hcmtlZFNw
YW5zOworICAgIGlmICghc3BhbnMpIHJldHVybjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNw
YW5zLmxlbmd0aDsgKytpKQorICAgICAgc3BhbnNbaV0ubWFya2VyLmRldGFjaExpbmUobGluZSk7
CisgICAgbGluZS5tYXJrZWRTcGFucyA9IG51bGw7CisgIH0KKyAgZnVuY3Rpb24gYXR0YWNoTWFy
a2VkU3BhbnMobGluZSwgc3BhbnMpIHsKKyAgICBpZiAoIXNwYW5zKSByZXR1cm47CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkKKyAgICAgIHNwYW5zW2ldLm1hcmtl
ci5hdHRhY2hMaW5lKGxpbmUpOworICAgIGxpbmUubWFya2VkU3BhbnMgPSBzcGFuczsKKyAgfQor
CisgIC8vIEhlbHBlcnMgdXNlZCB3aGVuIGNvbXB1dGluZyB3aGljaCBvdmVybGFwcGluZyBjb2xs
YXBzZWQgc3BhbgorICAvLyBjb3VudHMgYXMgdGhlIGxhcmdlciBvbmUuCisgIGZ1bmN0aW9uIGV4
dHJhTGVmdChtYXJrZXIpIHsgcmV0dXJuIG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gLTEgOiAwOyB9
CisgIGZ1bmN0aW9uIGV4dHJhUmlnaHQobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaW5jbHVzaXZl
UmlnaHQgPyAxIDogMDsgfQorCisgIC8vIFJldHVybnMgYSBudW1iZXIgaW5kaWNhdGluZyB3aGlj
aCBvZiB0d28gb3ZlcmxhcHBpbmcgY29sbGFwc2VkCisgIC8vIHNwYW5zIGlzIGxhcmdlciAoYW5k
IHRodXMgaW5jbHVkZXMgdGhlIG90aGVyKS4gRmFsbHMgYmFjayB0bworICAvLyBjb21wYXJpbmcg
aWRzIHdoZW4gdGhlIHNwYW5zIGNvdmVyIGV4YWN0bHkgdGhlIHNhbWUgcmFuZ2UuCisgIGZ1bmN0
aW9uIGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGEsIGIpIHsKKyAgICB2YXIgbGVuRGlmZiA9IGEu
bGluZXMubGVuZ3RoIC0gYi5saW5lcy5sZW5ndGg7CisgICAgaWYgKGxlbkRpZmYgIT0gMCkgcmV0
dXJuIGxlbkRpZmY7CisgICAgdmFyIGFQb3MgPSBhLmZpbmQoKSwgYlBvcyA9IGIuZmluZCgpOwor
ICAgIHZhciBmcm9tQ21wID0gY21wKGFQb3MuZnJvbSwgYlBvcy5mcm9tKSB8fCBleHRyYUxlZnQo
YSkgLSBleHRyYUxlZnQoYik7CisgICAgaWYgKGZyb21DbXApIHJldHVybiAtZnJvbUNtcDsKKyAg
ICB2YXIgdG9DbXAgPSBjbXAoYVBvcy50bywgYlBvcy50bykgfHwgZXh0cmFSaWdodChhKSAtIGV4
dHJhUmlnaHQoYik7CisgICAgaWYgKHRvQ21wKSByZXR1cm4gdG9DbXA7CisgICAgcmV0dXJuIGIu
aWQgLSBhLmlkOworICB9CisKKyAgLy8gRmluZCBvdXQgd2hldGhlciBhIGxpbmUgZW5kcyBvciBz
dGFydHMgaW4gYSBjb2xsYXBzZWQgc3Bhbi4gSWYKKyAgLy8gc28sIHJldHVybiB0aGUgbWFya2Vy
IGZvciB0aGF0IHNwYW4uCisgIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdFNpZGUobGluZSwgc3Rh
cnQpIHsKICAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFu
cywgZm91bmQ7CiAgICAgaWYgKHNwcykgZm9yICh2YXIgc3AsIGkgPSAwOyBpIDwgc3BzLmxlbmd0
aDsgKytpKSB7CiAgICAgICBzcCA9IHNwc1tpXTsKLSAgICAgIGlmICghc3AubWFya2VyLmNvbGxh
cHNlZCkgY29udGludWU7Ci0gICAgICBpZiAoKHNwLmZyb20gPT0gbnVsbCB8fCBzcC5mcm9tIDwg
Y2gpICYmCi0gICAgICAgICAgKHNwLnRvID09IG51bGwgfHwgc3AudG8gPiBjaCkgJiYKLSAgICAg
ICAgICAoIWZvdW5kIHx8IGZvdW5kLndpZHRoIDwgc3AubWFya2VyLndpZHRoKSkKKyAgICAgIGlm
IChzcC5tYXJrZXIuY29sbGFwc2VkICYmIChzdGFydCA/IHNwLmZyb20gOiBzcC50bykgPT0gbnVs
bCAmJgorICAgICAgICAgICghZm91bmQgfHwgY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoZm91bmQs
IHNwLm1hcmtlcikgPCAwKSkKICAgICAgICAgZm91bmQgPSBzcC5tYXJrZXI7CiAgICAgfQogICAg
IHJldHVybiBmb3VuZDsKICAgfQotICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5l
KSB7IHJldHVybiBjb2xsYXBzZWRTcGFuQXQobGluZSwgLTEpOyB9Ci0gIGZ1bmN0aW9uIGNvbGxh
cHNlZFNwYW5BdEVuZChsaW5lKSB7IHJldHVybiBjb2xsYXBzZWRTcGFuQXQobGluZSwgbGluZS50
ZXh0Lmxlbmd0aCArIDEpOyB9CisgIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdFN0YXJ0KGxpbmUp
IHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdFNpZGUobGluZSwgdHJ1ZSk7IH0KKyAgZnVuY3Rpb24g
Y29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdFNpZGUobGlu
ZSwgZmFsc2UpOyB9CisKKyAgLy8gVGVzdCB3aGV0aGVyIHRoZXJlIGV4aXN0cyBhIGNvbGxhcHNl
ZCBzcGFuIHRoYXQgcGFydGlhbGx5CisgIC8vIG92ZXJsYXBzIChjb3ZlcnMgdGhlIHN0YXJ0IG9y
IGVuZCwgYnV0IG5vdCBib3RoKSBvZiBhIG5ldyBzcGFuLgorICAvLyBTdWNoIG92ZXJsYXAgaXMg
bm90IGFsbG93ZWQuCisgIGZ1bmN0aW9uIGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCBs
aW5lTm8sIGZyb20sIHRvLCBtYXJrZXIpIHsKKyAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBs
aW5lTm8pOworICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNw
YW5zOworICAgIGlmIChzcHMpIGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7
CisgICAgICB2YXIgc3AgPSBzcHNbaV07CisgICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQp
IGNvbnRpbnVlOworICAgICAgdmFyIGZvdW5kID0gc3AubWFya2VyLmZpbmQoMCk7CisgICAgICB2
YXIgZnJvbUNtcCA9IGNtcChmb3VuZC5mcm9tLCBmcm9tKSB8fCBleHRyYUxlZnQoc3AubWFya2Vy
KSAtIGV4dHJhTGVmdChtYXJrZXIpOworICAgICAgdmFyIHRvQ21wID0gY21wKGZvdW5kLnRvLCB0
bykgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0gZXh0cmFSaWdodChtYXJrZXIpOworICAgICAg
aWYgKGZyb21DbXAgPj0gMCAmJiB0b0NtcCA8PSAwIHx8IGZyb21DbXAgPD0gMCAmJiB0b0NtcCA+
PSAwKSBjb250aW51ZTsKKyAgICAgIGlmIChmcm9tQ21wIDw9IDAgJiYgKGNtcChmb3VuZC50bywg
ZnJvbSkgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0gZXh0cmFMZWZ0KG1hcmtlcikpID4gMCB8
fAorICAgICAgICAgIGZyb21DbXAgPj0gMCAmJiAoY21wKGZvdW5kLmZyb20sIHRvKSB8fCBleHRy
YUxlZnQoc3AubWFya2VyKSAtIGV4dHJhUmlnaHQobWFya2VyKSkgPCAwKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgIH0KCi0gIGZ1bmN0aW9uIHZpc3VhbExpbmUoZG9jLCBsaW5lKSB7
CisgIC8vIEEgdmlzdWFsIGxpbmUgaXMgYSBsaW5lIGFzIGRyYXduIG9uIHRoZSBzY3JlZW4uIEZv
bGRpbmcsIGZvcgorICAvLyBleGFtcGxlLCBjYW4gY2F1c2UgbXVsdGlwbGUgbG9naWNhbCBsaW5l
cyB0byBhcHBlYXIgb24gdGhlIHNhbWUKKyAgLy8gdmlzdWFsIGxpbmUuIFRoaXMgZmluZHMgdGhl
IHN0YXJ0IG9mIHRoZSB2aXN1YWwgbGluZSB0aGF0IHRoZQorICAvLyBnaXZlbiBsaW5lIGlzIHBh
cnQgb2YgKHVzdWFsbHkgdGhhdCBpcyB0aGUgbGluZSBpdHNlbGYpLgorICBmdW5jdGlvbiB2aXN1
YWxMaW5lKGxpbmUpIHsKICAgICB2YXIgbWVyZ2VkOwogICAgIHdoaWxlIChtZXJnZWQgPSBjb2xs
YXBzZWRTcGFuQXRTdGFydChsaW5lKSkKLSAgICAgIGxpbmUgPSBnZXRMaW5lKGRvYywgbWVyZ2Vk
LmZpbmQoKS5mcm9tLmxpbmUpOworICAgICAgbGluZSA9IG1lcmdlZC5maW5kKC0xLCB0cnVlKS5s
aW5lOwogICAgIHJldHVybiBsaW5lOwogICB9CgorICAvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGxv
Z2ljYWwgbGluZXMgdGhhdCBjb250aW51ZSB0aGUgdmlzdWFsIGxpbmUKKyAgLy8gc3RhcnRlZCBi
eSB0aGUgYXJndW1lbnQsIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gc3VjaCBsaW5lcy4K
KyAgZnVuY3Rpb24gdmlzdWFsTGluZUNvbnRpbnVlZChsaW5lKSB7CisgICAgdmFyIG1lcmdlZCwg
bGluZXM7CisgICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSkgewor
ICAgICAgbGluZSA9IG1lcmdlZC5maW5kKDEsIHRydWUpLmxpbmU7CisgICAgICAobGluZXMgfHwg
KGxpbmVzID0gW10pKS5wdXNoKGxpbmUpOworICAgIH0KKyAgICByZXR1cm4gbGluZXM7CisgIH0K
KworICAvLyBHZXQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgdmlzdWFsIGxp
bmUgdGhhdCB0aGUKKyAgLy8gZ2l2ZW4gbGluZSBudW1iZXIgaXMgcGFydCBvZi4KKyAgZnVuY3Rp
b24gdmlzdWFsTGluZU5vKGRvYywgbGluZU4pIHsKKyAgICB2YXIgbGluZSA9IGdldExpbmUoZG9j
LCBsaW5lTiksIHZpcyA9IHZpc3VhbExpbmUobGluZSk7CisgICAgaWYgKGxpbmUgPT0gdmlzKSBy
ZXR1cm4gbGluZU47CisgICAgcmV0dXJuIGxpbmVObyh2aXMpOworICB9CisgIC8vIEdldCB0aGUg
bGluZSBudW1iZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHZpc3VhbCBsaW5lIGFmdGVyCisg
IC8vIHRoZSBnaXZlbiBsaW5lLgorICBmdW5jdGlvbiB2aXN1YWxMaW5lRW5kTm8oZG9jLCBsaW5l
TikgeworICAgIGlmIChsaW5lTiA+IGRvYy5sYXN0TGluZSgpKSByZXR1cm4gbGluZU47CisgICAg
dmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbGluZU4pLCBtZXJnZWQ7CisgICAgaWYgKCFsaW5lSXNI
aWRkZW4oZG9jLCBsaW5lKSkgcmV0dXJuIGxpbmVOOworICAgIHdoaWxlIChtZXJnZWQgPSBjb2xs
YXBzZWRTcGFuQXRFbmQobGluZSkpCisgICAgICBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSku
bGluZTsKKyAgICByZXR1cm4gbGluZU5vKGxpbmUpICsgMTsKKyAgfQorCisgIC8vIENvbXB1dGUg
d2hldGhlciBhIGxpbmUgaXMgaGlkZGVuLiBMaW5lcyBjb3VudCBhcyBoaWRkZW4gd2hlbiB0aGV5
CisgIC8vIGFyZSBwYXJ0IG9mIGEgdmlzdWFsIGxpbmUgdGhhdCBzdGFydHMgd2l0aCBhbm90aGVy
IGxpbmUsIG9yIHdoZW4KKyAgLy8gdGhleSBhcmUgZW50aXJlbHkgY292ZXJlZCBieSBjb2xsYXBz
ZWQsIG5vbi13aWRnZXQgc3Bhbi4KICAgZnVuY3Rpb24gbGluZUlzSGlkZGVuKGRvYywgbGluZSkg
ewogICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zOwog
ICAgIGlmIChzcHMpIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSkgewog
ICAgICAgc3AgPSBzcHNbaV07CiAgICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIGNvbnRp
bnVlOwogICAgICAgaWYgKHNwLmZyb20gPT0gbnVsbCkgcmV0dXJuIHRydWU7Ci0gICAgICBpZiAo
c3AubWFya2VyLnJlcGxhY2VkV2l0aCkgY29udGludWU7CisgICAgICBpZiAoc3AubWFya2VyLndp
ZGdldE5vZGUpIGNvbnRpbnVlOwogICAgICAgaWYgKHNwLmZyb20gPT0gMCAmJiBzcC5tYXJrZXIu
aW5jbHVzaXZlTGVmdCAmJiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CiAgIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbklubmVy
KGRvYywgbGluZSwgc3BhbikgewogICAgIGlmIChzcGFuLnRvID09IG51bGwpIHsKLSAgICAgIHZh
ciBlbmQgPSBzcGFuLm1hcmtlci5maW5kKCkudG8sIGVuZExpbmUgPSBnZXRMaW5lKGRvYywgZW5k
LmxpbmUpOwotICAgICAgcmV0dXJuIGxpbmVJc0hpZGRlbklubmVyKGRvYywgZW5kTGluZSwgZ2V0
TWFya2VkU3BhbkZvcihlbmRMaW5lLm1hcmtlZFNwYW5zLCBzcGFuLm1hcmtlcikpOworICAgICAg
dmFyIGVuZCA9IHNwYW4ubWFya2VyLmZpbmQoMSwgdHJ1ZSk7CisgICAgICByZXR1cm4gbGluZUlz
SGlkZGVuSW5uZXIoZG9jLCBlbmQubGluZSwgZ2V0TWFya2VkU3BhbkZvcihlbmQubGluZS5tYXJr
ZWRTcGFucywgc3Bhbi5tYXJrZXIpKTsKICAgICB9CiAgICAgaWYgKHNwYW4ubWFya2VyLmluY2x1
c2l2ZVJpZ2h0ICYmIHNwYW4udG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkKICAgICAgIHJldHVybiB0
cnVlOwogICAgIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3Ro
OyArK2kpIHsKICAgICAgIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXTsKLSAgICAgIGlmIChzcC5t
YXJrZXIuY29sbGFwc2VkICYmICFzcC5tYXJrZXIucmVwbGFjZWRXaXRoICYmIHNwLmZyb20gPT0g
c3Bhbi50byAmJgorICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgIXNwLm1hcmtlci53
aWRnZXROb2RlICYmIHNwLmZyb20gPT0gc3Bhbi50byAmJgorICAgICAgICAgIChzcC50byA9PSBu
dWxsIHx8IHNwLnRvICE9IHNwYW4uZnJvbSkgJiYKICAgICAgICAgICAoc3AubWFya2VyLmluY2x1
c2l2ZUxlZnQgfHwgc3Bhbi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpICYmCiAgICAgICAgICAgbGlu
ZUlzSGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcCkpIHJldHVybiB0cnVlOwogICAgIH0KICAgfQoK
LSAgZnVuY3Rpb24gZGV0YWNoTWFya2VkU3BhbnMobGluZSkgewotICAgIHZhciBzcGFucyA9IGxp
bmUubWFya2VkU3BhbnM7Ci0gICAgaWYgKCFzcGFucykgcmV0dXJuOwotICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpCi0gICAgICBzcGFuc1tpXS5tYXJrZXIuZGV0YWNo
TGluZShsaW5lKTsKLSAgICBsaW5lLm1hcmtlZFNwYW5zID0gbnVsbDsKLSAgfQotCi0gIGZ1bmN0
aW9uIGF0dGFjaE1hcmtlZFNwYW5zKGxpbmUsIHNwYW5zKSB7Ci0gICAgaWYgKCFzcGFucykgcmV0
dXJuOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpCi0gICAgICBz
cGFuc1tpXS5tYXJrZXIuYXR0YWNoTGluZShsaW5lKTsKLSAgICBsaW5lLm1hcmtlZFNwYW5zID0g
c3BhbnM7Ci0gIH0KLQogICAvLyBMSU5FIFdJREdFVFMKCisgIC8vIExpbmUgd2lkZ2V0cyBhcmUg
YmxvY2sgZWxlbWVudHMgZGlzcGxheWVkIGFib3ZlIG9yIGJlbG93IGEgbGluZS4KKwogICB2YXIg
TGluZVdpZGdldCA9IENvZGVNaXJyb3IuTGluZVdpZGdldCA9IGZ1bmN0aW9uKGNtLCBub2RlLCBv
cHRpb25zKSB7CiAgICAgaWYgKG9wdGlvbnMpIGZvciAodmFyIG9wdCBpbiBvcHRpb25zKSBpZiAo
b3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKQogICAgICAgdGhpc1tvcHRdID0gb3B0aW9uc1tv
cHRdOwpAQCAtNDE5OCwzOCArNTQ0MywzOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICB0aGlzLm5vZGUgPSBub2RlOwogICB9OwogICBldmVudE1peGluKExpbmVXaWRn
ZXQpOwotICBmdW5jdGlvbiB3aWRnZXRPcGVyYXRpb24oZikgewotICAgIHJldHVybiBmdW5jdGlv
bigpIHsKLSAgICAgIHZhciB3aXRoT3AgPSAhdGhpcy5jbS5jdXJPcDsKLSAgICAgIGlmICh3aXRo
T3ApIHN0YXJ0T3BlcmF0aW9uKHRoaXMuY20pOwotICAgICAgdHJ5IHt2YXIgcmVzdWx0ID0gZi5h
cHBseSh0aGlzLCBhcmd1bWVudHMpO30KLSAgICAgIGZpbmFsbHkge2lmICh3aXRoT3ApIGVuZE9w
ZXJhdGlvbih0aGlzLmNtKTt9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH07CisKKyAgZnVu
Y3Rpb24gYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZikgeworICAg
IGlmIChoZWlnaHRBdExpbmUobGluZSkgPCAoKGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbFRv
cCkgfHwgY20uZG9jLnNjcm9sbFRvcCkpCisgICAgICBhZGRUb1Njcm9sbFBvcyhjbSwgbnVsbCwg
ZGlmZik7CiAgIH0KLSAgTGluZVdpZGdldC5wcm90b3R5cGUuY2xlYXIgPSB3aWRnZXRPcGVyYXRp
b24oZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHdzID0gdGhpcy5saW5lLndpZGdldHMsIG5vID0gbGlu
ZU5vKHRoaXMubGluZSk7CisKKyAgTGluZVdpZGdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlv
bigpIHsKKyAgICB2YXIgY20gPSB0aGlzLmNtLCB3cyA9IHRoaXMubGluZS53aWRnZXRzLCBsaW5l
ID0gdGhpcy5saW5lLCBubyA9IGxpbmVObyhsaW5lKTsKICAgICBpZiAobm8gPT0gbnVsbCB8fCAh
d3MpIHJldHVybjsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdzLmxlbmd0aDsgKytpKSBpZiAo
d3NbaV0gPT0gdGhpcykgd3Muc3BsaWNlKGktLSwgMSk7Ci0gICAgaWYgKCF3cy5sZW5ndGgpIHRo
aXMubGluZS53aWRnZXRzID0gbnVsbDsKLSAgICB2YXIgYWJvdmVWaXNpYmxlID0gaGVpZ2h0QXRM
aW5lKHRoaXMuY20sIHRoaXMubGluZSkgPCB0aGlzLmNtLmRvYy5zY3JvbGxUb3A7Ci0gICAgdXBk
YXRlTGluZUhlaWdodCh0aGlzLmxpbmUsIE1hdGgubWF4KDAsIHRoaXMubGluZS5oZWlnaHQgLSB3
aWRnZXRIZWlnaHQodGhpcykpKTsKLSAgICBpZiAoYWJvdmVWaXNpYmxlKSBhZGRUb1Njcm9sbFBv
cyh0aGlzLmNtLCAwLCAtdGhpcy5oZWlnaHQpOwotICAgIHJlZ0NoYW5nZSh0aGlzLmNtLCBubywg
bm8gKyAxKTsKLSAgfSk7Ci0gIExpbmVXaWRnZXQucHJvdG90eXBlLmNoYW5nZWQgPSB3aWRnZXRP
cGVyYXRpb24oZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG9sZEggPSB0aGlzLmhlaWdodDsKKyAgICBp
ZiAoIXdzLmxlbmd0aCkgbGluZS53aWRnZXRzID0gbnVsbDsKKyAgICB2YXIgaGVpZ2h0ID0gd2lk
Z2V0SGVpZ2h0KHRoaXMpOworICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgeworICAgICAgYWRq
dXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgLWhlaWdodCk7CisgICAgICByZWdM
aW5lQ2hhbmdlKGNtLCBubywgIndpZGdldCIpOworICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5l
LCBNYXRoLm1heCgwLCBsaW5lLmhlaWdodCAtIGhlaWdodCkpOworICAgIH0pOworICB9OworICBM
aW5lV2lkZ2V0LnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG9sZEgg
PSB0aGlzLmhlaWdodCwgY20gPSB0aGlzLmNtLCBsaW5lID0gdGhpcy5saW5lOwogICAgIHRoaXMu
aGVpZ2h0ID0gbnVsbDsKICAgICB2YXIgZGlmZiA9IHdpZGdldEhlaWdodCh0aGlzKSAtIG9sZEg7
CiAgICAgaWYgKCFkaWZmKSByZXR1cm47Ci0gICAgdXBkYXRlTGluZUhlaWdodCh0aGlzLmxpbmUs
IHRoaXMubGluZS5oZWlnaHQgKyBkaWZmKTsKLSAgICB2YXIgbm8gPSBsaW5lTm8odGhpcy5saW5l
KTsKLSAgICByZWdDaGFuZ2UodGhpcy5jbSwgbm8sIG5vICsgMSk7Ci0gIH0pOworICAgIHJ1bklu
T3AoY20sIGZ1bmN0aW9uKCkgeworICAgICAgY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwor
ICAgICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZik7CisgICAg
ICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgZGlmZik7CisgICAgfSk7Cisg
IH07CgogICBmdW5jdGlvbiB3aWRnZXRIZWlnaHQod2lkZ2V0KSB7CiAgICAgaWYgKHdpZGdldC5o
ZWlnaHQgIT0gbnVsbCkgcmV0dXJuIHdpZGdldC5oZWlnaHQ7Ci0gICAgaWYgKCF3aWRnZXQubm9k
ZS5wYXJlbnROb2RlIHx8IHdpZGdldC5ub2RlLnBhcmVudE5vZGUubm9kZVR5cGUgIT0gMSkKKyAg
ICBpZiAoIWNvbnRhaW5zKGRvY3VtZW50LmJvZHksIHdpZGdldC5ub2RlKSkKICAgICAgIHJlbW92
ZUNoaWxkcmVuQW5kQWRkKHdpZGdldC5jbS5kaXNwbGF5Lm1lYXN1cmUsIGVsdCgiZGl2IiwgW3dp
ZGdldC5ub2RlXSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpKTsKICAgICByZXR1cm4gd2lk
Z2V0LmhlaWdodCA9IHdpZGdldC5ub2RlLm9mZnNldEhlaWdodDsKICAgfQpAQCAtNDIzNywxNSAr
NTQ4MywxNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24g
YWRkTGluZVdpZGdldChjbSwgaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7CiAgICAgdmFyIHdpZGdl
dCA9IG5ldyBMaW5lV2lkZ2V0KGNtLCBub2RlLCBvcHRpb25zKTsKICAgICBpZiAod2lkZ2V0Lm5v
SFNjcm9sbCkgY20uZGlzcGxheS5hbGlnbldpZGdldHMgPSB0cnVlOwotICAgIGNoYW5nZUxpbmUo
Y20sIGhhbmRsZSwgZnVuY3Rpb24obGluZSkgeworICAgIGNoYW5nZUxpbmUoY20sIGhhbmRsZSwg
IndpZGdldCIsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgIHZhciB3aWRnZXRzID0gbGluZS53aWRn
ZXRzIHx8IChsaW5lLndpZGdldHMgPSBbXSk7CiAgICAgICBpZiAod2lkZ2V0Lmluc2VydEF0ID09
IG51bGwpIHdpZGdldHMucHVzaCh3aWRnZXQpOwogICAgICAgZWxzZSB3aWRnZXRzLnNwbGljZShN
YXRoLm1pbih3aWRnZXRzLmxlbmd0aCAtIDEsIE1hdGgubWF4KDAsIHdpZGdldC5pbnNlcnRBdCkp
LCAwLCB3aWRnZXQpOwogICAgICAgd2lkZ2V0LmxpbmUgPSBsaW5lOwotICAgICAgaWYgKCFsaW5l
SXNIaWRkZW4oY20uZG9jLCBsaW5lKSB8fCB3aWRnZXQuc2hvd0lmSGlkZGVuKSB7Ci0gICAgICAg
IHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUoY20sIGxpbmUpIDwgY20uZG9jLnNjcm9s
bFRvcDsKKyAgICAgIGlmICghbGluZUlzSGlkZGVuKGNtLmRvYywgbGluZSkpIHsKKyAgICAgICAg
dmFyIGFib3ZlVmlzaWJsZSA9IGhlaWdodEF0TGluZShsaW5lKSA8IGNtLmRvYy5zY3JvbGxUb3A7
CiAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyB3aWRnZXRIZWln
aHQod2lkZ2V0KSk7Ci0gICAgICAgIGlmIChhYm92ZVZpc2libGUpIGFkZFRvU2Nyb2xsUG9zKGNt
LCAwLCB3aWRnZXQuaGVpZ2h0KTsKKyAgICAgICAgaWYgKGFib3ZlVmlzaWJsZSkgYWRkVG9TY3Jv
bGxQb3MoY20sIG51bGwsIHdpZGdldC5oZWlnaHQpOworICAgICAgICBjbS5jdXJPcC5mb3JjZVVw
ZGF0ZSA9IHRydWU7CiAgICAgICB9CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKQEAgLTQy
NjQsNiArNTUxMSw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBldmVu
dE1peGluKExpbmUpOwogICBMaW5lLnByb3RvdHlwZS5saW5lTm8gPSBmdW5jdGlvbigpIHsgcmV0
dXJuIGxpbmVObyh0aGlzKTsgfTsKCisgIC8vIENoYW5nZSB0aGUgY29udGVudCAodGV4dCwgbWFy
a2Vycykgb2YgYSBsaW5lLiBBdXRvbWF0aWNhbGx5CisgIC8vIGludmFsaWRhdGVzIGNhY2hlZCBp
bmZvcm1hdGlvbiBhbmQgdHJpZXMgdG8gcmUtZXN0aW1hdGUgdGhlCisgIC8vIGxpbmUncyBoZWln
aHQuCiAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmUobGluZSwgdGV4dCwgbWFya2VkU3BhbnMsIGVzdGlt
YXRlSGVpZ2h0KSB7CiAgICAgbGluZS50ZXh0ID0gdGV4dDsKICAgICBpZiAobGluZS5zdGF0ZUFm
dGVyKSBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOwpAQCAtNDI3NSwyMCArNTUyNSw0NyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoZXN0SGVpZ2h0ICE9IGxpbmUu
aGVpZ2h0KSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGVzdEhlaWdodCk7CiAgIH0KCisgIC8vIERl
dGFjaCBhIGxpbmUgZnJvbSB0aGUgZG9jdW1lbnQgdHJlZSBhbmQgaXRzIG1hcmtlcnMuCiAgIGZ1
bmN0aW9uIGNsZWFuVXBMaW5lKGxpbmUpIHsKICAgICBsaW5lLnBhcmVudCA9IG51bGw7CiAgICAg
ZGV0YWNoTWFya2VkU3BhbnMobGluZSk7CiAgIH0KCi0gIC8vIFJ1biB0aGUgZ2l2ZW4gbW9kZSdz
IHBhcnNlciBvdmVyIGEgbGluZSwgdXBkYXRlIHRoZSBzdHlsZXMKLSAgLy8gYXJyYXksIHdoaWNo
IGNvbnRhaW5zIGFsdGVybmF0aW5nIGZyYWdtZW50cyBvZiB0ZXh0IGFuZCBDU1MKLSAgLy8gY2xh
c3Nlcy4KLSAgZnVuY3Rpb24gcnVuTW9kZShjbSwgdGV4dCwgbW9kZSwgc3RhdGUsIGYsIGZvcmNl
VG9FbmQpIHsKKyAgZnVuY3Rpb24gZXh0cmFjdExpbmVDbGFzc2VzKHR5cGUsIG91dHB1dCkgewor
ICAgIGlmICh0eXBlKSBmb3IgKDs7KSB7CisgICAgICB2YXIgbGluZUNsYXNzID0gdHlwZS5tYXRj
aCgvKD86XnxccyspbGluZS0oYmFja2dyb3VuZC0pPyhcUyspLyk7CisgICAgICBpZiAoIWxpbmVD
bGFzcykgYnJlYWs7CisgICAgICB0eXBlID0gdHlwZS5zbGljZSgwLCBsaW5lQ2xhc3MuaW5kZXgp
ICsgdHlwZS5zbGljZShsaW5lQ2xhc3MuaW5kZXggKyBsaW5lQ2xhc3NbMF0ubGVuZ3RoKTsKKyAg
ICAgIHZhciBwcm9wID0gbGluZUNsYXNzWzFdID8gImJnQ2xhc3MiIDogInRleHRDbGFzcyI7Cisg
ICAgICBpZiAob3V0cHV0W3Byb3BdID09IG51bGwpCisgICAgICAgIG91dHB1dFtwcm9wXSA9IGxp
bmVDbGFzc1syXTsKKyAgICAgIGVsc2UgaWYgKCEobmV3IFJlZ0V4cCgiKD86XnxccykiICsgbGlu
ZUNsYXNzWzJdICsgIig/OiR8XHMpIikpLnRlc3Qob3V0cHV0W3Byb3BdKSkKKyAgICAgICAgb3V0
cHV0W3Byb3BdICs9ICIgIiArIGxpbmVDbGFzc1syXTsKKyAgICB9CisgICAgcmV0dXJuIHR5cGU7
CisgIH0KKworICBmdW5jdGlvbiBjYWxsQmxhbmtMaW5lKG1vZGUsIHN0YXRlKSB7CisgICAgaWYg
KG1vZGUuYmxhbmtMaW5lKSByZXR1cm4gbW9kZS5ibGFua0xpbmUoc3RhdGUpOworICAgIGlmICgh
bW9kZS5pbm5lck1vZGUpIHJldHVybjsKKyAgICB2YXIgaW5uZXIgPSBDb2RlTWlycm9yLmlubmVy
TW9kZShtb2RlLCBzdGF0ZSk7CisgICAgaWYgKGlubmVyLm1vZGUuYmxhbmtMaW5lKSByZXR1cm4g
aW5uZXIubW9kZS5ibGFua0xpbmUoaW5uZXIuc3RhdGUpOworICB9CisKKyAgZnVuY3Rpb24gcmVh
ZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2Vu
KHN0cmVhbSwgc3RhdGUpOworICAgIGlmIChzdHJlYW0ucG9zIDw9IHN0cmVhbS5zdGFydCkKKyAg
ICAgIHRocm93IG5ldyBFcnJvcigiTW9kZSAiICsgbW9kZS5uYW1lICsgIiBmYWlsZWQgdG8gYWR2
YW5jZSBzdHJlYW0uIik7CisgICAgcmV0dXJuIHN0eWxlOworICB9CisKKyAgLy8gUnVuIHRoZSBn
aXZlbiBtb2RlJ3MgcGFyc2VyIG92ZXIgYSBsaW5lLCBjYWxsaW5nIGYgZm9yIGVhY2ggdG9rZW4u
CisgIGZ1bmN0aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUsIHN0YXRlLCBmLCBsaW5lQ2xhc3Nl
cywgZm9yY2VUb0VuZCkgewogICAgIHZhciBmbGF0dGVuU3BhbnMgPSBtb2RlLmZsYXR0ZW5TcGFu
czsKICAgICBpZiAoZmxhdHRlblNwYW5zID09IG51bGwpIGZsYXR0ZW5TcGFucyA9IGNtLm9wdGlv
bnMuZmxhdHRlblNwYW5zOwogICAgIHZhciBjdXJTdGFydCA9IDAsIGN1clN0eWxlID0gbnVsbDsK
ICAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25zLnRhYlNp
emUpLCBzdHlsZTsKLSAgICBpZiAodGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9kZS5i
bGFua0xpbmUoc3RhdGUpOworICAgIGlmICh0ZXh0ID09ICIiKSBleHRyYWN0TGluZUNsYXNzZXMo
Y2FsbEJsYW5rTGluZShtb2RlLCBzdGF0ZSksIGxpbmVDbGFzc2VzKTsKICAgICB3aGlsZSAoIXN0
cmVhbS5lb2woKSkgewogICAgICAgaWYgKHN0cmVhbS5wb3MgPiBjbS5vcHRpb25zLm1heEhpZ2hs
aWdodExlbmd0aCkgewogICAgICAgICBmbGF0dGVuU3BhbnMgPSBmYWxzZTsKQEAgLTQyOTYsNyAr
NTU3MywxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgc3Ry
ZWFtLnBvcyA9IHRleHQubGVuZ3RoOwogICAgICAgICBzdHlsZSA9IG51bGw7CiAgICAgICB9IGVs
c2UgewotICAgICAgICBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CisgICAgICAg
IHN0eWxlID0gZXh0cmFjdExpbmVDbGFzc2VzKHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRl
KSwgbGluZUNsYXNzZXMpOworICAgICAgfQorICAgICAgaWYgKGNtLm9wdGlvbnMuYWRkTW9kZUNs
YXNzKSB7CisgICAgICAgIHZhciBtTmFtZSA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKG1vZGUsIHN0
YXRlKS5tb2RlLm5hbWU7CisgICAgICAgIGlmIChtTmFtZSkgc3R5bGUgPSAibS0iICsgKHN0eWxl
ID8gbU5hbWUgKyAiICIgKyBzdHlsZSA6IG1OYW1lKTsKICAgICAgIH0KICAgICAgIGlmICghZmxh
dHRlblNwYW5zIHx8IGN1clN0eWxlICE9IHN0eWxlKSB7CiAgICAgICAgIGlmIChjdXJTdGFydCA8
IHN0cmVhbS5zdGFydCkgZihzdHJlYW0uc3RhcnQsIGN1clN0eWxlKTsKQEAgLTQzMTIsMTQgKzU1
OTMsMTggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9Cgor
ICAvLyBDb21wdXRlIGEgc3R5bGUgYXJyYXkgKGFuIGFycmF5IHN0YXJ0aW5nIHdpdGggYSBtb2Rl
IGdlbmVyYXRpb24KKyAgLy8gLS0gZm9yIGludmFsaWRhdGlvbiAtLSBmb2xsb3dlZCBieSBwYWly
cyBvZiBlbmQgcG9zaXRpb25zIGFuZAorICAvLyBzdHlsZSBzdHJpbmdzKSwgd2hpY2ggaXMgdXNl
ZCB0byBoaWdobGlnaHQgdGhlIHRva2VucyBvbiB0aGUKKyAgLy8gbGluZS4KICAgZnVuY3Rpb24g
aGlnaGxpZ2h0TGluZShjbSwgbGluZSwgc3RhdGUsIGZvcmNlVG9FbmQpIHsKICAgICAvLyBBIHN0
eWxlcyBhcnJheSBhbHdheXMgc3RhcnRzIHdpdGggYSBudW1iZXIgaWRlbnRpZnlpbmcgdGhlCiAg
ICAgLy8gbW9kZS9vdmVybGF5cyB0aGF0IGl0IGlzIGJhc2VkIG9uIChmb3IgZWFzeSBpbnZhbGlk
YXRpb24pLgotICAgIHZhciBzdCA9IFtjbS5zdGF0ZS5tb2RlR2VuXTsKKyAgICB2YXIgc3QgPSBb
Y20uc3RhdGUubW9kZUdlbl0sIGxpbmVDbGFzc2VzID0ge307CiAgICAgLy8gQ29tcHV0ZSB0aGUg
YmFzZSBhcnJheSBvZiBzdHlsZXMKICAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIGNtLmRvYy5t
b2RlLCBzdGF0ZSwgZnVuY3Rpb24oZW5kLCBzdHlsZSkgewogICAgICAgc3QucHVzaChlbmQsIHN0
eWxlKTsKLSAgICB9LCBmb3JjZVRvRW5kKTsKKyAgICB9LCBsaW5lQ2xhc3NlcywgZm9yY2VUb0Vu
ZCk7CgogICAgIC8vIFJ1biBvdmVybGF5cywgYWRqdXN0IHN0eWxlIGFycmF5LgogICAgIGZvciAo
dmFyIG8gPSAwOyBvIDwgY20uc3RhdGUub3ZlcmxheXMubGVuZ3RoOyArK28pIHsKQEAgLTQzNDQs
OTYgKzU2MjksOTUgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICBzdFtzdGFydCsxXSA9IGN1ciA/IGN1ciArICIgIiArIHN0eWxlIDogc3R5bGU7CiAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICB9KTsKKyAgICAgIH0sIGxpbmVDbGFzc2VzKTsKICAg
ICB9CgotICAgIHJldHVybiBzdDsKKyAgICByZXR1cm4ge3N0eWxlczogc3QsIGNsYXNzZXM6IGxp
bmVDbGFzc2VzLmJnQ2xhc3MgfHwgbGluZUNsYXNzZXMudGV4dENsYXNzID8gbGluZUNsYXNzZXMg
OiBudWxsfTsKICAgfQoKICAgZnVuY3Rpb24gZ2V0TGluZVN0eWxlcyhjbSwgbGluZSkgewotICAg
IGlmICghbGluZS5zdHlsZXMgfHwgbGluZS5zdHlsZXNbMF0gIT0gY20uc3RhdGUubW9kZUdlbikK
LSAgICAgIGxpbmUuc3R5bGVzID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgbGluZS5zdGF0ZUFm
dGVyID0gZ2V0U3RhdGVCZWZvcmUoY20sIGxpbmVObyhsaW5lKSkpOworICAgIGlmICghbGluZS5z
dHlsZXMgfHwgbGluZS5zdHlsZXNbMF0gIT0gY20uc3RhdGUubW9kZUdlbikgeworICAgICAgdmFy
IHJlc3VsdCA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIGxpbmUuc3RhdGVBZnRlciA9IGdldFN0
YXRlQmVmb3JlKGNtLCBsaW5lTm8obGluZSkpKTsKKyAgICAgIGxpbmUuc3R5bGVzID0gcmVzdWx0
LnN0eWxlczsKKyAgICAgIGlmIChyZXN1bHQuY2xhc3NlcykgbGluZS5zdHlsZUNsYXNzZXMgPSBy
ZXN1bHQuY2xhc3NlczsKKyAgICAgIGVsc2UgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSBsaW5lLnN0
eWxlQ2xhc3NlcyA9IG51bGw7CisgICAgfQogICAgIHJldHVybiBsaW5lLnN0eWxlczsKICAgfQoK
ICAgLy8gTGlnaHR3ZWlnaHQgZm9ybSBvZiBoaWdobGlnaHQgLS0gcHJvY2VlZCBvdmVyIHRoaXMg
bGluZSBhbmQKLSAgLy8gdXBkYXRlIHN0YXRlLCBidXQgZG9uJ3Qgc2F2ZSBhIHN0eWxlIGFycmF5
LgorICAvLyB1cGRhdGUgc3RhdGUsIGJ1dCBkb24ndCBzYXZlIGEgc3R5bGUgYXJyYXkuIFVzZWQg
Zm9yIGxpbmVzIHRoYXQKKyAgLy8gYXJlbid0IGN1cnJlbnRseSB2aXNpYmxlLgogICBmdW5jdGlv
biBwcm9jZXNzTGluZShjbSwgdGV4dCwgc3RhdGUsIHN0YXJ0QXQpIHsKICAgICB2YXIgbW9kZSA9
IGNtLmRvYy5tb2RlOwogICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKHRleHQsIGNt
Lm9wdGlvbnMudGFiU2l6ZSk7CiAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvcyA9IHN0YXJ0
QXQgfHwgMDsKLSAgICBpZiAodGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9kZS5ibGFu
a0xpbmUoc3RhdGUpOworICAgIGlmICh0ZXh0ID09ICIiKSBjYWxsQmxhbmtMaW5lKG1vZGUsIHN0
YXRlKTsKICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiBzdHJlYW0ucG9zIDw9IGNtLm9wdGlv
bnMubWF4SGlnaGxpZ2h0TGVuZ3RoKSB7Ci0gICAgICBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUp
OworICAgICAgcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUpOwogICAgICAgc3RyZWFtLnN0
YXJ0ID0gc3RyZWFtLnBvczsKICAgICB9CiAgIH0KCi0gIHZhciBzdHlsZVRvQ2xhc3NDYWNoZSA9
IHt9OwotICBmdW5jdGlvbiBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlLCBidWlsZGVyKSB7Ci0g
ICAgaWYgKCFzdHlsZSkgcmV0dXJuIG51bGw7Ci0gICAgZm9yICg7OykgewotICAgICAgdmFyIGxp
bmVDbGFzcyA9IHN0eWxlLm1hdGNoKC8oPzpefFxzKWxpbmUtKGJhY2tncm91bmQtKT8oXFMrKS8p
OwotICAgICAgaWYgKCFsaW5lQ2xhc3MpIGJyZWFrOwotICAgICAgc3R5bGUgPSBzdHlsZS5zbGlj
ZSgwLCBsaW5lQ2xhc3MuaW5kZXgpICsgc3R5bGUuc2xpY2UobGluZUNsYXNzLmluZGV4ICsgbGlu
ZUNsYXNzWzBdLmxlbmd0aCk7Ci0gICAgICB2YXIgcHJvcCA9IGxpbmVDbGFzc1sxXSA/ICJiZ0Ns
YXNzIiA6ICJ0ZXh0Q2xhc3MiOwotICAgICAgaWYgKGJ1aWxkZXJbcHJvcF0gPT0gbnVsbCkKLSAg
ICAgICAgYnVpbGRlcltwcm9wXSA9IGxpbmVDbGFzc1syXTsKLSAgICAgIGVsc2UgaWYgKCEobmV3
IFJlZ0V4cCgiKD86XnxccykiICsgbGluZUNsYXNzWzJdICsgIig/OiR8XHMpIikpLnRlc3QoYnVp
bGRlcltwcm9wXSkpCi0gICAgICAgIGJ1aWxkZXJbcHJvcF0gKz0gIiAiICsgbGluZUNsYXNzWzJd
OwotICAgIH0KLSAgICByZXR1cm4gc3R5bGVUb0NsYXNzQ2FjaGVbc3R5bGVdIHx8Ci0gICAgICAo
c3R5bGVUb0NsYXNzQ2FjaGVbc3R5bGVdID0gImNtLSIgKyBzdHlsZS5yZXBsYWNlKC8gKy9nLCAi
IGNtLSIpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGJ1aWxkTGluZUNvbnRlbnQoY20sIHJlYWxMaW5l
LCBtZWFzdXJlLCBjb3B5V2lkZ2V0cykgewotICAgIHZhciBtZXJnZWQsIGxpbmUgPSByZWFsTGlu
ZSwgZW1wdHkgPSB0cnVlOwotICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFy
dChsaW5lKSkKLSAgICAgIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbWVyZ2VkLmZpbmQoKS5mcm9t
LmxpbmUpOwotCi0gICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHQoInByZSIpLCBjb2w6IDAsIHBv
czogMCwKLSAgICAgICAgICAgICAgICAgICBtZWFzdXJlOiBudWxsLCBtZWFzdXJlZFNvbWV0aGlu
ZzogZmFsc2UsIGNtOiBjbSwKLSAgICAgICAgICAgICAgICAgICBjb3B5V2lkZ2V0czogY29weVdp
ZGdldHN9OwotCi0gICAgZG8gewotICAgICAgaWYgKGxpbmUudGV4dCkgZW1wdHkgPSBmYWxzZTsK
LSAgICAgIGJ1aWxkZXIubWVhc3VyZSA9IGxpbmUgPT0gcmVhbExpbmUgJiYgbWVhc3VyZTsKKyAg
Ly8gQ29udmVydCBhIHN0eWxlIGFzIHJldHVybmVkIGJ5IGEgbW9kZSAoZWl0aGVyIG51bGwsIG9y
IGEgc3RyaW5nCisgIC8vIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgc3R5bGVzKSB0byBhIENTUyBz
dHlsZS4gVGhpcyBpcyBjYWNoZWQsCisgIC8vIGFuZCBhbHNvIGxvb2tzIGZvciBsaW5lLXdpZGUg
c3R5bGVzLgorICB2YXIgc3R5bGVUb0NsYXNzQ2FjaGUgPSB7fSwgc3R5bGVUb0NsYXNzQ2FjaGVX
aXRoTW9kZSA9IHt9OworICBmdW5jdGlvbiBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlLCBvcHRp
b25zKSB7CisgICAgaWYgKCFzdHlsZSB8fCAvXlxzKiQvLnRlc3Qoc3R5bGUpKSByZXR1cm4gbnVs
bDsKKyAgICB2YXIgY2FjaGUgPSBvcHRpb25zLmFkZE1vZGVDbGFzcyA/IHN0eWxlVG9DbGFzc0Nh
Y2hlV2l0aE1vZGUgOiBzdHlsZVRvQ2xhc3NDYWNoZTsKKyAgICByZXR1cm4gY2FjaGVbc3R5bGVd
IHx8CisgICAgICAoY2FjaGVbc3R5bGVdID0gc3R5bGUucmVwbGFjZSgvXFMrL2csICJjbS0kJiIp
KTsKKyAgfQorCisgIC8vIFJlbmRlciB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0
IG9mIGEgbGluZS4gQWxzbyBidWlsZHMKKyAgLy8gdXAgYSAnbGluZSBtYXAnLCB3aGljaCBwb2lu
dHMgYXQgdGhlIERPTSBub2RlcyB0aGF0IHJlcHJlc2VudAorICAvLyBzcGVjaWZpYyBzdHJldGNo
ZXMgb2YgdGV4dCwgYW5kIGlzIHVzZWQgYnkgdGhlIG1lYXN1cmluZyBjb2RlLgorICAvLyBUaGUg
cmV0dXJuZWQgb2JqZWN0IGNvbnRhaW5zIHRoZSBET00gbm9kZSwgdGhpcyBtYXAsIGFuZAorICAv
LyBpbmZvcm1hdGlvbiBhYm91dCBsaW5lLXdpZGUgc3R5bGVzIHRoYXQgd2VyZSBzZXQgYnkgdGhl
IG1vZGUuCisgIGZ1bmN0aW9uIGJ1aWxkTGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KSB7CisgICAg
Ly8gVGhlIHBhZGRpbmctcmlnaHQgZm9yY2VzIHRoZSBlbGVtZW50IHRvIGhhdmUgYSAnYm9yZGVy
Jywgd2hpY2gKKyAgICAvLyBpcyBuZWVkZWQgb24gV2Via2l0IHRvIGJlIGFibGUgdG8gZ2V0IGxp
bmUtbGV2ZWwgYm91bmRpbmcKKyAgICAvLyByZWN0YW5nbGVzIGZvciBpdCAoaW4gbWVhc3VyZUNo
YXIpLgorICAgIHZhciBjb250ZW50ID0gZWx0KCJzcGFuIiwgbnVsbCwgbnVsbCwgd2Via2l0ID8g
InBhZGRpbmctcmlnaHQ6IC4xcHgiIDogbnVsbCk7CisgICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBl
bHQoInByZSIsIFtjb250ZW50XSksIGNvbnRlbnQ6IGNvbnRlbnQsIGNvbDogMCwgcG9zOiAwLCBj
bTogY219OworICAgIGxpbmVWaWV3Lm1lYXN1cmUgPSB7fTsKKworICAgIC8vIEl0ZXJhdGUgb3Zl
ciB0aGUgbG9naWNhbCBsaW5lcyB0aGF0IG1ha2UgdXAgdGhpcyB2aXN1YWwgbGluZS4KKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8PSAobGluZVZpZXcucmVzdCA/IGxpbmVWaWV3LnJlc3QubGVuZ3Ro
IDogMCk7IGkrKykgeworICAgICAgdmFyIGxpbmUgPSBpID8gbGluZVZpZXcucmVzdFtpIC0gMV0g
OiBsaW5lVmlldy5saW5lLCBvcmRlcjsKICAgICAgIGJ1aWxkZXIucG9zID0gMDsKLSAgICAgIGJ1
aWxkZXIuYWRkVG9rZW4gPSBidWlsZGVyLm1lYXN1cmUgPyBidWlsZFRva2VuTWVhc3VyZSA6IGJ1
aWxkVG9rZW47CisgICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tlbjsKKyAgICAgIC8v
IE9wdGlvbmFsbHkgd2lyZSBpbiBzb21lIGhhY2tzIGludG8gdGhlIHRva2VuLXJlbmRlcmluZwor
ICAgICAgLy8gYWxnb3JpdGhtLCB0byBkZWFsIHdpdGggYnJvd3NlciBxdWlya3MuCiAgICAgICBp
ZiAoKGllIHx8IHdlYmtpdCkgJiYgY20uZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSkKICAgICAg
ICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5TcGxpdFNwYWNlcyhidWlsZGVyLmFkZFRv
a2VuKTsKLSAgICAgIHZhciBuZXh0ID0gaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwg
Z2V0TGluZVN0eWxlcyhjbSwgbGluZSkpOwotICAgICAgaWYgKG1lYXN1cmUgJiYgbGluZSA9PSBy
ZWFsTGluZSAmJiAhYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZykgewotICAgICAgICBtZWFzdXJl
WzBdID0gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5
Lm1lYXN1cmUpKTsKLSAgICAgICAgYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZyA9IHRydWU7Ci0g
ICAgICB9Ci0gICAgICBpZiAobmV4dCkgbGluZSA9IGdldExpbmUoY20uZG9jLCBuZXh0LnRvLmxp
bmUpOwotICAgIH0gd2hpbGUgKG5leHQpOwotCi0gICAgaWYgKG1lYXN1cmUgJiYgIWJ1aWxkZXIu
bWVhc3VyZWRTb21ldGhpbmcgJiYgIW1lYXN1cmVbMF0pCi0gICAgICBtZWFzdXJlWzBdID0gYnVp
bGRlci5wcmUuYXBwZW5kQ2hpbGQoZW1wdHkgPyBlbHQoInNwYW4iLCAiXHUwMGEwIikgOiB6ZXJv
V2lkdGhFbGVtZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpOwotICAgIGlmICghYnVpbGRlci5wcmUu
Zmlyc3RDaGlsZCAmJiAhbGluZUlzSGlkZGVuKGNtLmRvYywgcmVhbExpbmUpKQotICAgICAgYnVp
bGRlci5wcmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MDBhMCIpKTsK
LQotICAgIHZhciBvcmRlcjsKLSAgICAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtIHdpdGggdGhlIHJl
cG9ydGVkIGRpbWVuc2lvbnMgb2Ygc2luZ2xlLWNoYXIKLSAgICAvLyBkaXJlY3Rpb24gc3BhbnMg
b24gSUUgKGlzc3VlICMxMTI5KS4gU2VlIGFsc28gdGhlIGNvbW1lbnQgaW4KLSAgICAvLyBjdXJz
b3JDb29yZHMuCi0gICAgaWYgKG1lYXN1cmUgJiYgKGllIHx8IGllX2d0MTApICYmIChvcmRlciA9
IGdldE9yZGVyKGxpbmUpKSkgewotICAgICAgdmFyIGwgPSBvcmRlci5sZW5ndGggLSAxOwotICAg
ICAgaWYgKG9yZGVyW2xdLmZyb20gPT0gb3JkZXJbbF0udG8pIC0tbDsKLSAgICAgIHZhciBsYXN0
ID0gb3JkZXJbbF0sIHByZXYgPSBvcmRlcltsIC0gMV07Ci0gICAgICBpZiAobGFzdC5mcm9tICsg
MSA9PSBsYXN0LnRvICYmIHByZXYgJiYgbGFzdC5sZXZlbCA8IHByZXYubGV2ZWwpIHsKLSAgICAg
ICAgdmFyIHNwYW4gPSBtZWFzdXJlW2J1aWxkZXIucG9zIC0gMV07Ci0gICAgICAgIGlmIChzcGFu
KSBzcGFuLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNwYW4ubWVhc3VyZVJpZ2h0ID0gemVyb1dp
ZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcGFuLm5leHRTaWJsaW5nKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICB2YXIgdGV4dENsYXNzID0gYnVpbGRlci50ZXh0Q2xhc3MgPyBidWlsZGVyLnRleHRD
bGFzcyArICIgIiArIChyZWFsTGluZS50ZXh0Q2xhc3MgfHwgIiIpIDogcmVhbExpbmUudGV4dENs
YXNzOwotICAgIGlmICh0ZXh0Q2xhc3MpIGJ1aWxkZXIucHJlLmNsYXNzTmFtZSA9IHRleHRDbGFz
czsKLQotICAgIHNpZ25hbChjbSwgInJlbmRlckxpbmUiLCBjbSwgcmVhbExpbmUsIGJ1aWxkZXIu
cHJlKTsKKyAgICAgIGlmIChoYXNCYWRCaWRpUmVjdHMoY20uZGlzcGxheS5tZWFzdXJlKSAmJiAo
b3JkZXIgPSBnZXRPcmRlcihsaW5lKSkpCisgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWls
ZFRva2VuQmFkQmlkaShidWlsZGVyLmFkZFRva2VuLCBvcmRlcik7CisgICAgICBidWlsZGVyLm1h
cCA9IFtdOworICAgICAgaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwgZ2V0TGluZVN0
eWxlcyhjbSwgbGluZSkpOworICAgICAgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSB7CisgICAgICAg
IGlmIChsaW5lLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzKQorICAgICAgICAgIGJ1aWxkZXIuYmdDbGFz
cyA9IGpvaW5DbGFzc2VzKGxpbmUuc3R5bGVDbGFzc2VzLmJnQ2xhc3MsIGJ1aWxkZXIuYmdDbGFz
cyB8fCAiIik7CisgICAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MpCisgICAg
ICAgICAgYnVpbGRlci50ZXh0Q2xhc3MgPSBqb2luQ2xhc3NlcyhsaW5lLnN0eWxlQ2xhc3Nlcy50
ZXh0Q2xhc3MsIGJ1aWxkZXIudGV4dENsYXNzIHx8ICIiKTsKKyAgICAgIH0KKworICAgICAgLy8g
RW5zdXJlIGF0IGxlYXN0IGEgc2luZ2xlIG5vZGUgaXMgcHJlc2VudCwgZm9yIG1lYXN1cmluZy4K
KyAgICAgIGlmIChidWlsZGVyLm1hcC5sZW5ndGggPT0gMCkKKyAgICAgICAgYnVpbGRlci5tYXAu
cHVzaCgwLCAwLCBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChj
bS5kaXNwbGF5Lm1lYXN1cmUpKSk7CisKKyAgICAgIC8vIFN0b3JlIHRoZSBtYXAgYW5kIGEgY2Fj
aGUgb2JqZWN0IGZvciB0aGUgY3VycmVudCBsb2dpY2FsIGxpbmUKKyAgICAgIGlmIChpID09IDAp
IHsKKyAgICAgICAgbGluZVZpZXcubWVhc3VyZS5tYXAgPSBidWlsZGVyLm1hcDsKKyAgICAgICAg
bGluZVZpZXcubWVhc3VyZS5jYWNoZSA9IHt9OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgKGxp
bmVWaWV3Lm1lYXN1cmUubWFwcyB8fCAobGluZVZpZXcubWVhc3VyZS5tYXBzID0gW10pKS5wdXNo
KGJ1aWxkZXIubWFwKTsKKyAgICAgICAgKGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzIHx8IChsaW5l
Vmlldy5tZWFzdXJlLmNhY2hlcyA9IFtdKSkucHVzaCh7fSk7CisgICAgICB9CisgICAgfQorCisg
ICAgc2lnbmFsKGNtLCAicmVuZGVyTGluZSIsIGNtLCBsaW5lVmlldy5saW5lLCBidWlsZGVyLnBy
ZSk7CiAgICAgcmV0dXJuIGJ1aWxkZXI7CiAgIH0KCkBAIC00NDQzLDEyICs1NzI3LDE3IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiB0b2tlbjsKICAgfQoK
KyAgLy8gQnVpbGQgdXAgdGhlIERPTSByZXByZXNlbnRhdGlvbiBmb3IgYSBzaW5nbGUgdG9rZW4s
IGFuZCBhZGQgaXQgdG8KKyAgLy8gdGhlIGxpbmUgbWFwLiBUYWtlcyBjYXJlIHRvIHJlbmRlciBz
cGVjaWFsIGNoYXJhY3RlcnMgc2VwYXJhdGVseS4KICAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWls
ZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlKSB7CiAgICAgaWYg
KCF0ZXh0KSByZXR1cm47Ci0gICAgdmFyIHNwZWNpYWwgPSBidWlsZGVyLmNtLm9wdGlvbnMuc3Bl
Y2lhbENoYXJzOworICAgIHZhciBzcGVjaWFsID0gYnVpbGRlci5jbS5vcHRpb25zLnNwZWNpYWxD
aGFycywgbXVzdFdyYXAgPSBmYWxzZTsKICAgICBpZiAoIXNwZWNpYWwudGVzdCh0ZXh0KSkgewog
ICAgICAgYnVpbGRlci5jb2wgKz0gdGV4dC5sZW5ndGg7CiAgICAgICB2YXIgY29udGVudCA9IGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOworICAgICAgYnVpbGRlci5tYXAucHVzaChidWls
ZGVyLnBvcywgYnVpbGRlci5wb3MgKyB0ZXh0Lmxlbmd0aCwgY29udGVudCk7CisgICAgICBpZiAo
aWVfdXB0bzgpIG11c3RXcmFwID0gdHJ1ZTsKKyAgICAgIGJ1aWxkZXIucG9zICs9IHRleHQubGVu
Z3RoOwogICAgIH0gZWxzZSB7CiAgICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKSwgcG9zID0gMDsKICAgICAgIHdoaWxlICh0cnVlKSB7CkBAIC00NDU2
LDU3ICs1NzQ1LDM4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAg
ICB2YXIgbSA9IHNwZWNpYWwuZXhlYyh0ZXh0KTsKICAgICAgICAgdmFyIHNraXBwZWQgPSBtID8g
bS5pbmRleCAtIHBvcyA6IHRleHQubGVuZ3RoIC0gcG9zOwogICAgICAgICBpZiAoc2tpcHBlZCkg
ewotICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
dGV4dC5zbGljZShwb3MsIHBvcyArIHNraXBwZWQpKSk7CisgICAgICAgICAgdmFyIHR4dCA9IGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQuc2xpY2UocG9zLCBwb3MgKyBza2lwcGVkKSk7Cisg
ICAgICAgICAgaWYgKGllX3VwdG84KSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIFt0
eHRdKSk7CisgICAgICAgICAgZWxzZSBjb250ZW50LmFwcGVuZENoaWxkKHR4dCk7CisgICAgICAg
ICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyBza2lwcGVkLCB0
eHQpOwogICAgICAgICAgIGJ1aWxkZXIuY29sICs9IHNraXBwZWQ7CisgICAgICAgICAgYnVpbGRl
ci5wb3MgKz0gc2tpcHBlZDsKICAgICAgICAgfQogICAgICAgICBpZiAoIW0pIGJyZWFrOwogICAg
ICAgICBwb3MgKz0gc2tpcHBlZCArIDE7CiAgICAgICAgIGlmIChtWzBdID09ICJcdCIpIHsKICAg
ICAgICAgICB2YXIgdGFiU2l6ZSA9IGJ1aWxkZXIuY20ub3B0aW9ucy50YWJTaXplLCB0YWJXaWR0
aCA9IHRhYlNpemUgLSBidWlsZGVyLmNvbCAlIHRhYlNpemU7Ci0gICAgICAgICAgY29udGVudC5h
cHBlbmRDaGlsZChlbHQoInNwYW4iLCBzcGFjZVN0cih0YWJXaWR0aCksICJjbS10YWIiKSk7Cisg
ICAgICAgICAgdmFyIHR4dCA9IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgc3BhY2VT
dHIodGFiV2lkdGgpLCAiY20tdGFiIikpOwogICAgICAgICAgIGJ1aWxkZXIuY29sICs9IHRhYldp
ZHRoOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHZhciB0b2tlbiA9IGJ1aWxkZXIuY20u
b3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKG1bMF0pOwotICAgICAgICAgIGNvbnRlbnQu
YXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAgIHZhciB0eHQgPSBidWlsZGVyLmNtLm9wdGlv
bnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcihtWzBdKTsKKyAgICAgICAgICBpZiAoaWVfdXB0bzgp
IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgW3R4dF0pKTsKKyAgICAgICAgICBlbHNl
IGNvbnRlbnQuYXBwZW5kQ2hpbGQodHh0KTsKICAgICAgICAgICBidWlsZGVyLmNvbCArPSAxOwog
ICAgICAgICB9CisgICAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIu
cG9zICsgMSwgdHh0KTsKKyAgICAgICAgYnVpbGRlci5wb3MrKzsKICAgICAgIH0KICAgICB9Ci0g
ICAgaWYgKHN0eWxlIHx8IHN0YXJ0U3R5bGUgfHwgZW5kU3R5bGUgfHwgYnVpbGRlci5tZWFzdXJl
KSB7CisgICAgaWYgKHN0eWxlIHx8IHN0YXJ0U3R5bGUgfHwgZW5kU3R5bGUgfHwgbXVzdFdyYXAp
IHsKICAgICAgIHZhciBmdWxsU3R5bGUgPSBzdHlsZSB8fCAiIjsKICAgICAgIGlmIChzdGFydFN0
eWxlKSBmdWxsU3R5bGUgKz0gc3RhcnRTdHlsZTsKICAgICAgIGlmIChlbmRTdHlsZSkgZnVsbFN0
eWxlICs9IGVuZFN0eWxlOwogICAgICAgdmFyIHRva2VuID0gZWx0KCJzcGFuIiwgW2NvbnRlbnRd
LCBmdWxsU3R5bGUpOwogICAgICAgaWYgKHRpdGxlKSB0b2tlbi50aXRsZSA9IHRpdGxlOwotICAg
ICAgcmV0dXJuIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHRva2VuKTsKLSAgICB9Ci0gICAgYnVp
bGRlci5wcmUuYXBwZW5kQ2hpbGQoY29udGVudCk7Ci0gIH0KLQotICBmdW5jdGlvbiBidWlsZFRv
a2VuTWVhc3VyZShidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUpIHsK
LSAgICB2YXIgd3JhcHBpbmcgPSBidWlsZGVyLmNtLm9wdGlvbnMubGluZVdyYXBwaW5nOwotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIGNoID0g
dGV4dC5jaGFyQXQoaSksIHN0YXJ0ID0gaSA9PSAwOwotICAgICAgaWYgKGNoID49ICJcdWQ4MDAi
ICYmIGNoIDwgIlx1ZGJmZiIgJiYgaSA8IHRleHQubGVuZ3RoIC0gMSkgewotICAgICAgICBjaCA9
IHRleHQuc2xpY2UoaSwgaSArIDIpOwotICAgICAgICArK2k7Ci0gICAgICB9IGVsc2UgaWYgKGkg
JiYgd3JhcHBpbmcgJiYgc3BhbkFmZmVjdHNXcmFwcGluZyh0ZXh0LCBpKSkgewotICAgICAgICBi
dWlsZGVyLnByZS5hcHBlbmRDaGlsZChlbHQoIndiciIpKTsKLSAgICAgIH0KLSAgICAgIHZhciBv
bGQgPSBidWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdOwotICAgICAgdmFyIHNwYW4gPSBidWls
ZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdID0KLSAgICAgICAgYnVpbGRUb2tlbihidWlsZGVyLCBj
aCwgc3R5bGUsCi0gICAgICAgICAgICAgICAgICAgc3RhcnQgJiYgc3RhcnRTdHlsZSwgaSA9PSB0
ZXh0Lmxlbmd0aCAtIDEgJiYgZW5kU3R5bGUpOwotICAgICAgaWYgKG9sZCkgc3Bhbi5sZWZ0U2lk
ZSA9IG9sZC5sZWZ0U2lkZSB8fCBvbGQ7Ci0gICAgICAvLyBJbiBJRSBzaW5nbGUtc3BhY2Ugbm9k
ZXMgd3JhcCBkaWZmZXJlbnRseSB0aGFuIHNwYWNlcwotICAgICAgLy8gZW1iZWRkZWQgaW4gbGFy
Z2VyIHRleHQgbm9kZXMsIGV4Y2VwdCB3aGVuIHNldCB0bwotICAgICAgLy8gd2hpdGUtc3BhY2U6
IG5vcm1hbCAoaXNzdWUgIzEyNjgpLgotICAgICAgaWYgKGllICYmIHdyYXBwaW5nICYmIGNoID09
ICIgIiAmJiBpICYmICEvXHMvLnRlc3QodGV4dC5jaGFyQXQoaSAtIDEpKSAmJgotICAgICAgICAg
IGkgPCB0ZXh0Lmxlbmd0aCAtIDEgJiYgIS9ccy8udGVzdCh0ZXh0LmNoYXJBdChpICsgMSkpKQot
ICAgICAgICBzcGFuLnN0eWxlLndoaXRlU3BhY2UgPSAibm9ybWFsIjsKLSAgICAgIGJ1aWxkZXIu
cG9zICs9IGNoLmxlbmd0aDsKKyAgICAgIHJldHVybiBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hp
bGQodG9rZW4pOwogICAgIH0KLSAgICBpZiAodGV4dC5sZW5ndGgpIGJ1aWxkZXIubWVhc3VyZWRT
b21ldGhpbmcgPSB0cnVlOworICAgIGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGlsZChjb250ZW50
KTsKICAgfQoKICAgZnVuY3Rpb24gYnVpbGRUb2tlblNwbGl0U3BhY2VzKGlubmVyKSB7CkBAIC00
NTE3LDI5ICs1Nzg3LDM2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgcmV0dXJuIG91dDsKICAgICB9CiAgICAgcmV0dXJuIGZ1bmN0aW9uKGJ1aWxkZXIsIHRleHQs
IHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUpIHsKLSAgICAgIHJldHVybiBpbm5l
cihidWlsZGVyLCB0ZXh0LnJlcGxhY2UoLyB7Myx9L2csIHNwbGl0KSwgc3R5bGUsIHN0YXJ0U3R5
bGUsIGVuZFN0eWxlLCB0aXRsZSk7CisgICAgICBpbm5lcihidWlsZGVyLCB0ZXh0LnJlcGxhY2Uo
LyB7Myx9L2csIHNwbGl0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSk7CiAg
ICAgfTsKICAgfQoKLSAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUs
IG1hcmtlciwgaWdub3JlV2lkZ2V0KSB7Ci0gICAgdmFyIHdpZGdldCA9ICFpZ25vcmVXaWRnZXQg
JiYgbWFya2VyLnJlcGxhY2VkV2l0aDsKLSAgICBpZiAod2lkZ2V0KSB7Ci0gICAgICBpZiAoYnVp
bGRlci5jb3B5V2lkZ2V0cykgd2lkZ2V0ID0gd2lkZ2V0LmNsb25lTm9kZSh0cnVlKTsKLSAgICAg
IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHdpZGdldCk7Ci0gICAgICBpZiAoYnVpbGRlci5tZWFz
dXJlKSB7Ci0gICAgICAgIGlmIChzaXplKSB7Ci0gICAgICAgICAgYnVpbGRlci5tZWFzdXJlW2J1
aWxkZXIucG9zXSA9IHdpZGdldDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB2YXIgZWx0
ID0gemVyb1dpZHRoRWxlbWVudChidWlsZGVyLmNtLmRpc3BsYXkubWVhc3VyZSk7Ci0gICAgICAg
ICAgaWYgKG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYgIW1hcmtlci5pbnNlcnRMZWZ0KQot
ICAgICAgICAgICAgYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXSA9IGJ1aWxkZXIucHJlLmFw
cGVuZENoaWxkKGVsdCk7Ci0gICAgICAgICAgZWxzZSBpZiAoYnVpbGRlci5tZWFzdXJlW2J1aWxk
ZXIucG9zXSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBidWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdID0gYnVpbGRlci5wcmUuaW5zZXJ0QmVmb3Jl
KGVsdCwgd2lkZ2V0KTsKKyAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2UgZGltZW5zaW9ucyBiZWlu
ZyByZXBvcnRlZCBmb3Igc3RyZXRjaGVzIG9mCisgIC8vIHJpZ2h0LXRvLWxlZnQgdGV4dC4KKyAg
ZnVuY3Rpb24gYnVpbGRUb2tlbkJhZEJpZGkoaW5uZXIsIG9yZGVyKSB7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUp
IHsKKyAgICAgIHN0eWxlID0gc3R5bGUgPyBzdHlsZSArICIgY20tZm9yY2UtYm9yZGVyIiA6ICJj
bS1mb3JjZS1ib3JkZXIiOworICAgICAgdmFyIHN0YXJ0ID0gYnVpbGRlci5wb3MsIGVuZCA9IHN0
YXJ0ICsgdGV4dC5sZW5ndGg7CisgICAgICBmb3IgKDs7KSB7CisgICAgICAgIC8vIEZpbmQgdGhl
IHBhcnQgdGhhdCBvdmVybGFwcyB3aXRoIHRoZSBzdGFydCBvZiB0aGlzIHRleHQKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHZhciBw
YXJ0ID0gb3JkZXJbaV07CisgICAgICAgICAgaWYgKHBhcnQudG8gPiBzdGFydCAmJiBwYXJ0LmZy
b20gPD0gc3RhcnQpIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXIubWVhc3VyZWRT
b21ldGhpbmcgPSB0cnVlOworICAgICAgICBpZiAocGFydC50byA+PSBlbmQpIHJldHVybiBpbm5l
cihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlKTsKKyAg
ICAgICAgaW5uZXIoYnVpbGRlciwgdGV4dC5zbGljZSgwLCBwYXJ0LnRvIC0gc3RhcnQpLCBzdHls
ZSwgc3RhcnRTdHlsZSwgbnVsbCwgdGl0bGUpOworICAgICAgICBzdGFydFN0eWxlID0gbnVsbDsK
KyAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UocGFydC50byAtIHN0YXJ0KTsKKyAgICAgICAgc3Rh
cnQgPSBwYXJ0LnRvOwogICAgICAgfQorICAgIH07CisgIH0KKworICBmdW5jdGlvbiBidWlsZENv
bGxhcHNlZFNwYW4oYnVpbGRlciwgc2l6ZSwgbWFya2VyLCBpZ25vcmVXaWRnZXQpIHsKKyAgICB2
YXIgd2lkZ2V0ID0gIWlnbm9yZVdpZGdldCAmJiBtYXJrZXIud2lkZ2V0Tm9kZTsKKyAgICBpZiAo
d2lkZ2V0KSB7CisgICAgICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBv
cyArIHNpemUsIHdpZGdldCk7CisgICAgICBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQod2lk
Z2V0KTsKICAgICB9CiAgICAgYnVpbGRlci5wb3MgKz0gc2l6ZTsKICAgfQpAQCAtNDU1MCw3ICs1
ODI3LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIHNwYW5z
ID0gbGluZS5tYXJrZWRTcGFucywgYWxsVGV4dCA9IGxpbmUudGV4dCwgYXQgPSAwOwogICAgIGlm
ICghc3BhbnMpIHsKICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSs9
MikKLSAgICAgICAgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCBhbGxUZXh0LnNsaWNlKGF0LCBh
dCA9IHN0eWxlc1tpXSksIGludGVycHJldFRva2VuU3R5bGUoc3R5bGVzW2krMV0sIGJ1aWxkZXIp
KTsKKyAgICAgICAgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCBhbGxUZXh0LnNsaWNlKGF0LCBh
dCA9IHN0eWxlc1tpXSksIGludGVycHJldFRva2VuU3R5bGUoc3R5bGVzW2krMV0sIGJ1aWxkZXIu
Y20ub3B0aW9ucykpOwogICAgICAgcmV0dXJuOwogICAgIH0KCkBAIC00NTY5LDE3ICs1ODQ2LDE3
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgaWYgKG0u
c3RhcnRTdHlsZSAmJiBzcC5mcm9tID09IHBvcykgc3BhblN0YXJ0U3R5bGUgKz0gIiAiICsgbS5z
dGFydFN0eWxlOwogICAgICAgICAgICAgaWYgKG0uZW5kU3R5bGUgJiYgc3AudG8gPT0gbmV4dENo
YW5nZSkgc3BhbkVuZFN0eWxlICs9ICIgIiArIG0uZW5kU3R5bGU7CiAgICAgICAgICAgICBpZiAo
bS50aXRsZSAmJiAhdGl0bGUpIHRpdGxlID0gbS50aXRsZTsKLSAgICAgICAgICAgIGlmIChtLmNv
bGxhcHNlZCAmJiAoIWNvbGxhcHNlZCB8fCBjb2xsYXBzZWQubWFya2VyLnNpemUgPCBtLnNpemUp
KQorICAgICAgICAgICAgaWYgKG0uY29sbGFwc2VkICYmICghY29sbGFwc2VkIHx8IGNvbXBhcmVD
b2xsYXBzZWRNYXJrZXJzKGNvbGxhcHNlZC5tYXJrZXIsIG0pIDwgMCkpCiAgICAgICAgICAgICAg
IGNvbGxhcHNlZCA9IHNwOwogICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJvbSA+IHBvcyAmJiBu
ZXh0Q2hhbmdlID4gc3AuZnJvbSkgewogICAgICAgICAgICAgbmV4dENoYW5nZSA9IHNwLmZyb207
CiAgICAgICAgICAgfQotICAgICAgICAgIGlmIChtLnR5cGUgPT0gImJvb2ttYXJrIiAmJiBzcC5m
cm9tID09IHBvcyAmJiBtLnJlcGxhY2VkV2l0aCkgZm91bmRCb29rbWFya3MucHVzaChtKTsKKyAg
ICAgICAgICBpZiAobS50eXBlID09ICJib29rbWFyayIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS53
aWRnZXROb2RlKSBmb3VuZEJvb2ttYXJrcy5wdXNoKG0pOwogICAgICAgICB9CiAgICAgICAgIGlm
IChjb2xsYXBzZWQgJiYgKGNvbGxhcHNlZC5mcm9tIHx8IDApID09IHBvcykgewotICAgICAgICAg
IGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCAoY29sbGFwc2VkLnRvID09IG51bGwgPyBsZW4g
OiBjb2xsYXBzZWQudG8pIC0gcG9zLAorICAgICAgICAgIGJ1aWxkQ29sbGFwc2VkU3BhbihidWls
ZGVyLCAoY29sbGFwc2VkLnRvID09IG51bGwgPyBsZW4gKyAxIDogY29sbGFwc2VkLnRvKSAtIHBv
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkLm1hcmtlciwgY29sbGFw
c2VkLmZyb20gPT0gbnVsbCk7Ci0gICAgICAgICAgaWYgKGNvbGxhcHNlZC50byA9PSBudWxsKSBy
ZXR1cm4gY29sbGFwc2VkLm1hcmtlci5maW5kKCk7CisgICAgICAgICAgaWYgKGNvbGxhcHNlZC50
byA9PSBudWxsKSByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFjb2xsYXBzZWQgJiYg
Zm91bmRCb29rbWFya3MubGVuZ3RoKSBmb3IgKHZhciBqID0gMDsgaiA8IGZvdW5kQm9va21hcmtz
Lmxlbmd0aDsgKytqKQogICAgICAgICAgIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCAwLCBm
b3VuZEJvb2ttYXJrc1tqXSk7CkBAIC00NjAwLDE0ICs1ODc3LDIzIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgIHNwYW5TdGFydFN0eWxlID0gIiI7CiAgICAg
ICAgIH0KICAgICAgICAgdGV4dCA9IGFsbFRleHQuc2xpY2UoYXQsIGF0ID0gc3R5bGVzW2krK10p
OwotICAgICAgICBzdHlsZSA9IGludGVycHJldFRva2VuU3R5bGUoc3R5bGVzW2krK10sIGJ1aWxk
ZXIpOworICAgICAgICBzdHlsZSA9IGludGVycHJldFRva2VuU3R5bGUoc3R5bGVzW2krK10sIGJ1
aWxkZXIuY20ub3B0aW9ucyk7CiAgICAgICB9CiAgICAgfQogICB9CgogICAvLyBET0NVTUVOVCBE
QVRBIFNUUlVDVFVSRQoKLSAgZnVuY3Rpb24gdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBtYXJrZWRT
cGFucywgc2VsQWZ0ZXIsIGVzdGltYXRlSGVpZ2h0KSB7CisgIC8vIEJ5IGRlZmF1bHQsIHVwZGF0
ZXMgdGhhdCBzdGFydCBhbmQgZW5kIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCisgIC8vIGFy
ZSB0cmVhdGVkIHNwZWNpYWxseSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgYXNzb2NpYXRpb24gb2Yg
bGluZQorICAvLyB3aWRnZXRzIGFuZCBtYXJrZXIgZWxlbWVudHMgd2l0aCB0aGUgdGV4dCBiZWhh
dmUgbW9yZSBpbnR1aXRpdmUuCisgIGZ1bmN0aW9uIGlzV2hvbGVMaW5lVXBkYXRlKGRvYywgY2hh
bmdlKSB7CisgICAgcmV0dXJuIGNoYW5nZS5mcm9tLmNoID09IDAgJiYgY2hhbmdlLnRvLmNoID09
IDAgJiYgbHN0KGNoYW5nZS50ZXh0KSA9PSAiIiAmJgorICAgICAgKCFkb2MuY20gfHwgZG9jLmNt
Lm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKTsKKyAgfQorCisgIC8vIFBlcmZvcm0gYSBj
aGFuZ2Ugb24gdGhlIGRvY3VtZW50IGRhdGEgc3RydWN0dXJlLgorICBmdW5jdGlvbiB1cGRhdGVE
b2MoZG9jLCBjaGFuZ2UsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgewogICAgIGZ1bmN0
aW9uIHNwYW5zRm9yKG4pIHtyZXR1cm4gbWFya2VkU3BhbnMgPyBtYXJrZWRTcGFuc1tuXSA6IG51
bGw7fQogICAgIGZ1bmN0aW9uIHVwZGF0ZShsaW5lLCB0ZXh0LCBzcGFucykgewogICAgICAgdXBk
YXRlTGluZShsaW5lLCB0ZXh0LCBzcGFucywgZXN0aW1hdGVIZWlnaHQpOwpAQCAtNDYxOCwxMiAr
NTkwNCwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB2YXIgZmly
c3RMaW5lID0gZ2V0TGluZShkb2MsIGZyb20ubGluZSksIGxhc3RMaW5lID0gZ2V0TGluZShkb2Ms
IHRvLmxpbmUpOwogICAgIHZhciBsYXN0VGV4dCA9IGxzdCh0ZXh0KSwgbGFzdFNwYW5zID0gc3Bh
bnNGb3IodGV4dC5sZW5ndGggLSAxKSwgbmxpbmVzID0gdG8ubGluZSAtIGZyb20ubGluZTsKCi0g
ICAgLy8gRmlyc3QgYWRqdXN0IHRoZSBsaW5lIHN0cnVjdHVyZQotICAgIGlmIChmcm9tLmNoID09
IDAgJiYgdG8uY2ggPT0gMCAmJiBsYXN0VGV4dCA9PSAiIiAmJgotICAgICAgICAoIWRvYy5jbSB8
fCBkb2MuY20ub3B0aW9ucy53aG9sZUxpbmVVcGRhdGVCZWZvcmUpKSB7CisgICAgLy8gQWRqdXN0
IHRoZSBsaW5lIHN0cnVjdHVyZQorICAgIGlmIChpc1dob2xlTGluZVVwZGF0ZShkb2MsIGNoYW5n
ZSkpIHsKICAgICAgIC8vIFRoaXMgaXMgYSB3aG9sZS1saW5lIHJlcGxhY2UuIFRyZWF0ZWQgc3Bl
Y2lhbGx5IHRvIG1ha2UKICAgICAgIC8vIHN1cmUgbGluZSBvYmplY3RzIG1vdmUgdGhlIHdheSB0
aGV5IGFyZSBzdXBwb3NlZCB0by4KLSAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGV4dC5sZW5n
dGggLSAxLCBhZGRlZCA9IFtdOyBpIDwgZTsgKytpKQorICAgICAgZm9yICh2YXIgaSA9IDAsIGFk
ZGVkID0gW107IGkgPCB0ZXh0Lmxlbmd0aCAtIDE7ICsraSkKICAgICAgICAgYWRkZWQucHVzaChu
ZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKICAgICAgIHVw
ZGF0ZShsYXN0TGluZSwgbGFzdExpbmUudGV4dCwgbGFzdFNwYW5zKTsKICAgICAgIGlmIChubGlu
ZXMpIGRvYy5yZW1vdmUoZnJvbS5saW5lLCBubGluZXMpOwpAQCAtNDYzMiw3ICs1OTE3LDcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBpZiAodGV4dC5sZW5ndGgg
PT0gMSkgewogICAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgw
LCBmcm9tLmNoKSArIGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0
U3BhbnMpOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICh2YXIgYWRkZWQgPSBbXSwgaSA9
IDEsIGUgPSB0ZXh0Lmxlbmd0aCAtIDE7IGkgPCBlOyArK2kpCisgICAgICAgIGZvciAodmFyIGFk
ZGVkID0gW10sIGkgPSAxOyBpIDwgdGV4dC5sZW5ndGggLSAxOyArK2kpCiAgICAgICAgICAgYWRk
ZWQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsK
ICAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZShsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNs
aWNlKHRvLmNoKSwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkpOwogICAgICAgICB1cGRhdGUo
Zmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNw
YW5zRm9yKDApKTsKQEAgLTQ2NDQsMjAgKzU5MjksMzIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgfSBlbHNlIHsKICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0
TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpOwogICAg
ICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0VGV4dCArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gp
LCBsYXN0U3BhbnMpOwotICAgICAgZm9yICh2YXIgaSA9IDEsIGUgPSB0ZXh0Lmxlbmd0aCAtIDEs
IGFkZGVkID0gW107IGkgPCBlOyArK2kpCisgICAgICBmb3IgKHZhciBpID0gMSwgYWRkZWQgPSBb
XTsgaSA8IHRleHQubGVuZ3RoIC0gMTsgKytpKQogICAgICAgICBhZGRlZC5wdXNoKG5ldyBMaW5l
KHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOwogICAgICAgaWYgKG5saW5l
cyA+IDEpIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzIC0gMSk7CiAgICAgICBkb2Mu
aW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAgICB9CgogICAgIHNpZ25hbExhdGVyKGRv
YywgImNoYW5nZSIsIGRvYywgY2hhbmdlKTsKLSAgICBzZXRTZWxlY3Rpb24oZG9jLCBzZWxBZnRl
ci5hbmNob3IsIHNlbEFmdGVyLmhlYWQsIG51bGwsIHRydWUpOwogICB9CgorICAvLyBUaGUgZG9j
dW1lbnQgaXMgcmVwcmVzZW50ZWQgYXMgYSBCVHJlZSBjb25zaXN0aW5nIG9mIGxlYXZlcywgd2l0
aAorICAvLyBjaHVuayBvZiBsaW5lcyBpbiB0aGVtLCBhbmQgYnJhbmNoZXMsIHdpdGggdXAgdG8g
dGVuIGxlYXZlcyBvcgorICAvLyBvdGhlciBicmFuY2ggbm9kZXMgYmVsb3cgdGhlbS4gVGhlIHRv
cCBub2RlIGlzIGFsd2F5cyBhIGJyYW5jaAorICAvLyBub2RlLCBhbmQgaXMgdGhlIGRvY3VtZW50
IG9iamVjdCBpdHNlbGYgKG1lYW5pbmcgaXQgaGFzCisgIC8vIGFkZGl0aW9uYWwgbWV0aG9kcyBh
bmQgcHJvcGVydGllcykuCisgIC8vCisgIC8vIEFsbCBub2RlcyBoYXZlIHBhcmVudCBsaW5rcy4g
VGhlIHRyZWUgaXMgdXNlZCBib3RoIHRvIGdvIGZyb20KKyAgLy8gbGluZSBudW1iZXJzIHRvIGxp
bmUgb2JqZWN0cywgYW5kIHRvIGdvIGZyb20gb2JqZWN0cyB0byBudW1iZXJzLgorICAvLyBJdCBh
bHNvIGluZGV4ZXMgYnkgaGVpZ2h0LCBhbmQgaXMgdXNlZCB0byBjb252ZXJ0IGJldHdlZW4gaGVp
Z2h0CisgIC8vIGFuZCBsaW5lIG9iamVjdCwgYW5kIHRvIGZpbmQgdGhlIHRvdGFsIGhlaWdodCBv
ZiB0aGUgZG9jdW1lbnQuCisgIC8vCisgIC8vIFNlZSBhbHNvIGh0dHA6Ly9tYXJpam5oYXZlcmJl
a2UubmwvYmxvZy9jb2RlbWlycm9yLWxpbmUtdHJlZS5odG1sCisKICAgZnVuY3Rpb24gTGVhZkNo
dW5rKGxpbmVzKSB7CiAgICAgdGhpcy5saW5lcyA9IGxpbmVzOwogICAgIHRoaXMucGFyZW50ID0g
bnVsbDsKLSAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aCwgaGVpZ2h0ID0gMDsg
aSA8IGU7ICsraSkgeworICAgIGZvciAodmFyIGkgPSAwLCBoZWlnaHQgPSAwOyBpIDwgbGluZXMu
bGVuZ3RoOyArK2kpIHsKICAgICAgIGxpbmVzW2ldLnBhcmVudCA9IHRoaXM7CiAgICAgICBoZWln
aHQgKz0gbGluZXNbaV0uaGVpZ2h0OwogICAgIH0KQEAgLTQ2NjYsNiArNTk2Myw3IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewoKICAgTGVhZkNodW5rLnByb3RvdHlwZSA9IHsK
ICAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lcy5sZW5ndGg7IH0s
CisgICAgLy8gUmVtb3ZlIHRoZSBuIGxpbmVzIGF0IG9mZnNldCAnYXQnLgogICAgIHJlbW92ZUlu
bmVyOiBmdW5jdGlvbihhdCwgbikgewogICAgICAgZm9yICh2YXIgaSA9IGF0LCBlID0gYXQgKyBu
OyBpIDwgZTsgKytpKSB7CiAgICAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTsKQEAgLTQ2
NzUsMTQgKzU5NzMsMTggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICB9CiAgICAgICB0aGlzLmxpbmVzLnNwbGljZShhdCwgbik7CiAgICAgfSwKKyAgICAvLyBIZWxw
ZXIgdXNlZCB0byBjb2xsYXBzZSBhIHNtYWxsIGJyYW5jaCBpbnRvIGEgc2luZ2xlIGxlYWYuCiAg
ICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7Ci0gICAgICBsaW5lcy5zcGxpY2UuYXBwbHko
bGluZXMsIFtsaW5lcy5sZW5ndGgsIDBdLmNvbmNhdCh0aGlzLmxpbmVzKSk7CisgICAgICBsaW5l
cy5wdXNoLmFwcGx5KGxpbmVzLCB0aGlzLmxpbmVzKTsKICAgICB9LAorICAgIC8vIEluc2VydCB0
aGUgZ2l2ZW4gYXJyYXkgb2YgbGluZXMgYXQgb2Zmc2V0ICdhdCcsIGNvdW50IHRoZW0gYXMKKyAg
ICAvLyBoYXZpbmcgdGhlIGdpdmVuIGhlaWdodC4KICAgICBpbnNlcnRJbm5lcjogZnVuY3Rpb24o
YXQsIGxpbmVzLCBoZWlnaHQpIHsKICAgICAgIHRoaXMuaGVpZ2h0ICs9IGhlaWdodDsKICAgICAg
IHRoaXMubGluZXMgPSB0aGlzLmxpbmVzLnNsaWNlKDAsIGF0KS5jb25jYXQobGluZXMpLmNvbmNh
dCh0aGlzLmxpbmVzLnNsaWNlKGF0KSk7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVz
Lmxlbmd0aDsgaSA8IGU7ICsraSkgbGluZXNbaV0ucGFyZW50ID0gdGhpczsKKyAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIGxpbmVzW2ldLnBhcmVudCA9IHRoaXM7
CiAgICAgfSwKKyAgICAvLyBVc2VkIHRvIGl0ZXJhdGUgb3ZlciBhIHBhcnQgb2YgdGhlIHRyZWUu
CiAgICAgaXRlck46IGZ1bmN0aW9uKGF0LCBuLCBvcCkgewogICAgICAgZm9yICh2YXIgZSA9IGF0
ICsgbjsgYXQgPCBlOyArK2F0KQogICAgICAgICBpZiAob3AodGhpcy5saW5lc1thdF0pKSByZXR1
cm4gdHJ1ZTsKQEAgLTQ2OTIsNyArNTk5NCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICBmdW5jdGlvbiBCcmFuY2hDaHVuayhjaGlsZHJlbikgewogICAgIHRoaXMuY2hp
bGRyZW4gPSBjaGlsZHJlbjsKICAgICB2YXIgc2l6ZSA9IDAsIGhlaWdodCA9IDA7Ci0gICAgZm9y
ICh2YXIgaSA9IDAsIGUgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7CiAgICAgICB2YXIgY2ggPSBj
aGlsZHJlbltpXTsKICAgICAgIHNpemUgKz0gY2guY2h1bmtTaXplKCk7IGhlaWdodCArPSBjaC5o
ZWlnaHQ7CiAgICAgICBjaC5wYXJlbnQgPSB0aGlzOwpAQCAtNDcxNyw3ICs2MDE5LDEwIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgIGF0ID0gMDsKICAgICAg
ICAgfSBlbHNlIGF0IC09IHN6OwogICAgICAgfQotICAgICAgaWYgKHRoaXMuc2l6ZSAtIG4gPCAy
NSkgeworICAgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBzbWFsbGVyIHRoYW4gMjUgbGluZXMsIGVu
c3VyZSB0aGF0IGl0IGlzIGEKKyAgICAgIC8vIHNpbmdsZSBsZWFmIG5vZGUuCisgICAgICBpZiAo
dGhpcy5zaXplIC0gbiA8IDI1ICYmCisgICAgICAgICAgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4g
MSB8fCAhKHRoaXMuY2hpbGRyZW5bMF0gaW5zdGFuY2VvZiBMZWFmQ2h1bmspKSkgewogICAgICAg
ICB2YXIgbGluZXMgPSBbXTsKICAgICAgICAgdGhpcy5jb2xsYXBzZShsaW5lcyk7CiAgICAgICAg
IHRoaXMuY2hpbGRyZW4gPSBbbmV3IExlYWZDaHVuayhsaW5lcyldOwpAQCAtNDcyNSwxMiArNjAz
MCwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIH0KICAgICB9
LAogICAgIGNvbGxhcHNlOiBmdW5jdGlvbihsaW5lcykgewotICAgICAgZm9yICh2YXIgaSA9IDAs
IGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgdGhpcy5jaGlsZHJlbltpXS5j
b2xsYXBzZShsaW5lcyk7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4u
bGVuZ3RoOyArK2kpIHRoaXMuY2hpbGRyZW5baV0uY29sbGFwc2UobGluZXMpOwogICAgIH0sCiAg
ICAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9uKGF0LCBsaW5lcywgaGVpZ2h0KSB7CiAgICAgICB0aGlz
LnNpemUgKz0gbGluZXMubGVuZ3RoOwogICAgICAgdGhpcy5oZWlnaHQgKz0gaGVpZ2h0OwotICAg
ICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkg
eworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7
CiAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtT
aXplKCk7CiAgICAgICAgIGlmIChhdCA8PSBzeikgewogICAgICAgICAgIGNoaWxkLmluc2VydElu
bmVyKGF0LCBsaW5lcywgaGVpZ2h0KTsKQEAgLTQ3NDksNiArNjA1NCw3IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBhdCAtPSBzejsKICAgICAgIH0KICAgICB9
LAorICAgIC8vIFdoZW4gYSBub2RlIGhhcyBncm93biwgY2hlY2sgd2hldGhlciBpdCBzaG91bGQg
YmUgc3BsaXQuCiAgICAgbWF5YmVTcGlsbDogZnVuY3Rpb24oKSB7CiAgICAgICBpZiAodGhpcy5j
aGlsZHJlbi5sZW5ndGggPD0gMTApIHJldHVybjsKICAgICAgIHZhciBtZSA9IHRoaXM7CkBAIC00
NzcxLDcgKzYwNzcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IG1lLnBhcmVudC5tYXliZVNwaWxsKCk7CiAgICAgfSwKICAgICBpdGVyTjogZnVuY3Rpb24oYXQs
IG4sIG9wKSB7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3Ro
OyBpIDwgZTsgKytpKSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4u
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3og
PSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgICAgaWYgKGF0IDwgc3opIHsKICAgICAgICAgICB2
YXIgdXNlZCA9IE1hdGgubWluKG4sIHN6IC0gYXQpOwpAQCAtNDc5Miw0MyArNjA5OCw1MiBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB0aGlzLmZpcnN0ID0gZmlyc3RM
aW5lOwogICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxMZWZ0ID0gMDsKICAgICB0aGlz
LmNhbnRFZGl0ID0gZmFsc2U7Ci0gICAgdGhpcy5oaXN0b3J5ID0gbWFrZUhpc3RvcnkoKTsKICAg
ICB0aGlzLmNsZWFuR2VuZXJhdGlvbiA9IDE7CiAgICAgdGhpcy5mcm9udGllciA9IGZpcnN0TGlu
ZTsKICAgICB2YXIgc3RhcnQgPSBQb3MoZmlyc3RMaW5lLCAwKTsKLSAgICB0aGlzLnNlbCA9IHtm
cm9tOiBzdGFydCwgdG86IHN0YXJ0LCBoZWFkOiBzdGFydCwgYW5jaG9yOiBzdGFydCwgc2hpZnQ6
IGZhbHNlLCBleHRlbmQ6IGZhbHNlLCBnb2FsQ29sdW1uOiBudWxsfTsKKyAgICB0aGlzLnNlbCA9
IHNpbXBsZVNlbGVjdGlvbihzdGFydCk7CisgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3Rvcnko
bnVsbCk7CiAgICAgdGhpcy5pZCA9ICsrbmV4dERvY0lkOwogICAgIHRoaXMubW9kZU9wdGlvbiA9
IG1vZGU7CgogICAgIGlmICh0eXBlb2YgdGV4dCA9PSAic3RyaW5nIikgdGV4dCA9IHNwbGl0TGlu
ZXModGV4dCk7Ci0gICAgdXBkYXRlRG9jKHRoaXMsIHtmcm9tOiBzdGFydCwgdG86IHN0YXJ0LCB0
ZXh0OiB0ZXh0fSwgbnVsbCwge2hlYWQ6IHN0YXJ0LCBhbmNob3I6IHN0YXJ0fSk7CisgICAgdXBk
YXRlRG9jKHRoaXMsIHtmcm9tOiBzdGFydCwgdG86IHN0YXJ0LCB0ZXh0OiB0ZXh0fSk7CisgICAg
c2V0U2VsZWN0aW9uKHRoaXMsIHNpbXBsZVNlbGVjdGlvbihzdGFydCksIHNlbF9kb250U2Nyb2xs
KTsKICAgfTsKCiAgIERvYy5wcm90b3R5cGUgPSBjcmVhdGVPYmooQnJhbmNoQ2h1bmsucHJvdG90
eXBlLCB7CiAgICAgY29uc3RydWN0b3I6IERvYywKKyAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGRv
Y3VtZW50LiBTdXBwb3J0cyB0d28gZm9ybXMgLS0gd2l0aCBvbmx5IG9uZQorICAgIC8vIGFyZ3Vt
ZW50LCBpdCBjYWxscyB0aGF0IGZvciBlYWNoIGxpbmUgaW4gdGhlIGRvY3VtZW50LiBXaXRoCisg
ICAgLy8gdGhyZWUsIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIHJhbmdlIGdpdmVuIGJ5IHRoZSBmaXJz
dCB0d28gKHdpdGgKKyAgICAvLyB0aGUgc2Vjb25kIGJlaW5nIG5vbi1pbmNsdXNpdmUpLgogICAg
IGl0ZXI6IGZ1bmN0aW9uKGZyb20sIHRvLCBvcCkgewogICAgICAgaWYgKG9wKSB0aGlzLml0ZXJO
KGZyb20gLSB0aGlzLmZpcnN0LCB0byAtIGZyb20sIG9wKTsKICAgICAgIGVsc2UgdGhpcy5pdGVy
Tih0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplLCBmcm9tKTsKICAgICB9LAoKKyAg
ICAvLyBOb24tcHVibGljIGludGVyZmFjZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBsaW5lcy4K
ICAgICBpbnNlcnQ6IGZ1bmN0aW9uKGF0LCBsaW5lcykgewogICAgICAgdmFyIGhlaWdodCA9IDA7
Ci0gICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgaGVp
Z2h0ICs9IGxpbmVzW2ldLmhlaWdodDsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMu
bGVuZ3RoOyArK2kpIGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7CiAgICAgICB0aGlzLmluc2Vy
dElubmVyKGF0IC0gdGhpcy5maXJzdCwgbGluZXMsIGhlaWdodCk7CiAgICAgfSwKICAgICByZW1v
dmU6IGZ1bmN0aW9uKGF0LCBuKSB7IHRoaXMucmVtb3ZlSW5uZXIoYXQgLSB0aGlzLmZpcnN0LCBu
KTsgfSwKCisgICAgLy8gRnJvbSBoZXJlLCB0aGUgbWV0aG9kcyBhcmUgcGFydCBvZiB0aGUgcHVi
bGljIGludGVyZmFjZS4gTW9zdAorICAgIC8vIGFyZSBhbHNvIGF2YWlsYWJsZSBmcm9tIENvZGVN
aXJyb3IgKGVkaXRvcikgaW5zdGFuY2VzLgorCiAgICAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGxpbmVT
ZXApIHsKICAgICAgIHZhciBsaW5lcyA9IGdldExpbmVzKHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMu
Zmlyc3QgKyB0aGlzLnNpemUpOwogICAgICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSByZXR1cm4g
bGluZXM7CiAgICAgICByZXR1cm4gbGluZXMuam9pbihsaW5lU2VwIHx8ICJcbiIpOwogICAgIH0s
Ci0gICAgc2V0VmFsdWU6IGZ1bmN0aW9uKGNvZGUpIHsKKyAgICBzZXRWYWx1ZTogZG9jTWV0aG9k
T3AoZnVuY3Rpb24oY29kZSkgewogICAgICAgdmFyIHRvcCA9IFBvcyh0aGlzLmZpcnN0LCAwKSwg
bGFzdCA9IHRoaXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxOwogICAgICAgbWFrZUNoYW5nZSh0aGlz
LCB7ZnJvbTogdG9wLCB0bzogUG9zKGxhc3QsIGdldExpbmUodGhpcywgbGFzdCkudGV4dC5sZW5n
dGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3BsaXRMaW5lcyhjb2RlKSwgb3Jp
Z2luOiAic2V0VmFsdWUifSwKLSAgICAgICAgICAgICAgICAge2hlYWQ6IHRvcCwgYW5jaG9yOiB0
b3B9LCB0cnVlKTsKLSAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3BsaXRM
aW5lcyhjb2RlKSwgb3JpZ2luOiAic2V0VmFsdWUifSwgdHJ1ZSk7CisgICAgICBzZXRTZWxlY3Rp
b24odGhpcywgc2ltcGxlU2VsZWN0aW9uKHRvcCkpOworICAgIH0pLAogICAgIHJlcGxhY2VSYW5n
ZTogZnVuY3Rpb24oY29kZSwgZnJvbSwgdG8sIG9yaWdpbikgewogICAgICAgZnJvbSA9IGNsaXBQ
b3ModGhpcywgZnJvbSk7CiAgICAgICB0byA9IHRvID8gY2xpcFBvcyh0aGlzLCB0bykgOiBmcm9t
OwpAQCAtNDg0MSwyMSArNjE1NiwxMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICB9LAoKICAgICBnZXRMaW5lOiBmdW5jdGlvbihsaW5lKSB7dmFyIGwgPSB0aGlzLmdl
dExpbmVIYW5kbGUobGluZSk7IHJldHVybiBsICYmIGwudGV4dDt9LAotICAgIHNldExpbmU6IGZ1
bmN0aW9uKGxpbmUsIHRleHQpIHsKLSAgICAgIGlmIChpc0xpbmUodGhpcywgbGluZSkpCi0gICAg
ICAgIHJlcGxhY2VSYW5nZSh0aGlzLCB0ZXh0LCBQb3MobGluZSwgMCksIGNsaXBQb3ModGhpcywg
UG9zKGxpbmUpKSk7Ci0gICAgfSwKLSAgICByZW1vdmVMaW5lOiBmdW5jdGlvbihsaW5lKSB7Ci0g
ICAgICBpZiAobGluZSkgcmVwbGFjZVJhbmdlKHRoaXMsICIiLCBjbGlwUG9zKHRoaXMsIFBvcyhs
aW5lIC0gMSkpLCBjbGlwUG9zKHRoaXMsIFBvcyhsaW5lKSkpOwotICAgICAgZWxzZSByZXBsYWNl
UmFuZ2UodGhpcywgIiIsIFBvcygwLCAwKSwgY2xpcFBvcyh0aGlzLCBQb3MoMSwgMCkpKTsKLSAg
ICB9LAoKICAgICBnZXRMaW5lSGFuZGxlOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZSh0aGlz
LCBsaW5lKSkgcmV0dXJuIGdldExpbmUodGhpcywgbGluZSk7fSwKICAgICBnZXRMaW5lTnVtYmVy
OiBmdW5jdGlvbihsaW5lKSB7cmV0dXJuIGxpbmVObyhsaW5lKTt9LAoKICAgICBnZXRMaW5lSGFu
ZGxlVmlzdWFsU3RhcnQ6IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgIGlmICh0eXBlb2YgbGluZSA9
PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUodGhpcywgbGluZSk7Ci0gICAgICByZXR1cm4gdmlz
dWFsTGluZSh0aGlzLCBsaW5lKTsKKyAgICAgIHJldHVybiB2aXN1YWxMaW5lKGxpbmUpOwogICAg
IH0sCgogICAgIGxpbmVDb3VudDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc2l6ZTt9LApAQCAt
NDg2NSw0NyArNjE3MiwxMDMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgY2xpcFBvczogZnVuY3Rpb24ocG9zKSB7cmV0dXJuIGNsaXBQb3ModGhpcywgcG9zKTt9LAoK
ICAgICBnZXRDdXJzb3I6IGZ1bmN0aW9uKHN0YXJ0KSB7Ci0gICAgICB2YXIgc2VsID0gdGhpcy5z
ZWwsIHBvczsKLSAgICAgIGlmIChzdGFydCA9PSBudWxsIHx8IHN0YXJ0ID09ICJoZWFkIikgcG9z
ID0gc2VsLmhlYWQ7Ci0gICAgICBlbHNlIGlmIChzdGFydCA9PSAiYW5jaG9yIikgcG9zID0gc2Vs
LmFuY2hvcjsKLSAgICAgIGVsc2UgaWYgKHN0YXJ0ID09ICJlbmQiIHx8IHN0YXJ0ID09PSBmYWxz
ZSkgcG9zID0gc2VsLnRvOwotICAgICAgZWxzZSBwb3MgPSBzZWwuZnJvbTsKLSAgICAgIHJldHVy
biBjb3B5UG9zKHBvcyk7CisgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbC5wcmltYXJ5KCksIHBv
czsKKyAgICAgIGlmIChzdGFydCA9PSBudWxsIHx8IHN0YXJ0ID09ICJoZWFkIikgcG9zID0gcmFu
Z2UuaGVhZDsKKyAgICAgIGVsc2UgaWYgKHN0YXJ0ID09ICJhbmNob3IiKSBwb3MgPSByYW5nZS5h
bmNob3I7CisgICAgICBlbHNlIGlmIChzdGFydCA9PSAiZW5kIiB8fCBzdGFydCA9PSAidG8iIHx8
IHN0YXJ0ID09PSBmYWxzZSkgcG9zID0gcmFuZ2UudG8oKTsKKyAgICAgIGVsc2UgcG9zID0gcmFu
Z2UuZnJvbSgpOworICAgICAgcmV0dXJuIHBvczsKICAgICB9LAotICAgIHNvbWV0aGluZ1NlbGVj
dGVkOiBmdW5jdGlvbigpIHtyZXR1cm4gIXBvc0VxKHRoaXMuc2VsLmhlYWQsIHRoaXMuc2VsLmFu
Y2hvcik7fSwKKyAgICBsaXN0U2VsZWN0aW9uczogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnNl
bC5yYW5nZXM7IH0sCisgICAgc29tZXRoaW5nU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge3JldHVybiB0
aGlzLnNlbC5zb21ldGhpbmdTZWxlY3RlZCgpO30sCgotICAgIHNldEN1cnNvcjogZG9jT3BlcmF0
aW9uKGZ1bmN0aW9uKGxpbmUsIGNoLCBleHRlbmQpIHsKLSAgICAgIHZhciBwb3MgPSBjbGlwUG9z
KHRoaXMsIHR5cGVvZiBsaW5lID09ICJudW1iZXIiID8gUG9zKGxpbmUsIGNoIHx8IDApIDogbGlu
ZSk7Ci0gICAgICBpZiAoZXh0ZW5kKSBleHRlbmRTZWxlY3Rpb24odGhpcywgcG9zKTsKLSAgICAg
IGVsc2Ugc2V0U2VsZWN0aW9uKHRoaXMsIHBvcywgcG9zKTsKKyAgICBzZXRDdXJzb3I6IGRvY01l
dGhvZE9wKGZ1bmN0aW9uKGxpbmUsIGNoLCBvcHRpb25zKSB7CisgICAgICBzZXRTaW1wbGVTZWxl
Y3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCB0eXBlb2YgbGluZSA9PSAibnVtYmVyIiA/IFBvcyhs
aW5lLCBjaCB8fCAwKSA6IGxpbmUpLCBudWxsLCBvcHRpb25zKTsKKyAgICB9KSwKKyAgICBzZXRT
ZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGFuY2hvciwgaGVhZCwgb3B0aW9ucykgewor
ICAgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgYW5jaG9yKSwgY2xp
cFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvciksIG9wdGlvbnMpOworICAgIH0pLAorICAgIGV4dGVu
ZFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGVhZCwgb3RoZXIsIG9wdGlvbnMpIHsK
KyAgICAgIGV4dGVuZFNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGhlYWQpLCBvdGhlciAm
JiBjbGlwUG9zKHRoaXMsIG90aGVyKSwgb3B0aW9ucyk7CisgICAgfSksCisgICAgZXh0ZW5kU2Vs
ZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGVhZHMsIG9wdGlvbnMpIHsKKyAgICAgIGV4
dGVuZFNlbGVjdGlvbnModGhpcywgY2xpcFBvc0FycmF5KHRoaXMsIGhlYWRzLCBvcHRpb25zKSk7
CiAgICAgfSksCi0gICAgc2V0U2VsZWN0aW9uOiBkb2NPcGVyYXRpb24oZnVuY3Rpb24oYW5jaG9y
LCBoZWFkLCBiaWFzKSB7Ci0gICAgICBzZXRTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCBh
bmNob3IpLCBjbGlwUG9zKHRoaXMsIGhlYWQgfHwgYW5jaG9yKSwgYmlhcyk7CisgICAgZXh0ZW5k
U2VsZWN0aW9uc0J5OiBkb2NNZXRob2RPcChmdW5jdGlvbihmLCBvcHRpb25zKSB7CisgICAgICBl
eHRlbmRTZWxlY3Rpb25zKHRoaXMsIG1hcCh0aGlzLnNlbC5yYW5nZXMsIGYpLCBvcHRpb25zKTsK
ICAgICB9KSwKLSAgICBleHRlbmRTZWxlY3Rpb246IGRvY09wZXJhdGlvbihmdW5jdGlvbihmcm9t
LCB0bywgYmlhcykgewotICAgICAgZXh0ZW5kU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywg
ZnJvbSksIHRvICYmIGNsaXBQb3ModGhpcywgdG8pLCBiaWFzKTsKKyAgICBzZXRTZWxlY3Rpb25z
OiBkb2NNZXRob2RPcChmdW5jdGlvbihyYW5nZXMsIHByaW1hcnksIG9wdGlvbnMpIHsKKyAgICAg
IGlmICghcmFuZ2VzLmxlbmd0aCkgcmV0dXJuOworICAgICAgZm9yICh2YXIgaSA9IDAsIG91dCA9
IFtdOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKQorICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2Uo
Y2xpcFBvcyh0aGlzLCByYW5nZXNbaV0uYW5jaG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsaXBQb3ModGhpcywgcmFuZ2VzW2ldLmhlYWQpKTsKKyAgICAgIGlmIChwcmltYXJ5ID09
IG51bGwpIHByaW1hcnkgPSBNYXRoLm1pbihyYW5nZXMubGVuZ3RoIC0gMSwgdGhpcy5zZWwucHJp
bUluZGV4KTsKKyAgICAgIHNldFNlbGVjdGlvbih0aGlzLCBub3JtYWxpemVTZWxlY3Rpb24ob3V0
LCBwcmltYXJ5KSwgb3B0aW9ucyk7CisgICAgfSksCisgICAgYWRkU2VsZWN0aW9uOiBkb2NNZXRo
b2RPcChmdW5jdGlvbihhbmNob3IsIGhlYWQsIG9wdGlvbnMpIHsKKyAgICAgIHZhciByYW5nZXMg
PSB0aGlzLnNlbC5yYW5nZXMuc2xpY2UoMCk7CisgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2Uo
Y2xpcFBvcyh0aGlzLCBhbmNob3IpLCBjbGlwUG9zKHRoaXMsIGhlYWQgfHwgYW5jaG9yKSkpOwor
ICAgICAgc2V0U2VsZWN0aW9uKHRoaXMsIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIHJhbmdl
cy5sZW5ndGggLSAxKSwgb3B0aW9ucyk7CiAgICAgfSksCgotICAgIGdldFNlbGVjdGlvbjogZnVu
Y3Rpb24obGluZVNlcCkge3JldHVybiB0aGlzLmdldFJhbmdlKHRoaXMuc2VsLmZyb20sIHRoaXMu
c2VsLnRvLCBsaW5lU2VwKTt9LAotICAgIHJlcGxhY2VTZWxlY3Rpb246IGZ1bmN0aW9uKGNvZGUs
IGNvbGxhcHNlLCBvcmlnaW4pIHsKLSAgICAgIG1ha2VDaGFuZ2UodGhpcywge2Zyb206IHRoaXMu
c2VsLmZyb20sIHRvOiB0aGlzLnNlbC50bywgdGV4dDogc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2lu
OiBvcmlnaW59LCBjb2xsYXBzZSB8fCAiYXJvdW5kIik7CisgICAgZ2V0U2VsZWN0aW9uOiBmdW5j
dGlvbihsaW5lU2VwKSB7CisgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLCBsaW5l
czsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIHZhciBzZWwgPSBnZXRCZXR3ZWVuKHRoaXMsIHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tp
XS50bygpKTsKKyAgICAgICAgbGluZXMgPSBsaW5lcyA/IGxpbmVzLmNvbmNhdChzZWwpIDogc2Vs
OworICAgICAgfQorICAgICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSByZXR1cm4gbGluZXM7Cisg
ICAgICBlbHNlIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgIlxuIik7CisgICAgfSwKKyAg
ICBnZXRTZWxlY3Rpb25zOiBmdW5jdGlvbihsaW5lU2VwKSB7CisgICAgICB2YXIgcGFydHMgPSBb
XSwgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
YW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHNlbCA9IGdldEJldHdlZW4odGhpcywg
cmFuZ2VzW2ldLmZyb20oKSwgcmFuZ2VzW2ldLnRvKCkpOworICAgICAgICBpZiAobGluZVNlcCAh
PT0gZmFsc2UpIHNlbCA9IHNlbC5qb2luKGxpbmVTZXAgfHwgIlxuIik7CisgICAgICAgIHBhcnRz
W2ldID0gc2VsOworICAgICAgfQorICAgICAgcmV0dXJuIHBhcnRzOworICAgIH0sCisgICAgcmVw
bGFjZVNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdp
bikgeworICAgICAgdmFyIGR1cCA9IFtdOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
LnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspCisgICAgICAgIGR1cFtpXSA9IGNvZGU7CisgICAgICB0
aGlzLnJlcGxhY2VTZWxlY3Rpb25zKGR1cCwgY29sbGFwc2UsIG9yaWdpbiB8fCAiK2lucHV0Iik7
CisgICAgfSksCisgICAgcmVwbGFjZVNlbGVjdGlvbnM6IGZ1bmN0aW9uKGNvZGUsIGNvbGxhcHNl
LCBvcmlnaW4pIHsKKyAgICAgIHZhciBjaGFuZ2VzID0gW10sIHNlbCA9IHRoaXMuc2VsOworICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
IHZhciByYW5nZSA9IHNlbC5yYW5nZXNbaV07CisgICAgICAgIGNoYW5nZXNbaV0gPSB7ZnJvbTog
cmFuZ2UuZnJvbSgpLCB0bzogcmFuZ2UudG8oKSwgdGV4dDogc3BsaXRMaW5lcyhjb2RlW2ldKSwg
b3JpZ2luOiBvcmlnaW59OworICAgICAgfQorICAgICAgdmFyIG5ld1NlbCA9IGNvbGxhcHNlICYm
IGNvbGxhcHNlICE9ICJlbmQiICYmIGNvbXB1dGVSZXBsYWNlZFNlbCh0aGlzLCBjaGFuZ2VzLCBj
b2xsYXBzZSk7CisgICAgICBmb3IgKHZhciBpID0gY2hhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7
IGktLSkKKyAgICAgICAgbWFrZUNoYW5nZSh0aGlzLCBjaGFuZ2VzW2ldKTsKKyAgICAgIGlmIChu
ZXdTZWwpIHNldFNlbGVjdGlvblJlcGxhY2VIaXN0b3J5KHRoaXMsIG5ld1NlbCk7CisgICAgICBl
bHNlIGlmICh0aGlzLmNtKSBlbnN1cmVDdXJzb3JWaXNpYmxlKHRoaXMuY20pOwogICAgIH0sCi0g
ICAgdW5kbzogZG9jT3BlcmF0aW9uKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0
aGlzLCAidW5kbyIpO30pLAotICAgIHJlZG86IGRvY09wZXJhdGlvbihmdW5jdGlvbigpIHttYWtl
Q2hhbmdlRnJvbUhpc3RvcnkodGhpcywgInJlZG8iKTt9KSwKKyAgICB1bmRvOiBkb2NNZXRob2RP
cChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgInVuZG8iKTt9KSwKKyAg
ICByZWRvOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhp
cywgInJlZG8iKTt9KSwKKyAgICB1bmRvU2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbigp
IHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgInVuZG8iLCB0cnVlKTt9KSwKKyAgICByZWRv
U2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3Rvcnko
dGhpcywgInJlZG8iLCB0cnVlKTt9KSwKCi0gICAgc2V0RXh0ZW5kaW5nOiBmdW5jdGlvbih2YWwp
IHt0aGlzLnNlbC5leHRlbmQgPSB2YWw7fSwKKyAgICBzZXRFeHRlbmRpbmc6IGZ1bmN0aW9uKHZh
bCkge3RoaXMuZXh0ZW5kID0gdmFsO30sCisgICAgZ2V0RXh0ZW5kaW5nOiBmdW5jdGlvbigpIHty
ZXR1cm4gdGhpcy5leHRlbmQ7fSwKCiAgICAgaGlzdG9yeVNpemU6IGZ1bmN0aW9uKCkgewotICAg
ICAgdmFyIGhpc3QgPSB0aGlzLmhpc3Rvcnk7Ci0gICAgICByZXR1cm4ge3VuZG86IGhpc3QuZG9u
ZS5sZW5ndGgsIHJlZG86IGhpc3QudW5kb25lLmxlbmd0aH07CisgICAgICB2YXIgaGlzdCA9IHRo
aXMuaGlzdG9yeSwgZG9uZSA9IDAsIHVuZG9uZSA9IDA7CisgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGhpc3QuZG9uZS5sZW5ndGg7IGkrKykgaWYgKCFoaXN0LmRvbmVbaV0ucmFuZ2VzKSArK2Rv
bmU7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpc3QudW5kb25lLmxlbmd0aDsgaSsrKSBp
ZiAoIWhpc3QudW5kb25lW2ldLnJhbmdlcykgKyt1bmRvbmU7CisgICAgICByZXR1cm4ge3VuZG86
IGRvbmUsIHJlZG86IHVuZG9uZX07CiAgICAgfSwKLSAgICBjbGVhckhpc3Rvcnk6IGZ1bmN0aW9u
KCkge3RoaXMuaGlzdG9yeSA9IG1ha2VIaXN0b3J5KHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9u
KTt9LAorICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7dGhpcy5oaXN0b3J5ID0gbmV3IEhp
c3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO30sCgogICAgIG1hcmtDbGVhbjogZnVu
Y3Rpb24oKSB7Ci0gICAgICB0aGlzLmNsZWFuR2VuZXJhdGlvbiA9IHRoaXMuY2hhbmdlR2VuZXJh
dGlvbigpOworICAgICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSB0aGlzLmNoYW5nZUdlbmVyYXRp
b24odHJ1ZSk7CiAgICAgfSwKLSAgICBjaGFuZ2VHZW5lcmF0aW9uOiBmdW5jdGlvbigpIHsKLSAg
ICAgIHRoaXMuaGlzdG9yeS5sYXN0T3AgPSB0aGlzLmhpc3RvcnkubGFzdE9yaWdpbiA9IG51bGw7
CisgICAgY2hhbmdlR2VuZXJhdGlvbjogZnVuY3Rpb24oZm9yY2VTcGxpdCkgeworICAgICAgaWYg
KGZvcmNlU3BsaXQpCisgICAgICAgIHRoaXMuaGlzdG9yeS5sYXN0T3AgPSB0aGlzLmhpc3Rvcnku
bGFzdE9yaWdpbiA9IG51bGw7CiAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb247
CiAgICAgfSwKICAgICBpc0NsZWFuOiBmdW5jdGlvbiAoZ2VuKSB7CkBAIC00OTE3LDkgKzYyODAs
OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgdW5k
b25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS51bmRvbmUpfTsKICAgICB9LAogICAg
IHNldEhpc3Rvcnk6IGZ1bmN0aW9uKGhpc3REYXRhKSB7Ci0gICAgICB2YXIgaGlzdCA9IHRoaXMu
aGlzdG9yeSA9IG1ha2VIaXN0b3J5KHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKTsKLSAgICAg
IGhpc3QuZG9uZSA9IGhpc3REYXRhLmRvbmUuc2xpY2UoMCk7Ci0gICAgICBoaXN0LnVuZG9uZSA9
IGhpc3REYXRhLnVuZG9uZS5zbGljZSgwKTsKKyAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5
ID0gbmV3IEhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pOworICAgICAgaGlzdC5k
b25lID0gY29weUhpc3RvcnlBcnJheShoaXN0RGF0YS5kb25lLnNsaWNlKDApLCBudWxsLCB0cnVl
KTsKKyAgICAgIGhpc3QudW5kb25lID0gY29weUhpc3RvcnlBcnJheShoaXN0RGF0YS51bmRvbmUu
c2xpY2UoMCksIG51bGwsIHRydWUpOwogICAgIH0sCgogICAgIG1hcmtUZXh0OiBmdW5jdGlvbihm
cm9tLCB0bywgb3B0aW9ucykgewpAQCAtNDkyNyw3ICs2MjkwLDggQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfSwKICAgICBzZXRCb29rbWFyazogZnVuY3Rpb24ocG9z
LCBvcHRpb25zKSB7CiAgICAgICB2YXIgcmVhbE9wdHMgPSB7cmVwbGFjZWRXaXRoOiBvcHRpb25z
ICYmIChvcHRpb25zLm5vZGVUeXBlID09IG51bGwgPyBvcHRpb25zLndpZGdldCA6IG9wdGlvbnMp
LAotICAgICAgICAgICAgICAgICAgICAgIGluc2VydExlZnQ6IG9wdGlvbnMgJiYgb3B0aW9ucy5p
bnNlcnRMZWZ0fTsKKyAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRMZWZ0OiBvcHRpb25zICYm
IG9wdGlvbnMuaW5zZXJ0TGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICBjbGVhcldoZW5FbXB0
eTogZmFsc2UsIHNoYXJlZDogb3B0aW9ucyAmJiBvcHRpb25zLnNoYXJlZH07CiAgICAgICBwb3Mg
PSBjbGlwUG9zKHRoaXMsIHBvcyk7CiAgICAgICByZXR1cm4gbWFya1RleHQodGhpcywgcG9zLCBw
b3MsIHJlYWxPcHRzLCAiYm9va21hcmsiKTsKICAgICB9LApAQCAtNDk0Miw2ICs2MzA2LDIzIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgfQogICAgICAgcmV0dXJu
IG1hcmtlcnM7CiAgICAgfSwKKyAgICBmaW5kTWFya3M6IGZ1bmN0aW9uKGZyb20sIHRvLCBmaWx0
ZXIpIHsKKyAgICAgIGZyb20gPSBjbGlwUG9zKHRoaXMsIGZyb20pOyB0byA9IGNsaXBQb3ModGhp
cywgdG8pOworICAgICAgdmFyIGZvdW5kID0gW10sIGxpbmVObyA9IGZyb20ubGluZTsKKyAgICAg
IHRoaXMuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7CisgICAg
ICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnM7CisgICAgICAgIGlmIChzcGFucykgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHZhciBzcGFu
ID0gc3BhbnNbaV07CisgICAgICAgICAgaWYgKCEobGluZU5vID09IGZyb20ubGluZSAmJiBmcm9t
LmNoID4gc3Bhbi50byB8fAorICAgICAgICAgICAgICAgIHNwYW4uZnJvbSA9PSBudWxsICYmIGxp
bmVObyAhPSBmcm9tLmxpbmV8fAorICAgICAgICAgICAgICAgIGxpbmVObyA9PSB0by5saW5lICYm
IHNwYW4uZnJvbSA+IHRvLmNoKSAmJgorICAgICAgICAgICAgICAoIWZpbHRlciB8fCBmaWx0ZXIo
c3Bhbi5tYXJrZXIpKSkKKyAgICAgICAgICAgIGZvdW5kLnB1c2goc3Bhbi5tYXJrZXIucGFyZW50
IHx8IHNwYW4ubWFya2VyKTsKKyAgICAgICAgfQorICAgICAgICArK2xpbmVObzsKKyAgICAgIH0p
OworICAgICAgcmV0dXJuIGZvdW5kOworICAgIH0sCiAgICAgZ2V0QWxsTWFya3M6IGZ1bmN0aW9u
KCkgewogICAgICAgdmFyIG1hcmtlcnMgPSBbXTsKICAgICAgIHRoaXMuaXRlcihmdW5jdGlvbihs
aW5lKSB7CkBAIC00OTc1LDggKzYzNTYsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBjb3B5OiBmdW5jdGlvbihjb3B5SGlzdG9yeSkgewogICAgICAgdmFyIGRvYyA9
IG5ldyBEb2MoZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6
ZSksIHRoaXMubW9kZU9wdGlvbiwgdGhpcy5maXJzdCk7CiAgICAgICBkb2Muc2Nyb2xsVG9wID0g
dGhpcy5zY3JvbGxUb3A7IGRvYy5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0OwotICAgICAg
ZG9jLnNlbCA9IHtmcm9tOiB0aGlzLnNlbC5mcm9tLCB0bzogdGhpcy5zZWwudG8sIGhlYWQ6IHRo
aXMuc2VsLmhlYWQsIGFuY2hvcjogdGhpcy5zZWwuYW5jaG9yLAotICAgICAgICAgICAgICAgICBz
aGlmdDogdGhpcy5zZWwuc2hpZnQsIGV4dGVuZDogZmFsc2UsIGdvYWxDb2x1bW46IHRoaXMuc2Vs
LmdvYWxDb2x1bW59OworICAgICAgZG9jLnNlbCA9IHRoaXMuc2VsOworICAgICAgZG9jLmV4dGVu
ZCA9IGZhbHNlOwogICAgICAgaWYgKGNvcHlIaXN0b3J5KSB7CiAgICAgICAgIGRvYy5oaXN0b3J5
LnVuZG9EZXB0aCA9IHRoaXMuaGlzdG9yeS51bmRvRGVwdGg7CiAgICAgICAgIGRvYy5zZXRIaXN0
b3J5KHRoaXMuZ2V0SGlzdG9yeSgpKTsKQEAgLTQ5OTMsNiArNjM3NCw3IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKG9wdGlvbnMuc2hhcmVkSGlzdCkgY29w
eS5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5OwogICAgICAgKHRoaXMubGlua2VkIHx8ICh0aGlzLmxp
bmtlZCA9IFtdKSkucHVzaCh7ZG9jOiBjb3B5LCBzaGFyZWRIaXN0OiBvcHRpb25zLnNoYXJlZEhp
c3R9KTsKICAgICAgIGNvcHkubGlua2VkID0gW3tkb2M6IHRoaXMsIGlzUGFyZW50OiB0cnVlLCBz
aGFyZWRIaXN0OiBvcHRpb25zLnNoYXJlZEhpc3R9XTsKKyAgICAgIGNvcHlTaGFyZWRNYXJrZXJz
KGNvcHksIGZpbmRTaGFyZWRNYXJrZXJzKHRoaXMpKTsKICAgICAgIHJldHVybiBjb3B5OwogICAg
IH0sCiAgICAgdW5saW5rRG9jOiBmdW5jdGlvbihvdGhlcikgewpAQCAtNTAwMiwxMyArNjM4NCwx
NCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgaWYgKGxpbmsu
ZG9jICE9IG90aGVyKSBjb250aW51ZTsKICAgICAgICAgdGhpcy5saW5rZWQuc3BsaWNlKGksIDEp
OwogICAgICAgICBvdGhlci51bmxpbmtEb2ModGhpcyk7CisgICAgICAgIGRldGFjaFNoYXJlZE1h
cmtlcnMoZmluZFNoYXJlZE1hcmtlcnModGhpcykpOwogICAgICAgICBicmVhazsKICAgICAgIH0K
ICAgICAgIC8vIElmIHRoZSBoaXN0b3JpZXMgd2VyZSBzaGFyZWQsIHNwbGl0IHRoZW0gYWdhaW4K
ICAgICAgIGlmIChvdGhlci5oaXN0b3J5ID09IHRoaXMuaGlzdG9yeSkgewogICAgICAgICB2YXIg
c3BsaXRJZHMgPSBbb3RoZXIuaWRdOwogICAgICAgICBsaW5rZWREb2NzKG90aGVyLCBmdW5jdGlv
bihkb2MpIHtzcGxpdElkcy5wdXNoKGRvYy5pZCk7fSwgdHJ1ZSk7Ci0gICAgICAgIG90aGVyLmhp
c3RvcnkgPSBtYWtlSGlzdG9yeSgpOworICAgICAgICBvdGhlci5oaXN0b3J5ID0gbmV3IEhpc3Rv
cnkobnVsbCk7CiAgICAgICAgIG90aGVyLmhpc3RvcnkuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXko
dGhpcy5oaXN0b3J5LmRvbmUsIHNwbGl0SWRzKTsKICAgICAgICAgb3RoZXIuaGlzdG9yeS51bmRv
bmUgPSBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS51bmRvbmUsIHNwbGl0SWRzKTsKICAg
ICAgIH0KQEAgLTUwMTksOSArNjQwMiwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBnZXRFZGl0b3I6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmNtO30KICAgfSk7
CgorICAvLyBQdWJsaWMgYWxpYXMuCiAgIERvYy5wcm90b3R5cGUuZWFjaExpbmUgPSBEb2MucHJv
dG90eXBlLml0ZXI7CgotICAvLyBUaGUgRG9jIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgYXZhaWxh
YmxlIG9uIENvZGVNaXJyb3IgaW5zdGFuY2VzCisgIC8vIFNldCB1cCBtZXRob2RzIG9uIENvZGVN
aXJyb3IncyBwcm90b3R5cGUgdG8gcmVkaXJlY3QgdG8gdGhlIGVkaXRvcidzIGRvY3VtZW50Lgog
ICB2YXIgZG9udERlbGVnYXRlID0gIml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciIu
c3BsaXQoIiAiKTsKICAgZm9yICh2YXIgcHJvcCBpbiBEb2MucHJvdG90eXBlKSBpZiAoRG9jLnBy
b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBpbmRleE9mKGRvbnREZWxlZ2F0ZSwgcHJv
cCkgPCAwKQogICAgIENvZGVNaXJyb3IucHJvdG90eXBlW3Byb3BdID0gKGZ1bmN0aW9uKG1ldGhv
ZCkgewpAQCAtNTAzMCw2ICs2NDE0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CgogICBldmVudE1peGluKERvYyk7CgorICAvLyBDYWxsIGYgZm9yIGFsbCBsaW5rZWQgZG9j
dW1lbnRzLgogICBmdW5jdGlvbiBsaW5rZWREb2NzKGRvYywgZiwgc2hhcmVkSGlzdE9ubHkpIHsK
ICAgICBmdW5jdGlvbiBwcm9wYWdhdGUoZG9jLCBza2lwLCBzaGFyZWRIaXN0KSB7CiAgICAgICBp
ZiAoZG9jLmxpbmtlZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MubGlua2VkLmxlbmd0aDsgKytp
KSB7CkBAIC01MDQ0LDIyICs2NDI5LDI1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIHByb3BhZ2F0ZShkb2MsIG51bGwsIHRydWUpOwogICB9CgorICAvLyBBdHRhY2gg
YSBkb2N1bWVudCB0byBhbiBlZGl0b3IuCiAgIGZ1bmN0aW9uIGF0dGFjaERvYyhjbSwgZG9jKSB7
CiAgICAgaWYgKGRvYy5jbSkgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGRvY3VtZW50IGlzIGFscmVh
ZHkgaW4gdXNlLiIpOwogICAgIGNtLmRvYyA9IGRvYzsKICAgICBkb2MuY20gPSBjbTsKICAgICBl
c3RpbWF0ZUxpbmVIZWlnaHRzKGNtKTsKICAgICBsb2FkTW9kZShjbSk7Ci0gICAgaWYgKCFjbS5v
cHRpb25zLmxpbmVXcmFwcGluZykgY29tcHV0ZU1heExlbmd0aChjbSk7CisgICAgaWYgKCFjbS5v
cHRpb25zLmxpbmVXcmFwcGluZykgZmluZE1heExpbmUoY20pOwogICAgIGNtLm9wdGlvbnMubW9k
ZSA9IGRvYy5tb2RlT3B0aW9uOwogICAgIHJlZ0NoYW5nZShjbSk7CiAgIH0KCiAgIC8vIExJTkUg
VVRJTElUSUVTCgotICBmdW5jdGlvbiBnZXRMaW5lKGNodW5rLCBuKSB7Ci0gICAgbiAtPSBjaHVu
ay5maXJzdDsKLSAgICB3aGlsZSAoIWNodW5rLmxpbmVzKSB7CisgIC8vIEZpbmQgdGhlIGxpbmUg
b2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLgorICBmdW5jdGlv
biBnZXRMaW5lKGRvYywgbikgeworICAgIG4gLT0gZG9jLmZpcnN0OworICAgIGlmIChuIDwgMCB8
fCBuID49IGRvYy5zaXplKSB0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIGxpbmUgIiArIChu
ICsgZG9jLmZpcnN0KSArICIgaW4gdGhlIGRvY3VtZW50LiIpOworICAgIGZvciAodmFyIGNodW5r
ID0gZG9jOyAhY2h1bmsubGluZXM7KSB7CiAgICAgICBmb3IgKHZhciBpID0gMDs7ICsraSkgewog
ICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1Np
emUoKTsKICAgICAgICAgaWYgKG4gPCBzeikgeyBjaHVuayA9IGNoaWxkOyBicmVhazsgfQpAQCAt
NTA2OSw2ICs2NDU3LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
cmV0dXJuIGNodW5rLmxpbmVzW25dOwogICB9CgorICAvLyBHZXQgdGhlIHBhcnQgb2YgYSBkb2N1
bWVudCBiZXR3ZWVuIHR3byBwb3NpdGlvbnMsIGFzIGFuIGFycmF5IG9mCisgIC8vIHN0cmluZ3Mu
CiAgIGZ1bmN0aW9uIGdldEJldHdlZW4oZG9jLCBzdGFydCwgZW5kKSB7CiAgICAgdmFyIG91dCA9
IFtdLCBuID0gc3RhcnQubGluZTsKICAgICBkb2MuaXRlcihzdGFydC5saW5lLCBlbmQubGluZSAr
IDEsIGZ1bmN0aW9uKGxpbmUpIHsKQEAgLTUwODAsMTcgKzY0NzAsMjIgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfSk7CiAgICAgcmV0dXJuIG91dDsKICAgfQorICAv
LyBHZXQgdGhlIGxpbmVzIGJldHdlZW4gZnJvbSBhbmQgdG8sIGFzIGFycmF5IG9mIHN0cmluZ3Mu
CiAgIGZ1bmN0aW9uIGdldExpbmVzKGRvYywgZnJvbSwgdG8pIHsKICAgICB2YXIgb3V0ID0gW107
CiAgICAgZG9jLml0ZXIoZnJvbSwgdG8sIGZ1bmN0aW9uKGxpbmUpIHsgb3V0LnB1c2gobGluZS50
ZXh0KTsgfSk7CiAgICAgcmV0dXJuIG91dDsKICAgfQoKKyAgLy8gVXBkYXRlIHRoZSBoZWlnaHQg
b2YgYSBsaW5lLCBwcm9wYWdhdGluZyB0aGUgaGVpZ2h0IGNoYW5nZQorICAvLyB1cHdhcmRzIHRv
IHBhcmVudCBub2Rlcy4KICAgZnVuY3Rpb24gdXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQp
IHsKICAgICB2YXIgZGlmZiA9IGhlaWdodCAtIGxpbmUuaGVpZ2h0OwotICAgIGZvciAodmFyIG4g
PSBsaW5lOyBuOyBuID0gbi5wYXJlbnQpIG4uaGVpZ2h0ICs9IGRpZmY7CisgICAgaWYgKGRpZmYp
IGZvciAodmFyIG4gPSBsaW5lOyBuOyBuID0gbi5wYXJlbnQpIG4uaGVpZ2h0ICs9IGRpZmY7CiAg
IH0KCisgIC8vIEdpdmVuIGEgbGluZSBvYmplY3QsIGZpbmQgaXRzIGxpbmUgbnVtYmVyIGJ5IHdh
bGtpbmcgdXAgdGhyb3VnaAorICAvLyBpdHMgcGFyZW50IGxpbmtzLgogICBmdW5jdGlvbiBsaW5l
Tm8obGluZSkgewogICAgIGlmIChsaW5lLnBhcmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAg
ICB2YXIgY3VyID0gbGluZS5wYXJlbnQsIG5vID0gaW5kZXhPZihjdXIubGluZXMsIGxpbmUpOwpA
QCAtNTEwMywxMCArNjQ5OCwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICByZXR1cm4gbm8gKyBjdXIuZmlyc3Q7CiAgIH0KCisgIC8vIEZpbmQgdGhlIGxpbmUgYXQg
dGhlIGdpdmVuIHZlcnRpY2FsIHBvc2l0aW9uLCB1c2luZyB0aGUgaGVpZ2h0CisgIC8vIGluZm9y
bWF0aW9uIGluIHRoZSBkb2N1bWVudCB0cmVlLgogICBmdW5jdGlvbiBsaW5lQXRIZWlnaHQoY2h1
bmssIGgpIHsKICAgICB2YXIgbiA9IGNodW5rLmZpcnN0OwogICAgIG91dGVyOiBkbyB7Ci0gICAg
ICBmb3IgKHZhciBpID0gMCwgZSA9IGNodW5rLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkg
eworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5jaGlsZHJlbi5sZW5ndGg7ICsraSkg
ewogICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwgY2ggPSBjaGlsZC5oZWln
aHQ7CiAgICAgICAgIGlmIChoIDwgY2gpIHsgY2h1bmsgPSBjaGlsZDsgY29udGludWUgb3V0ZXI7
IH0KICAgICAgICAgaCAtPSBjaDsKQEAgLTUxMTQsNyArNjUxMSw3IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgfQogICAgICAgcmV0dXJuIG47CiAgICAgfSB3aGls
ZSAoIWNodW5rLmxpbmVzKTsKLSAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNodW5rLmxpbmVzLmxl
bmd0aDsgaSA8IGU7ICsraSkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmsubGluZXMu
bGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBsaW5lID0gY2h1bmsubGluZXNbaV0sIGxoID0gbGlu
ZS5oZWlnaHQ7CiAgICAgICBpZiAoaCA8IGxoKSBicmVhazsKICAgICAgIGggLT0gbGg7CkBAIC01
MTIyLDggKzY1MTksMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
cmV0dXJuIG4gKyBpOwogICB9CgotICBmdW5jdGlvbiBoZWlnaHRBdExpbmUoY20sIGxpbmVPYmop
IHsKLSAgICBsaW5lT2JqID0gdmlzdWFsTGluZShjbS5kb2MsIGxpbmVPYmopOworCisgIC8vIEZp
bmQgdGhlIGhlaWdodCBhYm92ZSB0aGUgZ2l2ZW4gbGluZS4KKyAgZnVuY3Rpb24gaGVpZ2h0QXRM
aW5lKGxpbmVPYmopIHsKKyAgICBsaW5lT2JqID0gdmlzdWFsTGluZShsaW5lT2JqKTsKCiAgICAg
dmFyIGggPSAwLCBjaHVuayA9IGxpbmVPYmoucGFyZW50OwogICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY2h1bmsubGluZXMubGVuZ3RoOyArK2kpIHsKQEAgLTUxNDEsNiArNjU0MCw5IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBoOwogICB9CgorICAvLyBH
ZXQgdGhlIGJpZGkgb3JkZXJpbmcgZm9yIHRoZSBnaXZlbiBsaW5lIChhbmQgY2FjaGUgaXQpLiBS
ZXR1cm5zCisgIC8vIGZhbHNlIGZvciBsaW5lcyB0aGF0IGFyZSBmdWxseSBsZWZ0LXRvLXJpZ2h0
LCBhbmQgYW4gYXJyYXkgb2YKKyAgLy8gQmlkaVNwYW4gb2JqZWN0cyBvdGhlcndpc2UuCiAgIGZ1
bmN0aW9uIGdldE9yZGVyKGxpbmUpIHsKICAgICB2YXIgb3JkZXIgPSBsaW5lLm9yZGVyOwogICAg
IGlmIChvcmRlciA9PSBudWxsKSBvcmRlciA9IGxpbmUub3JkZXIgPSBiaWRpT3JkZXJpbmcobGlu
ZS50ZXh0KTsKQEAgLTUxNDksNTAgKzY1NTEsNzAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CgogICAvLyBISVNUT1JZCgotICBmdW5jdGlvbiBtYWtlSGlzdG9yeShzdGFydEdl
bikgewotICAgIHJldHVybiB7Ci0gICAgICAvLyBBcnJheXMgb2YgaGlzdG9yeSBldmVudHMuIERv
aW5nIHNvbWV0aGluZyBhZGRzIGFuIGV2ZW50IHRvCi0gICAgICAvLyBkb25lIGFuZCBjbGVhcnMg
dW5kby4gVW5kb2luZyBtb3ZlcyBldmVudHMgZnJvbSBkb25lIHRvCi0gICAgICAvLyB1bmRvbmUs
IHJlZG9pbmcgbW92ZXMgdGhlbSBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLgotICAgICAgZG9uZTog
W10sIHVuZG9uZTogW10sIHVuZG9EZXB0aDogSW5maW5pdHksCi0gICAgICAvLyBVc2VkIHRvIHRy
YWNrIHdoZW4gY2hhbmdlcyBjYW4gYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgdW5kbwotICAgICAg
Ly8gZXZlbnQKLSAgICAgIGxhc3RUaW1lOiAwLCBsYXN0T3A6IG51bGwsIGxhc3RPcmlnaW46IG51
bGwsCi0gICAgICAvLyBVc2VkIGJ5IHRoZSBpc0NsZWFuKCkgbWV0aG9kCi0gICAgICBnZW5lcmF0
aW9uOiBzdGFydEdlbiB8fCAxLCBtYXhHZW5lcmF0aW9uOiBzdGFydEdlbiB8fCAxCi0gICAgfTsK
LSAgfQotCi0gIGZ1bmN0aW9uIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBjaGFuZ2UsIGZyb20sIHRv
KSB7Ci0gICAgdmFyIGV4aXN0aW5nID0gY2hhbmdlWyJzcGFuc18iICsgZG9jLmlkXSwgbiA9IDA7
Ci0gICAgZG9jLml0ZXIoTWF0aC5tYXgoZG9jLmZpcnN0LCBmcm9tKSwgTWF0aC5taW4oZG9jLmZp
cnN0ICsgZG9jLnNpemUsIHRvKSwgZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGxpbmUubWFy
a2VkU3BhbnMpCi0gICAgICAgIChleGlzdGluZyB8fCAoZXhpc3RpbmcgPSBjaGFuZ2VbInNwYW5z
XyIgKyBkb2MuaWRdID0ge30pKVtuXSA9IGxpbmUubWFya2VkU3BhbnM7Ci0gICAgICArK247Ci0g
ICAgfSk7Ci0gIH0KLQorICBmdW5jdGlvbiBIaXN0b3J5KHN0YXJ0R2VuKSB7CisgICAgLy8gQXJy
YXlzIG9mIGNoYW5nZSBldmVudHMgYW5kIHNlbGVjdGlvbnMuIERvaW5nIHNvbWV0aGluZyBhZGRz
IGFuCisgICAgLy8gZXZlbnQgdG8gZG9uZSBhbmQgY2xlYXJzIHVuZG8uIFVuZG9pbmcgbW92ZXMg
ZXZlbnRzIGZyb20gZG9uZQorICAgIC8vIHRvIHVuZG9uZSwgcmVkb2luZyBtb3ZlcyB0aGVtIGlu
IHRoZSBvdGhlciBkaXJlY3Rpb24uCisgICAgdGhpcy5kb25lID0gW107IHRoaXMudW5kb25lID0g
W107CisgICAgdGhpcy51bmRvRGVwdGggPSBJbmZpbml0eTsKKyAgICAvLyBVc2VkIHRvIHRyYWNr
IHdoZW4gY2hhbmdlcyBjYW4gYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgdW5kbworICAgIC8vIGV2
ZW50CisgICAgdGhpcy5sYXN0TW9kVGltZSA9IHRoaXMubGFzdFNlbFRpbWUgPSAwOworICAgIHRo
aXMubGFzdE9wID0gbnVsbDsKKyAgICB0aGlzLmxhc3RPcmlnaW4gPSB0aGlzLmxhc3RTZWxPcmln
aW4gPSBudWxsOworICAgIC8vIFVzZWQgYnkgdGhlIGlzQ2xlYW4oKSBtZXRob2QKKyAgICB0aGlz
LmdlbmVyYXRpb24gPSB0aGlzLm1heEdlbmVyYXRpb24gPSBzdGFydEdlbiB8fCAxOworICB9CisK
KyAgLy8gQ3JlYXRlIGEgaGlzdG9yeSBjaGFuZ2UgZXZlbnQgZnJvbSBhbiB1cGRhdGVEb2Mtc3R5
bGUgY2hhbmdlCisgIC8vIG9iamVjdC4KICAgZnVuY3Rpb24gaGlzdG9yeUNoYW5nZUZyb21DaGFu
Z2UoZG9jLCBjaGFuZ2UpIHsKLSAgICB2YXIgZnJvbSA9IHsgbGluZTogY2hhbmdlLmZyb20ubGlu
ZSwgY2g6IGNoYW5nZS5mcm9tLmNoIH07Ci0gICAgdmFyIGhpc3RDaGFuZ2UgPSB7ZnJvbTogZnJv
bSwgdG86IGNoYW5nZUVuZChjaGFuZ2UpLCB0ZXh0OiBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZy
b20sIGNoYW5nZS50byl9OworICAgIHZhciBoaXN0Q2hhbmdlID0ge2Zyb206IGNvcHlQb3MoY2hh
bmdlLmZyb20pLCB0bzogY2hhbmdlRW5kKGNoYW5nZSksIHRleHQ6IGdldEJldHdlZW4oZG9jLCBj
aGFuZ2UuZnJvbSwgY2hhbmdlLnRvKX07CiAgICAgYXR0YWNoTG9jYWxTcGFucyhkb2MsIGhpc3RD
aGFuZ2UsIGNoYW5nZS5mcm9tLmxpbmUsIGNoYW5nZS50by5saW5lICsgMSk7CiAgICAgbGlua2Vk
RG9jcyhkb2MsIGZ1bmN0aW9uKGRvYykge2F0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hhbmdl
LCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpO30sIHRydWUpOwogICAgIHJl
dHVybiBoaXN0Q2hhbmdlOwogICB9CgotICBmdW5jdGlvbiBhZGRUb0hpc3RvcnkoZG9jLCBjaGFu
Z2UsIHNlbEFmdGVyLCBvcElkKSB7CisgIC8vIFBvcCBhbGwgc2VsZWN0aW9uIGV2ZW50cyBvZmYg
dGhlIGVuZCBvZiBhIGhpc3RvcnkgYXJyYXkuIFN0b3AgYXQKKyAgLy8gYSBjaGFuZ2UgZXZlbnQu
CisgIGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uRXZlbnRzKGFycmF5KSB7CisgICAgd2hpbGUgKGFy
cmF5Lmxlbmd0aCkgeworICAgICAgdmFyIGxhc3QgPSBsc3QoYXJyYXkpOworICAgICAgaWYgKGxh
c3QucmFuZ2VzKSBhcnJheS5wb3AoKTsKKyAgICAgIGVsc2UgYnJlYWs7CisgICAgfQorICB9CisK
KyAgLy8gRmluZCB0aGUgdG9wIGNoYW5nZSBldmVudCBpbiB0aGUgaGlzdG9yeS4gUG9wIG9mZiBz
ZWxlY3Rpb24KKyAgLy8gZXZlbnRzIHRoYXQgYXJlIGluIHRoZSB3YXkuCisgIGZ1bmN0aW9uIGxh
c3RDaGFuZ2VFdmVudChoaXN0LCBmb3JjZSkgeworICAgIGlmIChmb3JjZSkgeworICAgICAgY2xl
YXJTZWxlY3Rpb25FdmVudHMoaGlzdC5kb25lKTsKKyAgICAgIHJldHVybiBsc3QoaGlzdC5kb25l
KTsKKyAgICB9IGVsc2UgaWYgKGhpc3QuZG9uZS5sZW5ndGggJiYgIWxzdChoaXN0LmRvbmUpLnJh
bmdlcykgeworICAgICAgcmV0dXJuIGxzdChoaXN0LmRvbmUpOworICAgIH0gZWxzZSBpZiAoaGlz
dC5kb25lLmxlbmd0aCA+IDEgJiYgIWhpc3QuZG9uZVtoaXN0LmRvbmUubGVuZ3RoIC0gMl0ucmFu
Z2VzKSB7CisgICAgICBoaXN0LmRvbmUucG9wKCk7CisgICAgICByZXR1cm4gbHN0KGhpc3QuZG9u
ZSk7CisgICAgfQorICB9CisKKyAgLy8gUmVnaXN0ZXIgYSBjaGFuZ2UgaW4gdGhlIGhpc3Rvcnku
IE1lcmdlcyBjaGFuZ2VzIHRoYXQgYXJlIHdpdGhpbgorICAvLyBhIHNpbmdsZSBvcGVyYXRpb24s
IG9yZSBhcmUgY2xvc2UgdG9nZXRoZXIgd2l0aCBhbiBvcmlnaW4gdGhhdAorICAvLyBhbGxvd3Mg
bWVyZ2luZyAoc3RhcnRpbmcgd2l0aCAiKyIpIGludG8gYSBzaW5nbGUgZXZlbnQuCisgIGZ1bmN0
aW9uIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIG9wSWQpIHsKICAg
ICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5OwogICAgIGhpc3QudW5kb25lLmxlbmd0aCA9IDA7Ci0g
ICAgdmFyIHRpbWUgPSArbmV3IERhdGUsIGN1ciA9IGxzdChoaXN0LmRvbmUpOworICAgIHZhciB0
aW1lID0gK25ldyBEYXRlLCBjdXI7CgotICAgIGlmIChjdXIgJiYKLSAgICAgICAgKGhpc3QubGFz
dE9wID09IG9wSWQgfHwKKyAgICBpZiAoKGhpc3QubGFzdE9wID09IG9wSWQgfHwKICAgICAgICAg
IGhpc3QubGFzdE9yaWdpbiA9PSBjaGFuZ2Uub3JpZ2luICYmIGNoYW5nZS5vcmlnaW4gJiYKLSAg
ICAgICAgICgoY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gIisiICYmIGRvYy5jbSAmJiBoaXN0
Lmxhc3RUaW1lID4gdGltZSAtIGRvYy5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5KSB8fAot
ICAgICAgICAgIGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09ICIqIikpKSB7CisgICAgICAgICAo
KGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09ICIrIiAmJiBkb2MuY20gJiYgaGlzdC5sYXN0TW9k
VGltZSA+IHRpbWUgLSBkb2MuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheSkgfHwKKyAgICAg
ICAgICBjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKiIpKSAmJgorICAgICAgICAoY3VyID0g
bGFzdENoYW5nZUV2ZW50KGhpc3QsIGhpc3QubGFzdE9wID09IG9wSWQpKSkgewogICAgICAgLy8g
TWVyZ2UgdGhpcyBjaGFuZ2UgaW50byB0aGUgbGFzdCBldmVudAogICAgICAgdmFyIGxhc3QgPSBs
c3QoY3VyLmNoYW5nZXMpOwotICAgICAgaWYgKHBvc0VxKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8p
ICYmIHBvc0VxKGNoYW5nZS5mcm9tLCBsYXN0LnRvKSkgeworICAgICAgaWYgKGNtcChjaGFuZ2Uu
ZnJvbSwgY2hhbmdlLnRvKSA9PSAwICYmIGNtcChjaGFuZ2UuZnJvbSwgbGFzdC50bykgPT0gMCkg
ewogICAgICAgICAvLyBPcHRpbWl6ZWQgY2FzZSBmb3Igc2ltcGxlIGluc2VydGlvbiAtLSBkb24n
dCB3YW50IHRvIGFkZAogICAgICAgICAvLyBuZXcgY2hhbmdlc2V0cyBmb3IgZXZlcnkgY2hhcmFj
dGVyIHR5cGVkCiAgICAgICAgIGxhc3QudG8gPSBjaGFuZ2VFbmQoY2hhbmdlKTsKQEAgLTUyMDAs
MjMgKzY2MjIsODEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAg
IC8vIEFkZCBuZXcgc3ViLWV2ZW50CiAgICAgICAgIGN1ci5jaGFuZ2VzLnB1c2goaGlzdG9yeUNo
YW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpKTsKICAgICAgIH0KLSAgICAgIGN1ci5hbmNob3JB
ZnRlciA9IHNlbEFmdGVyLmFuY2hvcjsgY3VyLmhlYWRBZnRlciA9IHNlbEFmdGVyLmhlYWQ7CiAg
ICAgfSBlbHNlIHsKICAgICAgIC8vIENhbiBub3QgYmUgbWVyZ2VkLCBzdGFydCBhIG5ldyBldmVu
dC4KKyAgICAgIHZhciBiZWZvcmUgPSBsc3QoaGlzdC5kb25lKTsKKyAgICAgIGlmICghYmVmb3Jl
IHx8ICFiZWZvcmUucmFuZ2VzKQorICAgICAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KGRvYy5z
ZWwsIGhpc3QuZG9uZSk7CiAgICAgICBjdXIgPSB7Y2hhbmdlczogW2hpc3RvcnlDaGFuZ2VGcm9t
Q2hhbmdlKGRvYywgY2hhbmdlKV0sCi0gICAgICAgICAgICAgZ2VuZXJhdGlvbjogaGlzdC5nZW5l
cmF0aW9uLAotICAgICAgICAgICAgIGFuY2hvckJlZm9yZTogZG9jLnNlbC5hbmNob3IsIGhlYWRC
ZWZvcmU6IGRvYy5zZWwuaGVhZCwKLSAgICAgICAgICAgICBhbmNob3JBZnRlcjogc2VsQWZ0ZXIu
YW5jaG9yLCBoZWFkQWZ0ZXI6IHNlbEFmdGVyLmhlYWR9OworICAgICAgICAgICAgIGdlbmVyYXRp
b246IGhpc3QuZ2VuZXJhdGlvbn07CiAgICAgICBoaXN0LmRvbmUucHVzaChjdXIpOwotICAgICAg
aGlzdC5nZW5lcmF0aW9uID0gKytoaXN0Lm1heEdlbmVyYXRpb247Ci0gICAgICB3aGlsZSAoaGlz
dC5kb25lLmxlbmd0aCA+IGhpc3QudW5kb0RlcHRoKQorICAgICAgd2hpbGUgKGhpc3QuZG9uZS5s
ZW5ndGggPiBoaXN0LnVuZG9EZXB0aCkgewogICAgICAgICBoaXN0LmRvbmUuc2hpZnQoKTsKKyAg
ICAgICAgaWYgKCFoaXN0LmRvbmVbMF0ucmFuZ2VzKSBoaXN0LmRvbmUuc2hpZnQoKTsKKyAgICAg
IH0KICAgICB9Ci0gICAgaGlzdC5sYXN0VGltZSA9IHRpbWU7CisgICAgaGlzdC5kb25lLnB1c2go
c2VsQWZ0ZXIpOworICAgIGhpc3QuZ2VuZXJhdGlvbiA9ICsraGlzdC5tYXhHZW5lcmF0aW9uOwor
ICAgIGhpc3QubGFzdE1vZFRpbWUgPSBoaXN0Lmxhc3RTZWxUaW1lID0gdGltZTsKKyAgICBoaXN0
Lmxhc3RPcCA9IG9wSWQ7CisgICAgaGlzdC5sYXN0T3JpZ2luID0gaGlzdC5sYXN0U2VsT3JpZ2lu
ID0gY2hhbmdlLm9yaWdpbjsKKworICAgIGlmICghbGFzdCkgc2lnbmFsKGRvYywgImhpc3RvcnlB
ZGRlZCIpOworICB9CisKKyAgZnVuY3Rpb24gc2VsZWN0aW9uRXZlbnRDYW5CZU1lcmdlZChkb2Ms
IG9yaWdpbiwgcHJldiwgc2VsKSB7CisgICAgdmFyIGNoID0gb3JpZ2luLmNoYXJBdCgwKTsKKyAg
ICByZXR1cm4gY2ggPT0gIioiIHx8CisgICAgICBjaCA9PSAiKyIgJiYKKyAgICAgIHByZXYucmFu
Z2VzLmxlbmd0aCA9PSBzZWwucmFuZ2VzLmxlbmd0aCAmJgorICAgICAgcHJldi5zb21ldGhpbmdT
ZWxlY3RlZCgpID09IHNlbC5zb21ldGhpbmdTZWxlY3RlZCgpICYmCisgICAgICBuZXcgRGF0ZSAt
IGRvYy5oaXN0b3J5Lmxhc3RTZWxUaW1lIDw9IChkb2MuY20gPyBkb2MuY20ub3B0aW9ucy5oaXN0
b3J5RXZlbnREZWxheSA6IDUwMCk7CisgIH0KKworICAvLyBDYWxsZWQgd2hlbmV2ZXIgdGhlIHNl
bGVjdGlvbiBjaGFuZ2VzLCBzZXRzIHRoZSBuZXcgc2VsZWN0aW9uIGFzCisgIC8vIHRoZSBwZW5k
aW5nIHNlbGVjdGlvbiBpbiB0aGUgaGlzdG9yeSwgYW5kIHB1c2hlcyB0aGUgb2xkIHBlbmRpbmcK
KyAgLy8gc2VsZWN0aW9uIGludG8gdGhlICdkb25lJyBhcnJheSB3aGVuIGl0IHdhcyBzaWduaWZp
Y2FudGx5CisgIC8vIGRpZmZlcmVudCAoaW4gbnVtYmVyIG9mIHNlbGVjdGVkIHJhbmdlcywgZW1w
dGluZXNzLCBvciB0aW1lKS4KKyAgZnVuY3Rpb24gYWRkU2VsZWN0aW9uVG9IaXN0b3J5KGRvYywg
c2VsLCBvcElkLCBvcHRpb25zKSB7CisgICAgdmFyIGhpc3QgPSBkb2MuaGlzdG9yeSwgb3JpZ2lu
ID0gb3B0aW9ucyAmJiBvcHRpb25zLm9yaWdpbjsKKworICAgIC8vIEEgbmV3IGV2ZW50IGlzIHN0
YXJ0ZWQgd2hlbiB0aGUgcHJldmlvdXMgb3JpZ2luIGRvZXMgbm90IG1hdGNoCisgICAgLy8gdGhl
IGN1cnJlbnQsIG9yIHRoZSBvcmlnaW5zIGRvbid0IGFsbG93IG1hdGNoaW5nLiBPcmlnaW5zCisg
ICAgLy8gc3RhcnRpbmcgd2l0aCAqIGFyZSBhbHdheXMgbWVyZ2VkLCB0aG9zZSBzdGFydGluZyB3
aXRoICsgYXJlCisgICAgLy8gbWVyZ2VkIHdoZW4gc2ltaWxhciBhbmQgY2xvc2UgdG9nZXRoZXIg
aW4gdGltZS4KKyAgICBpZiAob3BJZCA9PSBoaXN0Lmxhc3RPcCB8fAorICAgICAgICAob3JpZ2lu
ICYmIGhpc3QubGFzdFNlbE9yaWdpbiA9PSBvcmlnaW4gJiYKKyAgICAgICAgIChoaXN0Lmxhc3RN
b2RUaW1lID09IGhpc3QubGFzdFNlbFRpbWUgJiYgaGlzdC5sYXN0T3JpZ2luID09IG9yaWdpbiB8
fAorICAgICAgICAgIHNlbGVjdGlvbkV2ZW50Q2FuQmVNZXJnZWQoZG9jLCBvcmlnaW4sIGxzdCho
aXN0LmRvbmUpLCBzZWwpKSkpCisgICAgICBoaXN0LmRvbmVbaGlzdC5kb25lLmxlbmd0aCAtIDFd
ID0gc2VsOworICAgIGVsc2UKKyAgICAgIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsLCBoaXN0
LmRvbmUpOworCisgICAgaGlzdC5sYXN0U2VsVGltZSA9ICtuZXcgRGF0ZTsKKyAgICBoaXN0Lmxh
c3RTZWxPcmlnaW4gPSBvcmlnaW47CiAgICAgaGlzdC5sYXN0T3AgPSBvcElkOwotICAgIGhpc3Qu
bGFzdE9yaWdpbiA9IGNoYW5nZS5vcmlnaW47CisgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5j
bGVhclJlZG8gIT09IGZhbHNlKQorICAgICAgY2xlYXJTZWxlY3Rpb25FdmVudHMoaGlzdC51bmRv
bmUpOworICB9CisKKyAgZnVuY3Rpb24gcHVzaFNlbGVjdGlvblRvSGlzdG9yeShzZWwsIGRlc3Qp
IHsKKyAgICB2YXIgdG9wID0gbHN0KGRlc3QpOworICAgIGlmICghKHRvcCAmJiB0b3AucmFuZ2Vz
ICYmIHRvcC5lcXVhbHMoc2VsKSkpCisgICAgICBkZXN0LnB1c2goc2VsKTsKKyAgfQorCisgIC8v
IFVzZWQgdG8gc3RvcmUgbWFya2VkIHNwYW4gaW5mb3JtYXRpb24gaW4gdGhlIGhpc3RvcnkuCisg
IGZ1bmN0aW9uIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBjaGFuZ2UsIGZyb20sIHRvKSB7CisgICAg
dmFyIGV4aXN0aW5nID0gY2hhbmdlWyJzcGFuc18iICsgZG9jLmlkXSwgbiA9IDA7CisgICAgZG9j
Lml0ZXIoTWF0aC5tYXgoZG9jLmZpcnN0LCBmcm9tKSwgTWF0aC5taW4oZG9jLmZpcnN0ICsgZG9j
LnNpemUsIHRvKSwgZnVuY3Rpb24obGluZSkgeworICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMp
CisgICAgICAgIChleGlzdGluZyB8fCAoZXhpc3RpbmcgPSBjaGFuZ2VbInNwYW5zXyIgKyBkb2Mu
aWRdID0ge30pKVtuXSA9IGxpbmUubWFya2VkU3BhbnM7CisgICAgICArK247CisgICAgfSk7CiAg
IH0KCisgIC8vIFdoZW4gdW4vcmUtZG9pbmcgcmVzdG9yZXMgdGV4dCBjb250YWluaW5nIG1hcmtl
ZCBzcGFucywgdGhvc2UKKyAgLy8gdGhhdCBoYXZlIGJlZW4gZXhwbGljaXRseSBjbGVhcmVkIHNo
b3VsZCBub3QgYmUgcmVzdG9yZWQuCiAgIGZ1bmN0aW9uIHJlbW92ZUNsZWFyZWRTcGFucyhzcGFu
cykgewogICAgIGlmICghc3BhbnMpIHJldHVybiBudWxsOwogICAgIGZvciAodmFyIGkgPSAwLCBv
dXQ7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgewpAQCAtNTIyNiw2ICs2NzA2LDcgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuICFvdXQgPyBzcGFucyA6IG91
dC5sZW5ndGggPyBvdXQgOiBudWxsOwogICB9CgorICAvLyBSZXRyaWV2ZSBhbmQgZmlsdGVyIHRo
ZSBvbGQgbWFya2VkIHNwYW5zIHN0b3JlZCBpbiBhIGNoYW5nZSBldmVudC4KICAgZnVuY3Rpb24g
Z2V0T2xkU3BhbnMoZG9jLCBjaGFuZ2UpIHsKICAgICB2YXIgZm91bmQgPSBjaGFuZ2VbInNwYW5z
XyIgKyBkb2MuaWRdOwogICAgIGlmICghZm91bmQpIHJldHVybiBudWxsOwpAQCAtNTIzNiwxMSAr
NjcxNywxNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKCiAgIC8vIFVzZWQg
Ym90aCB0byBwcm92aWRlIGEgSlNPTi1zYWZlIG9iamVjdCBpbiAuZ2V0SGlzdG9yeSwgYW5kLCB3
aGVuCiAgIC8vIGRldGFjaGluZyBhIGRvY3VtZW50LCB0byBzcGxpdCB0aGUgaGlzdG9yeSBpbiB0
d28KLSAgZnVuY3Rpb24gY29weUhpc3RvcnlBcnJheShldmVudHMsIG5ld0dyb3VwKSB7CisgIGZ1
bmN0aW9uIGNvcHlIaXN0b3J5QXJyYXkoZXZlbnRzLCBuZXdHcm91cCwgaW5zdGFudGlhdGVTZWwp
IHsKICAgICBmb3IgKHZhciBpID0gMCwgY29weSA9IFtdOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICB2YXIgZXZlbnQgPSBldmVudHNbaV0sIGNoYW5nZXMgPSBldmVudC5jaGFuZ2Vz
LCBuZXdDaGFuZ2VzID0gW107Ci0gICAgICBjb3B5LnB1c2goe2NoYW5nZXM6IG5ld0NoYW5nZXMs
IGFuY2hvckJlZm9yZTogZXZlbnQuYW5jaG9yQmVmb3JlLCBoZWFkQmVmb3JlOiBldmVudC5oZWFk
QmVmb3JlLAotICAgICAgICAgICAgICAgICBhbmNob3JBZnRlcjogZXZlbnQuYW5jaG9yQWZ0ZXIs
IGhlYWRBZnRlcjogZXZlbnQuaGVhZEFmdGVyfSk7CisgICAgICB2YXIgZXZlbnQgPSBldmVudHNb
aV07CisgICAgICBpZiAoZXZlbnQucmFuZ2VzKSB7CisgICAgICAgIGNvcHkucHVzaChpbnN0YW50
aWF0ZVNlbCA/IFNlbGVjdGlvbi5wcm90b3R5cGUuZGVlcENvcHkuY2FsbChldmVudCkgOiBldmVu
dCk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgdmFyIGNoYW5nZXMgPSBldmVu
dC5jaGFuZ2VzLCBuZXdDaGFuZ2VzID0gW107CisgICAgICBjb3B5LnB1c2goe2NoYW5nZXM6IG5l
d0NoYW5nZXN9KTsKICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hhbmdlcy5sZW5ndGg7ICsr
aikgewogICAgICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tqXSwgbTsKICAgICAgICAgbmV3Q2hh
bmdlcy5wdXNoKHtmcm9tOiBjaGFuZ2UuZnJvbSwgdG86IGNoYW5nZS50bywgdGV4dDogY2hhbmdl
LnRleHR9KTsKQEAgLTUyNTcsNyArNjc0Miw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewoKICAgLy8gUmViYXNpbmcvcmVzZXR0aW5nIGhpc3RvcnkgdG8gZGVhbCB3aXRoIGV4
dGVybmFsbHktc291cmNlZCBjaGFuZ2VzCgotICBmdW5jdGlvbiByZWJhc2VIaXN0U2VsKHBvcywg
ZnJvbSwgdG8sIGRpZmYpIHsKKyAgZnVuY3Rpb24gcmViYXNlSGlzdFNlbFNpbmdsZShwb3MsIGZy
b20sIHRvLCBkaWZmKSB7CiAgICAgaWYgKHRvIDwgcG9zLmxpbmUpIHsKICAgICAgIHBvcy5saW5l
ICs9IGRpZmY7CiAgICAgfSBlbHNlIGlmIChmcm9tIDwgcG9zLmxpbmUpIHsKQEAgLTUyNzYsMjgg
KzY3NjEsMjcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9u
IHJlYmFzZUhpc3RBcnJheShhcnJheSwgZnJvbSwgdG8sIGRpZmYpIHsKICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CiAgICAgICB2YXIgc3ViID0gYXJyYXlbaV0s
IG9rID0gdHJ1ZTsKKyAgICAgIGlmIChzdWIucmFuZ2VzKSB7CisgICAgICAgIGlmICghc3ViLmNv
cGllZCkgeyBzdWIgPSBhcnJheVtpXSA9IHN1Yi5kZWVwQ29weSgpOyBzdWIuY29waWVkID0gdHJ1
ZTsgfQorICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1Yi5yYW5nZXMubGVuZ3RoOyBqKysp
IHsKKyAgICAgICAgICByZWJhc2VIaXN0U2VsU2luZ2xlKHN1Yi5yYW5nZXNbal0uYW5jaG9yLCBm
cm9tLCB0bywgZGlmZik7CisgICAgICAgICAgcmViYXNlSGlzdFNlbFNpbmdsZShzdWIucmFuZ2Vz
W2pdLmhlYWQsIGZyb20sIHRvLCBkaWZmKTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsK
KyAgICAgIH0KICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ViLmNoYW5nZXMubGVuZ3RoOyAr
K2opIHsKICAgICAgICAgdmFyIGN1ciA9IHN1Yi5jaGFuZ2VzW2pdOwotICAgICAgICBpZiAoIXN1
Yi5jb3BpZWQpIHsgY3VyLmZyb20gPSBjb3B5UG9zKGN1ci5mcm9tKTsgY3VyLnRvID0gY29weVBv
cyhjdXIudG8pOyB9CiAgICAgICAgIGlmICh0byA8IGN1ci5mcm9tLmxpbmUpIHsKLSAgICAgICAg
ICBjdXIuZnJvbS5saW5lICs9IGRpZmY7Ci0gICAgICAgICAgY3VyLnRvLmxpbmUgKz0gZGlmZjsK
KyAgICAgICAgICBjdXIuZnJvbSA9IFBvcyhjdXIuZnJvbS5saW5lICsgZGlmZiwgY3VyLmZyb20u
Y2gpOworICAgICAgICAgIGN1ci50byA9IFBvcyhjdXIudG8ubGluZSArIGRpZmYsIGN1ci50by5j
aCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZnJvbSA8PSBjdXIudG8ubGluZSkgewogICAgICAgICAg
IG9rID0gZmFsc2U7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAg
IGlmICghc3ViLmNvcGllZCkgewotICAgICAgICBzdWIuYW5jaG9yQmVmb3JlID0gY29weVBvcyhz
dWIuYW5jaG9yQmVmb3JlKTsgc3ViLmhlYWRCZWZvcmUgPSBjb3B5UG9zKHN1Yi5oZWFkQmVmb3Jl
KTsKLSAgICAgICAgc3ViLmFuY2hvckFmdGVyID0gY29weVBvcyhzdWIuYW5jaG9yQWZ0ZXIpOyBz
dWIucmVhZEFmdGVyID0gY29weVBvcyhzdWIuaGVhZEFmdGVyKTsKLSAgICAgICAgc3ViLmNvcGll
ZCA9IHRydWU7Ci0gICAgICB9CiAgICAgICBpZiAoIW9rKSB7CiAgICAgICAgIGFycmF5LnNwbGlj
ZSgwLCBpICsgMSk7CiAgICAgICAgIGkgPSAwOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVi
YXNlSGlzdFNlbChzdWIuYW5jaG9yQmVmb3JlKTsgcmViYXNlSGlzdFNlbChzdWIuaGVhZEJlZm9y
ZSk7Ci0gICAgICAgIHJlYmFzZUhpc3RTZWwoc3ViLmFuY2hvckFmdGVyKTsgcmViYXNlSGlzdFNl
bChzdWIuaGVhZEFmdGVyKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTUzMDgsMzAgKzY3OTIs
MjMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmViYXNlSGlzdEFy
cmF5KGhpc3QudW5kb25lLCBmcm9tLCB0bywgZGlmZik7CiAgIH0KCi0gIC8vIEVWRU5UIE9QRVJB
VE9SUworICAvLyBFVkVOVCBVVElMSVRJRVMKCi0gIGZ1bmN0aW9uIHN0b3BNZXRob2QoKSB7ZV9z
dG9wKHRoaXMpO30KLSAgLy8gRW5zdXJlIGFuIGV2ZW50IGhhcyBhIHN0b3AgbWV0aG9kLgotICBm
dW5jdGlvbiBhZGRTdG9wKGV2ZW50KSB7Ci0gICAgaWYgKCFldmVudC5zdG9wKSBldmVudC5zdG9w
ID0gc3RvcE1ldGhvZDsKLSAgICByZXR1cm4gZXZlbnQ7Ci0gIH0KKyAgLy8gRHVlIHRvIHRoZSBm
YWN0IHRoYXQgd2Ugc3RpbGwgc3VwcG9ydCBqdXJhc3NpYyBJRSB2ZXJzaW9ucywgc29tZQorICAv
LyBjb21wYXRpYmlsaXR5IHdyYXBwZXJzIGFyZSBuZWVkZWQuCgotICBmdW5jdGlvbiBlX3ByZXZl
bnREZWZhdWx0KGUpIHsKKyAgdmFyIGVfcHJldmVudERlZmF1bHQgPSBDb2RlTWlycm9yLmVfcHJl
dmVudERlZmF1bHQgPSBmdW5jdGlvbihlKSB7CiAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUu
cHJldmVudERlZmF1bHQoKTsKICAgICBlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgfQot
ICBmdW5jdGlvbiBlX3N0b3BQcm9wYWdhdGlvbihlKSB7CisgIH07CisgIHZhciBlX3N0b3BQcm9w
YWdhdGlvbiA9IENvZGVNaXJyb3IuZV9zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbihlKSB7CiAg
ICAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgIGVsc2Ug
ZS5jYW5jZWxCdWJibGUgPSB0cnVlOwotICB9CisgIH07CiAgIGZ1bmN0aW9uIGVfZGVmYXVsdFBy
ZXZlbnRlZChlKSB7CiAgICAgcmV0dXJuIGUuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID8gZS5k
ZWZhdWx0UHJldmVudGVkIDogZS5yZXR1cm5WYWx1ZSA9PSBmYWxzZTsKICAgfQotICBmdW5jdGlv
biBlX3N0b3AoZSkge2VfcHJldmVudERlZmF1bHQoZSk7IGVfc3RvcFByb3BhZ2F0aW9uKGUpO30K
LSAgQ29kZU1pcnJvci5lX3N0b3AgPSBlX3N0b3A7Ci0gIENvZGVNaXJyb3IuZV9wcmV2ZW50RGVm
YXVsdCA9IGVfcHJldmVudERlZmF1bHQ7Ci0gIENvZGVNaXJyb3IuZV9zdG9wUHJvcGFnYXRpb24g
PSBlX3N0b3BQcm9wYWdhdGlvbjsKKyAgdmFyIGVfc3RvcCA9IENvZGVNaXJyb3IuZV9zdG9wID0g
ZnVuY3Rpb24oZSkge2VfcHJldmVudERlZmF1bHQoZSk7IGVfc3RvcFByb3BhZ2F0aW9uKGUpO307
CgogICBmdW5jdGlvbiBlX3RhcmdldChlKSB7cmV0dXJuIGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVu
dDt9CiAgIGZ1bmN0aW9uIGVfYnV0dG9uKGUpIHsKQEAgLTUzNDcsNyArNjgyNCwxMCBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKCiAgIC8vIEVWRU5UIEhBTkRMSU5HCgotICBm
dW5jdGlvbiBvbihlbWl0dGVyLCB0eXBlLCBmKSB7CisgIC8vIExpZ2h0d2VpZ2h0IGV2ZW50IGZy
YW1ld29yay4gb24vb2ZmIGFsc28gd29yayBvbiBET00gbm9kZXMsCisgIC8vIHJlZ2lzdGVyaW5n
IG5hdGl2ZSBET00gaGFuZGxlcnMuCisKKyAgdmFyIG9uID0gQ29kZU1pcnJvci5vbiA9IGZ1bmN0
aW9uKGVtaXR0ZXIsIHR5cGUsIGYpIHsKICAgICBpZiAoZW1pdHRlci5hZGRFdmVudExpc3RlbmVy
KQogICAgICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGYsIGZhbHNlKTsKICAgICBl
bHNlIGlmIChlbWl0dGVyLmF0dGFjaEV2ZW50KQpAQCAtNTM1Nyw5ICs2ODM3LDkgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgYXJyID0gbWFwW3R5cGVdIHx8
IChtYXBbdHlwZV0gPSBbXSk7CiAgICAgICBhcnIucHVzaChmKTsKICAgICB9Ci0gIH0KKyAgfTsK
Ci0gIGZ1bmN0aW9uIG9mZihlbWl0dGVyLCB0eXBlLCBmKSB7CisgIHZhciBvZmYgPSBDb2RlTWly
cm9yLm9mZiA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUsIGYpIHsKICAgICBpZiAoZW1pdHRlci5y
ZW1vdmVFdmVudExpc3RlbmVyKQogICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKHR5
cGUsIGYsIGZhbHNlKTsKICAgICBlbHNlIGlmIChlbWl0dGVyLmRldGFjaEV2ZW50KQpAQCAtNTM3
MCwxNSArNjg1MCwyMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKQogICAgICAgICBpZiAoYXJyW2ld
ID09IGYpIHsgYXJyLnNwbGljZShpLCAxKTsgYnJlYWs7IH0KICAgICB9Ci0gIH0KKyAgfTsKCi0g
IGZ1bmN0aW9uIHNpZ25hbChlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykgeworICB2YXIg
c2lnbmFsID0gQ29kZU1pcnJvci5zaWduYWwgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlIC8qLCB2
YWx1ZXMuLi4qLykgewogICAgIHZhciBhcnIgPSBlbWl0dGVyLl9oYW5kbGVycyAmJiBlbWl0dGVy
Ll9oYW5kbGVyc1t0eXBlXTsKICAgICBpZiAoIWFycikgcmV0dXJuOwogICAgIHZhciBhcmdzID0g
QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkgYXJyW2ldLmFwcGx5KG51bGwsIGFyZ3MpOwotICB9
CisgIH07CgorICAvLyBPZnRlbiwgd2Ugd2FudCB0byBzaWduYWwgZXZlbnRzIGF0IGEgcG9pbnQg
d2hlcmUgd2UgYXJlIGluIHRoZQorICAvLyBtaWRkbGUgb2Ygc29tZSB3b3JrLCBidXQgZG9uJ3Qg
d2FudCB0aGUgaGFuZGxlciB0byBzdGFydCBjYWxsaW5nCisgIC8vIG90aGVyIG1ldGhvZHMgb24g
dGhlIGVkaXRvciwgd2hpY2ggbWlnaHQgYmUgaW4gYW4gaW5jb25zaXN0ZW50CisgIC8vIHN0YXRl
IG9yIHNpbXBseSBub3QgZXhwZWN0IGFueSBvdGhlciBldmVudHMgdG8gaGFwcGVuLgorICAvLyBz
aWduYWxMYXRlciBsb29rcyB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgaGFuZGxlcnMsIGFuZCBzY2hl
ZHVsZXMKKyAgLy8gdGhlbSB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBsYXN0IG9wZXJhdGlvbiBl
bmRzLCBvciwgaWYgbm8KKyAgLy8gb3BlcmF0aW9uIGlzIGFjdGl2ZSwgd2hlbiBhIHRpbWVvdXQg
ZmlyZXMuCiAgIHZhciBkZWxheWVkQ2FsbGJhY2tzLCBkZWxheWVkQ2FsbGJhY2tEZXB0aCA9IDA7
CiAgIGZ1bmN0aW9uIHNpZ25hbExhdGVyKGVtaXR0ZXIsIHR5cGUgLyosIHZhbHVlcy4uLiovKSB7
CiAgICAgdmFyIGFyciA9IGVtaXR0ZXIuX2hhbmRsZXJzICYmIGVtaXR0ZXIuX2hhbmRsZXJzW3R5
cGVdOwpAQCAtNTM5NCwxMSArNjg4MSw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgZGVsYXllZENhbGxiYWNrcy5wdXNoKGJuZChhcnJbaV0pKTsKICAgfQoKLSAg
ZnVuY3Rpb24gc2lnbmFsRE9NRXZlbnQoY20sIGUsIG92ZXJyaWRlKSB7Ci0gICAgc2lnbmFsKGNt
LCBvdmVycmlkZSB8fCBlLnR5cGUsIGNtLCBlKTsKLSAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVu
dGVkKGUpIHx8IGUuY29kZW1pcnJvcklnbm9yZTsKLSAgfQotCiAgIGZ1bmN0aW9uIGZpcmVEZWxh
eWVkKCkgewogICAgIC0tZGVsYXllZENhbGxiYWNrRGVwdGg7CiAgICAgdmFyIGRlbGF5ZWQgPSBk
ZWxheWVkQ2FsbGJhY2tzOwpAQCAtNTQwNiwxMyArNjg4OCwyMSBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGF5ZWQubGVuZ3Ro
OyArK2kpIGRlbGF5ZWRbaV0oKTsKICAgfQoKKyAgLy8gVGhlIERPTSBldmVudHMgdGhhdCBDb2Rl
TWlycm9yIGhhbmRsZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkKKyAgLy8gcmVnaXN0ZXJpbmcgYSAo
bm9uLURPTSkgaGFuZGxlciBvbiB0aGUgZWRpdG9yIGZvciB0aGUgZXZlbnQgbmFtZSwKKyAgLy8g
YW5kIHByZXZlbnREZWZhdWx0LWluZyB0aGUgZXZlbnQgaW4gdGhhdCBoYW5kbGVyLgorICBmdW5j
dGlvbiBzaWduYWxET01FdmVudChjbSwgZSwgb3ZlcnJpZGUpIHsKKyAgICBzaWduYWwoY20sIG92
ZXJyaWRlIHx8IGUudHlwZSwgY20sIGUpOworICAgIHJldHVybiBlX2RlZmF1bHRQcmV2ZW50ZWQo
ZSkgfHwgZS5jb2RlbWlycm9ySWdub3JlOworICB9CisKICAgZnVuY3Rpb24gaGFzSGFuZGxlcihl
bWl0dGVyLCB0eXBlKSB7CiAgICAgdmFyIGFyciA9IGVtaXR0ZXIuX2hhbmRsZXJzICYmIGVtaXR0
ZXIuX2hhbmRsZXJzW3R5cGVdOwogICAgIHJldHVybiBhcnIgJiYgYXJyLmxlbmd0aCA+IDA7CiAg
IH0KCi0gIENvZGVNaXJyb3Iub24gPSBvbjsgQ29kZU1pcnJvci5vZmYgPSBvZmY7IENvZGVNaXJy
b3Iuc2lnbmFsID0gc2lnbmFsOwotCisgIC8vIEFkZCBvbiBhbmQgb2ZmIG1ldGhvZHMgdG8gYSBj
b25zdHJ1Y3RvcidzIHByb3RvdHlwZSwgdG8gbWFrZQorICAvLyByZWdpc3RlcmluZyBldmVudHMg
b24gc3VjaCBvYmplY3RzIG1vcmUgY29udmVuaWVudC4KICAgZnVuY3Rpb24gZXZlbnRNaXhpbihj
dG9yKSB7CiAgICAgY3Rvci5wcm90b3R5cGUub24gPSBmdW5jdGlvbih0eXBlLCBmKSB7b24odGhp
cywgdHlwZSwgZik7fTsKICAgICBjdG9yLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbih0eXBlLCBm
KSB7b2ZmKHRoaXMsIHR5cGUsIGYpO307CkBAIC01NDI3LDIzICs2OTE3LDQ3IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBoYW5kbGluZyB0aGlzJy4KICAgdmFyIFBh
c3MgPSBDb2RlTWlycm9yLlBhc3MgPSB7dG9TdHJpbmc6IGZ1bmN0aW9uKCl7cmV0dXJuICJDb2Rl
TWlycm9yLlBhc3MiO319OwoKKyAgLy8gUmV1c2VkIG9wdGlvbiBvYmplY3RzIGZvciBzZXRTZWxl
Y3Rpb24gJiBmcmllbmRzCisgIHZhciBzZWxfZG9udFNjcm9sbCA9IHtzY3JvbGw6IGZhbHNlfSwg
c2VsX21vdXNlID0ge29yaWdpbjogIiptb3VzZSJ9LCBzZWxfbW92ZSA9IHtvcmlnaW46ICIrbW92
ZSJ9OworCiAgIGZ1bmN0aW9uIERlbGF5ZWQoKSB7dGhpcy5pZCA9IG51bGw7fQotICBEZWxheWVk
LnByb3RvdHlwZSA9IHtzZXQ6IGZ1bmN0aW9uKG1zLCBmKSB7Y2xlYXJUaW1lb3V0KHRoaXMuaWQp
OyB0aGlzLmlkID0gc2V0VGltZW91dChmLCBtcyk7fX07CisgIERlbGF5ZWQucHJvdG90eXBlLnNl
dCA9IGZ1bmN0aW9uKG1zLCBmKSB7CisgICAgY2xlYXJUaW1lb3V0KHRoaXMuaWQpOworICAgIHRo
aXMuaWQgPSBzZXRUaW1lb3V0KGYsIG1zKTsKKyAgfTsKCiAgIC8vIENvdW50cyB0aGUgY29sdW1u
IG9mZnNldCBpbiBhIHN0cmluZywgdGFraW5nIHRhYnMgaW50byBhY2NvdW50LgogICAvLyBVc2Vk
IG1vc3RseSB0byBmaW5kIGluZGVudGF0aW9uLgotICBmdW5jdGlvbiBjb3VudENvbHVtbihzdHJp
bmcsIGVuZCwgdGFiU2l6ZSwgc3RhcnRJbmRleCwgc3RhcnRWYWx1ZSkgeworICB2YXIgY291bnRD
b2x1bW4gPSBDb2RlTWlycm9yLmNvdW50Q29sdW1uID0gZnVuY3Rpb24oc3RyaW5nLCBlbmQsIHRh
YlNpemUsIHN0YXJ0SW5kZXgsIHN0YXJ0VmFsdWUpIHsKICAgICBpZiAoZW5kID09IG51bGwpIHsK
ICAgICAgIGVuZCA9IHN0cmluZy5zZWFyY2goL1teXHNcdTAwYTBdLyk7CiAgICAgICBpZiAoZW5k
ID09IC0xKSBlbmQgPSBzdHJpbmcubGVuZ3RoOwogICAgIH0KLSAgICBmb3IgKHZhciBpID0gc3Rh
cnRJbmRleCB8fCAwLCBuID0gc3RhcnRWYWx1ZSB8fCAwOyBpIDwgZW5kOyArK2kpIHsKLSAgICAg
IGlmIChzdHJpbmcuY2hhckF0KGkpID09ICJcdCIpIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6
ZSk7Ci0gICAgICBlbHNlICsrbjsKKyAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBu
ID0gc3RhcnRWYWx1ZSB8fCAwOzspIHsKKyAgICAgIHZhciBuZXh0VGFiID0gc3RyaW5nLmluZGV4
T2YoIlx0IiwgaSk7CisgICAgICBpZiAobmV4dFRhYiA8IDAgfHwgbmV4dFRhYiA+PSBlbmQpCisg
ICAgICAgIHJldHVybiBuICsgKGVuZCAtIGkpOworICAgICAgbiArPSBuZXh0VGFiIC0gaTsKKyAg
ICAgIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSk7CisgICAgICBpID0gbmV4dFRhYiArIDE7
CisgICAgfQorICB9OworCisgIC8vIFRoZSBpbnZlcnNlIG9mIGNvdW50Q29sdW1uIC0tIGZpbmQg
dGhlIG9mZnNldCB0aGF0IGNvcnJlc3BvbmRzIHRvCisgIC8vIGEgcGFydGljdWxhciBjb2x1bW4u
CisgIGZ1bmN0aW9uIGZpbmRDb2x1bW4oc3RyaW5nLCBnb2FsLCB0YWJTaXplKSB7CisgICAgZm9y
ICh2YXIgcG9zID0gMCwgY29sID0gMDs7KSB7CisgICAgICB2YXIgbmV4dFRhYiA9IHN0cmluZy5p
bmRleE9mKCJcdCIsIHBvcyk7CisgICAgICBpZiAobmV4dFRhYiA9PSAtMSkgbmV4dFRhYiA9IHN0
cmluZy5sZW5ndGg7CisgICAgICB2YXIgc2tpcHBlZCA9IG5leHRUYWIgLSBwb3M7CisgICAgICBp
ZiAobmV4dFRhYiA9PSBzdHJpbmcubGVuZ3RoIHx8IGNvbCArIHNraXBwZWQgPj0gZ29hbCkKKyAg
ICAgICAgcmV0dXJuIHBvcyArIE1hdGgubWluKHNraXBwZWQsIGdvYWwgLSBjb2wpOworICAgICAg
Y29sICs9IG5leHRUYWIgLSBwb3M7CisgICAgICBjb2wgKz0gdGFiU2l6ZSAtIChjb2wgJSB0YWJT
aXplKTsKKyAgICAgIHBvcyA9IG5leHRUYWIgKyAxOworICAgICAgaWYgKGNvbCA+PSBnb2FsKSBy
ZXR1cm4gcG9zOwogICAgIH0KLSAgICByZXR1cm4gbjsKICAgfQotICBDb2RlTWlycm9yLmNvdW50
Q29sdW1uID0gY291bnRDb2x1bW47CgogICB2YXIgc3BhY2VTdHJzID0gWyIiXTsKICAgZnVuY3Rp
b24gc3BhY2VTdHIobikgewpAQCAtNTQ1NCw2MCArNjk2OCw2OSBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKCiAgIGZ1bmN0aW9uIGxzdChhcnIpIHsgcmV0dXJuIGFyclthcnIu
bGVuZ3RoLTFdOyB9CgotICBmdW5jdGlvbiBzZWxlY3RJbnB1dChub2RlKSB7Ci0gICAgaWYgKGlv
cykgeyAvLyBNb2JpbGUgU2FmYXJpIGFwcGFyZW50bHkgaGFzIGEgYnVnIHdoZXJlIHNlbGVjdCgp
IGlzIGJyb2tlbi4KLSAgICAgIG5vZGUuc2VsZWN0aW9uU3RhcnQgPSAwOwotICAgICAgbm9kZS5z
ZWxlY3Rpb25FbmQgPSBub2RlLnZhbHVlLmxlbmd0aDsKLSAgICB9IGVsc2UgewotICAgICAgLy8g
U3VwcHJlc3MgbXlzdGVyaW91cyBJRTEwIGVycm9ycwotICAgICAgdHJ5IHsgbm9kZS5zZWxlY3Qo
KTsgfQotICAgICAgY2F0Y2goX2UpIHt9Ci0gICAgfQotICB9CisgIHZhciBzZWxlY3RJbnB1dCA9
IGZ1bmN0aW9uKG5vZGUpIHsgbm9kZS5zZWxlY3QoKTsgfTsKKyAgaWYgKGlvcykgLy8gTW9iaWxl
IFNhZmFyaSBhcHBhcmVudGx5IGhhcyBhIGJ1ZyB3aGVyZSBzZWxlY3QoKSBpcyBicm9rZW4uCisg
ICAgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IG5vZGUuc2VsZWN0aW9uU3RhcnQgPSAw
OyBub2RlLnNlbGVjdGlvbkVuZCA9IG5vZGUudmFsdWUubGVuZ3RoOyB9OworICBlbHNlIGlmIChp
ZSkgLy8gU3VwcHJlc3MgbXlzdGVyaW91cyBJRTEwIGVycm9ycworICAgIHNlbGVjdElucHV0ID0g
ZnVuY3Rpb24obm9kZSkgeyB0cnkgeyBub2RlLnNlbGVjdCgpOyB9IGNhdGNoKF9lKSB7fSB9OwoK
LSAgZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0aW9uLCBlbHQpIHsKLSAgICBpZiAoY29sbGVjdGlv
bi5pbmRleE9mKSByZXR1cm4gY29sbGVjdGlvbi5pbmRleE9mKGVsdCk7Ci0gICAgZm9yICh2YXIg
aSA9IDAsIGUgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGU7ICsraSkKLSAgICAgIGlmIChjb2xs
ZWN0aW9uW2ldID09IGVsdCkgcmV0dXJuIGk7CisgIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIGVs
dCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpCisgICAgICBp
ZiAoYXJyYXlbaV0gPT0gZWx0KSByZXR1cm4gaTsKICAgICByZXR1cm4gLTE7CiAgIH0KKyAgaWYg
KFtdLmluZGV4T2YpIGluZGV4T2YgPSBmdW5jdGlvbihhcnJheSwgZWx0KSB7IHJldHVybiBhcnJh
eS5pbmRleE9mKGVsdCk7IH07CisgIGZ1bmN0aW9uIG1hcChhcnJheSwgZikgeworICAgIHZhciBv
dXQgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSBvdXRb
aV0gPSBmKGFycmF5W2ldLCBpKTsKKyAgICByZXR1cm4gb3V0OworICB9CisgIGlmIChbXS5tYXAp
IG1hcCA9IGZ1bmN0aW9uKGFycmF5LCBmKSB7IHJldHVybiBhcnJheS5tYXAoZik7IH07CgogICBm
dW5jdGlvbiBjcmVhdGVPYmooYmFzZSwgcHJvcHMpIHsKLSAgICBmdW5jdGlvbiBPYmooKSB7fQot
ICAgIE9iai5wcm90b3R5cGUgPSBiYXNlOwotICAgIHZhciBpbnN0ID0gbmV3IE9iaigpOworICAg
IHZhciBpbnN0OworICAgIGlmIChPYmplY3QuY3JlYXRlKSB7CisgICAgICBpbnN0ID0gT2JqZWN0
LmNyZWF0ZShiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIGN0b3IgPSBmdW5jdGlvbigp
IHt9OworICAgICAgY3Rvci5wcm90b3R5cGUgPSBiYXNlOworICAgICAgaW5zdCA9IG5ldyBjdG9y
KCk7CisgICAgfQogICAgIGlmIChwcm9wcykgY29weU9iaihwcm9wcywgaW5zdCk7CiAgICAgcmV0
dXJuIGluc3Q7Ci0gIH0KKyAgfTsKCi0gIGZ1bmN0aW9uIGNvcHlPYmoob2JqLCB0YXJnZXQpIHsK
KyAgZnVuY3Rpb24gY29weU9iaihvYmosIHRhcmdldCwgb3ZlcndyaXRlKSB7CiAgICAgaWYgKCF0
YXJnZXQpIHRhcmdldCA9IHt9OwotICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSBpZiAob2JqLmhh
c093blByb3BlcnR5KHByb3ApKSB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07CisgICAgZm9yICh2
YXIgcHJvcCBpbiBvYmopCisgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3ApICYmIChv
dmVyd3JpdGUgIT09IGZhbHNlIHx8ICF0YXJnZXQuaGFzT3duUHJvcGVydHkocHJvcCkpKQorICAg
ICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07CiAgICAgcmV0dXJuIHRhcmdldDsKICAgfQoK
LSAgZnVuY3Rpb24gZW1wdHlBcnJheShzaXplKSB7Ci0gICAgZm9yICh2YXIgYSA9IFtdLCBpID0g
MDsgaSA8IHNpemU7ICsraSkgYS5wdXNoKHVuZGVmaW5lZCk7Ci0gICAgcmV0dXJuIGE7Ci0gIH0K
LQogICBmdW5jdGlvbiBiaW5kKGYpIHsKICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5z
bGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGYu
YXBwbHkobnVsbCwgYXJncyk7fTsKICAgfQoKLSAgdmFyIG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRD
aGFyID0gL1tcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5
ZmNjXHVhYzAwLVx1ZDdhZl0vOwotICBmdW5jdGlvbiBpc1dvcmRDaGFyKGNoKSB7CisgIHZhciBu
b25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhciA9IC9bXHUwMGRmXHUzMDQwLVx1MzA5Zlx1MzBhMC1c
dTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLzsKKyAgdmFyIGlz
V29yZENoYXIgPSBDb2RlTWlycm9yLmlzV29yZENoYXIgPSBmdW5jdGlvbihjaCkgewogICAgIHJl
dHVybiAvXHcvLnRlc3QoY2gpIHx8IGNoID4gIlx4ODAiICYmCiAgICAgICAoY2gudG9VcHBlckNh
c2UoKSAhPSBjaC50b0xvd2VyQ2FzZSgpIHx8IG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyLnRl
c3QoY2gpKTsKLSAgfQorICB9OwoKICAgZnVuY3Rpb24gaXNFbXB0eShvYmopIHsKICAgICBmb3Ig
KHZhciBuIGluIG9iaikgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShuKSAmJiBvYmpbbl0pIHJldHVy
biBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQoKLSAgdmFyIGlzRXh0ZW5kaW5nQ2hhciA9
IC9bXHUwMzAwLVx1MDM2Rlx1MDQ4My1cdTA0ODdcdTA0ODgtXHUwNDg5XHUwNTkxLVx1MDVCRFx1
MDVCRlx1MDVDMS1cdTA1QzJcdTA1QzQtXHUwNUM1XHUwNUM3XHUwNjEwLVx1MDYxQVx1MDY0Qi1c
dTA2NUZcdTA2NzBcdTA2RDYtXHUwNkRDXHUwNkRGLVx1MDZFNFx1MDZFNy1cdTA2RThcdTA2RUEt
XHUwNkVEXHVBNjZGXHUxREMw4oCTXHUxREZGXHUyMEQw4oCTXHUyMEZGXHVBNjcwLVx1QTY3Mlx1
QTY3NC1cdUE2N0RcdUE2OUZcdWRjMDAtXHVkZmZmXHVGRTIw4oCTXHVGRTJGXS87CisgIC8vIEV4
dGVuZGluZyB1bmljb2RlIGNoYXJhY3RlcnMuIEEgc2VyaWVzIG9mIGEgbm9uLWV4dGVuZGluZyBj
aGFyICsKKyAgLy8gYW55IG51bWJlciBvZiBleHRlbmRpbmcgY2hhcnMgaXMgdHJlYXRlZCBhcyBh
IHNpbmdsZSB1bml0IGFzIGZhcgorICAvLyBhcyBlZGl0aW5nIGFuZCBtZWFzdXJpbmcgaXMgY29u
Y2VybmVkLiBUaGlzIGlzIG5vdCBmdWxseSBjb3JyZWN0LAorICAvLyBzaW5jZSBzb21lIHNjcmlw
dHMvZm9udHMvYnJvd3NlcnMgYWxzbyB0cmVhdCBvdGhlciBjb25maWd1cmF0aW9ucworICAvLyBv
ZiBjb2RlIHBvaW50cyBhcyBhIGdyb3VwLgorICB2YXIgZXh0ZW5kaW5nQ2hhcnMgPSAvW1x1MDMw
MC1cdTAzNmZcdTA0ODMtXHUwNDg5XHUwNTkxLVx1MDViZFx1MDViZlx1MDVjMVx1MDVjMlx1MDVj
NFx1MDVjNVx1MDVjN1x1MDYxMC1cdTA2MWFcdTA2NGItXHUwNjVlXHUwNjcwXHUwNmQ2LVx1MDZk
Y1x1MDZkZS1cdTA2ZTRcdTA2ZTdcdTA2ZThcdTA2ZWEtXHUwNmVkXHUwNzExXHUwNzMwLVx1MDc0
YVx1MDdhNi1cdTA3YjBcdTA3ZWItXHUwN2YzXHUwODE2LVx1MDgxOVx1MDgxYi1cdTA4MjNcdTA4
MjUtXHUwODI3XHUwODI5LVx1MDgyZFx1MDkwMC1cdTA5MDJcdTA5M2NcdTA5NDEtXHUwOTQ4XHUw
OTRkXHUwOTUxLVx1MDk1NVx1MDk2Mlx1MDk2M1x1MDk4MVx1MDliY1x1MDliZVx1MDljMS1cdTA5
YzRcdTA5Y2RcdTA5ZDdcdTA5ZTJcdTA5ZTNcdTBhMDFcdTBhMDJcdTBhM2NcdTBhNDFcdTBhNDJc
dTBhNDdcdTBhNDhcdTBhNGItXHUwYTRkXHUwYTUxXHUwYTcwXHUwYTcxXHUwYTc1XHUwYTgxXHUw
YTgyXHUwYWJjXHUwYWMxLVx1MGFjNVx1MGFjN1x1MGFjOFx1MGFjZFx1MGFlMlx1MGFlM1x1MGIw
MVx1MGIzY1x1MGIzZVx1MGIzZlx1MGI0MS1cdTBiNDRcdTBiNGRcdTBiNTZcdTBiNTdcdTBiNjJc
dTBiNjNcdTBiODJcdTBiYmVcdTBiYzBcdTBiY2RcdTBiZDdcdTBjM2UtXHUwYzQwXHUwYzQ2LVx1
MGM0OFx1MGM0YS1cdTBjNGRcdTBjNTVcdTBjNTZcdTBjNjJcdTBjNjNcdTBjYmNcdTBjYmZcdTBj
YzJcdTBjYzZcdTBjY2NcdTBjY2RcdTBjZDVcdTBjZDZcdTBjZTJcdTBjZTNcdTBkM2VcdTBkNDEt
XHUwZDQ0XHUwZDRkXHUwZDU3XHUwZDYyXHUwZDYzXHUwZGNhXHUwZGNmXHUwZGQyLVx1MGRkNFx1
MGRkNlx1MGRkZlx1MGUzMVx1MGUzNC1cdTBlM2FcdTBlNDctXHUwZTRlXHUwZWIxXHUwZWI0LVx1
MGViOVx1MGViYlx1MGViY1x1MGVjOC1cdTBlY2RcdTBmMThcdTBmMTlcdTBmMzVcdTBmMzdcdTBm
MzlcdTBmNzEtXHUwZjdlXHUwZjgwLVx1MGY4NFx1MGY4Nlx1MGY4N1x1MGY5MC1cdTBmOTdcdTBm
OTktXHUwZmJjXHUwZmM2XHUxMDJkLVx1MTAzMFx1MTAzMi1cdTEwMzdcdTEwMzlcdTEwM2FcdTEw
M2RcdTEwM2VcdTEwNThcdTEwNTlcdTEwNWUtXHUxMDYwXHUxMDcxLVx1MTA3NFx1MTA4Mlx1MTA4
NVx1MTA4Nlx1MTA4ZFx1MTA5ZFx1MTM1Zlx1MTcxMi1cdTE3MTRcdTE3MzItXHUxNzM0XHUxNzUy
XHUxNzUzXHUxNzcyXHUxNzczXHUxN2I3LVx1MTdiZFx1MTdjNlx1MTdjOS1cdTE3ZDNcdTE3ZGRc
dTE4MGItXHUxODBkXHUxOGE5XHUxOTIwLVx1MTkyMlx1MTkyN1x1MTkyOFx1MTkzMlx1MTkzOS1c
dTE5M2JcdTFhMTdcdTFhMThcdTFhNTZcdTFhNTgtXHUxYTVlXHUxYTYwXHUxYTYyXHUxYTY1LVx1
MWE2Y1x1MWE3My1cdTFhN2NcdTFhN2ZcdTFiMDAtXHUxYjAzXHUxYjM0XHUxYjM2LVx1MWIzYVx1
MWIzY1x1MWI0Mlx1MWI2Yi1cdTFiNzNcdTFiODBcdTFiODFcdTFiYTItXHUxYmE1XHUxYmE4XHUx
YmE5XHUxYzJjLVx1MWMzM1x1MWMzNlx1MWMzN1x1MWNkMC1cdTFjZDJcdTFjZDQtXHUxY2UwXHUx
Y2UyLVx1MWNlOFx1MWNlZFx1MWRjMC1cdTFkZTZcdTFkZmQtXHUxZGZmXHUyMDBjXHUyMDBkXHUy
MGQwLVx1MjBmMFx1MmNlZi1cdTJjZjFcdTJkZTAtXHUyZGZmXHUzMDJhLVx1MzAyZlx1MzA5OVx1
MzA5YVx1YTY2Zi1cdWE2NzJcdWE2N2NcdWE2N2RcdWE2ZjBcdWE2ZjFcdWE4MDJcdWE4MDZcdWE4
MGJcdWE4MjVcdWE4MjZcdWE4YzRcdWE4ZTAtXHVhOGYxXHVhOTI2LVx1YTkyZFx1YTk0Ny1cdWE5
NTFcdWE5ODAtXHVhOTgyXHVhOWIzXHVhOWI2LVx1YTliOVx1YTliY1x1YWEyOS1cdWFhMmVcdWFh
MzFcdWFhMzJcdWFhMzVcdWFhMzZcdWFhNDNcdWFhNGNcdWFhYjBcdWFhYjItXHVhYWI0XHVhYWI3
XHVhYWI4XHVhYWJlXHVhYWJmXHVhYWMxXHVhYmU1XHVhYmU4XHVhYmVkXHVkYzAwLVx1ZGZmZlx1
ZmIxZVx1ZmUwMC1cdWZlMGZcdWZlMjAtXHVmZTI2XHVmZjllXHVmZjlmXS87CisgIGZ1bmN0aW9u
IGlzRXh0ZW5kaW5nQ2hhcihjaCkgeyByZXR1cm4gY2guY2hhckNvZGVBdCgwKSA+PSA3NjggJiYg
ZXh0ZW5kaW5nQ2hhcnMudGVzdChjaCk7IH0KCiAgIC8vIERPTSBVVElMSVRJRVMKCkBAIC01NTE1
LDExICs3MDM4LDI3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZh
ciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOwogICAgIGlmIChjbGFzc05hbWUpIGUu
Y2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgIGlmIChzdHlsZSkgZS5zdHlsZS5jc3NUZXh0ID0g
c3R5bGU7Ci0gICAgaWYgKHR5cGVvZiBjb250ZW50ID09ICJzdHJpbmciKSBzZXRUZXh0Q29udGVu
dChlLCBjb250ZW50KTsKKyAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT0gInN0cmluZyIpIGUuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCkpOwogICAgIGVsc2UgaWYg
KGNvbnRlbnQpIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7ICsraSkgZS5hcHBl
bmRDaGlsZChjb250ZW50W2ldKTsKICAgICByZXR1cm4gZTsKICAgfQoKKyAgdmFyIHJhbmdlOwor
ICBpZiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHJhbmdlID0gZnVuY3Rpb24obm9kZSwgc3RhcnQs
IGVuZCkgeworICAgIHZhciByID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICByLnNldEVu
ZChub2RlLCBlbmQpOworICAgIHIuc2V0U3RhcnQobm9kZSwgc3RhcnQpOworICAgIHJldHVybiBy
OworICB9OworICBlbHNlIHJhbmdlID0gZnVuY3Rpb24obm9kZSwgc3RhcnQsIGVuZCkgeworICAg
IHZhciByID0gZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsKKyAgICByLm1vdmVUb0Vs
ZW1lbnRUZXh0KG5vZGUucGFyZW50Tm9kZSk7CisgICAgci5jb2xsYXBzZSh0cnVlKTsKKyAgICBy
Lm1vdmVFbmQoImNoYXJhY3RlciIsIGVuZCk7CisgICAgci5tb3ZlU3RhcnQoImNoYXJhY3RlciIs
IHN0YXJ0KTsKKyAgICByZXR1cm4gcjsKKyAgfTsKKwogICBmdW5jdGlvbiByZW1vdmVDaGlsZHJl
bihlKSB7CiAgICAgZm9yICh2YXIgY291bnQgPSBlLmNoaWxkTm9kZXMubGVuZ3RoOyBjb3VudCA+
IDA7IC0tY291bnQpCiAgICAgICBlLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7CkBAIC01NTMw
LDE3ICs3MDY5LDM1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJl
dHVybiByZW1vdmVDaGlsZHJlbihwYXJlbnQpLmFwcGVuZENoaWxkKGUpOwogICB9CgotICBmdW5j
dGlvbiBzZXRUZXh0Q29udGVudChlLCBzdHIpIHsKLSAgICBpZiAoaWVfbHQ5KSB7Ci0gICAgICBl
LmlubmVySFRNTCA9ICIiOwotICAgICAgZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShzdHIpKTsKLSAgICB9IGVsc2UgZS50ZXh0Q29udGVudCA9IHN0cjsKKyAgZnVuY3Rpb24g
Y29udGFpbnMocGFyZW50LCBjaGlsZCkgeworICAgIGlmIChwYXJlbnQuY29udGFpbnMpCisgICAg
ICByZXR1cm4gcGFyZW50LmNvbnRhaW5zKGNoaWxkKTsKKyAgICB3aGlsZSAoY2hpbGQgPSBjaGls
ZC5wYXJlbnROb2RlKQorICAgICAgaWYgKGNoaWxkID09IHBhcmVudCkgcmV0dXJuIHRydWU7CiAg
IH0KCi0gIGZ1bmN0aW9uIGdldFJlY3Qobm9kZSkgewotICAgIHJldHVybiBub2RlLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpOworICBmdW5jdGlvbiBhY3RpdmVFbHQoKSB7IHJldHVybiBkb2N1bWVu
dC5hY3RpdmVFbGVtZW50OyB9CisgIC8vIE9sZGVyIHZlcnNpb25zIG9mIElFIHRocm93cyB1bnNw
ZWNpZmllZCBlcnJvciB3aGVuIHRvdWNoaW5nCisgIC8vIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQg
aW4gc29tZSBjYXNlcyAoZHVyaW5nIGxvYWRpbmcsIGluIGlmcmFtZSkKKyAgaWYgKGllX3VwdG8x
MCkgYWN0aXZlRWx0ID0gZnVuY3Rpb24oKSB7CisgICAgdHJ5IHsgcmV0dXJuIGRvY3VtZW50LmFj
dGl2ZUVsZW1lbnQ7IH0KKyAgICBjYXRjaChlKSB7IHJldHVybiBkb2N1bWVudC5ib2R5OyB9Cisg
IH07CisKKyAgZnVuY3Rpb24gY2xhc3NUZXN0KGNscykgeyByZXR1cm4gbmV3IFJlZ0V4cCgiXFxi
IiArIGNscyArICJcXGJcXHMqIik7IH0KKyAgZnVuY3Rpb24gcm1DbGFzcyhub2RlLCBjbHMpIHsK
KyAgICB2YXIgdGVzdCA9IGNsYXNzVGVzdChjbHMpOworICAgIGlmICh0ZXN0LnRlc3Qobm9kZS5j
bGFzc05hbWUpKSBub2RlLmNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lLnJlcGxhY2UodGVzdCwg
IiIpOworICB9CisgIGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIGNscykgeworICAgIGlmICghY2xh
c3NUZXN0KGNscykudGVzdChub2RlLmNsYXNzTmFtZSkpIG5vZGUuY2xhc3NOYW1lICs9ICIgIiAr
IGNsczsKKyAgfQorICBmdW5jdGlvbiBqb2luQ2xhc3NlcyhhLCBiKSB7CisgICAgdmFyIGFzID0g
YS5zcGxpdCgiICIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXMubGVuZ3RoOyBpKyspCisg
ICAgICBpZiAoYXNbaV0gJiYgIWNsYXNzVGVzdChhc1tpXSkudGVzdChiKSkgYiArPSAiICIgKyBh
c1tpXTsKKyAgICByZXR1cm4gYjsKICAgfQotICBDb2RlTWlycm9yLnJlcGxhY2VHZXRSZWN0ID0g
ZnVuY3Rpb24oZikgeyBnZXRSZWN0ID0gZjsgfTsKCiAgIC8vIEZFQVRVUkUgREVURUNUSU9OCgpA
QCAtNTU0OCw0MyArNzEwNSwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgdmFyIGRyYWdBbmREcm9wID0gZnVuY3Rpb24oKSB7CiAgICAgLy8gVGhlcmUgaXMgKnNvbWUq
IGtpbmQgb2YgZHJhZy1hbmQtZHJvcCBzdXBwb3J0IGluIElFNi04LCBidXQgSQogICAgIC8vIGNv
dWxkbid0IGdldCBpdCB0byB3b3JrIHlldC4KLSAgICBpZiAoaWVfbHQ5KSByZXR1cm4gZmFsc2U7
CisgICAgaWYgKGllX3VwdG84KSByZXR1cm4gZmFsc2U7CiAgICAgdmFyIGRpdiA9IGVsdCgnZGl2
Jyk7CiAgICAgcmV0dXJuICJkcmFnZ2FibGUiIGluIGRpdiB8fCAiZHJhZ0Ryb3AiIGluIGRpdjsK
ICAgfSgpOwoKLSAgLy8gRm9yIGEgcmVhc29uIEkgaGF2ZSB5ZXQgdG8gZmlndXJlIG91dCwgc29t
ZSBicm93c2VycyBkaXNhbGxvdwotICAvLyB3b3JkIHdyYXBwaW5nIGJldHdlZW4gY2VydGFpbiBj
aGFyYWN0ZXJzICpvbmx5KiBpZiBhIG5ldyBpbmxpbmUKLSAgLy8gZWxlbWVudCBpcyBzdGFydGVk
IGJldHdlZW4gdGhlbS4gVGhpcyBtYWtlcyBpdCBoYXJkIHRvIHJlbGlhYmx5Ci0gIC8vIG1lYXN1
cmUgdGhlIHBvc2l0aW9uIG9mIHRoaW5ncywgc2luY2UgdGhhdCByZXF1aXJlcyBpbnNlcnRpbmcg
YW4KLSAgLy8gZXh0cmEgc3Bhbi4gVGhpcyB0ZXJyaWJseSBmcmFnaWxlIHNldCBvZiB0ZXN0cyBt
YXRjaGVzIHRoZQotICAvLyBjaGFyYWN0ZXIgY29tYmluYXRpb25zIHRoYXQgc3VmZmVyIGZyb20g
dGhpcyBwaGVub21lbm9uIG9uIHRoZQotICAvLyB2YXJpb3VzIGJyb3dzZXJzLgotICBmdW5jdGlv
biBzcGFuQWZmZWN0c1dyYXBwaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgaWYgKGdlY2tvKSAv
LyBPbmx5IGZvciAiJCciCi0gICAgc3BhbkFmZmVjdHNXcmFwcGluZyA9IGZ1bmN0aW9uKHN0ciwg
aSkgewotICAgICAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KGkgLSAxKSA9PSAzNiAmJiBzdHIuY2hh
ckNvZGVBdChpKSA9PSAzOTsKLSAgICB9OwotICBlbHNlIGlmIChzYWZhcmkgJiYgIS9WZXJzaW9u
XC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkKLSAgICBzcGFuQWZm
ZWN0c1dyYXBwaW5nID0gZnVuY3Rpb24oc3RyLCBpKSB7Ci0gICAgICB2YXIgcmVzdWx0ID0gL1wt
W14gXC0/XXxcP1teICFcJ1wiXCksLlwtXC86O1w/XF1cfV0vLnRlc3Qoc3RyLnNsaWNlKGkgLSAx
LCBpICsgMSkpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotICBlbHNlIGlmICh3ZWJr
aXQgJiYgL0Nocm9tZVwvKD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVz
ZXJBZ2VudCkpCi0gICAgc3BhbkFmZmVjdHNXcmFwcGluZyA9IGZ1bmN0aW9uKHN0ciwgaSkgewot
ICAgICAgdmFyIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpIC0gMSk7Ci0gICAgICByZXR1cm4gY29k
ZSA+PSA4MjA4ICYmIGNvZGUgPD0gODIxMjsKLSAgICB9OwotICBlbHNlIGlmICh3ZWJraXQpCi0g
ICAgc3BhbkFmZmVjdHNXcmFwcGluZyA9IGZ1bmN0aW9uKHN0ciwgaSkgewotICAgICAgaWYgKGkg
PiAxICYmIHN0ci5jaGFyQ29kZUF0KGkgLSAxKSA9PSA0NSkgewotICAgICAgICBpZiAoL1x3Ly50
ZXN0KHN0ci5jaGFyQXQoaSAtIDIpKSAmJiAvW15cLT9cLl0vLnRlc3Qoc3RyLmNoYXJBdChpKSkp
IHJldHVybiB0cnVlOwotICAgICAgICBpZiAoaSA+IDIgJiYgL1tcZFwuLF0vLnRlc3Qoc3RyLmNo
YXJBdChpIC0gMikpICYmIC9bXGRcLixdLy50ZXN0KHN0ci5jaGFyQXQoaSkpKSByZXR1cm4gZmFs
c2U7Ci0gICAgICB9Ci0gICAgICB2YXIgcmVzdWx0ID0gL1t+ISMlJiopPSt9XF1cXHxcIlwuPiw6
O11bKHtbPF18LVteXC0/XC5cdTIwMTAtXHUyMDFmXHUyMDI2XXxcP1tcd35gQCMkJVxeJiooXz0r
e1t8PjxdfOKApltcd35gQCMkJVxeJiooXz0re1s+PF0vLnRlc3Qoc3RyLnNsaWNlKGkgLSAxLCBp
ICsgMSkpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotCiAgIHZhciBrbm93blNjcm9s
bGJhcldpZHRoOwogICBmdW5jdGlvbiBzY3JvbGxiYXJXaWR0aChtZWFzdXJlKSB7CiAgICAgaWYg
KGtub3duU2Nyb2xsYmFyV2lkdGggIT0gbnVsbCkgcmV0dXJuIGtub3duU2Nyb2xsYmFyV2lkdGg7
CkBAIC01NjAxLDE1ICs3MTI2LDI2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgdmFyIHRlc3QgPSBlbHQoInNwYW4iLCAiXHUyMDBiIik7CiAgICAgICByZW1vdmVD
aGlsZHJlbkFuZEFkZChtZWFzdXJlLCBlbHQoInNwYW4iLCBbdGVzdCwgZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIngiKV0pKTsKICAgICAgIGlmIChtZWFzdXJlLmZpcnN0Q2hpbGQub2Zmc2V0SGVp
Z2h0ICE9IDApCi0gICAgICAgIHp3c3BTdXBwb3J0ZWQgPSB0ZXN0Lm9mZnNldFdpZHRoIDw9IDEg
JiYgdGVzdC5vZmZzZXRIZWlnaHQgPiAyICYmICFpZV9sdDg7CisgICAgICAgIHp3c3BTdXBwb3J0
ZWQgPSB0ZXN0Lm9mZnNldFdpZHRoIDw9IDEgJiYgdGVzdC5vZmZzZXRIZWlnaHQgPiAyICYmICFp
ZV91cHRvNzsKICAgICB9CiAgICAgaWYgKHp3c3BTdXBwb3J0ZWQpIHJldHVybiBlbHQoInNwYW4i
LCAiXHUyMDBiIik7CiAgICAgZWxzZSByZXR1cm4gZWx0KCJzcGFuIiwgIlx1MDBhMCIsIG51bGws
ICJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIp
OwogICB9CgorICAvLyBGZWF0dXJlLWRldGVjdCBJRSdzIGNydW1teSBjbGllbnQgcmVjdCByZXBv
cnRpbmcgZm9yIGJpZGkgdGV4dAorICB2YXIgYmFkQmlkaVJlY3RzOworICBmdW5jdGlvbiBoYXNC
YWRCaWRpUmVjdHMobWVhc3VyZSkgeworICAgIGlmIChiYWRCaWRpUmVjdHMgIT0gbnVsbCkgcmV0
dXJuIGJhZEJpZGlSZWN0czsKKyAgICB2YXIgdHh0ID0gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVh
c3VyZSwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkFcdTA2MmVBIikpOworICAgIHZhciByMCA9
IHJhbmdlKHR4dCwgMCwgMSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgaWYgKHIwLmxl
ZnQgPT0gcjAucmlnaHQpIHJldHVybiBmYWxzZTsKKyAgICB2YXIgcjEgPSByYW5nZSh0eHQsIDEs
IDIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIHJldHVybiBiYWRCaWRpUmVjdHMgPSAo
cjEucmlnaHQgLSByMC5yaWdodCA8IDMpOworICB9CisKICAgLy8gU2VlIGlmICIiLnNwbGl0IGlz
IHRoZSBicm9rZW4gSUUgdmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW4KICAgLy8gYWx0ZXJuYXRp
dmUgd2F5IHRvIHNwbGl0IGxpbmVzLgotICB2YXIgc3BsaXRMaW5lcyA9ICJcblxuYiIuc3BsaXQo
L1xuLykubGVuZ3RoICE9IDMgPyBmdW5jdGlvbihzdHJpbmcpIHsKKyAgdmFyIHNwbGl0TGluZXMg
PSBDb2RlTWlycm9yLnNwbGl0TGluZXMgPSAiXG5cbmIiLnNwbGl0KC9cbi8pLmxlbmd0aCAhPSAz
ID8gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICAgdmFyIHBvcyA9IDAsIHJlc3VsdCA9IFtdLCBsID0g
c3RyaW5nLmxlbmd0aDsKICAgICB3aGlsZSAocG9zIDw9IGwpIHsKICAgICAgIHZhciBubCA9IHN0
cmluZy5pbmRleE9mKCJcbiIsIHBvcyk7CkBAIC01NjI2LDcgKzcxNjIsNiBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfSA6
IGZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5zcGxpdCgvXHJcbj98XG4vKTt9OwotICBD
b2RlTWlycm9yLnNwbGl0TGluZXMgPSBzcGxpdExpbmVzOwoKICAgdmFyIGhhc1NlbGVjdGlvbiA9
IHdpbmRvdy5nZXRTZWxlY3Rpb24gPyBmdW5jdGlvbih0ZSkgewogICAgIHRyeSB7IHJldHVybiB0
ZS5zZWxlY3Rpb25TdGFydCAhPSB0ZS5zZWxlY3Rpb25FbmQ7IH0KQEAgLTU2NDIsMjIgKzcxNzcs
MjIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGUgPSBlbHQo
ImRpdiIpOwogICAgIGlmICgib25jb3B5IiBpbiBlKSByZXR1cm4gdHJ1ZTsKICAgICBlLnNldEF0
dHJpYnV0ZSgib25jb3B5IiwgInJldHVybjsiKTsKLSAgICByZXR1cm4gdHlwZW9mIGUub25jb3B5
ID09ICdmdW5jdGlvbic7CisgICAgcmV0dXJuIHR5cGVvZiBlLm9uY29weSA9PSAiZnVuY3Rpb24i
OwogICB9KSgpOwoKLSAgLy8gS0VZIE5BTUlORworICAvLyBLRVkgTkFNRVMKCiAgIHZhciBrZXlO
YW1lcyA9IHszOiAiRW50ZXIiLCA4OiAiQmFja3NwYWNlIiwgOTogIlRhYiIsIDEzOiAiRW50ZXIi
LCAxNjogIlNoaWZ0IiwgMTc6ICJDdHJsIiwgMTg6ICJBbHQiLAogICAgICAgICAgICAgICAgICAg
MTk6ICJQYXVzZSIsIDIwOiAiQ2Fwc0xvY2siLCAyNzogIkVzYyIsIDMyOiAiU3BhY2UiLCAzMzog
IlBhZ2VVcCIsIDM0OiAiUGFnZURvd24iLCAzNTogIkVuZCIsCiAgICAgICAgICAgICAgICAgICAz
NjogIkhvbWUiLCAzNzogIkxlZnQiLCAzODogIlVwIiwgMzk6ICJSaWdodCIsIDQwOiAiRG93biIs
IDQ0OiAiUHJpbnRTY3JuIiwgNDU6ICJJbnNlcnQiLAotICAgICAgICAgICAgICAgICAgNDY6ICJE
ZWxldGUiLCA1OTogIjsiLCA5MTogIk1vZCIsIDkyOiAiTW9kIiwgOTM6ICJNb2QiLCAxMDk6ICIt
IiwgMTA3OiAiPSIsIDEyNzogIkRlbGV0ZSIsCi0gICAgICAgICAgICAgICAgICAxODY6ICI7Iiwg
MTg3OiAiPSIsIDE4ODogIiwiLCAxODk6ICItIiwgMTkwOiAiLiIsIDE5MTogIi8iLCAxOTI6ICJg
IiwgMjE5OiAiWyIsIDIyMDogIlxcIiwKLSAgICAgICAgICAgICAgICAgIDIyMTogIl0iLCAyMjI6
ICInIiwgNjMyNzY6ICJQYWdlVXAiLCA2MzI3NzogIlBhZ2VEb3duIiwgNjMyNzU6ICJFbmQiLCA2
MzI3MzogIkhvbWUiLAotICAgICAgICAgICAgICAgICAgNjMyMzQ6ICJMZWZ0IiwgNjMyMzI6ICJV
cCIsIDYzMjM1OiAiUmlnaHQiLCA2MzIzMzogIkRvd24iLCA2MzMwMjogIkluc2VydCIsIDYzMjcy
OiAiRGVsZXRlIn07CisgICAgICAgICAgICAgICAgICA0NjogIkRlbGV0ZSIsIDU5OiAiOyIsIDYx
OiAiPSIsIDkxOiAiTW9kIiwgOTI6ICJNb2QiLCA5MzogIk1vZCIsIDEwNzogIj0iLCAxMDk6ICIt
IiwgMTI3OiAiRGVsZXRlIiwKKyAgICAgICAgICAgICAgICAgIDE3MzogIi0iLCAxODY6ICI7Iiwg
MTg3OiAiPSIsIDE4ODogIiwiLCAxODk6ICItIiwgMTkwOiAiLiIsIDE5MTogIi8iLCAxOTI6ICJg
IiwgMjE5OiAiWyIsIDIyMDogIlxcIiwKKyAgICAgICAgICAgICAgICAgIDIyMTogIl0iLCAyMjI6
ICInIiwgNjMyMzI6ICJVcCIsIDYzMjMzOiAiRG93biIsIDYzMjM0OiAiTGVmdCIsIDYzMjM1OiAi
UmlnaHQiLCA2MzI3MjogIkRlbGV0ZSIsCisgICAgICAgICAgICAgICAgICA2MzI3MzogIkhvbWUi
LCA2MzI3NTogIkVuZCIsIDYzMjc2OiAiUGFnZVVwIiwgNjMyNzc6ICJQYWdlRG93biIsIDYzMzAy
OiAiSW5zZXJ0In07CiAgIENvZGVNaXJyb3Iua2V5TmFtZXMgPSBrZXlOYW1lczsKICAgKGZ1bmN0
aW9uKCkgewogICAgIC8vIE51bWJlciBrZXlzCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsg
aSsrKSBrZXlOYW1lc1tpICsgNDhdID0gU3RyaW5nKGkpOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMTA7IGkrKykga2V5TmFtZXNbaSArIDQ4XSA9IGtleU5hbWVzW2kgKyA5Nl0gPSBTdHJpbmco
aSk7CiAgICAgLy8gQWxwaGFiZXRpYyBrZXlzCiAgICAgZm9yICh2YXIgaSA9IDY1OyBpIDw9IDkw
OyBpKyspIGtleU5hbWVzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTsKICAgICAvLyBGdW5j
dGlvbiBrZXlzCkBAIC01NjkxLDE5ICs3MjI2LDIxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewoKICAgZnVuY3Rpb24gbGluZVN0YXJ0KGNtLCBsaW5lTikgewogICAgIHZhciBs
aW5lID0gZ2V0TGluZShjbS5kb2MsIGxpbmVOKTsKLSAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGlu
ZShjbS5kb2MsIGxpbmUpOworICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKGxpbmUpOwogICAg
IGlmICh2aXN1YWwgIT0gbGluZSkgbGluZU4gPSBsaW5lTm8odmlzdWFsKTsKICAgICB2YXIgb3Jk
ZXIgPSBnZXRPcmRlcih2aXN1YWwpOwogICAgIHZhciBjaCA9ICFvcmRlciA/IDAgOiBvcmRlclsw
XS5sZXZlbCAlIDIgPyBsaW5lUmlnaHQodmlzdWFsKSA6IGxpbmVMZWZ0KHZpc3VhbCk7CiAgICAg
cmV0dXJuIFBvcyhsaW5lTiwgY2gpOwogICB9CiAgIGZ1bmN0aW9uIGxpbmVFbmQoY20sIGxpbmVO
KSB7Ci0gICAgdmFyIG1lcmdlZCwgbGluZTsKLSAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2Vk
U3BhbkF0RW5kKGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbGluZU4pKSkKLSAgICAgIGxpbmVOID0g
bWVyZ2VkLmZpbmQoKS50by5saW5lOworICAgIHZhciBtZXJnZWQsIGxpbmUgPSBnZXRMaW5lKGNt
LmRvYywgbGluZU4pOworICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGlu
ZSkpIHsKKyAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lOworICAgICAgbGlu
ZU4gPSBudWxsOworICAgIH0KICAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lKTsKICAgICB2
YXIgY2ggPSAhb3JkZXIgPyBsaW5lLnRleHQubGVuZ3RoIDogb3JkZXJbMF0ubGV2ZWwgJSAyID8g
bGluZUxlZnQobGluZSkgOiBsaW5lUmlnaHQobGluZSk7Ci0gICAgcmV0dXJuIFBvcyhsaW5lTiwg
Y2gpOworICAgIHJldHVybiBQb3MobGluZU4gPT0gbnVsbCA/IGxpbmVObyhsaW5lKSA6IGxpbmVO
LCBjaCk7CiAgIH0KCiAgIGZ1bmN0aW9uIGNvbXBhcmVCaWRpTGV2ZWwob3JkZXIsIGEsIGIpIHsK
QEAgLTU3MTQsMzggKzcyNTEsMzcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgIH0KICAgdmFyIGJpZGlPdGhlcjsKICAgZnVuY3Rpb24gZ2V0QmlkaVBhcnRBdChvcmRlciwg
cG9zKSB7CisgICAgYmlkaU90aGVyID0gbnVsbDsKICAgICBmb3IgKHZhciBpID0gMCwgZm91bmQ7
IGkgPCBvcmRlci5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIGN1ciA9IG9yZGVyW2ldOwotICAg
ICAgaWYgKGN1ci5mcm9tIDwgcG9zICYmIGN1ci50byA+IHBvcykgeyBiaWRpT3RoZXIgPSBudWxs
OyByZXR1cm4gaTsgfQotICAgICAgaWYgKGN1ci5mcm9tID09IHBvcyB8fCBjdXIudG8gPT0gcG9z
KSB7CisgICAgICBpZiAoY3VyLmZyb20gPCBwb3MgJiYgY3VyLnRvID4gcG9zKSByZXR1cm4gaTsK
KyAgICAgIGlmICgoY3VyLmZyb20gPT0gcG9zIHx8IGN1ci50byA9PSBwb3MpKSB7CiAgICAgICAg
IGlmIChmb3VuZCA9PSBudWxsKSB7CiAgICAgICAgICAgZm91bmQgPSBpOwogICAgICAgICB9IGVs
c2UgaWYgKGNvbXBhcmVCaWRpTGV2ZWwob3JkZXIsIGN1ci5sZXZlbCwgb3JkZXJbZm91bmRdLmxl
dmVsKSkgewotICAgICAgICAgIGJpZGlPdGhlciA9IGZvdW5kOworICAgICAgICAgIGlmIChjdXIu
ZnJvbSAhPSBjdXIudG8pIGJpZGlPdGhlciA9IGZvdW5kOwogICAgICAgICAgIHJldHVybiBpOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGJpZGlPdGhlciA9IGk7CisgICAgICAgICAgaWYg
KGN1ci5mcm9tICE9IGN1ci50bykgYmlkaU90aGVyID0gaTsKICAgICAgICAgICByZXR1cm4gZm91
bmQ7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9Ci0gICAgYmlkaU90aGVyID0gbnVsbDsKICAg
ICByZXR1cm4gZm91bmQ7CiAgIH0KCiAgIGZ1bmN0aW9uIG1vdmVJbkxpbmUobGluZSwgcG9zLCBk
aXIsIGJ5VW5pdCkgewogICAgIGlmICghYnlVbml0KSByZXR1cm4gcG9zICsgZGlyOwogICAgIGRv
IHBvcyArPSBkaXI7Ci0gICAgd2hpbGUgKHBvcyA+IDAgJiYgaXNFeHRlbmRpbmdDaGFyLnRlc3Qo
bGluZS50ZXh0LmNoYXJBdChwb3MpKSk7CisgICAgd2hpbGUgKHBvcyA+IDAgJiYgaXNFeHRlbmRp
bmdDaGFyKGxpbmUudGV4dC5jaGFyQXQocG9zKSkpOwogICAgIHJldHVybiBwb3M7CiAgIH0KCi0g
IC8vIFRoaXMgaXMgc29tZXdoYXQgaW52b2x2ZWQuIEl0IGlzIG5lZWRlZCBpbiBvcmRlciB0byBt
b3ZlCi0gIC8vICd2aXN1YWxseScgdGhyb3VnaCBiaS1kaXJlY3Rpb25hbCB0ZXh0IC0tIGkuZS4s
IHByZXNzaW5nIGxlZnQKLSAgLy8gc2hvdWxkIG1ha2UgdGhlIGN1cnNvciBnbyBsZWZ0LCBldmVu
IHdoZW4gaW4gUlRMIHRleHQuIFRoZQotICAvLyB0cmlja3kgcGFydCBpcyB0aGUgJ2p1bXBzJywg
d2hlcmUgUlRMIGFuZCBMVFIgdGV4dCB0b3VjaCBlYWNoCi0gIC8vIG90aGVyLiBUaGlzIG9mdGVu
IHJlcXVpcmVzIHRoZSBjdXJzb3Igb2Zmc2V0IHRvIG1vdmUgbW9yZSB0aGFuCi0gIC8vIG9uZSB1
bml0LCBpbiBvcmRlciB0byB2aXN1YWxseSBtb3ZlIG9uZSB1bml0LgorICAvLyBUaGlzIGlzIG5l
ZWRlZCBpbiBvcmRlciB0byBtb3ZlICd2aXN1YWxseScgdGhyb3VnaCBiaS1kaXJlY3Rpb25hbAor
ICAvLyB0ZXh0IC0tIGkuZS4sIHByZXNzaW5nIGxlZnQgc2hvdWxkIG1ha2UgdGhlIGN1cnNvciBn
byBsZWZ0LCBldmVuCisgIC8vIHdoZW4gaW4gUlRMIHRleHQuIFRoZSB0cmlja3kgcGFydCBpcyB0
aGUgJ2p1bXBzJywgd2hlcmUgUlRMIGFuZAorICAvLyBMVFIgdGV4dCB0b3VjaCBlYWNoIG90aGVy
LiBUaGlzIG9mdGVuIHJlcXVpcmVzIHRoZSBjdXJzb3Igb2Zmc2V0CisgIC8vIHRvIG1vdmUgbW9y
ZSB0aGFuIG9uZSB1bml0LCBpbiBvcmRlciB0byB2aXN1YWxseSBtb3ZlIG9uZSB1bml0LgogICBm
dW5jdGlvbiBtb3ZlVmlzdWFsbHkobGluZSwgc3RhcnQsIGRpciwgYnlVbml0KSB7CiAgICAgdmFy
IGJpZGkgPSBnZXRPcmRlcihsaW5lKTsKICAgICBpZiAoIWJpZGkpIHJldHVybiBtb3ZlTG9naWNh
bGx5KGxpbmUsIHN0YXJ0LCBkaXIsIGJ5VW5pdCk7CkBAIC01NzcxLDcgKzczMDcsNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKCiAgIGZ1bmN0aW9uIG1vdmVMb2dpY2FsbHko
bGluZSwgc3RhcnQsIGRpciwgYnlVbml0KSB7CiAgICAgdmFyIHRhcmdldCA9IHN0YXJ0ICsgZGly
OwotICAgIGlmIChieVVuaXQpIHdoaWxlICh0YXJnZXQgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhci50
ZXN0KGxpbmUudGV4dC5jaGFyQXQodGFyZ2V0KSkpIHRhcmdldCArPSBkaXI7CisgICAgaWYgKGJ5
VW5pdCkgd2hpbGUgKHRhcmdldCA+IDAgJiYgaXNFeHRlbmRpbmdDaGFyKGxpbmUudGV4dC5jaGFy
QXQodGFyZ2V0KSkpIHRhcmdldCArPSBkaXI7CiAgICAgcmV0dXJuIHRhcmdldCA8IDAgfHwgdGFy
Z2V0ID4gbGluZS50ZXh0Lmxlbmd0aCA/IG51bGwgOiB0YXJnZXQ7CiAgIH0KCkBAIC01ODAwLDE0
ICs3MzM2LDE2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAvLyBvYmpl
Y3RzKSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBvY2N1ciB2aXN1YWxseS4KICAgdmFyIGJp
ZGlPcmRlcmluZyA9IChmdW5jdGlvbigpIHsKICAgICAvLyBDaGFyYWN0ZXIgdHlwZXMgZm9yIGNv
ZGVwb2ludHMgMCB0byAweGZmCi0gICAgdmFyIGxvd1R5cGVzID0gImJiYmJiYmJiYnRzdHdzYmJi
YmJiYmJiYmJiYmJzc3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExM
TExMTExMTExMTExMTExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJi
YmJzYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxO
Tk5OTkxMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExM
TExOTExMTExMTEwiOworICAgIHZhciBsb3dUeXBlcyA9ICJiYmJiYmJiYmJ0c3R3c2JiYmJiYmJi
YmJiYmJic3NzdHdOTiUlJU5OTk5OTixOLE4xMTExMTExMTExTk5OTk5OTkxMTExMTExMTExMTExM
TExMTExMTExMTExMTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OYmJiYmJic2Ji
YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLE4lJSUlTk5OTkxOTk5OTiUlMTFOTE5OTjFMTk5OTk5M
TExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTiI7
CiAgICAgLy8gQ2hhcmFjdGVyIHR5cGVzIGZvciBjb2RlcG9pbnRzIDB4NjAwIHRvIDB4NmZmCi0g
ICAgdmFyIGFyYWJpY1R5cGVzID0gInJycnJycnJycnJycixyTk5tbW1tbW1ycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tcnJy
cnJycm5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJtbW1tbW1tbW1tbW1tbW1tbW1tTm1tbW1ycnJycnJycnJycnJycnJycnIiOworICAg
IHZhciBhcmFiaWNUeXBlcyA9ICJycnJycnJycnJycnIsck5ObW1tbW1tcnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbXJycnJy
cnJubm5ubm5ubm5uJW5ucnJybXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbU5tbW1tIjsKICAgICBmdW5jdGlvbiBjaGFyVHlwZShj
b2RlKSB7Ci0gICAgICBpZiAoY29kZSA8PSAweGZmKSByZXR1cm4gbG93VHlwZXMuY2hhckF0KGNv
ZGUpOworICAgICAgaWYgKGNvZGUgPD0gMHhmNykgcmV0dXJuIGxvd1R5cGVzLmNoYXJBdChjb2Rl
KTsKICAgICAgIGVsc2UgaWYgKDB4NTkwIDw9IGNvZGUgJiYgY29kZSA8PSAweDVmNCkgcmV0dXJu
ICJSIjsKLSAgICAgIGVsc2UgaWYgKDB4NjAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDZmZikgcmV0
dXJuIGFyYWJpY1R5cGVzLmNoYXJBdChjb2RlIC0gMHg2MDApOwotICAgICAgZWxzZSBpZiAoMHg3
MDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4OGFjKSByZXR1cm4gInIiOworICAgICAgZWxzZSBpZiAo
MHg2MDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4NmVkKSByZXR1cm4gYXJhYmljVHlwZXMuY2hhckF0
KGNvZGUgLSAweDYwMCk7CisgICAgICBlbHNlIGlmICgweDZlZSA8PSBjb2RlICYmIGNvZGUgPD0g
MHg4YWMpIHJldHVybiAiciI7CisgICAgICBlbHNlIGlmICgweDIwMDAgPD0gY29kZSAmJiBjb2Rl
IDw9IDB4MjAwYikgcmV0dXJuICJ3IjsKKyAgICAgIGVsc2UgaWYgKGNvZGUgPT0gMHgyMDBjKSBy
ZXR1cm4gImIiOwogICAgICAgZWxzZSByZXR1cm4gIkwiOwogICAgIH0KCkBAIC01ODE2LDYgKzcz
NTQsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gQnJvd3Nl
cnMgc2VlbSB0byBhbHdheXMgdHJlYXQgdGhlIGJvdW5kYXJpZXMgb2YgYmxvY2sgZWxlbWVudHMg
YXMgYmVpbmcgTC4KICAgICB2YXIgb3V0ZXJUeXBlID0gIkwiOwoKKyAgICBmdW5jdGlvbiBCaWRp
U3BhbihsZXZlbCwgZnJvbSwgdG8pIHsKKyAgICAgIHRoaXMubGV2ZWwgPSBsZXZlbDsKKyAgICAg
IHRoaXMuZnJvbSA9IGZyb207IHRoaXMudG8gPSB0bzsKKyAgICB9CisKICAgICByZXR1cm4gZnVu
Y3Rpb24oc3RyKSB7CiAgICAgICBpZiAoIWJpZGlSRS50ZXN0KHN0cikpIHJldHVybiBmYWxzZTsK
ICAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoLCB0eXBlcyA9IFtdOwpAQCAtNTg2Myw3ICs3NDA2
LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmICh0eXBl
ID09ICIsIikgdHlwZXNbaV0gPSAiTiI7CiAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIiUiKSB7
CiAgICAgICAgICAgZm9yICh2YXIgZW5kID0gaSArIDE7IGVuZCA8IGxlbiAmJiB0eXBlc1tlbmRd
ID09ICIlIjsgKytlbmQpIHt9Ci0gICAgICAgICAgdmFyIHJlcGxhY2UgPSAoaSAmJiB0eXBlc1tp
LTFdID09ICIhIikgfHwgKGVuZCA8IGxlbiAtIDEgJiYgdHlwZXNbZW5kXSA9PSAiMSIpID8gIjEi
IDogIk4iOworICAgICAgICAgIHZhciByZXBsYWNlID0gKGkgJiYgdHlwZXNbaS0xXSA9PSAiISIp
IHx8IChlbmQgPCBsZW4gJiYgdHlwZXNbZW5kXSA9PSAiMSIpID8gIjEiIDogIk4iOwogICAgICAg
ICAgIGZvciAodmFyIGogPSBpOyBqIDwgZW5kOyArK2opIHR5cGVzW2pdID0gcmVwbGFjZTsKICAg
ICAgICAgICBpID0gZW5kIC0gMTsKICAgICAgICAgfQpAQCAtNTg4OCw3ICs3NDMxLDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChpc05ldXRyYWwudGVz
dCh0eXBlc1tpXSkpIHsKICAgICAgICAgICBmb3IgKHZhciBlbmQgPSBpICsgMTsgZW5kIDwgbGVu
ICYmIGlzTmV1dHJhbC50ZXN0KHR5cGVzW2VuZF0pOyArK2VuZCkge30KICAgICAgICAgICB2YXIg
YmVmb3JlID0gKGkgPyB0eXBlc1tpLTFdIDogb3V0ZXJUeXBlKSA9PSAiTCI7Ci0gICAgICAgICAg
dmFyIGFmdGVyID0gKGVuZCA8IGxlbiAtIDEgPyB0eXBlc1tlbmRdIDogb3V0ZXJUeXBlKSA9PSAi
TCI7CisgICAgICAgICAgdmFyIGFmdGVyID0gKGVuZCA8IGxlbiA/IHR5cGVzW2VuZF0gOiBvdXRl
clR5cGUpID09ICJMIjsKICAgICAgICAgICB2YXIgcmVwbGFjZSA9IGJlZm9yZSB8fCBhZnRlciA/
ICJMIiA6ICJSIjsKICAgICAgICAgICBmb3IgKHZhciBqID0gaTsgaiA8IGVuZDsgKytqKSB0eXBl
c1tqXSA9IHJlcGxhY2U7CiAgICAgICAgICAgaSA9IGVuZCAtIDE7CkBAIC01OTA1LDMyICs3NDQ4
LDMyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAoY291
bnRzQXNMZWZ0LnRlc3QodHlwZXNbaV0pKSB7CiAgICAgICAgICAgdmFyIHN0YXJ0ID0gaTsKICAg
ICAgICAgICBmb3IgKCsraTsgaSA8IGxlbiAmJiBjb3VudHNBc0xlZnQudGVzdCh0eXBlc1tpXSk7
ICsraSkge30KLSAgICAgICAgICBvcmRlci5wdXNoKHtmcm9tOiBzdGFydCwgdG86IGksIGxldmVs
OiAwfSk7CisgICAgICAgICAgb3JkZXIucHVzaChuZXcgQmlkaVNwYW4oMCwgc3RhcnQsIGkpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICB2YXIgcG9zID0gaSwgYXQgPSBvcmRlci5sZW5n
dGg7CiAgICAgICAgICAgZm9yICgrK2k7IGkgPCBsZW4gJiYgdHlwZXNbaV0gIT0gIkwiOyArK2kp
IHt9CiAgICAgICAgICAgZm9yICh2YXIgaiA9IHBvczsgaiA8IGk7KSB7CiAgICAgICAgICAgICBp
ZiAoY291bnRzQXNOdW0udGVzdCh0eXBlc1tqXSkpIHsKLSAgICAgICAgICAgICAgaWYgKHBvcyA8
IGopIG9yZGVyLnNwbGljZShhdCwgMCwge2Zyb206IHBvcywgdG86IGosIGxldmVsOiAxfSk7Cisg
ICAgICAgICAgICAgIGlmIChwb3MgPCBqKSBvcmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRpU3Bh
bigxLCBwb3MsIGopKTsKICAgICAgICAgICAgICAgdmFyIG5zdGFydCA9IGo7CiAgICAgICAgICAg
ICAgIGZvciAoKytqOyBqIDwgaSAmJiBjb3VudHNBc051bS50ZXN0KHR5cGVzW2pdKTsgKytqKSB7
fQotICAgICAgICAgICAgICBvcmRlci5zcGxpY2UoYXQsIDAsIHtmcm9tOiBuc3RhcnQsIHRvOiBq
LCBsZXZlbDogMn0pOworICAgICAgICAgICAgICBvcmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRp
U3BhbigyLCBuc3RhcnQsIGopKTsKICAgICAgICAgICAgICAgcG9zID0gajsKICAgICAgICAgICAg
IH0gZWxzZSArK2o7CiAgICAgICAgICAgfQotICAgICAgICAgIGlmIChwb3MgPCBpKSBvcmRlci5z
cGxpY2UoYXQsIDAsIHtmcm9tOiBwb3MsIHRvOiBpLCBsZXZlbDogMX0pOworICAgICAgICAgIGlm
IChwb3MgPCBpKSBvcmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRpU3BhbigxLCBwb3MsIGkpKTsK
ICAgICAgICAgfQogICAgICAgfQogICAgICAgaWYgKG9yZGVyWzBdLmxldmVsID09IDEgJiYgKG0g
PSBzdHIubWF0Y2goL15ccysvKSkpIHsKICAgICAgICAgb3JkZXJbMF0uZnJvbSA9IG1bMF0ubGVu
Z3RoOwotICAgICAgICBvcmRlci51bnNoaWZ0KHtmcm9tOiAwLCB0bzogbVswXS5sZW5ndGgsIGxl
dmVsOiAwfSk7CisgICAgICAgIG9yZGVyLnVuc2hpZnQobmV3IEJpZGlTcGFuKDAsIDAsIG1bMF0u
bGVuZ3RoKSk7CiAgICAgICB9CiAgICAgICBpZiAobHN0KG9yZGVyKS5sZXZlbCA9PSAxICYmICht
ID0gc3RyLm1hdGNoKC9ccyskLykpKSB7CiAgICAgICAgIGxzdChvcmRlcikudG8gLT0gbVswXS5s
ZW5ndGg7Ci0gICAgICAgIG9yZGVyLnB1c2goe2Zyb206IGxlbiAtIG1bMF0ubGVuZ3RoLCB0bzog
bGVuLCBsZXZlbDogMH0pOworICAgICAgICBvcmRlci5wdXNoKG5ldyBCaWRpU3BhbigwLCBsZW4g
LSBtWzBdLmxlbmd0aCwgbGVuKSk7CiAgICAgICB9CiAgICAgICBpZiAob3JkZXJbMF0ubGV2ZWwg
IT0gbHN0KG9yZGVyKS5sZXZlbCkKLSAgICAgICAgb3JkZXIucHVzaCh7ZnJvbTogbGVuLCB0bzog
bGVuLCBsZXZlbDogb3JkZXJbMF0ubGV2ZWx9KTsKKyAgICAgICAgb3JkZXIucHVzaChuZXcgQmlk
aVNwYW4ob3JkZXJbMF0ubGV2ZWwsIGxlbiwgbGVuKSk7CgogICAgICAgcmV0dXJuIG9yZGVyOwog
ICAgIH07CkBAIC01OTM4LDcgKzc0ODEsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKCiAgIC8vIFRIRSBFTkQKCi0gIENvZGVNaXJyb3IudmVyc2lvbiA9ICIzLjIwLjAiOwor
ICBDb2RlTWlycm9yLnZlcnNpb24gPSAiNC4wLjQiOwoKICAgcmV0dXJuIENvZGVNaXJyb3I7Ci19
KSgpOworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZmZlZXNjcmlwdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzCmlu
ZGV4IGU4YmZlNDguLmM2ZGE4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29m
ZmVlc2NyaXB0LmpzCkBAIC0yLDYgKzIsMTYgQEAKICAqIExpbmsgdG8gdGhlIHByb2plY3QncyBH
aXRIdWIgcGFnZToKICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9waWNraGFyZHQvY29mZmVlc2NyaXB0
LWNvZGVtaXJyb3ItbW9kZQogICovCisoZnVuY3Rpb24obW9kKSB7CisgIGlmICh0eXBlb2YgZXhw
b3J0cyA9PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiKSAvLyBDb21tb25K
UworICAgIG1vZChyZXF1aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpKTsKKyAgZWxzZSBpZiAo
dHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAorICAgIGRl
ZmluZShbIi4uLy4uL2xpYi9jb2RlbWlycm9yIl0sIG1vZCk7CisgIGVsc2UgLy8gUGxhaW4gYnJv
d3NlciBlbnYKKyAgICBtb2QoQ29kZU1pcnJvcik7Cit9KShmdW5jdGlvbihDb2RlTWlycm9yKSB7
CisidXNlIHN0cmljdCI7CisKIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY29mZmVlc2NyaXB0Iiwg
ZnVuY3Rpb24oY29uZikgewogICB2YXIgRVJST1JDTEFTUyA9ICJlcnJvciI7CgpAQCAtMTE5LDEz
ICsxMjksMTMgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlv
bihjb25mKSB7CgogICAgIC8vIEhhbmRsZSBzdHJpbmdzCiAgICAgaWYgKHN0cmVhbS5tYXRjaChz
dHJpbmdQcmVmaXhlcykpIHsKLSAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5GYWN0b3J5KHN0
cmVhbS5jdXJyZW50KCksICJzdHJpbmciKTsKKyAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5G
YWN0b3J5KHN0cmVhbS5jdXJyZW50KCksIGZhbHNlLCAic3RyaW5nIik7CiAgICAgICByZXR1cm4g
c3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgfQogICAgIC8vIEhhbmRsZSByZWdl
eCBsaXRlcmFscwogICAgIGlmIChzdHJlYW0ubWF0Y2gocmVnZXhQcmVmaXhlcykpIHsKICAgICAg
IGlmIChzdHJlYW0uY3VycmVudCgpICE9ICIvIiB8fCBzdHJlYW0ubWF0Y2goL14uKlwvLywgZmFs
c2UpKSB7IC8vIHByZXZlbnQgaGlnaGxpZ2h0IG9mIGRpdmlzaW9uCi0gICAgICAgIHN0YXRlLnRv
a2VuaXplID0gdG9rZW5GYWN0b3J5KHN0cmVhbS5jdXJyZW50KCksICJzdHJpbmctMiIpOworICAg
ICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuRmFjdG9yeShzdHJlYW0uY3VycmVudCgpLCB0cnVl
LCAic3RyaW5nLTIiKTsKICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3Rh
dGUpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTsKQEAgLTE2MSw4
ICsxNzEsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9u
KGNvbmYpIHsKICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgfQoKLSAgZnVuY3Rpb24gdG9rZW5G
YWN0b3J5KGRlbGltaXRlciwgb3V0Y2xhc3MpIHsKLSAgICB2YXIgc2luZ2xlbGluZSA9IGRlbGlt
aXRlci5sZW5ndGggPT0gMTsKKyAgZnVuY3Rpb24gdG9rZW5GYWN0b3J5KGRlbGltaXRlciwgc2lu
Z2xlbGluZSwgb3V0Y2xhc3MpIHsKICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkg
ewogICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgc3RyZWFtLmVhdFdoaWxl
KC9bXiciXC9cXF0vKTsKQEAgLTM1MiwzICszNjEsNSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYpIHsKIH0pOwoKIENvZGVNaXJyb3IuZGVmaW5l
TUlNRSgidGV4dC94LWNvZmZlZXNjcmlwdCIsICJjb2ZmZWVzY3JpcHQiKTsKKworfSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL2NvbW1lbnQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL2NvbW1lbnQuanMKaW5kZXggY2QyMTIzZS4uMWViOWEwNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29k
ZU1pcnJvci9jb21tZW50LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29tbWVudC5qcwpAQCAtMSw0ICsxLDExIEBACi0oZnVu
Y3Rpb24oKSB7CisoZnVuY3Rpb24obW9kKSB7CisgIGlmICh0eXBlb2YgZXhwb3J0cyA9PSAib2Jq
ZWN0IiAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiKSAvLyBDb21tb25KUworICAgIG1vZChy
ZXF1aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpKTsKKyAgZWxzZSBpZiAodHlwZW9mIGRlZmlu
ZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAorICAgIGRlZmluZShbIi4uLy4u
L2xpYi9jb2RlbWlycm9yIl0sIG1vZCk7CisgIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnYKKyAg
ICBtb2QoQ29kZU1pcnJvcik7Cit9KShmdW5jdGlvbihDb2RlTWlycm9yKSB7CiAgICJ1c2Ugc3Ry
aWN0IjsKCiAgIHZhciBub09wdGlvbnMgPSB7fTsKQEAgLTExLDggKzE4LDIxIEBACiAgIH0KCiAg
IENvZGVNaXJyb3IuY29tbWFuZHMudG9nZ2xlQ29tbWVudCA9IGZ1bmN0aW9uKGNtKSB7Ci0gICAg
dmFyIGZyb20gPSBjbS5nZXRDdXJzb3IoInN0YXJ0IiksIHRvID0gY20uZ2V0Q3Vyc29yKCJlbmQi
KTsKLSAgICBjbS51bmNvbW1lbnQoZnJvbSwgdG8pIHx8IGNtLmxpbmVDb21tZW50KGZyb20sIHRv
KTsKKyAgICB2YXIgbWluTGluZSA9IEluZmluaXR5LCByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9u
cygpLCBtb2RlID0gbnVsbDsKKyAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkg
Pj0gMDsgaS0tKSB7CisgICAgICB2YXIgZnJvbSA9IHJhbmdlc1tpXS5mcm9tKCksIHRvID0gcmFu
Z2VzW2ldLnRvKCk7CisgICAgICBpZiAoZnJvbS5saW5lID49IG1pbkxpbmUpIGNvbnRpbnVlOwor
ICAgICAgaWYgKHRvLmxpbmUgPj0gbWluTGluZSkgdG8gPSBQb3MobWluTGluZSwgMCk7CisgICAg
ICBtaW5MaW5lID0gZnJvbS5saW5lOworICAgICAgaWYgKG1vZGUgPT0gbnVsbCkgeworICAgICAg
ICBpZiAoY20udW5jb21tZW50KGZyb20sIHRvKSkgbW9kZSA9ICJ1biI7CisgICAgICAgIGVsc2Ug
eyBjbS5saW5lQ29tbWVudChmcm9tLCB0byk7IG1vZGUgPSAibGluZSI7IH0KKyAgICAgIH0gZWxz
ZSBpZiAobW9kZSA9PSAidW4iKSB7CisgICAgICAgIGNtLnVuY29tbWVudChmcm9tLCB0byk7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBjbS5saW5lQ29tbWVudChmcm9tLCB0byk7CisgICAgICB9
CisgICAgfQogICB9OwoKICAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oImxpbmVDb21tZW50
IiwgZnVuY3Rpb24oZnJvbSwgdG8sIG9wdGlvbnMpIHsKQEAgLTk2LDggKzExNiw5IEBACiAgICAg
ICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyArK2kpIHsKICAgICAgICAgdmFyIGxpbmUg
PSBzZWxmLmdldExpbmUoaSk7CiAgICAgICAgIHZhciBmb3VuZCA9IGxpbmUuaW5kZXhPZihsaW5l
U3RyaW5nKTsKKyAgICAgICAgaWYgKGZvdW5kID4gLTEgJiYgIS9jb21tZW50Ly50ZXN0KHNlbGYu
Z2V0VG9rZW5UeXBlQXQoUG9zKGksIGZvdW5kICsgMSkpKSkgZm91bmQgPSAtMTsKICAgICAgICAg
aWYgKGZvdW5kID09IC0xICYmIChpICE9IGVuZCB8fCBpID09IHN0YXJ0KSAmJiBub25XUy50ZXN0
KGxpbmUpKSBicmVhayBsaW5lQ29tbWVudDsKLSAgICAgICAgaWYgKGkgIT0gc3RhcnQgJiYgZm91
bmQgPiAtMSAmJiBub25XUy50ZXN0KGxpbmUuc2xpY2UoMCwgZm91bmQpKSkgYnJlYWsgbGluZUNv
bW1lbnQ7CisgICAgICAgIGlmIChmb3VuZCA+IC0xICYmIG5vbldTLnRlc3QobGluZS5zbGljZSgw
LCBmb3VuZCkpKSBicmVhayBsaW5lQ29tbWVudDsKICAgICAgICAgbGluZXMucHVzaChsaW5lKTsK
ICAgICAgIH0KICAgICAgIHNlbGYub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewpAQCAtMTI0LDcgKzE0
NSwxMCBAQAogICAgICAgZW5kTGluZSA9IHNlbGYuZ2V0TGluZSgtLWVuZCk7CiAgICAgICBjbG9z
ZSA9IGVuZExpbmUubGFzdEluZGV4T2YoZW5kU3RyaW5nKTsKICAgICB9Ci0gICAgaWYgKG9wZW4g
PT0gLTEgfHwgY2xvc2UgPT0gLTEpIHJldHVybiBmYWxzZTsKKyAgICBpZiAob3BlbiA9PSAtMSB8
fCBjbG9zZSA9PSAtMSB8fAorICAgICAgICAhL2NvbW1lbnQvLnRlc3Qoc2VsZi5nZXRUb2tlblR5
cGVBdChQb3Moc3RhcnQsIG9wZW4gKyAxKSkpIHx8CisgICAgICAgICEvY29tbWVudC8udGVzdChz
ZWxmLmdldFRva2VuVHlwZUF0KFBvcyhlbmQsIGNsb3NlICsgMSkpKSkKKyAgICAgIHJldHVybiBm
YWxzZTsKCiAgICAgc2VsZi5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICBzZWxmLnJlcGxh
Y2VSYW5nZSgiIiwgUG9zKGVuZCwgY2xvc2UgLSAocGFkICYmIGVuZExpbmUuc2xpY2UoY2xvc2Ug
LSBwYWQubGVuZ3RoLCBjbG9zZSkgPT0gcGFkID8gcGFkLmxlbmd0aCA6IDApKSwKQEAgLTE0Miw0
ICsxNjYsNCBAQAogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogICB9KTsKLX0pKCk7Cit9KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IvY3NzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9jc3MuanMKaW5kZXggNWRkZWY2OC4uMzQyNjczMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9jc3MuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9jc3MuanMKQEAgLTEsODkgKzEsOTEgQEAKLUNvZGVNaXJyb3IuZGVm
aW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKLSAgInVzZSBz
dHJpY3QiOworKGZ1bmN0aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9iamVj
dCIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKKyAgICBtb2QocmVx
dWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSk7CisgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUg
PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAgICBkZWZpbmUoWyIuLi8uLi9s
aWIvY29kZW1pcnJvciJdLCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52CisgICAg
bW9kKENvZGVNaXJyb3IpOworfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgeworInVzZSBzdHJpY3Qi
OwoKK0NvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJD
b25maWcpIHsKICAgaWYgKCFwYXJzZXJDb25maWcucHJvcGVydHlLZXl3b3JkcykgcGFyc2VyQ29u
ZmlnID0gQ29kZU1pcnJvci5yZXNvbHZlTW9kZSgidGV4dC9jc3MiKTsKCi0gIHZhciBpbmRlbnRV
bml0ID0gY29uZmlnLmluZGVudFVuaXQgfHwgY29uZmlnLnRhYlNpemUgfHwgMiwKLSAgICAgIGhv
b2tzID0gcGFyc2VyQ29uZmlnLmhvb2tzIHx8IHt9LAotICAgICAgYXRNZWRpYVR5cGVzID0gcGFy
c2VyQ29uZmlnLmF0TWVkaWFUeXBlcyB8fCB7fSwKLSAgICAgIGF0TWVkaWFGZWF0dXJlcyA9IHBh
cnNlckNvbmZpZy5hdE1lZGlhRmVhdHVyZXMgfHwge30sCisgIHZhciBpbmRlbnRVbml0ID0gY29u
ZmlnLmluZGVudFVuaXQsCisgICAgICB0b2tlbkhvb2tzID0gcGFyc2VyQ29uZmlnLnRva2VuSG9v
a3MsCisgICAgICBtZWRpYVR5cGVzID0gcGFyc2VyQ29uZmlnLm1lZGlhVHlwZXMgfHwge30sCisg
ICAgICBtZWRpYUZlYXR1cmVzID0gcGFyc2VyQ29uZmlnLm1lZGlhRmVhdHVyZXMgfHwge30sCiAg
ICAgICBwcm9wZXJ0eUtleXdvcmRzID0gcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5d29yZHMgfHwg
e30sCisgICAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBwYXJzZXJDb25maWcubm9u
U3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzIHx8IHt9LAogICAgICAgY29sb3JLZXl3b3JkcyA9IHBh
cnNlckNvbmZpZy5jb2xvcktleXdvcmRzIHx8IHt9LAogICAgICAgdmFsdWVLZXl3b3JkcyA9IHBh
cnNlckNvbmZpZy52YWx1ZUtleXdvcmRzIHx8IHt9LAotICAgICAgYWxsb3dOZXN0ZWQgPSAhIXBh
cnNlckNvbmZpZy5hbGxvd05lc3RlZCwKLSAgICAgIHR5cGUgPSBudWxsOworICAgICAgZm9udFBy
b3BlcnRpZXMgPSBwYXJzZXJDb25maWcuZm9udFByb3BlcnRpZXMgfHwge30sCisgICAgICBhbGxv
d05lc3RlZCA9IHBhcnNlckNvbmZpZy5hbGxvd05lc3RlZDsKCisgIHZhciB0eXBlLCBvdmVycmlk
ZTsKICAgZnVuY3Rpb24gcmV0KHN0eWxlLCB0cCkgeyB0eXBlID0gdHA7IHJldHVybiBzdHlsZTsg
fQoKKyAgLy8gVG9rZW5pemVycworCiAgIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRl
KSB7CiAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKLSAgICBpZiAoaG9va3NbY2hdKSB7Ci0g
ICAgICAvLyByZXN1bHRbMF0gaXMgc3R5bGUgYW5kIHJlc3VsdFsxXSBpcyB0eXBlCi0gICAgICB2
YXIgcmVzdWx0ID0gaG9va3NbY2hdKHN0cmVhbSwgc3RhdGUpOworICAgIGlmICh0b2tlbkhvb2tz
W2NoXSkgeworICAgICAgdmFyIHJlc3VsdCA9IHRva2VuSG9va3NbY2hdKHN0cmVhbSwgc3RhdGUp
OwogICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAg
IGlmIChjaCA9PSAiQCIpIHtzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7IHJldHVybiByZXQo
ImRlZiIsIHN0cmVhbS5jdXJyZW50KCkpO30KLSAgICBlbHNlIGlmIChjaCA9PSAiPSIpIHJldChu
dWxsLCAiY29tcGFyZSIpOwotICAgIGVsc2UgaWYgKChjaCA9PSAifiIgfHwgY2ggPT0gInwiKSAm
JiBzdHJlYW0uZWF0KCI9IikpIHJldHVybiByZXQobnVsbCwgImNvbXBhcmUiKTsKLSAgICBlbHNl
IGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikgeworICAgIGlmIChjaCA9PSAiQCIpIHsKKyAg
ICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKKyAgICAgIHJldHVybiByZXQoImRlZiIs
IHN0cmVhbS5jdXJyZW50KCkpOworICAgIH0gZWxzZSBpZiAoY2ggPT0gIj0iIHx8IChjaCA9PSAi
fiIgfHwgY2ggPT0gInwiKSAmJiBzdHJlYW0uZWF0KCI9IikpIHsKKyAgICAgIHJldHVybiByZXQo
bnVsbCwgImNvbXBhcmUiKTsKKyAgICB9IGVsc2UgaWYgKGNoID09ICJcIiIgfHwgY2ggPT0gIici
KSB7CiAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTsKICAgICAgIHJldHVy
biBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY2gg
PT0gIiMiKSB7CisgICAgfSBlbHNlIGlmIChjaCA9PSAiIyIpIHsKICAgICAgIHN0cmVhbS5lYXRX
aGlsZSgvW1x3XFxcLV0vKTsKICAgICAgIHJldHVybiByZXQoImF0b20iLCAiaGFzaCIpOwotICAg
IH0KLSAgICBlbHNlIGlmIChjaCA9PSAiISIpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICIhIikg
ewogICAgICAgc3RyZWFtLm1hdGNoKC9eXHMqXHcqLyk7CiAgICAgICByZXR1cm4gcmV0KCJrZXl3
b3JkIiwgImltcG9ydGFudCIpOwotICAgIH0KLSAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpIHx8
IGNoID09ICIuIiAmJiBzdHJlYW0uZWF0KC9cZC8pKSB7CisgICAgfSBlbHNlIGlmICgvXGQvLnRl
c3QoY2gpIHx8IGNoID09ICIuIiAmJiBzdHJlYW0uZWF0KC9cZC8pKSB7CiAgICAgICBzdHJlYW0u
ZWF0V2hpbGUoL1tcdy4lXS8pOwogICAgICAgcmV0dXJuIHJldCgibnVtYmVyIiwgInVuaXQiKTsK
LSAgICB9Ci0gICAgZWxzZSBpZiAoY2ggPT09ICItIikgewotICAgICAgaWYgKC9cZC8udGVzdChz
dHJlYW0ucGVlaygpKSkgeworICAgIH0gZWxzZSBpZiAoY2ggPT09ICItIikgeworICAgICAgaWYg
KC9bXGQuXS8udGVzdChzdHJlYW0ucGVlaygpKSkgewogICAgICAgICBzdHJlYW0uZWF0V2hpbGUo
L1tcdy4lXS8pOwogICAgICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOwogICAgICAg
fSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15bXi1dKy0vKSkgewogICAgICAgICByZXR1cm4gcmV0
KCJtZXRhIiwgIm1ldGEiKTsKICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoL1ssKz4qXC9d
Ly50ZXN0KGNoKSkgeworICAgIH0gZWxzZSBpZiAoL1ssKz4qXC9dLy50ZXN0KGNoKSkgewogICAg
ICAgcmV0dXJuIHJldChudWxsLCAic2VsZWN0LW9wIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNo
ID09ICIuIiAmJiBzdHJlYW0ubWF0Y2goL14tP1tfYS16XVtfYS16MC05LV0qL2kpKSB7CisgICAg
fSBlbHNlIGlmIChjaCA9PSAiLiIgJiYgc3RyZWFtLm1hdGNoKC9eLT9bX2Etel1bX2EtejAtOS1d
Ki9pKSkgewogICAgICAgcmV0dXJuIHJldCgicXVhbGlmaWVyIiwgInF1YWxpZmllciIpOwotICAg
IH0KLSAgICBlbHNlIGlmIChjaCA9PSAiOiIpIHsKLSAgICAgIHJldHVybiByZXQoIm9wZXJhdG9y
IiwgY2gpOwotICAgIH0KLSAgICBlbHNlIGlmICgvWzt7fVxbXF1cKFwpXS8udGVzdChjaCkpIHsK
KyAgICB9IGVsc2UgaWYgKC9bOjt7fVxbXF1cKFwpXS8udGVzdChjaCkpIHsKICAgICAgIHJldHVy
biByZXQobnVsbCwgY2gpOwotICAgIH0KLSAgICBlbHNlIGlmIChjaCA9PSAidSIgJiYgc3RyZWFt
Lm1hdGNoKCJybCgiKSkgeworICAgIH0gZWxzZSBpZiAoY2ggPT0gInUiICYmIHN0cmVhbS5tYXRj
aCgicmwoIikpIHsKICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICBzdGF0ZS50b2tlbml6
ZSA9IHRva2VuUGFyZW50aGVzaXplZDsKLSAgICAgIHJldHVybiByZXQoInByb3BlcnR5IiwgInZh
cmlhYmxlIik7Ci0gICAgfQotICAgIGVsc2UgeworICAgICAgcmV0dXJuIHJldCgicHJvcGVydHki
LCAid29yZCIpOworICAgIH0gZWxzZSBpZiAoL1tcd1xcXC1dLy50ZXN0KGNoKSkgewogICAgICAg
c3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwotICAgICAgcmV0dXJuIHJldCgicHJvcGVydHki
LCAidmFyaWFibGUiKTsKKyAgICAgIHJldHVybiByZXQoInByb3BlcnR5IiwgIndvcmQiKTsKKyAg
ICB9IGVsc2UgeworICAgICAgcmV0dXJuIHJldChudWxsLCBudWxsKTsKICAgICB9CiAgIH0KCi0g
IGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlLCBub25JbmNsdXNpdmUpIHsKKyAgZnVuY3Rpb24g
dG9rZW5TdHJpbmcocXVvdGUpIHsKICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkg
ewogICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgICB3aGlsZSAoKGNoID0gc3Ry
ZWFtLm5leHQoKSkgIT0gbnVsbCkgewotICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgIWVzY2Fw
ZWQpCisgICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgeworICAgICAgICAgIGlm
IChxdW90ZSA9PSAiKSIpIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgICB9
Ci0gICAgICBpZiAoIWVzY2FwZWQpIHsKLSAgICAgICAgaWYgKG5vbkluY2x1c2l2ZSkgc3RyZWFt
LmJhY2tVcCgxKTsKLSAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7Ci0gICAgICB9
CisgICAgICBpZiAoY2ggPT0gcXVvdGUgfHwgIWVzY2FwZWQgJiYgcXVvdGUgIT0gIikiKSBzdGF0
ZS50b2tlbml6ZSA9IG51bGw7CiAgICAgICByZXR1cm4gcmV0KCJzdHJpbmciLCAic3RyaW5nIik7
CiAgICAgfTsKICAgfQpAQCAtOTEsMjE4ICs5MywyNTEgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2Rl
KCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICBmdW5jdGlvbiB0b2tl
blBhcmVudGhlc2l6ZWQoc3RyZWFtLCBzdGF0ZSkgewogICAgIHN0cmVhbS5uZXh0KCk7IC8vIE11
c3QgYmUgJygnCiAgICAgaWYgKCFzdHJlYW0ubWF0Y2goL1xzKltcIlwnXS8sIGZhbHNlKSkKLSAg
ICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoIikiLCB0cnVlKTsKKyAgICAgIHN0YXRl
LnRva2VuaXplID0gdG9rZW5TdHJpbmcoIikiKTsKICAgICBlbHNlCi0gICAgICBzdGF0ZS50b2tl
bml6ZSA9IHRva2VuQmFzZTsKKyAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDsKICAgICByZXR1
cm4gcmV0KG51bGwsICIoIik7CiAgIH0KCisgIC8vIENvbnRleHQgbWFuYWdlbWVudAorCisgIGZ1
bmN0aW9uIENvbnRleHQodHlwZSwgaW5kZW50LCBwcmV2KSB7CisgICAgdGhpcy50eXBlID0gdHlw
ZTsKKyAgICB0aGlzLmluZGVudCA9IGluZGVudDsKKyAgICB0aGlzLnByZXYgPSBwcmV2OworICB9
CisKKyAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgdHlwZSkgeworICAgIHN0
YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dCh0eXBlLCBzdHJlYW0uaW5kZW50YXRpb24oKSArIGlu
ZGVudFVuaXQsIHN0YXRlLmNvbnRleHQpOworICAgIHJldHVybiB0eXBlOworICB9CisKKyAgZnVu
Y3Rpb24gcG9wQ29udGV4dChzdGF0ZSkgeworICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250
ZXh0LnByZXY7CisgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQudHlwZTsKKyAgfQorCisgIGZ1bmN0
aW9uIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICAgIHJldHVybiBzdGF0ZXNbc3RhdGUu
Y29udGV4dC50eXBlXSh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKKyAgfQorICBmdW5jdGlvbiBwb3BB
bmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUsIG4pIHsKKyAgICBmb3IgKHZhciBpID0gbiB8fCAx
OyBpID4gMDsgaS0tKQorICAgICAgc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsK
KyAgICByZXR1cm4gcGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKKyAgfQorCisgIC8vIFBhcnNl
cgorCisgIGZ1bmN0aW9uIHdvcmRBc1ZhbHVlKHN0cmVhbSkgeworICAgIHZhciB3b3JkID0gc3Ry
ZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpOworICAgIGlmICh2YWx1ZUtleXdvcmRzLmhhc093
blByb3BlcnR5KHdvcmQpKQorICAgICAgb3ZlcnJpZGUgPSAiYXRvbSI7CisgICAgZWxzZSBpZiAo
Y29sb3JLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkKKyAgICAgIG92ZXJyaWRlID0gImtl
eXdvcmQiOworICAgIGVsc2UKKyAgICAgIG92ZXJyaWRlID0gInZhcmlhYmxlIjsKKyAgfQorCisg
IHZhciBzdGF0ZXMgPSB7fTsKKworICBzdGF0ZXMudG9wID0gZnVuY3Rpb24odHlwZSwgc3RyZWFt
LCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09ICJ7IikgeworICAgICAgcmV0dXJuIHB1c2hDb250
ZXh0KHN0YXRlLCBzdHJlYW0sICJibG9jayIpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAifSIg
JiYgc3RhdGUuY29udGV4dC5wcmV2KSB7CisgICAgICByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7
CisgICAgfSBlbHNlIGlmICh0eXBlID09ICJAbWVkaWEiKSB7CisgICAgICByZXR1cm4gcHVzaENv
bnRleHQoc3RhdGUsIHN0cmVhbSwgIm1lZGlhIik7CisgICAgfSBlbHNlIGlmICh0eXBlID09ICJA
Zm9udC1mYWNlIikgeworICAgICAgcmV0dXJuICJmb250X2ZhY2VfYmVmb3JlIjsKKyAgICB9IGVs
c2UgaWYgKC9eQCgtKG1venxtc3xvfHdlYmtpdCktKT9rZXlmcmFtZXMkLy50ZXN0KHR5cGUpKSB7
CisgICAgICByZXR1cm4gImtleWZyYW1lcyI7CisgICAgfSBlbHNlIGlmICh0eXBlICYmIHR5cGUu
Y2hhckF0KDApID09ICJAIikgeworICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJl
YW0sICJhdCIpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiaGFzaCIpIHsKKyAgICAgIG92ZXJy
aWRlID0gImJ1aWx0aW4iOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAid29yZCIpIHsKKyAgICAg
IG92ZXJyaWRlID0gInRhZyI7CisgICAgfSBlbHNlIGlmICh0eXBlID09ICJ2YXJpYWJsZS1kZWZp
bml0aW9uIikgeworICAgICAgcmV0dXJuICJtYXliZXByb3AiOworICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSAiaW50ZXJwb2xhdGlvbiIpIHsKKyAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwg
c3RyZWFtLCAiaW50ZXJwb2xhdGlvbiIpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiOiIpIHsK
KyAgICAgIHJldHVybiAicHNldWRvIjsKKyAgICB9IGVsc2UgaWYgKGFsbG93TmVzdGVkICYmIHR5
cGUgPT0gIigiKSB7CisgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInBh
cmFtcyIpOworICAgIH0KKyAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlOworICB9OworCisg
IHN0YXRlcy5ibG9jayA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAo
dHlwZSA9PSAid29yZCIpIHsKKyAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xv
d2VyQ2FzZSgpOworICAgICAgaWYgKHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29y
ZCkpIHsKKyAgICAgICAgb3ZlcnJpZGUgPSAicHJvcGVydHkiOworICAgICAgICByZXR1cm4gIm1h
eWJlcHJvcCI7CisgICAgICB9IGVsc2UgaWYgKG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkcy5o
YXNPd25Qcm9wZXJ0eSh3b3JkKSkgeworICAgICAgICBvdmVycmlkZSA9ICJzdHJpbmctMiI7Cisg
ICAgICAgIHJldHVybiAibWF5YmVwcm9wIjsKKyAgICAgIH0gZWxzZSBpZiAoYWxsb3dOZXN0ZWQp
IHsKKyAgICAgICAgb3ZlcnJpZGUgPSBzdHJlYW0ubWF0Y2goL15ccyo6LywgZmFsc2UpID8gInBy
b3BlcnR5IiA6ICJ0YWciOworICAgICAgICByZXR1cm4gImJsb2NrIjsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIG92ZXJyaWRlICs9ICIgZXJyb3IiOworICAgICAgICByZXR1cm4gIm1heWJlcHJv
cCI7CisgICAgICB9CisgICAgfSBlbHNlIGlmICh0eXBlID09ICJtZXRhIikgeworICAgICAgcmV0
dXJuICJibG9jayI7CisgICAgfSBlbHNlIGlmICghYWxsb3dOZXN0ZWQgJiYgKHR5cGUgPT0gImhh
c2giIHx8IHR5cGUgPT0gInF1YWxpZmllciIpKSB7CisgICAgICBvdmVycmlkZSA9ICJlcnJvciI7
CisgICAgICByZXR1cm4gImJsb2NrIjsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHN0YXRl
cy50b3AodHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgfQorICB9OworCisgIHN0YXRlcy5tYXli
ZXByb3AgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0g
IjoiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInByb3AiKTsKKyAgICByZXR1
cm4gcGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKKyAgfTsKKworICBzdGF0ZXMucHJvcCA9IGZ1
bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVy
biBwb3BDb250ZXh0KHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAieyIgJiYgYWxsb3dOZXN0ZWQp
IHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAicHJvcEJsb2NrIik7CisgICAgaWYg
KHR5cGUgPT0gIn0iIHx8IHR5cGUgPT0gInsiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJl
YW0sIHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0
ZSwgc3RyZWFtLCAicGFyZW5zIik7CisKKyAgICBpZiAodHlwZSA9PSAiaGFzaCIgJiYgIS9eIyhb
MC05YS1mQS1mXXszfXxbMC05YS1mQS1mXXs2fSkkLy50ZXN0KHN0cmVhbS5jdXJyZW50KCkpKSB7
CisgICAgICBvdmVycmlkZSArPSAiIGVycm9yIjsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIndv
cmQiKSB7CisgICAgICB3b3JkQXNWYWx1ZShzdHJlYW0pOworICAgIH0gZWxzZSBpZiAodHlwZSA9
PSAiaW50ZXJwb2xhdGlvbiIpIHsKKyAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3Ry
ZWFtLCAiaW50ZXJwb2xhdGlvbiIpOworICAgIH0KKyAgICByZXR1cm4gInByb3AiOworICB9Owor
CisgIHN0YXRlcy5wcm9wQmxvY2sgPSBmdW5jdGlvbih0eXBlLCBfc3RyZWFtLCBzdGF0ZSkgewor
ICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpOworICAgIGlmICh0
eXBlID09ICJ3b3JkIikgeyBvdmVycmlkZSA9ICJwcm9wZXJ0eSI7IHJldHVybiAibWF5YmVwcm9w
IjsgfQorICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7CisgIH07CisKKyAgc3RhdGVzLnBh
cmVucyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAi
eyIgfHwgdHlwZSA9PSAifSIpIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUp
OworICAgIGlmICh0eXBlID09ICIpIikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpOworICAgIHJl
dHVybiAicGFyZW5zIjsKKyAgfTsKKworICBzdGF0ZXMucHNldWRvID0gZnVuY3Rpb24odHlwZSwg
c3RyZWFtLCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09ICJ3b3JkIikgeworICAgICAgb3ZlcnJp
ZGUgPSAidmFyaWFibGUtMyI7CisgICAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlOworICAg
IH0KKyAgICByZXR1cm4gcGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKKyAgfTsKKworICBzdGF0
ZXMubWVkaWEgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUg
PT0gIigiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgIm1lZGlhX3BhcmVucyIp
OworICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBz
dGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSkgJiYg
cHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgYWxsb3dOZXN0ZWQgPyAiYmxvY2siIDogInRvcCIp
OworCisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CisgICAgICB2YXIgd29yZCA9IHN0cmVhbS5j
dXJyZW50KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgIGlmICh3b3JkID09ICJvbmx5IiB8fCB3b3Jk
ID09ICJub3QiIHx8IHdvcmQgPT0gImFuZCIpCisgICAgICAgIG92ZXJyaWRlID0gImtleXdvcmQi
OworICAgICAgZWxzZSBpZiAobWVkaWFUeXBlcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkKKyAgICAg
ICAgb3ZlcnJpZGUgPSAiYXR0cmlidXRlIjsKKyAgICAgIGVsc2UgaWYgKG1lZGlhRmVhdHVyZXMu
aGFzT3duUHJvcGVydHkod29yZCkpCisgICAgICAgIG92ZXJyaWRlID0gInByb3BlcnR5IjsKKyAg
ICAgIGVsc2UKKyAgICAgICAgb3ZlcnJpZGUgPSAiZXJyb3IiOworICAgIH0KKyAgICByZXR1cm4g
c3RhdGUuY29udGV4dC50eXBlOworICB9OworCisgIHN0YXRlcy5tZWRpYV9wYXJlbnMgPSBmdW5j
dGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIikiKSByZXR1cm4g
cG9wQ29udGV4dChzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIn0iKSBy
ZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCAyKTsKKyAgICByZXR1cm4gc3Rh
dGVzLm1lZGlhKHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICB9OworCisgIHN0YXRlcy5mb250X2Zh
Y2VfYmVmb3JlID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICAgIGlmICh0eXBl
ID09ICJ7IikKKyAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAiZm9udF9m
YWNlIik7CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgIH07CisKKyAg
c3RhdGVzLmZvbnRfZmFjZSA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBp
ZiAodHlwZSA9PSAifSIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTsKKyAgICBpZiAodHlwZSA9
PSAid29yZCIpIHsKKyAgICAgIGlmICghZm9udFByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoc3Ry
ZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpKSkKKyAgICAgICAgb3ZlcnJpZGUgPSAiZXJyb3Ii
OworICAgICAgZWxzZQorICAgICAgICBvdmVycmlkZSA9ICJwcm9wZXJ0eSI7CisgICAgICByZXR1
cm4gIm1heWJlcHJvcCI7CisgICAgfQorICAgIHJldHVybiAiZm9udF9mYWNlIjsKKyAgfTsKKwor
ICBzdGF0ZXMua2V5ZnJhbWVzID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICAg
IGlmICh0eXBlID09ICJ3b3JkIikgeyBvdmVycmlkZSA9ICJ2YXJpYWJsZSI7IHJldHVybiAia2V5
ZnJhbWVzIjsgfQorICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRl
LCBzdHJlYW0sICJ0b3AiKTsKKyAgICByZXR1cm4gcGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsK
KyAgfTsKKworICBzdGF0ZXMuYXQgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Cisg
ICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7CisgICAgaWYgKHR5
cGUgPT0gInsiIHx8IHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0s
IHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIG92ZXJyaWRlID0gInRhZyI7CisgICAg
ZWxzZSBpZiAodHlwZSA9PSAiaGFzaCIpIG92ZXJyaWRlID0gImJ1aWx0aW4iOworICAgIHJldHVy
biAiYXQiOworICB9OworCisgIHN0YXRlcy5pbnRlcnBvbGF0aW9uID0gZnVuY3Rpb24odHlwZSwg
c3RyZWFtLCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIHBvcENvbnRleHQo
c3RhdGUpOworICAgIGlmICh0eXBlID09ICJ7IiB8fCB0eXBlID09ICI7IikgcmV0dXJuIHBvcEFu
ZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgaWYgKHR5cGUgIT0gInZhcmlhYmxlIikg
b3ZlcnJpZGUgPSAiZXJyb3IiOworICAgIHJldHVybiAiaW50ZXJwb2xhdGlvbiI7CisgIH07CisK
KyAgc3RhdGVzLnBhcmFtcyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBp
ZiAodHlwZSA9PSAiKSIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTsKKyAgICBpZiAodHlwZSA9
PSAieyIgfHwgdHlwZSA9PSAifSIpIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3Rh
dGUpOworICAgIGlmICh0eXBlID09ICJ3b3JkIikgd29yZEFzVmFsdWUoc3RyZWFtKTsKKyAgICBy
ZXR1cm4gInBhcmFtcyI7CisgIH07CisKICAgcmV0dXJuIHsKICAgICBzdGFydFN0YXRlOiBmdW5j
dGlvbihiYXNlKSB7Ci0gICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsCi0gICAgICAg
ICAgICAgIGJhc2VJbmRlbnQ6IGJhc2UgfHwgMCwKLSAgICAgICAgICAgICAgc3RhY2s6IFtdLAot
ICAgICAgICAgICAgICBsYXN0VG9rZW46IG51bGx9OworICAgICAgcmV0dXJuIHt0b2tlbml6ZTog
bnVsbCwKKyAgICAgICAgICAgICAgc3RhdGU6ICJ0b3AiLAorICAgICAgICAgICAgICBjb250ZXh0
OiBuZXcgQ29udGV4dCgidG9wIiwgYmFzZSB8fCAwLCBudWxsKX07CiAgICAgfSwKCiAgICAgdG9r
ZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKLQotICAgICAgLy8gVXNlIHRoZXNlIHRlcm1z
IHdoZW4gYXBwbGljYWJsZSAoc2VlIGh0dHA6Ly93d3cueGFudGhpci5jb20vYmxvZy9iNEU1MCkK
LSAgICAgIC8vCi0gICAgICAvLyBydWxlKiogb3IgKipydWxlc2V0OgotICAgICAgLy8gQSBzZWxl
Y3RvciArIGJyYWNlcyBjb21ibywgb3IgYW4gYXQtcnVsZS4KLSAgICAgIC8vCi0gICAgICAvLyBk
ZWNsYXJhdGlvbiBibG9jazoKLSAgICAgIC8vIEEgc2VxdWVuY2Ugb2YgZGVjbGFyYXRpb25zLgot
ICAgICAgLy8KLSAgICAgIC8vIGRlY2xhcmF0aW9uOgotICAgICAgLy8gQSBwcm9wZXJ0eSArIGNv
bG9uICsgdmFsdWUgY29tYm8uCi0gICAgICAvLwotICAgICAgLy8gcHJvcGVydHkgdmFsdWU6Ci0g
ICAgICAvLyBUaGUgZW50aXJlIHZhbHVlIG9mIGEgcHJvcGVydHkuCi0gICAgICAvLwotICAgICAg
Ly8gY29tcG9uZW50IHZhbHVlOgotICAgICAgLy8gQSBzaW5nbGUgcGllY2Ugb2YgYSBwcm9wZXJ0
eSB2YWx1ZS4gTGlrZSB0aGUgNXB4IGluCi0gICAgICAvLyB0ZXh0LXNoYWRvdzogMCAwIDVweCBi
bHVlOy4gQ2FuIGFsc28gcmVmZXIgdG8gdGhpbmdzIHRoYXQgYXJlCi0gICAgICAvLyBtdWx0aXBs
ZSB0ZXJtcywgbGlrZSB0aGUgMS00IHRlcm1zIHRoYXQgbWFrZSB1cCB0aGUgYmFja2dyb3VuZC1z
aXplCi0gICAgICAvLyBwb3J0aW9uIG9mIHRoZSBiYWNrZ3JvdW5kIHNob3J0aGFuZC4KLSAgICAg
IC8vCi0gICAgICAvLyB0ZXJtOgotICAgICAgLy8gVGhlIGJhc2ljIHVuaXQgb2YgYXV0aG9yLWZh
Y2luZyBDU1MsIGxpa2UgYSBzaW5nbGUgbnVtYmVyICg1KSwKLSAgICAgIC8vIGRpbWVuc2lvbiAo
NXB4KSwgc3RyaW5nICgiZm9vIiksIG9yIGZ1bmN0aW9uLiBPZmZpY2lhbGx5IGRlZmluZWQKLSAg
ICAgIC8vICBieSB0aGUgQ1NTIDIuMSBncmFtbWFyIChsb29rIGZvciB0aGUgJ3Rlcm0nIHByb2R1
Y3Rpb24pCi0gICAgICAvLwotICAgICAgLy8KLSAgICAgIC8vIHNpbXBsZSBzZWxlY3RvcjoKLSAg
ICAgIC8vIEEgc2luZ2xlIGF0b21pYyBzZWxlY3RvciwgbGlrZSBhIHR5cGUgc2VsZWN0b3IsIGFu
IGF0dHIgc2VsZWN0b3IsIGEKLSAgICAgIC8vIGNsYXNzIHNlbGVjdG9yLCBldGMuCi0gICAgICAv
LwotICAgICAgLy8gY29tcG91bmQgc2VsZWN0b3I6Ci0gICAgICAvLyBPbmUgb3IgbW9yZSBzaW1w
bGUgc2VsZWN0b3JzIHdpdGhvdXQgYSBjb21iaW5hdG9yLiBkaXYuZXhhbXBsZSBpcwotICAgICAg
Ly8gY29tcG91bmQsIGRpdiA+IC5leGFtcGxlIGlzIG5vdC4KLSAgICAgIC8vCi0gICAgICAvLyBj
b21wbGV4IHNlbGVjdG9yOgotICAgICAgLy8gT25lIG9yIG1vcmUgY29tcG91bmQgc2VsZWN0b3Jz
IGNoYWluZWQgd2l0aCBjb21iaW5hdG9ycy4KLSAgICAgIC8vCi0gICAgICAvLyBjb21iaW5hdG9y
OgotICAgICAgLy8gVGhlIHBhcnRzIG9mIHNlbGVjdG9ycyB0aGF0IGV4cHJlc3MgcmVsYXRpb25z
aGlwcy4gVGhlcmUgYXJlIGZvdXIKLSAgICAgIC8vIGN1cnJlbnRseSAtIHRoZSBzcGFjZSAoZGVz
Y2VuZGFudCBjb21iaW5hdG9yKSwgdGhlIGdyZWF0ZXItdGhhbgotICAgICAgLy8gYnJhY2tldCAo
Y2hpbGQgY29tYmluYXRvciksIHRoZSBwbHVzIHNpZ24gKG5leHQgc2libGluZyBjb21iaW5hdG9y
KSwKLSAgICAgIC8vIGFuZCB0aGUgdGlsZGEgKGZvbGxvd2luZyBzaWJsaW5nIGNvbWJpbmF0b3Ip
LgotICAgICAgLy8KLSAgICAgIC8vIHNlcXVlbmNlIG9mIHNlbGVjdG9yczoKLSAgICAgIC8vIE9u
ZSBvciBtb3JlIG9mIHRoZSBuYW1lZCB0eXBlIG9mIHNlbGVjdG9yIGNoYWluZWQgd2l0aCBjb21t
YXMuCi0KLSAgICAgIHN0YXRlLnRva2VuaXplID0gc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNl
OwotICAgICAgaWYgKHN0YXRlLnRva2VuaXplID09IHRva2VuQmFzZSAmJiBzdHJlYW0uZWF0U3Bh
Y2UoKSkgcmV0dXJuIG51bGw7Ci0gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJl
YW0sIHN0YXRlKTsKLSAgICAgIGlmIChzdHlsZSAmJiB0eXBlb2Ygc3R5bGUgIT0gInN0cmluZyIp
IHN0eWxlID0gcmV0KHN0eWxlWzBdLCBzdHlsZVsxXSk7Ci0KLSAgICAgIC8vIENoYW5naW5nIHN0
eWxlIHJldHVybmVkIGJhc2VkIG9uIGNvbnRleHQKLSAgICAgIHZhciBjb250ZXh0ID0gc3RhdGUu
c3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdOwotICAgICAgaWYgKHN0eWxlID09ICJ2YXJpYWJs
ZSIpIHsKLSAgICAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlLWRlZmluaXRpb24iKSBzdGF0ZS5z
dGFjay5wdXNoKCJwcm9wZXJ0eVZhbHVlIik7Ci0gICAgICAgIHJldHVybiBzdGF0ZS5sYXN0VG9r
ZW4gPSAidmFyaWFibGUtMiI7Ci0gICAgICB9IGVsc2UgaWYgKHN0eWxlID09ICJwcm9wZXJ0eSIp
IHsKLSAgICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7Ci0g
ICAgICAgIGlmIChjb250ZXh0ID09ICJwcm9wZXJ0eVZhbHVlIikgewotICAgICAgICAgIGlmICh2
YWx1ZUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKSB7Ci0gICAgICAgICAgICBzdHlsZSA9
ICJzdHJpbmctMiI7Ci0gICAgICAgICAgfSBlbHNlIGlmIChjb2xvcktleXdvcmRzLmhhc093blBy
b3BlcnR5KHdvcmQpKSB7Ci0gICAgICAgICAgICBzdHlsZSA9ICJrZXl3b3JkIjsKLSAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgc3R5bGUgPSAidmFyaWFibGUtMiI7Ci0gICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gInJ1bGUiKSB7Ci0gICAgICAgICAgaWYg
KCFwcm9wZXJ0eUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKSB7Ci0gICAgICAgICAgICBz
dHlsZSArPSAiIGVycm9yIjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4
dCA9PSAiYmxvY2siKSB7Ci0gICAgICAgICAgLy8gaWYgYSB2YWx1ZSBpcyBwcmVzZW50IGluIGJv
dGggcHJvcGVydHksIHZhbHVlLCBvciBjb2xvciwgdGhlIG9yZGVyCi0gICAgICAgICAgLy8gb2Yg
cHJlZmVyZW5jZSBpcyBwcm9wZXJ0eSAtPiBjb2xvciAtPiB2YWx1ZQotICAgICAgICAgIGlmIChw
cm9wZXJ0eUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKSB7Ci0gICAgICAgICAgICBzdHls
ZSA9ICJwcm9wZXJ0eSI7Ci0gICAgICAgICAgfSBlbHNlIGlmIChjb2xvcktleXdvcmRzLmhhc093
blByb3BlcnR5KHdvcmQpKSB7Ci0gICAgICAgICAgICBzdHlsZSA9ICJrZXl3b3JkIjsKLSAgICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAg
ICAgICAgICAgIHN0eWxlID0gInN0cmluZy0yIjsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgc3R5bGUgPSAidGFnIjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIWNv
bnRleHQgfHwgY29udGV4dCA9PSAiQG1lZGlheyIpIHsKLSAgICAgICAgICBzdHlsZSA9ICJ0YWci
OwotICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYSIpIHsKLSAgICAgICAgICBp
ZiAoYXRNZWRpYVR5cGVzW3N0cmVhbS5jdXJyZW50KCldKSB7Ci0gICAgICAgICAgICBzdHlsZSA9
ICJhdHRyaWJ1dGUiOyAvLyBLbm93biBhdHRyaWJ1dGUKLSAgICAgICAgICB9IGVsc2UgaWYgKC9e
KG9ubHl8bm90KSQvLnRlc3Qod29yZCkpIHsKLSAgICAgICAgICAgIHN0eWxlID0gImtleXdvcmQi
OwotICAgICAgICAgIH0gZWxzZSBpZiAod29yZCA9PSAiYW5kIikgewotICAgICAgICAgICAgc3R5
bGUgPSAiZXJyb3IiOyAvLyAiYW5kIiBpcyBvbmx5IGFsbG93ZWQgaW4gQG1lZGlhVHlwZQotICAg
ICAgICAgIH0gZWxzZSBpZiAoYXRNZWRpYUZlYXR1cmVzLmhhc093blByb3BlcnR5KHdvcmQpKSB7
Ci0gICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7IC8vIEtub3duIHByb3BlcnR5LCBzaG91bGQg
YmUgaW4gQG1lZGlhVHlwZSgKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVW5r
bm93biwgZXhwZWN0aW5nIGtleXdvcmQgb3IgYXR0cmlidXRlLCBhc3N1bWluZyBhdHRyaWJ1dGUK
LSAgICAgICAgICAgIHN0eWxlID0gImF0dHJpYnV0ZSBlcnJvciI7Ci0gICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUiKSB7Ci0gICAgICAgICAgaWYg
KGF0TWVkaWFUeXBlcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgewotICAgICAgICAgICAgc3R5bGUg
PSAiYXR0cmlidXRlIjsKLSAgICAgICAgICB9IGVsc2UgaWYgKHdvcmQgPT0gImFuZCIpIHsKLSAg
ICAgICAgICAgIHN0eWxlID0gIm9wZXJhdG9yIjsKLSAgICAgICAgICB9IGVsc2UgaWYgKC9eKG9u
bHl8bm90KSQvLnRlc3Qod29yZCkpIHsKLSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8g
T25seSBhbGxvd2VkIGluIEBtZWRpYQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBVbmtub3duIGF0dHJpYnV0ZSBvciBwcm9wZXJ0eSwgYnV0IGV4cGVjdGluZyBwcm9wZXJ0eSAo
cHJlY2VkZWQKLSAgICAgICAgICAgIC8vIGJ5ICJhbmQiKS4gU2hvdWxkIGJlIGluIHBhcmVudGhl
c2VzCi0gICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7Ci0gICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUoIikgewotICAgICAgICAgIGlmIChwcm9w
ZXJ0eUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKSB7Ci0gICAgICAgICAgICAvLyBkbyBu
b3RoaW5nLCByZW1haW5zICJwcm9wZXJ0eSIKLSAgICAgICAgICB9IGVsc2UgaWYgKGF0TWVkaWFU
eXBlcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgewotICAgICAgICAgICAgc3R5bGUgPSAiZXJyb3Ii
OyAvLyBLbm93biBwcm9wZXJ0eSwgc2hvdWxkIGJlIGluIHBhcmVudGhlc2VzCi0gICAgICAgICAg
fSBlbHNlIGlmICh3b3JkID09ICJhbmQiKSB7Ci0gICAgICAgICAgICBzdHlsZSA9ICJvcGVyYXRv
ciI7Ci0gICAgICAgICAgfSBlbHNlIGlmICgvXihvbmx5fG5vdCkkLy50ZXN0KHdvcmQpKSB7Ci0g
ICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7IC8vIE9ubHkgYWxsb3dlZCBpbiBAbWVkaWEKLSAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3R5bGUgKz0gIiBlcnJvciI7Ci0gICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBpbXBvcnQiKSB7Ci0gICAgICAg
ICAgc3R5bGUgPSAidGFnIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzdHlsZSA9ICJl
cnJvciI7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoc3R5bGUgPT0gImF0b20iKSB7Ci0g
ICAgICAgIGlmKCFjb250ZXh0IHx8IGNvbnRleHQgPT0gIkBtZWRpYXsiIHx8IGNvbnRleHQgPT0g
ImJsb2NrIikgewotICAgICAgICAgIHN0eWxlID0gImJ1aWx0aW4iOwotICAgICAgICB9IGVsc2Ug
aWYgKGNvbnRleHQgPT0gInByb3BlcnR5VmFsdWUiKSB7Ci0gICAgICAgICAgaWYgKCEvXiMoWzAt
OWEtZkEtZl17M318WzAtOWEtZkEtZl17Nn0pJC8udGVzdChzdHJlYW0uY3VycmVudCgpKSkgewot
ICAgICAgICAgICAgc3R5bGUgKz0gIiBlcnJvciI7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIHN0eWxlID0gImVycm9yIjsKLSAgICAgICAgfQotICAgICAgfSBlbHNl
IGlmIChjb250ZXh0ID09ICJAbWVkaWEiICYmIHR5cGUgPT0gInsiKSB7Ci0gICAgICAgIHN0eWxl
ID0gImVycm9yIjsKLSAgICAgIH0KLQotICAgICAgLy8gUHVzaC9wb3AgY29udGV4dCBzdGFjawot
ICAgICAgaWYgKHR5cGUgPT0gInsiKSB7Ci0gICAgICAgIGlmIChjb250ZXh0ID09ICJAbWVkaWEi
IHx8IGNvbnRleHQgPT0gIkBtZWRpYVR5cGUiKSB7Ci0gICAgICAgICAgc3RhdGUuc3RhY2tbc3Rh
dGUuc3RhY2subGVuZ3RoLTFdID0gIkBtZWRpYXsiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgIHZhciBuZXdDb250ZXh0ID0gYWxsb3dOZXN0ZWQgPyAiYmxvY2siIDogInJ1
bGUiOwotICAgICAgICAgIHN0YXRlLnN0YWNrLnB1c2gobmV3Q29udGV4dCk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIn0iKSB7Ci0gICAgICAgIGlmIChjb250
ZXh0ID09ICJpbnRlcnBvbGF0aW9uIikgc3R5bGUgPSAib3BlcmF0b3IiOwotICAgICAgICAvLyBQ
b3Agb2ZmIGVuZCBvZiBhcnJheSB1bnRpbCB7IGlzIHJlYWNoZWQKLSAgICAgICAgd2hpbGUoc3Rh
dGUuc3RhY2subGVuZ3RoKXsKLSAgICAgICAgICB2YXIgcmVtb3ZlZCA9IHN0YXRlLnN0YWNrLnBv
cCgpOwotICAgICAgICAgIGlmKHJlbW92ZWQuaW5kZXhPZigieyIpID4gLTEgfHwgcmVtb3ZlZCA9
PSAiYmxvY2siIHx8IHJlbW92ZWQgPT0gInJ1bGUiKXsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZSA9PSAiaW50
ZXJwb2xhdGlvbiIpIHN0YXRlLnN0YWNrLnB1c2goImludGVycG9sYXRpb24iKTsKLSAgICAgIGVs
c2UgaWYgKHR5cGUgPT0gIkBtZWRpYSIpIHN0YXRlLnN0YWNrLnB1c2goIkBtZWRpYSIpOwotICAg
ICAgZWxzZSBpZiAodHlwZSA9PSAiQGltcG9ydCIpIHN0YXRlLnN0YWNrLnB1c2goIkBpbXBvcnQi
KTsKLSAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYSIgJiYgL1xiKGtleXdvcmR8YXR0
cmlidXRlKVxiLy50ZXN0KHN0eWxlKSkKLSAgICAgICAgc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2su
bGVuZ3RoLTFdID0gIkBtZWRpYVR5cGUiOwotICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAiQG1l
ZGlhVHlwZSIgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiLCIpCi0gICAgICAgIHN0YXRlLnN0YWNr
W3N0YXRlLnN0YWNrLmxlbmd0aC0xXSA9ICJAbWVkaWEiOwotICAgICAgZWxzZSBpZiAodHlwZSA9
PSAiKCIpIHsKLSAgICAgICAgaWYgKGNvbnRleHQgPT0gIkBtZWRpYSIgfHwgY29udGV4dCA9PSAi
QG1lZGlhVHlwZSIpIHsKLSAgICAgICAgICAvLyBNYWtlIHN1cmUgQG1lZGlhVHlwZSBpcyB1c2Vk
IHRvIGF2b2lkIGVycm9yIG9uIHsKLSAgICAgICAgICBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5s
ZW5ndGgtMV0gPSAiQG1lZGlhVHlwZSI7Ci0gICAgICAgICAgc3RhdGUuc3RhY2sucHVzaCgiQG1l
ZGlhVHlwZSgiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHN0YXRlLnN0YWNrLnB1c2goIigi
KTsKKyAgICAgIGlmICghc3RhdGUudG9rZW5pemUgJiYgc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVy
biBudWxsOworICAgICAgdmFyIHN0eWxlID0gKHN0YXRlLnRva2VuaXplIHx8IHRva2VuQmFzZSko
c3RyZWFtLCBzdGF0ZSk7CisgICAgICBpZiAoc3R5bGUgJiYgdHlwZW9mIHN0eWxlID09ICJvYmpl
Y3QiKSB7CisgICAgICAgIHR5cGUgPSBzdHlsZVsxXTsKKyAgICAgICAgc3R5bGUgPSBzdHlsZVsw
XTsKICAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIikiKSB7Ci0gICAgICAgIC8vIFBv
cCBvZmYgZW5kIG9mIGFycmF5IHVudGlsICggaXMgcmVhY2hlZAotICAgICAgICB3aGlsZShzdGF0
ZS5zdGFjay5sZW5ndGgpewotICAgICAgICAgIHZhciByZW1vdmVkID0gc3RhdGUuc3RhY2sucG9w
KCk7Ci0gICAgICAgICAgaWYocmVtb3ZlZC5pbmRleE9mKCIoIikgPiAtMSl7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYg
KHR5cGUgPT0gIjoiICYmIHN0YXRlLmxhc3RUb2tlbiA9PSAicHJvcGVydHkiKSBzdGF0ZS5zdGFj
ay5wdXNoKCJwcm9wZXJ0eVZhbHVlIik7Ci0gICAgICBlbHNlIGlmIChjb250ZXh0ID09ICJwcm9w
ZXJ0eVZhbHVlIiAmJiB0eXBlID09ICI7Iikgc3RhdGUuc3RhY2sucG9wKCk7Ci0gICAgICBlbHNl
IGlmIChjb250ZXh0ID09ICJAaW1wb3J0IiAmJiB0eXBlID09ICI7Iikgc3RhdGUuc3RhY2sucG9w
KCk7Ci0KLSAgICAgIHJldHVybiBzdGF0ZS5sYXN0VG9rZW4gPSBzdHlsZTsKKyAgICAgIG92ZXJy
aWRlID0gc3R5bGU7CisgICAgICBzdGF0ZS5zdGF0ZSA9IHN0YXRlc1tzdGF0ZS5zdGF0ZV0odHlw
ZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgICByZXR1cm4gb3ZlcnJpZGU7CiAgICAgfSwKCiAgICAg
aW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7Ci0gICAgICB2YXIgbiA9IHN0YXRl
LnN0YWNrLmxlbmd0aDsKLSAgICAgIGlmICgvXlx9Ly50ZXN0KHRleHRBZnRlcikpCi0gICAgICAg
IG4gLT0gc3RhdGUuc3RhY2tbbi0xXSA9PSAicHJvcGVydHlWYWx1ZSIgPyAyIDogMTsKLSAgICAg
IHJldHVybiBzdGF0ZS5iYXNlSW5kZW50ICsgbiAqIGluZGVudFVuaXQ7CisgICAgICB2YXIgY3gg
PSBzdGF0ZS5jb250ZXh0LCBjaCA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApOwor
ICAgICAgdmFyIGluZGVudCA9IGN4LmluZGVudDsKKyAgICAgIGlmIChjeC50eXBlID09ICJwcm9w
IiAmJiBjaCA9PSAifSIpIGN4ID0gY3gucHJldjsKKyAgICAgIGlmIChjeC5wcmV2ICYmCisgICAg
ICAgICAgKGNoID09ICJ9IiAmJiAoY3gudHlwZSA9PSAiYmxvY2siIHx8IGN4LnR5cGUgPT0gInRv
cCIgfHwgY3gudHlwZSA9PSAiaW50ZXJwb2xhdGlvbiIgfHwgY3gudHlwZSA9PSAiZm9udF9mYWNl
IikgfHwKKyAgICAgICAgICAgY2ggPT0gIikiICYmIChjeC50eXBlID09ICJwYXJlbnMiIHx8IGN4
LnR5cGUgPT0gInBhcmFtcyIgfHwgY3gudHlwZSA9PSAibWVkaWFfcGFyZW5zIikgfHwKKyAgICAg
ICAgICAgY2ggPT0gInsiICYmIChjeC50eXBlID09ICJhdCIgfHwgY3gudHlwZSA9PSAibWVkaWEi
KSkpIHsKKyAgICAgICAgaW5kZW50ID0gY3guaW5kZW50IC0gaW5kZW50VW5pdDsKKyAgICAgICAg
Y3ggPSBjeC5wcmV2OworICAgICAgfQorICAgICAgcmV0dXJuIGluZGVudDsKICAgICB9LAoKICAg
ICBlbGVjdHJpY0NoYXJzOiAifSIsCkBAIC0zMTIsNyArMzQ3LDYgQEAgQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9OwogfSk7
CgotKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBrZXlTZXQoYXJyYXkpIHsKICAgICB2YXIga2V5
cyA9IHt9OwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKQEAg
LTMyMSwxMiArMzU1LDEyIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICByZXR1cm4ga2V5czsKICAgfQoKLSAgdmFyIGF0
TWVkaWFUeXBlcyA9IGtleVNldChbCisgIHZhciBtZWRpYVR5cGVzXyA9IFsKICAgICAiYWxsIiwg
ImF1cmFsIiwgImJyYWlsbGUiLCAiaGFuZGhlbGQiLCAicHJpbnQiLCAicHJvamVjdGlvbiIsICJz
Y3JlZW4iLAogICAgICJ0dHkiLCAidHYiLCAiZW1ib3NzZWQiCi0gIF0pOworICBdLCBtZWRpYVR5
cGVzID0ga2V5U2V0KG1lZGlhVHlwZXNfKTsKCi0gIHZhciBhdE1lZGlhRmVhdHVyZXMgPSBrZXlT
ZXQoWworICB2YXIgbWVkaWFGZWF0dXJlc18gPSBbCiAgICAgIndpZHRoIiwgIm1pbi13aWR0aCIs
ICJtYXgtd2lkdGgiLCAiaGVpZ2h0IiwgIm1pbi1oZWlnaHQiLCAibWF4LWhlaWdodCIsCiAgICAg
ImRldmljZS13aWR0aCIsICJtaW4tZGV2aWNlLXdpZHRoIiwgIm1heC1kZXZpY2Utd2lkdGgiLCAi
ZGV2aWNlLWhlaWdodCIsCiAgICAgIm1pbi1kZXZpY2UtaGVpZ2h0IiwgIm1heC1kZXZpY2UtaGVp
Z2h0IiwgImFzcGVjdC1yYXRpbyIsCkBAIC0zMzUsMTUgKzM2OSwxNSBAQCBDb2RlTWlycm9yLmRl
ZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgIm1h
eC1jb2xvciIsICJjb2xvci1pbmRleCIsICJtaW4tY29sb3ItaW5kZXgiLCAibWF4LWNvbG9yLWlu
ZGV4IiwKICAgICAibW9ub2Nocm9tZSIsICJtaW4tbW9ub2Nocm9tZSIsICJtYXgtbW9ub2Nocm9t
ZSIsICJyZXNvbHV0aW9uIiwKICAgICAibWluLXJlc29sdXRpb24iLCAibWF4LXJlc29sdXRpb24i
LCAic2NhbiIsICJncmlkIgotICBdKTsKKyAgXSwgbWVkaWFGZWF0dXJlcyA9IGtleVNldChtZWRp
YUZlYXR1cmVzXyk7CgotICB2YXIgcHJvcGVydHlLZXl3b3JkcyA9IGtleVNldChbCisgIHZhciBw
cm9wZXJ0eUtleXdvcmRzXyA9IFsKICAgICAiYWxpZ24tY29udGVudCIsICJhbGlnbi1pdGVtcyIs
ICJhbGlnbi1zZWxmIiwgImFsaWdubWVudC1hZGp1c3QiLAogICAgICJhbGlnbm1lbnQtYmFzZWxp
bmUiLCAiYW5jaG9yLXBvaW50IiwgImFuaW1hdGlvbiIsICJhbmltYXRpb24tZGVsYXkiLAotICAg
ICJhbmltYXRpb24tZGlyZWN0aW9uIiwgImFuaW1hdGlvbi1kdXJhdGlvbiIsICJhbmltYXRpb24t
aXRlcmF0aW9uLWNvdW50IiwKLSAgICAiYW5pbWF0aW9uLW5hbWUiLCAiYW5pbWF0aW9uLXBsYXkt
c3RhdGUiLCAiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsCi0gICAgImFwcGVhcmFuY2UiLCAi
YXppbXV0aCIsICJiYWNrZmFjZS12aXNpYmlsaXR5IiwgImJhY2tncm91bmQiLAotICAgICJiYWNr
Z3JvdW5kLWF0dGFjaG1lbnQiLCAiYmFja2dyb3VuZC1jbGlwIiwgImJhY2tncm91bmQtY29sb3Ii
LAorICAgICJhbmltYXRpb24tZGlyZWN0aW9uIiwgImFuaW1hdGlvbi1kdXJhdGlvbiIsICJhbmlt
YXRpb24tZmlsbC1tb2RlIiwKKyAgICAiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCIsICJhbmlt
YXRpb24tbmFtZSIsICJhbmltYXRpb24tcGxheS1zdGF0ZSIsCisgICAgImFuaW1hdGlvbi10aW1p
bmctZnVuY3Rpb24iLCAiYXBwZWFyYW5jZSIsICJhemltdXRoIiwgImJhY2tmYWNlLXZpc2liaWxp
dHkiLAorICAgICJiYWNrZ3JvdW5kIiwgImJhY2tncm91bmQtYXR0YWNobWVudCIsICJiYWNrZ3Jv
dW5kLWNsaXAiLCAiYmFja2dyb3VuZC1jb2xvciIsCiAgICAgImJhY2tncm91bmQtaW1hZ2UiLCAi
YmFja2dyb3VuZC1vcmlnaW4iLCAiYmFja2dyb3VuZC1wb3NpdGlvbiIsCiAgICAgImJhY2tncm91
bmQtcmVwZWF0IiwgImJhY2tncm91bmQtc2l6ZSIsICJiYXNlbGluZS1zaGlmdCIsICJiaW5kaW5n
IiwKICAgICAiYmxlZWQiLCAiYm9va21hcmstbGFiZWwiLCAiYm9va21hcmstbGV2ZWwiLCAiYm9v
a21hcmstc3RhdGUiLApAQCAtMzc0LDEwICs0MDgsMTEgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2Rl
KCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJmb250LXN0cmV0
Y2giLCAiZm9udC1zdHlsZSIsICJmb250LXN5bnRoZXNpcyIsICJmb250LXZhcmlhbnQiLAogICAg
ICJmb250LXZhcmlhbnQtYWx0ZXJuYXRlcyIsICJmb250LXZhcmlhbnQtY2FwcyIsICJmb250LXZh
cmlhbnQtZWFzdC1hc2lhbiIsCiAgICAgImZvbnQtdmFyaWFudC1saWdhdHVyZXMiLCAiZm9udC12
YXJpYW50LW51bWVyaWMiLCAiZm9udC12YXJpYW50LXBvc2l0aW9uIiwKLSAgICAiZm9udC13ZWln
aHQiLCAiZ3JpZC1jZWxsIiwgImdyaWQtY29sdW1uIiwgImdyaWQtY29sdW1uLWFsaWduIiwKLSAg
ICAiZ3JpZC1jb2x1bW4tc2l6aW5nIiwgImdyaWQtY29sdW1uLXNwYW4iLCAiZ3JpZC1jb2x1bW5z
IiwgImdyaWQtZmxvdyIsCi0gICAgImdyaWQtcm93IiwgImdyaWQtcm93LWFsaWduIiwgImdyaWQt
cm93LXNpemluZyIsICJncmlkLXJvdy1zcGFuIiwKLSAgICAiZ3JpZC1yb3dzIiwgImdyaWQtdGVt
cGxhdGUtYXJlYXMiLCAiaGFuZ2luZy1wdW5jdHVhdGlvbiIsICJoZWlnaHQiLCAiaHlwaGVucyIs
CisgICAgImZvbnQtd2VpZ2h0IiwgImdyaWQiLCAiZ3JpZC1hcmVhIiwgImdyaWQtYXV0by1jb2x1
bW5zIiwgImdyaWQtYXV0by1mbG93IiwKKyAgICAiZ3JpZC1hdXRvLXBvc2l0aW9uIiwgImdyaWQt
YXV0by1yb3dzIiwgImdyaWQtY29sdW1uIiwgImdyaWQtY29sdW1uLWVuZCIsCisgICAgImdyaWQt
Y29sdW1uLXN0YXJ0IiwgImdyaWQtcm93IiwgImdyaWQtcm93LWVuZCIsICJncmlkLXJvdy1zdGFy
dCIsCisgICAgImdyaWQtdGVtcGxhdGUiLCAiZ3JpZC10ZW1wbGF0ZS1hcmVhcyIsICJncmlkLXRl
bXBsYXRlLWNvbHVtbnMiLAorICAgICJncmlkLXRlbXBsYXRlLXJvd3MiLCAiaGFuZ2luZy1wdW5j
dHVhdGlvbiIsICJoZWlnaHQiLCAiaHlwaGVucyIsCiAgICAgImljb24iLCAiaW1hZ2Utb3JpZW50
YXRpb24iLCAiaW1hZ2UtcmVuZGVyaW5nIiwgImltYWdlLXJlc29sdXRpb24iLAogICAgICJpbmxp
bmUtYm94LWFsaWduIiwgImp1c3RpZnktY29udGVudCIsICJsZWZ0IiwgImxldHRlci1zcGFjaW5n
IiwKICAgICAibGluZS1icmVhayIsICJsaW5lLWhlaWdodCIsICJsaW5lLXN0YWNraW5nIiwgImxp
bmUtc3RhY2tpbmctcnVieSIsCkBAIC00MTQsNyArNDQ5LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJ2ZXJ0aWNh
bC1hbGlnbiIsICJ2aXNpYmlsaXR5IiwgInZvaWNlLWJhbGFuY2UiLCAidm9pY2UtZHVyYXRpb24i
LAogICAgICJ2b2ljZS1mYW1pbHkiLCAidm9pY2UtcGl0Y2giLCAidm9pY2UtcmFuZ2UiLCAidm9p
Y2UtcmF0ZSIsICJ2b2ljZS1zdHJlc3MiLAogICAgICJ2b2ljZS12b2x1bWUiLCAidm9sdW1lIiwg
IndoaXRlLXNwYWNlIiwgIndpZG93cyIsICJ3aWR0aCIsICJ3b3JkLWJyZWFrIiwKLSAgICAid29y
ZC1zcGFjaW5nIiwgIndvcmQtd3JhcCIsICJ6LWluZGV4IiwgInpvb20iLAorICAgICJ3b3JkLXNw
YWNpbmciLCAid29yZC13cmFwIiwgInotaW5kZXgiLAogICAgIC8vIFNWRy1zcGVjaWZpYwogICAg
ICJjbGlwLXBhdGgiLCAiY2xpcC1ydWxlIiwgIm1hc2siLCAiZW5hYmxlLWJhY2tncm91bmQiLCAi
ZmlsdGVyIiwgImZsb29kLWNvbG9yIiwKICAgICAiZmxvb2Qtb3BhY2l0eSIsICJsaWdodGluZy1j
b2xvciIsICJzdG9wLWNvbG9yIiwgInN0b3Atb3BhY2l0eSIsICJwb2ludGVyLWV2ZW50cyIsCkBA
IC00MjUsOSArNDYwLDE3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAic3Ryb2tlLW1pdGVybGltaXQiLCAic3Ryb2tl
LW9wYWNpdHkiLCAic3Ryb2tlLXdpZHRoIiwgInRleHQtcmVuZGVyaW5nIiwKICAgICAiYmFzZWxp
bmUtc2hpZnQiLCAiZG9taW5hbnQtYmFzZWxpbmUiLCAiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpv
bnRhbCIsCiAgICAgImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwgImtlcm5pbmciLCAidGV4
dC1hbmNob3IiLCAid3JpdGluZy1tb2RlIgotICBdKTsKKyAgXSwgcHJvcGVydHlLZXl3b3JkcyA9
IGtleVNldChwcm9wZXJ0eUtleXdvcmRzXyk7CgotICB2YXIgY29sb3JLZXl3b3JkcyA9IGtleVNl
dChbCisgIHZhciBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBbCisgICAgInNjcm9sbGJh
ci1hcnJvdy1jb2xvciIsICJzY3JvbGxiYXItYmFzZS1jb2xvciIsICJzY3JvbGxiYXItZGFyay1z
aGFkb3ctY29sb3IiLAorICAgICJzY3JvbGxiYXItZmFjZS1jb2xvciIsICJzY3JvbGxiYXItaGln
aGxpZ2h0LWNvbG9yIiwgInNjcm9sbGJhci1zaGFkb3ctY29sb3IiLAorICAgICJzY3JvbGxiYXIt
M2QtbGlnaHQtY29sb3IiLCAic2Nyb2xsYmFyLXRyYWNrLWNvbG9yIiwgInNoYXBlLWluc2lkZSIs
CisgICAgInNlYXJjaGZpZWxkLWNhbmNlbC1idXR0b24iLCAic2VhcmNoZmllbGQtZGVjb3JhdGlv
biIsICJzZWFyY2hmaWVsZC1yZXN1bHRzLWJ1dHRvbiIsCisgICAgInNlYXJjaGZpZWxkLXJlc3Vs
dHMtZGVjb3JhdGlvbiIsICJ6b29tIgorICBdLCBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMg
PSBrZXlTZXQobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzKTsKKworICB2YXIgY29sb3JLZXl3
b3Jkc18gPSBbCiAgICAgImFsaWNlYmx1ZSIsICJhbnRpcXVld2hpdGUiLCAiYXF1YSIsICJhcXVh
bWFyaW5lIiwgImF6dXJlIiwgImJlaWdlIiwKICAgICAiYmlzcXVlIiwgImJsYWNrIiwgImJsYW5j
aGVkYWxtb25kIiwgImJsdWUiLCAiYmx1ZXZpb2xldCIsICJicm93biIsCiAgICAgImJ1cmx5d29v
ZCIsICJjYWRldGJsdWUiLCAiY2hhcnRyZXVzZSIsICJjaG9jb2xhdGUiLCAiY29yYWwiLCAiY29y
bmZsb3dlcmJsdWUiLApAQCAtNDU0LDkgKzQ5Nyw5IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgi
Y3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAic2xhdGVibHVlIiwg
InNsYXRlZ3JheSIsICJzbm93IiwgInNwcmluZ2dyZWVuIiwgInN0ZWVsYmx1ZSIsICJ0YW4iLAog
ICAgICJ0ZWFsIiwgInRoaXN0bGUiLCAidG9tYXRvIiwgInR1cnF1b2lzZSIsICJ2aW9sZXQiLCAi
d2hlYXQiLCAid2hpdGUiLAogICAgICJ3aGl0ZXNtb2tlIiwgInllbGxvdyIsICJ5ZWxsb3dncmVl
biIKLSAgXSk7CisgIF0sIGNvbG9yS2V5d29yZHMgPSBrZXlTZXQoY29sb3JLZXl3b3Jkc18pOwoK
LSAgdmFyIHZhbHVlS2V5d29yZHMgPSBrZXlTZXQoWworICB2YXIgdmFsdWVLZXl3b3Jkc18gPSBb
CiAgICAgImFib3ZlIiwgImFic29sdXRlIiwgImFjdGl2ZWJvcmRlciIsICJhY3RpdmVjYXB0aW9u
IiwgImFmYXIiLAogICAgICJhZnRlci13aGl0ZS1zcGFjZSIsICJhaGVhZCIsICJhbGlhcyIsICJh
bGwiLCAiYWxsLXNjcm9sbCIsICJhbHRlcm5hdGUiLAogICAgICJhbHdheXMiLCAiYW1oYXJpYyIs
ICJhbWhhcmljLWFiZWdlZGUiLCAiYW50aWFsaWFzZWQiLCAiYXBwd29ya3NwYWNlIiwKQEAgLTUx
NSw3ICs1NTgsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgInBvbHlnb24iLCAicG9ydHJhaXQiLCAicHJlIiwgInBy
ZS1saW5lIiwgInByZS13cmFwIiwgInByZXNlcnZlLTNkIiwgInByb2dyZXNzIiwgInB1c2gtYnV0
dG9uIiwKICAgICAicmFkaW8iLCAicmVhZC1vbmx5IiwgInJlYWQtd3JpdGUiLCAicmVhZC13cml0
ZS1wbGFpbnRleHQtb25seSIsICJyZWN0YW5nbGUiLCAicmVnaW9uIiwKICAgICAicmVsYXRpdmUi
LCAicmVwZWF0IiwgInJlcGVhdC14IiwgInJlcGVhdC15IiwgInJlc2V0IiwgInJldmVyc2UiLCAi
cmdiIiwgInJnYmEiLAotICAgICJyaWRnZSIsICJyaWdodCIsICJyb3VuZCIsICJyb3ctcmVzaXpl
IiwgInJ0bCIsICJydW5uaW5nIiwKKyAgICAicmlkZ2UiLCAicmlnaHQiLCAicm91bmQiLCAicm93
LXJlc2l6ZSIsICJydGwiLCAicnVuLWluIiwgInJ1bm5pbmciLAogICAgICJzLXJlc2l6ZSIsICJz
YW5zLXNlcmlmIiwgInNjcm9sbCIsICJzY3JvbGxiYXIiLCAic2UtcmVzaXplIiwgInNlYXJjaGZp
ZWxkIiwKICAgICAic2VhcmNoZmllbGQtY2FuY2VsLWJ1dHRvbiIsICJzZWFyY2hmaWVsZC1kZWNv
cmF0aW9uIiwKICAgICAic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b24iLCAic2VhcmNoZmllbGQt
cmVzdWx0cy1kZWNvcmF0aW9uIiwKQEAgLTUzOSw3ICs1ODIsMTYgQEAgQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJ2aXNp
YmxlU3Ryb2tlIiwgInZpc3VhbCIsICJ3LXJlc2l6ZSIsICJ3YWl0IiwgIndhdmUiLCAid2lkZXIi
LAogICAgICJ3aW5kb3ciLCAid2luZG93ZnJhbWUiLCAid2luZG93dGV4dCIsICJ4LWxhcmdlIiwg
Ingtc21hbGwiLCAieG9yIiwKICAgICAieHgtbGFyZ2UiLCAieHgtc21hbGwiCi0gIF0pOworICBd
LCB2YWx1ZUtleXdvcmRzID0ga2V5U2V0KHZhbHVlS2V5d29yZHNfKTsKKworICB2YXIgZm9udFBy
b3BlcnRpZXNfID0gWworICAgICJmb250LWZhbWlseSIsICJzcmMiLCAidW5pY29kZS1yYW5nZSIs
ICJmb250LXZhcmlhbnQiLCAiZm9udC1mZWF0dXJlLXNldHRpbmdzIiwKKyAgICAiZm9udC1zdHJl
dGNoIiwgImZvbnQtd2VpZ2h0IiwgImZvbnQtc3R5bGUiCisgIF0sIGZvbnRQcm9wZXJ0aWVzID0g
a2V5U2V0KGZvbnRQcm9wZXJ0aWVzXyk7CisKKyAgdmFyIGFsbFdvcmRzID0gbWVkaWFUeXBlc18u
Y29uY2F0KG1lZGlhRmVhdHVyZXNfKS5jb25jYXQocHJvcGVydHlLZXl3b3Jkc18pCisgICAgLmNv
bmNhdChub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMpLmNvbmNhdChjb2xvcktleXdvcmRzXyku
Y29uY2F0KHZhbHVlS2V5d29yZHNfKTsKKyAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcigiaGlu
dFdvcmRzIiwgImNzcyIsIGFsbFdvcmRzKTsKCiAgIGZ1bmN0aW9uIHRva2VuQ0NvbW1lbnQoc3Ry
ZWFtLCBzdGF0ZSkgewogICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKQEAgLTU1Myw2NyAr
NjA1LDkwIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBw
YXJzZXJDb25maWcpIHsKICAgICByZXR1cm4gWyJjb21tZW50IiwgImNvbW1lbnQiXTsKICAgfQoK
KyAgZnVuY3Rpb24gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHN0
cmVhbS5za2lwVG8oIi0tPiIpKSB7CisgICAgICBzdHJlYW0ubWF0Y2goIi0tPiIpOworICAgICAg
c3RhdGUudG9rZW5pemUgPSBudWxsOworICAgIH0gZWxzZSB7CisgICAgICBzdHJlYW0uc2tpcFRv
RW5kKCk7CisgICAgfQorICAgIHJldHVybiBbImNvbW1lbnQiLCAiY29tbWVudCJdOworICB9CisK
ICAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2NzcyIsIHsKLSAgICBhdE1lZGlhVHlwZXM6
IGF0TWVkaWFUeXBlcywKLSAgICBhdE1lZGlhRmVhdHVyZXM6IGF0TWVkaWFGZWF0dXJlcywKKyAg
ICBtZWRpYVR5cGVzOiBtZWRpYVR5cGVzLAorICAgIG1lZGlhRmVhdHVyZXM6IG1lZGlhRmVhdHVy
ZXMsCiAgICAgcHJvcGVydHlLZXl3b3JkczogcHJvcGVydHlLZXl3b3JkcywKKyAgICBub25TdGFu
ZGFyZFByb3BlcnR5S2V5d29yZHM6IG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcywKICAgICBj
b2xvcktleXdvcmRzOiBjb2xvcktleXdvcmRzLAogICAgIHZhbHVlS2V5d29yZHM6IHZhbHVlS2V5
d29yZHMsCi0gICAgaG9va3M6IHsKKyAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMs
CisgICAgdG9rZW5Ib29rczogewogICAgICAgIjwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7
Ci0gICAgICAgIGZ1bmN0aW9uIHRva2VuU0dNTENvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewotICAg
ICAgICAgIHZhciBkYXNoZXMgPSAwLCBjaDsKLSAgICAgICAgICB3aGlsZSAoKGNoID0gc3RyZWFt
Lm5leHQoKSkgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKGRhc2hlcyA+PSAyICYmIGNoID09
ICI+IikgewotICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7Ci0gICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGFzaGVzID0gKGNoID09ICIt
IikgPyBkYXNoZXMgKyAxIDogMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIFsiY29t
bWVudCIsICJjb21tZW50Il07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmVhbS5lYXQoIiEi
KSkgewotICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TR01MQ29tbWVudDsKLSAgICAg
ICAgICByZXR1cm4gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAoIXN0cmVhbS5tYXRjaCgiIS0tIikpIHJldHVybiBmYWxzZTsKKyAgICAgICAg
c3RhdGUudG9rZW5pemUgPSB0b2tlblNHTUxDb21tZW50OworICAgICAgICByZXR1cm4gdG9rZW5T
R01MQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgIH0sCiAgICAgICAiLyI6IGZ1bmN0aW9u
KHN0cmVhbSwgc3RhdGUpIHsKLSAgICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewotICAgICAg
ICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDsKLSAgICAgICAgICByZXR1cm4gdG9r
ZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmICghc3RyZWFtLmVhdCgiKiIpKSByZXR1cm4gZmFsc2U7CisgICAgICAg
IHN0YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDsKKyAgICAgICAgcmV0dXJuIHRva2VuQ0Nv
bW1lbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICB9CiAgICAgfSwKICAgICBuYW1lOiAiY3NzIgog
ICB9KTsKCiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXNjc3MiLCB7Ci0gICAgYXRN
ZWRpYVR5cGVzOiBhdE1lZGlhVHlwZXMsCi0gICAgYXRNZWRpYUZlYXR1cmVzOiBhdE1lZGlhRmVh
dHVyZXMsCisgICAgbWVkaWFUeXBlczogbWVkaWFUeXBlcywKKyAgICBtZWRpYUZlYXR1cmVzOiBt
ZWRpYUZlYXR1cmVzLAogICAgIHByb3BlcnR5S2V5d29yZHM6IHByb3BlcnR5S2V5d29yZHMsCisg
ICAgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzOiBub25TdGFuZGFyZFByb3BlcnR5S2V5d29y
ZHMsCiAgICAgY29sb3JLZXl3b3JkczogY29sb3JLZXl3b3JkcywKICAgICB2YWx1ZUtleXdvcmRz
OiB2YWx1ZUtleXdvcmRzLAorICAgIGZvbnRQcm9wZXJ0aWVzOiBmb250UHJvcGVydGllcywKICAg
ICBhbGxvd05lc3RlZDogdHJ1ZSwKLSAgICBob29rczogeworICAgIHRva2VuSG9va3M6IHsKKyAg
ICAgICIvIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgeworICAgICAgICBpZiAoc3RyZWFtLmVh
dCgiLyIpKSB7CisgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOworICAgICAgICAgIHJldHVy
biBbImNvbW1lbnQiLCAiY29tbWVudCJdOworICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQo
IioiKSkgeworICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDsKKyAgICAg
ICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICByZXR1cm4gWyJvcGVyYXRvciIsICJvcGVyYXRvciJdOworICAgICAgICB9
CisgICAgICB9LAogICAgICAgIjoiOiBmdW5jdGlvbihzdHJlYW0pIHsKLSAgICAgICAgaWYgKHN0
cmVhbS5tYXRjaCgvXHMqey8pKSB7CisgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1xzKnsvKSkK
ICAgICAgICAgICByZXR1cm4gW251bGwsICJ7Il07Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgfSwKICAgICAgICIkIjogZnVuY3Rpb24oc3RyZWFtKSB7CiAgICAgICAg
IHN0cmVhbS5tYXRjaCgvXltcdy1dKy8pOwotICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSAi
OiIpIHsKLSAgICAgICAgICByZXR1cm4gWyJ2YXJpYWJsZSIsICJ2YXJpYWJsZS1kZWZpbml0aW9u
Il07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFsidmFyaWFibGUiLCAidmFyaWFibGUiXTsK
LSAgICAgIH0sCi0gICAgICAiLCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKLSAgICAgICAg
aWYgKHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aCAtIDFdID09ICJwcm9wZXJ0eVZhbHVl
IiAmJiBzdHJlYW0ubWF0Y2goL14gKlwkLywgZmFsc2UpKSB7Ci0gICAgICAgICAgcmV0dXJuIFsi
b3BlcmF0b3IiLCAiOyJdOwotICAgICAgICB9CisgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15c
cyo6LywgZmFsc2UpKQorICAgICAgICAgIHJldHVybiBbInZhcmlhYmxlLTIiLCAidmFyaWFibGUt
ZGVmaW5pdGlvbiJdOworICAgICAgICByZXR1cm4gWyJ2YXJpYWJsZS0yIiwgInZhcmlhYmxlIl07
CiAgICAgICB9LAorICAgICAgIiMiOiBmdW5jdGlvbihzdHJlYW0pIHsKKyAgICAgICAgaWYgKCFz
dHJlYW0uZWF0KCJ7IikpIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFtudWxsLCAiaW50
ZXJwb2xhdGlvbiJdOworICAgICAgfQorICAgIH0sCisgICAgbmFtZTogImNzcyIsCisgICAgaGVs
cGVyVHlwZTogInNjc3MiCisgIH0pOworCisgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94
LWxlc3MiLCB7CisgICAgbWVkaWFUeXBlczogbWVkaWFUeXBlcywKKyAgICBtZWRpYUZlYXR1cmVz
OiBtZWRpYUZlYXR1cmVzLAorICAgIHByb3BlcnR5S2V5d29yZHM6IHByb3BlcnR5S2V5d29yZHMs
CisgICAgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzOiBub25TdGFuZGFyZFByb3BlcnR5S2V5
d29yZHMsCisgICAgY29sb3JLZXl3b3JkczogY29sb3JLZXl3b3JkcywKKyAgICB2YWx1ZUtleXdv
cmRzOiB2YWx1ZUtleXdvcmRzLAorICAgIGZvbnRQcm9wZXJ0aWVzOiBmb250UHJvcGVydGllcywK
KyAgICBhbGxvd05lc3RlZDogdHJ1ZSwKKyAgICB0b2tlbkhvb2tzOiB7CiAgICAgICAiLyI6IGZ1
bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgaWYgKHN0cmVhbS5lYXQoIi8iKSkgewog
ICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKQEAgLTYyNSwxNSArNzAwLDE5IEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
ICAgICAgICAgICByZXR1cm4gWyJvcGVyYXRvciIsICJvcGVyYXRvciJdOwogICAgICAgICB9CiAg
ICAgICB9LAotICAgICAgIiMiOiBmdW5jdGlvbihzdHJlYW0pIHsKLSAgICAgICAgaWYgKHN0cmVh
bS5lYXQoInsiKSkgewotICAgICAgICAgIHJldHVybiBbIm9wZXJhdG9yIiwgImludGVycG9sYXRp
b24iXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xc
XC1dLyk7Ci0gICAgICAgICAgcmV0dXJuIFsiYXRvbSIsICJoYXNoIl07Ci0gICAgICAgIH0KKyAg
ICAgICJAIjogZnVuY3Rpb24oc3RyZWFtKSB7CisgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14o
Y2hhcnNldHxkb2N1bWVudHxmb250LWZhY2V8aW1wb3J0fCgtKG1venxtc3xvfHdlYmtpdCktKT9r
ZXlmcmFtZXN8bWVkaWF8bmFtZXNwYWNlfHBhZ2V8c3VwcG9ydHMpXGIvLCBmYWxzZSkpIHJldHVy
biBmYWxzZTsKKyAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOworICAgICAgICBp
ZiAoc3RyZWFtLm1hdGNoKC9eXHMqOi8sIGZhbHNlKSkKKyAgICAgICAgICByZXR1cm4gWyJ2YXJp
YWJsZS0yIiwgInZhcmlhYmxlLWRlZmluaXRpb24iXTsKKyAgICAgICAgcmV0dXJuIFsidmFyaWFi
bGUtMiIsICJ2YXJpYWJsZSJdOworICAgICAgfSwKKyAgICAgICImIjogZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBbImF0b20iLCAiYXRvbSJdOwogICAgICAgfQogICAgIH0sCi0gICAgbmFt
ZTogImNzcyIKKyAgICBuYW1lOiAiY3NzIiwKKyAgICBoZWxwZXJUeXBlOiAibGVzcyIKICAgfSk7
Ci19KSgpOworCit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVkLmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9odG1sbWl4ZWQuanMKaW5k
ZXggYjU5ZWYzNy4uZDgwZWY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9odG1sbWl4ZWQuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9odG1sbWl4
ZWQuanMKQEAgLTEsNSArMSwxOCBAQAorKGZ1bmN0aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4
cG9ydHMgPT0gIm9iamVjdCIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9u
SlMKKyAgICBtb2QocmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSwgcmVxdWlyZSgiLi4v
eG1sL3htbCIpLCByZXF1aXJlKCIuLi9qYXZhc2NyaXB0L2phdmFzY3JpcHQiKSwgcmVxdWlyZSgi
Li4vY3NzL2NzcyIpKTsKKyAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iICYm
IGRlZmluZS5hbWQpIC8vIEFNRAorICAgIGRlZmluZShbIi4uLy4uL2xpYi9jb2RlbWlycm9yIiwg
Ii4uL3htbC94bWwiLCAiLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0IiwgIi4uL2Nzcy9jc3MiXSwg
bW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudgorICAgIG1vZChDb2RlTWlycm9yKTsK
K30pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKKyJ1c2Ugc3RyaWN0IjsKKwogQ29kZU1pcnJvci5k
ZWZpbmVNb2RlKCJodG1sbWl4ZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewot
ICB2YXIgaHRtbE1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCB7bmFtZTogInhtbCIs
IGh0bWxNb2RlOiB0cnVlfSk7CisgIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShj
b25maWcsIHtuYW1lOiAieG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGh0bWxNb2RlOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yOiBwYXJzZXJDb25maWcubXVs
dGlsaW5lVGFnSW5kZW50RmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZzogcGFyc2VyQ29uZmlnLm11bHRp
bGluZVRhZ0luZGVudFBhc3RUYWd9KTsKICAgdmFyIGNzc01vZGUgPSBDb2RlTWlycm9yLmdldE1v
ZGUoY29uZmlnLCAiY3NzIik7CgogICB2YXIgc2NyaXB0VHlwZXMgPSBbXSwgc2NyaXB0VHlwZXND
b25mID0gcGFyc2VyQ29uZmlnICYmIHBhcnNlckNvbmZpZy5zY3JpcHRUeXBlczsKQEAgLTkzLDgg
KzEwNiw2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiaHRtbG1peGVkIiwgZnVuY3Rpb24oY29u
ZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKICAg
ICB9LAoKLSAgICBlbGVjdHJpY0NoYXJzOiAiL3t9OiIsCi0KICAgICBpbm5lck1vZGU6IGZ1bmN0
aW9uKHN0YXRlKSB7CiAgICAgICByZXR1cm4ge3N0YXRlOiBzdGF0ZS5sb2NhbFN0YXRlIHx8IHN0
YXRlLmh0bWxTdGF0ZSwgbW9kZTogc3RhdGUubG9jYWxNb2RlIHx8IGh0bWxNb2RlfTsKICAgICB9
CkBAIC0xMDIsMyArMTEzLDUgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sbWl4ZWQiLCBm
dW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogfSwgInhtbCIsICJqYXZhc2NyaXB0Iiwg
ImNzcyIpOwoKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIiwgImh0bWxtaXhlZCIp
OworCit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qcwppbmRleCBm
MjdjMDYzLi45MzE4YWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanMKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2NyaXB0
LmpzCkBAIC0xLDkgKzEsMjAgQEAKIC8vIFRPRE8gYWN0dWFsbHkgcmVjb2duaXplIHN5bnRheCBv
ZiBUeXBlU2NyaXB0IGNvbnN0cnVjdHMKCisoZnVuY3Rpb24obW9kKSB7CisgIGlmICh0eXBlb2Yg
ZXhwb3J0cyA9PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiKSAvLyBDb21t
b25KUworICAgIG1vZChyZXF1aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpKTsKKyAgZWxzZSBp
ZiAodHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAorICAg
IGRlZmluZShbIi4uLy4uL2xpYi9jb2RlbWlycm9yIl0sIG1vZCk7CisgIGVsc2UgLy8gUGxhaW4g
YnJvd3NlciBlbnYKKyAgICBtb2QoQ29kZU1pcnJvcik7Cit9KShmdW5jdGlvbihDb2RlTWlycm9y
KSB7CisidXNlIHN0cmljdCI7CisKIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIHZhciBpbmRlbnRVbml0ID0gY29u
ZmlnLmluZGVudFVuaXQ7CiAgIHZhciBzdGF0ZW1lbnRJbmRlbnQgPSBwYXJzZXJDb25maWcuc3Rh
dGVtZW50SW5kZW50OwotICB2YXIganNvbk1vZGUgPSBwYXJzZXJDb25maWcuanNvbjsKKyAgdmFy
IGpzb25sZE1vZGUgPSBwYXJzZXJDb25maWcuanNvbmxkOworICB2YXIganNvbk1vZGUgPSBwYXJz
ZXJDb25maWcuanNvbiB8fCBqc29ubGRNb2RlOwogICB2YXIgaXNUUyA9IHBhcnNlckNvbmZpZy50
eXBlc2NyaXB0OwoKICAgLy8gVG9rZW5pemVyCkBAIC0xNSw3ICsyNiw3IEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CgogICAgIHZhciBqc0tleXdvcmRzID0gewogICAgICAgImlmIjoga3coImlmIiksICJ3aGlsZSI6
IEEsICJ3aXRoIjogQSwgImVsc2UiOiBCLCAiZG8iOiBCLCAidHJ5IjogQiwgImZpbmFsbHkiOiBC
LAotICAgICAgInJldHVybiI6IEMsICJicmVhayI6IEMsICJjb250aW51ZSI6IEMsICJuZXciOiBD
LCAiZGVsZXRlIjogQywgInRocm93IjogQywKKyAgICAgICJyZXR1cm4iOiBDLCAiYnJlYWsiOiBD
LCAiY29udGludWUiOiBDLCAibmV3IjogQywgImRlbGV0ZSI6IEMsICJ0aHJvdyI6IEMsICJkZWJ1
Z2dlciI6IEMsCiAgICAgICAidmFyIjoga3coInZhciIpLCAiY29uc3QiOiBrdygidmFyIiksICJs
ZXQiOiBrdygidmFyIiksCiAgICAgICAiZnVuY3Rpb24iOiBrdygiZnVuY3Rpb24iKSwgImNhdGNo
Ijoga3coImNhdGNoIiksCiAgICAgICAiZm9yIjoga3coImZvciIpLCAic3dpdGNoIjoga3coInN3
aXRjaCIpLCAiY2FzZSI6IGt3KCJjYXNlIiksICJkZWZhdWx0Ijoga3coImRlZmF1bHQiKSwKQEAg
LTUzLDE1ICs2NCwxOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9KCk7CgogICB2YXIgaXNPcGVyYXRvckNo
YXIgPSAvWytcLSomJT08PiE/fH5eXS87CisgIHZhciBpc0pzb25sZEtleXdvcmQgPSAvXkAoY29u
dGV4dHxpZHx2YWx1ZXxsYW5ndWFnZXx0eXBlfGNvbnRhaW5lcnxsaXN0fHNldHxyZXZlcnNlfGlu
ZGV4fGJhc2V8dm9jYWJ8Z3JhcGgpIi87CgotICBmdW5jdGlvbiBuZXh0VW50aWxVbmVzY2FwZWQo
c3RyZWFtLCBlbmQpIHsKLSAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0OworICBmdW5jdGlv
biByZWFkUmVnZXhwKHN0cmVhbSkgeworICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGlu
U2V0ID0gZmFsc2U7CiAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkg
ewotICAgICAgaWYgKG5leHQgPT0gZW5kICYmICFlc2NhcGVkKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICBpZiAoIWVzY2FwZWQpIHsKKyAgICAgICAgaWYgKG5leHQgPT0gIi8iICYmICFp
blNldCkgcmV0dXJuOworICAgICAgICBpZiAobmV4dCA9PSAiWyIpIGluU2V0ID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZSBpZiAoaW5TZXQgJiYgbmV4dCA9PSAiXSIpIGluU2V0ID0gZmFsc2U7CisgICAg
ICB9CiAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgIH0KLSAg
ICByZXR1cm4gZXNjYXBlZDsKICAgfQoKICAgLy8gVXNlZCBhcyBzY3JhdGNoIHZhcmlhYmxlcyB0
byBjb21tdW5pY2F0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aG91dApAQCAtODMsNyArOTcsNyBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgIH0gZWxzZSBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkp
IHsKICAgICAgIHJldHVybiByZXQoY2gpOwogICAgIH0gZWxzZSBpZiAoY2ggPT0gIj0iICYmIHN0
cmVhbS5lYXQoIj4iKSkgewotICAgICAgcmV0dXJuIHJldCgiPT4iKTsKKyAgICAgIHJldHVybiBy
ZXQoIj0+IiwgIm9wZXJhdG9yIik7CiAgICAgfSBlbHNlIGlmIChjaCA9PSAiMCIgJiYgc3RyZWFt
LmVhdCgveC9pKSkgewogICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXGRhLWZdL2kpOwogICAgICAg
cmV0dXJuIHJldCgibnVtYmVyIiwgIm51bWJlciIpOwpAQCAtOTksMTIgKzExMywxMiBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNv
bmZpZykgewogICAgICAgICByZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKICAgICAg
IH0gZWxzZSBpZiAoc3RhdGUubGFzdFR5cGUgPT0gIm9wZXJhdG9yIiB8fCBzdGF0ZS5sYXN0VHlw
ZSA9PSAia2V5d29yZCBjIiB8fAogICAgICAgICAgICAgICAgc3RhdGUubGFzdFR5cGUgPT0gInNv
ZiIgfHwgL15bXFt7fVwoLDs6XSQvLnRlc3Qoc3RhdGUubGFzdFR5cGUpKSB7Ci0gICAgICAgIG5l
eHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sICIvIik7CisgICAgICAgIHJlYWRSZWdleHAoc3RyZWFt
KTsKICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bZ2lteV0vKTsgLy8gJ3knIGlzICJzdGlja3ki
IG9wdGlvbiBpbiBNb3ppbGxhCiAgICAgICAgIHJldHVybiByZXQoInJlZ2V4cCIsICJzdHJpbmct
MiIpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JD
aGFyKTsKLSAgICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCBudWxsLCBzdHJlYW0uY3VycmVu
dCgpKTsKKyAgICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCAib3BlcmF0b3IiLCBzdHJlYW0u
Y3VycmVudCgpKTsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGNoID09ICJgIikgewogICAgICAg
c3RhdGUudG9rZW5pemUgPSB0b2tlblF1YXNpOwpAQCAtMTE0LDcgKzEyOCw3IEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgICAgICByZXR1cm4gcmV0KCJlcnJvciIsICJlcnJvciIpOwogICAgIH0gZWxzZSBpZiAo
aXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHsKICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJh
dG9yQ2hhcik7Ci0gICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsIG51bGwsIHN0cmVhbS5jdXJy
ZW50KCkpOworICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCAib3BlcmF0b3IiLCBzdHJlYW0u
Y3VycmVudCgpKTsKICAgICB9IGVsc2UgewogICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9d
Lyk7CiAgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCksIGtub3duID0ga2V5d29yZHMu
cHJvcGVydHlJc0VudW1lcmFibGUod29yZCkgJiYga2V5d29yZHNbd29yZF07CkBAIC0xMjUsOCAr
MTM5LDE2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNv
bmZpZywgcGFyc2VyQ29uZmlnKSB7CgogICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewog
ICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0gICAgICBpZiAoIW5leHRVbnRp
bFVuZXNjYXBlZChzdHJlYW0sIHF1b3RlKSkKKyAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5l
eHQ7CisgICAgICBpZiAoanNvbmxkTW9kZSAmJiBzdHJlYW0ucGVlaygpID09ICJAIiAmJiBzdHJl
YW0ubWF0Y2goaXNKc29ubGRLZXl3b3JkKSl7CiAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9r
ZW5CYXNlOworICAgICAgICByZXR1cm4gcmV0KCJqc29ubGQta2V5d29yZCIsICJtZXRhIik7Cisg
ICAgICB9CisgICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7Cisg
ICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSBicmVhazsKKyAgICAgICAgZXNj
YXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKKyAgICAgIH0KKyAgICAgIGlmICghZXNj
YXBlZCkgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICByZXR1cm4gcmV0KCJzdHJp
bmciLCAic3RyaW5nIik7CiAgICAgfTsKICAgfQpAQCAtMTg5LDcgKzIxMSw3IEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CgogICAvLyBQYXJzZXIKCi0gIHZhciBhdG9taWNUeXBlcyA9IHsiYXRvbSI6IHRydWUsICJu
dW1iZXIiOiB0cnVlLCAidmFyaWFibGUiOiB0cnVlLCAic3RyaW5nIjogdHJ1ZSwgInJlZ2V4cCI6
IHRydWUsICJ0aGlzIjogdHJ1ZX07CisgIHZhciBhdG9taWNUeXBlcyA9IHsiYXRvbSI6IHRydWUs
ICJudW1iZXIiOiB0cnVlLCAidmFyaWFibGUiOiB0cnVlLCAic3RyaW5nIjogdHJ1ZSwgInJlZ2V4
cCI6IHRydWUsICJ0aGlzIjogdHJ1ZSwgImpzb25sZC1rZXl3b3JkIjogdHJ1ZX07CgogICBmdW5j
dGlvbiBKU0xleGljYWwoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYsIGluZm8p
IHsKICAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CkBAIC0yODksMTEgKzMxMSwxMiBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICBwb3BsZXgubGV4ID0gdHJ1ZTsKCiAgIGZ1bmN0aW9uIGV4cGVjdCh3YW50
ZWQpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24odHlwZSkgeworICAgIGZ1bmN0aW9uIGV4cCh0eXBl
KSB7CiAgICAgICBpZiAodHlwZSA9PSB3YW50ZWQpIHJldHVybiBjb250KCk7CiAgICAgICBlbHNl
IGlmICh3YW50ZWQgPT0gIjsiKSByZXR1cm4gcGFzcygpOwotICAgICAgZWxzZSByZXR1cm4gY29u
dChhcmd1bWVudHMuY2FsbGVlKTsKKyAgICAgIGVsc2UgcmV0dXJuIGNvbnQoZXhwKTsKICAgICB9
OworICAgIHJldHVybiBleHA7CiAgIH0KCiAgIGZ1bmN0aW9uIHN0YXRlbWVudCh0eXBlLCB2YWx1
ZSkgewpAQCAtMzAyLDkgKzMyNSwxMyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3Jp
cHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh0eXBlID09ICJr
ZXl3b3JkIGIiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHN0YXRlbWVudCwgcG9wbGV4
KTsKICAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgYmxvY2ss
IHBvcGxleCk7CiAgICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwotICAgIGlmICh0
eXBlID09ICJpZiIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwgc3Rh
dGVtZW50LCBwb3BsZXgsIG1heWJlZWxzZSk7CisgICAgaWYgKHR5cGUgPT0gImlmIikgeworICAg
ICAgaWYgKGN4LnN0YXRlLmxleGljYWwuaW5mbyA9PSAiZWxzZSIgJiYgY3guc3RhdGUuY2NbY3gu
c3RhdGUuY2MubGVuZ3RoIC0gMV0gPT0gcG9wbGV4KQorICAgICAgICBjeC5zdGF0ZS5jYy5wb3Ao
KSgpOworICAgICAgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBzdGF0
ZW1lbnQsIHBvcGxleCwgbWF5YmVlbHNlKTsKKyAgICB9CiAgICAgaWYgKHR5cGUgPT0gImZ1bmN0
aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOwotICAgIGlmICh0eXBlID09ICJmb3IiKSBy
ZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGZvcnNwZWMsIHBvcGxleCwgc3RhdGVtZW50LCBw
b3BsZXgpOworICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3Jt
IiksIGZvcnNwZWMsIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgICBpZiAodHlwZSA9PSAidmFyaWFi
bGUiKSByZXR1cm4gY29udChwdXNobGV4KCJzdGF0IiksIG1heWJlbGFiZWwpOwogICAgIGlmICh0
eXBlID09ICJzd2l0Y2giKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24s
IHB1c2hsZXgoIn0iLCAic3dpdGNoIiksIGV4cGVjdCgieyIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBibG9jaywgcG9wbGV4LCBwb3BsZXgpOwpAQCAtMzI3LDE4ICsz
NTQsMTggQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29u
ZmlnLCBwYXJzZXJDb25maWcpIHsKICAgZnVuY3Rpb24gZXhwcmVzc2lvbklubmVyKHR5cGUsIG5v
Q29tbWEpIHsKICAgICBpZiAoY3guc3RhdGUuZmF0QXJyb3dBdCA9PSBjeC5zdHJlYW0uc3RhcnQp
IHsKICAgICAgIHZhciBib2R5ID0gbm9Db21tYSA/IGFycm93Qm9keU5vQ29tbWEgOiBhcnJvd0Jv
ZHk7Ci0gICAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBjb21t
YXNlcChwYXR0ZXJuLCAiKSIpLCBleHBlY3QoIj0+IiksIGJvZHksIHBvcGNvbnRleHQpOworICAg
ICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNoY29udGV4dCwgcHVzaGxleCgiKSIp
LCBjb21tYXNlcChwYXR0ZXJuLCAiKSIpLCBwb3BsZXgsIGV4cGVjdCgiPT4iKSwgYm9keSwgcG9w
Y29udGV4dCk7CiAgICAgICBlbHNlIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHJldHVybiBwYXNz
KHB1c2hjb250ZXh0LCBwYXR0ZXJuLCBleHBlY3QoIj0+IiksIGJvZHksIHBvcGNvbnRleHQpOwog
ICAgIH0KCiAgICAgdmFyIG1heWJlb3AgPSBub0NvbW1hID8gbWF5YmVvcGVyYXRvck5vQ29tbWEg
OiBtYXliZW9wZXJhdG9yQ29tbWE7CiAgICAgaWYgKGF0b21pY1R5cGVzLmhhc093blByb3BlcnR5
KHR5cGUpKSByZXR1cm4gY29udChtYXliZW9wKTsKLSAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24i
KSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7CisgICAgaWYgKHR5cGUgPT0gImZ1bmN0aW9uIikg
cmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYsIG1heWJlb3ApOwogICAgIGlmICh0eXBlID09ICJrZXl3
b3JkIGMiKSByZXR1cm4gY29udChub0NvbW1hID8gbWF5YmVleHByZXNzaW9uTm9Db21tYSA6IG1h
eWJlZXhwcmVzc2lvbik7CiAgICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4
KCIpIiksIG1heWJlZXhwcmVzc2lvbiwgY29tcHJlaGVuc2lvbiwgZXhwZWN0KCIpIiksIHBvcGxl
eCwgbWF5YmVvcCk7CiAgICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIiB8fCB0eXBlID09ICJzcHJl
YWQiKSByZXR1cm4gY29udChub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9u
KTsKLSAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgZXhwcmVz
c2lvbk5vQ29tbWEsIG1heWJlQXJyYXlDb21wcmVoZW5zaW9uLCBwb3BsZXgsIG1heWJlb3ApOwot
ICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQoY29tbWFzZXAob2JqcHJvcCwgIn0iKSwg
bWF5YmVvcCk7CisgICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiks
IGFycmF5TGl0ZXJhbCwgcG9wbGV4LCBtYXliZW9wKTsKKyAgICBpZiAodHlwZSA9PSAieyIpIHJl
dHVybiBjb250Q29tbWFzZXAob2JqcHJvcCwgIn0iLCBudWxsLCBtYXliZW9wKTsKICAgICByZXR1
cm4gY29udCgpOwogICB9CiAgIGZ1bmN0aW9uIG1heWJlZXhwcmVzc2lvbih0eXBlKSB7CkBAIC0z
NjUsMTIgKzM5MiwxMSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIH0KICAgICBpZiAodHlwZSA9PSAicXVh
c2kiKSB7IGN4LmNjLnB1c2gobWUpOyByZXR1cm4gcXVhc2kodmFsdWUpOyB9CiAgICAgaWYgKHR5
cGUgPT0gIjsiKSByZXR1cm47Ci0gICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChjb21t
YXNlcChleHByZXNzaW9uTm9Db21tYSwgIikiLCAiY2FsbCIpLCBtZSk7CisgICAgaWYgKHR5cGUg
PT0gIigiKSByZXR1cm4gY29udENvbW1hc2VwKGV4cHJlc3Npb25Ob0NvbW1hLCAiKSIsICJjYWxs
IiwgbWUpOwogICAgIGlmICh0eXBlID09ICIuIikgcmV0dXJuIGNvbnQocHJvcGVydHksIG1lKTsK
ICAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgbWF5YmVleHBy
ZXNzaW9uLCBleHBlY3QoIl0iKSwgcG9wbGV4LCBtZSk7CiAgIH0KICAgZnVuY3Rpb24gcXVhc2ko
dmFsdWUpIHsKLSAgICBpZiAoIXZhbHVlKSBkZWJ1Z2dlcjsKICAgICBpZiAodmFsdWUuc2xpY2Uo
dmFsdWUubGVuZ3RoIC0gMikgIT0gIiR7IikgcmV0dXJuIGNvbnQoKTsKICAgICByZXR1cm4gY29u
dChleHByZXNzaW9uLCBjb250aW51ZVF1YXNpKTsKICAgfQpAQCAtNDAzLDcgKzQyOSw3IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2Vy
Q29uZmlnKSB7CiAgICAgICBjeC5tYXJrZWQgPSAicHJvcGVydHkiOwogICAgICAgaWYgKHZhbHVl
ID09ICJnZXQiIHx8IHZhbHVlID09ICJzZXQiKSByZXR1cm4gY29udChnZXR0ZXJTZXR0ZXIpOwog
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSAibnVtYmVyIiB8fCB0eXBlID09ICJzdHJpbmciKSB7Ci0g
ICAgICBjeC5tYXJrZWQgPSB0eXBlICsgIiBwcm9wZXJ0eSI7CisgICAgICBjeC5tYXJrZWQgPSBq
c29ubGRNb2RlID8gInByb3BlcnR5IiA6ICh0eXBlICsgIiBwcm9wZXJ0eSIpOwogICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSAiWyIpIHsKICAgICAgIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVj
dCgiXSIpLCBhZnRlcnByb3ApOwogICAgIH0KQEAgLTQxOCw3ICs0NDQsNyBAQCBDb2RlTWlycm9y
LmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykg
ewogICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEpOwog
ICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIHBhc3MoZnVuY3Rpb25kZWYpOwogICB9Ci0gIGZ1
bmN0aW9uIGNvbW1hc2VwKHdoYXQsIGVuZCwgaW5mbykgeworICBmdW5jdGlvbiBjb21tYXNlcCh3
aGF0LCBlbmQpIHsKICAgICBmdW5jdGlvbiBwcm9jZWVkKHR5cGUpIHsKICAgICAgIGlmICh0eXBl
ID09ICIsIikgewogICAgICAgICB2YXIgbGV4ID0gY3guc3RhdGUubGV4aWNhbDsKQEAgLTQzMCwx
MCArNDU2LDE0IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgfQogICAgIHJldHVybiBmdW5jdGlvbih0eXBl
KSB7CiAgICAgICBpZiAodHlwZSA9PSBlbmQpIHJldHVybiBjb250KCk7Ci0gICAgICBpZiAoaW5m
byA9PT0gZmFsc2UpIHJldHVybiBwYXNzKHdoYXQsIHByb2NlZWQpOwotICAgICAgcmV0dXJuIHBh
c3MocHVzaGxleChlbmQsIGluZm8pLCB3aGF0LCBwcm9jZWVkLCBwb3BsZXgpOworICAgICAgcmV0
dXJuIHBhc3Mod2hhdCwgcHJvY2VlZCk7CiAgICAgfTsKICAgfQorICBmdW5jdGlvbiBjb250Q29t
bWFzZXAod2hhdCwgZW5kLCBpbmZvKSB7CisgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBhcmd1bWVu
dHMubGVuZ3RoOyBpKyspCisgICAgICBjeC5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgcmV0
dXJuIGNvbnQocHVzaGxleChlbmQsIGluZm8pLCBjb21tYXNlcCh3aGF0LCBlbmQpLCBwb3BsZXgp
OworICB9CiAgIGZ1bmN0aW9uIGJsb2NrKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAifSIpIHJl
dHVybiBjb250KCk7CiAgICAgcmV0dXJuIHBhc3Moc3RhdGVtZW50LCBibG9jayk7CkBAIC00NDks
OCArNDc5LDggQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgfQogICBmdW5jdGlvbiBwYXR0ZXJuKHR5cGUsIHZh
bHVlKSB7CiAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgeyByZWdpc3Rlcih2YWx1ZSk7IHJl
dHVybiBjb250KCk7IH0KLSAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KGNvbW1hc2Vw
KHBhdHRlcm4sICJdIikpOwotICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQoY29tbWFz
ZXAocHJvcHBhdHRlcm4sICJ9IikpOworICAgIGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnRD
b21tYXNlcChwYXR0ZXJuLCAiXSIpOworICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnRD
b21tYXNlcChwcm9wcGF0dGVybiwgIn0iKTsKICAgfQogICBmdW5jdGlvbiBwcm9wcGF0dGVybih0
eXBlLCB2YWx1ZSkgewogICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIgJiYgIWN4LnN0cmVhbS5t
YXRjaCgvXlxzKjovLCBmYWxzZSkpIHsKQEAgLTQ2NywxMCArNDk3LDEwIEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udCh2YXJkZWYpOwogICB9CiAgIGZ1bmN0
aW9uIG1heWJlZWxzZSh0eXBlLCB2YWx1ZSkgewotICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGIi
ICYmIHZhbHVlID09ICJlbHNlIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBzdGF0ZW1l
bnQsIHBvcGxleCk7CisgICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYiIgJiYgdmFsdWUgPT0gImVs
c2UiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiwgImVsc2UiKSwgc3RhdGVtZW50LCBwb3Bs
ZXgpOwogICB9CiAgIGZ1bmN0aW9uIGZvcnNwZWModHlwZSkgewotICAgIGlmICh0eXBlID09ICIo
IikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBmb3JzcGVjMSwgZXhwZWN0KCIpIikpOworICAg
IGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBmb3JzcGVjMSwgZXhw
ZWN0KCIpIiksIHBvcGxleCk7CiAgIH0KICAgZnVuY3Rpb24gZm9yc3BlYzEodHlwZSkgewogICAg
IGlmICh0eXBlID09ICJ2YXIiKSByZXR1cm4gY29udCh2YXJkZWYsIGV4cGVjdCgiOyIpLCBmb3Jz
cGVjMik7CkBAIC00OTMsNyArNTIzLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2Ny
aXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgZnVuY3Rpb24gZnVuY3Rp
b25kZWYodHlwZSwgdmFsdWUpIHsKICAgICBpZiAodmFsdWUgPT0gIioiKSB7Y3gubWFya2VkID0g
ImtleXdvcmQiOyByZXR1cm4gY29udChmdW5jdGlvbmRlZik7fQogICAgIGlmICh0eXBlID09ICJ2
YXJpYWJsZSIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTt9Ci0g
ICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNoY29udGV4dCwgY29tbWFzZXAoZnVu
YXJnLCAiKSIpLCBzdGF0ZW1lbnQsIHBvcGNvbnRleHQpOworICAgIGlmICh0eXBlID09ICIoIikg
cmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIHB1c2hsZXgoIikiKSwgY29tbWFzZXAoZnVuYXJnLCAi
KSIpLCBwb3BsZXgsIHN0YXRlbWVudCwgcG9wY29udGV4dCk7CiAgIH0KICAgZnVuY3Rpb24gZnVu
YXJnKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAic3ByZWFkIikgcmV0dXJuIGNvbnQoZnVuYXJn
KTsKQEAgLTUwNiw3ICs1MzYsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh2YWx1ZSA9PSAiZXh0
ZW5kcyIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICB9CiAgIGZ1bmN0aW9uIG9iamxpdCh0
eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChjb21tYXNlcChvYmpwcm9w
LCAifSIpKTsKKyAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250Q29tbWFzZXAob2JqcHJv
cCwgIn0iKTsKICAgfQogICBmdW5jdGlvbiBhZnRlck1vZHVsZSh0eXBlLCB2YWx1ZSkgewogICAg
IGlmICh0eXBlID09ICJzdHJpbmciKSByZXR1cm4gY29udChzdGF0ZW1lbnQpOwpAQCAtNTIyLDE3
ICs1NTIsMjEgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICByZXR1cm4gcGFzcyhpbXBvcnRTcGVjLCBtYXli
ZUZyb20pOwogICB9CiAgIGZ1bmN0aW9uIGltcG9ydFNwZWModHlwZSwgdmFsdWUpIHsKLSAgICBp
ZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KGNvbW1hc2VwKGltcG9ydFNwZWMsICJ9IikpOwor
ICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnRDb21tYXNlcChpbXBvcnRTcGVjLCAifSIp
OwogICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHJlZ2lzdGVyKHZhbHVlKTsKICAgICByZXR1
cm4gY29udCgpOwogICB9CiAgIGZ1bmN0aW9uIG1heWJlRnJvbShfdHlwZSwgdmFsdWUpIHsKICAg
ICBpZiAodmFsdWUgPT0gImZyb20iKSB7IGN4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNv
bnQoZXhwcmVzc2lvbik7IH0KICAgfQorICBmdW5jdGlvbiBhcnJheUxpdGVyYWwodHlwZSkgewor
ICAgIGlmICh0eXBlID09ICJdIikgcmV0dXJuIGNvbnQoKTsKKyAgICByZXR1cm4gcGFzcyhleHBy
ZXNzaW9uTm9Db21tYSwgbWF5YmVBcnJheUNvbXByZWhlbnNpb24pOworICB9CiAgIGZ1bmN0aW9u
IG1heWJlQXJyYXlDb21wcmVoZW5zaW9uKHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAiZm9yIikg
cmV0dXJuIHBhc3MoY29tcHJlaGVuc2lvbik7Ci0gICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4g
Y29udChjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIl0iLCBmYWxzZSkpOwotICAgIHJldHVy
biBwYXNzKGNvbW1hc2VwKGV4cHJlc3Npb25Ob0NvbW1hLCAiXSIsIGZhbHNlKSk7CisgICAgaWYg
KHR5cGUgPT0gImZvciIpIHJldHVybiBwYXNzKGNvbXByZWhlbnNpb24sIGV4cGVjdCgiXSIpKTsK
KyAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KGNvbW1hc2VwKGV4cHJlc3Npb25Ob0Nv
bW1hLCAiXSIpKTsKKyAgICByZXR1cm4gcGFzcyhjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwg
Il0iKSk7CiAgIH0KICAgZnVuY3Rpb24gY29tcHJlaGVuc2lvbih0eXBlKSB7CiAgICAgaWYgKHR5
cGUgPT0gImZvciIpIHJldHVybiBjb250KGZvcnNwZWMsIGNvbXByZWhlbnNpb24pOwpAQCAtNTUy
LDcgKzU4Niw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICAgIGNvbnRleHQ6IHBhcnNlckNvbmZpZy5s
b2NhbFZhcnMgJiYge3ZhcnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnN9LAogICAgICAgICBpbmRl
bnRlZDogMAogICAgICAgfTsKLSAgICAgIGlmIChwYXJzZXJDb25maWcuZ2xvYmFsVmFycykgc3Rh
dGUuZ2xvYmFsVmFycyA9IHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzOworICAgICAgaWYgKHBhcnNl
ckNvbmZpZy5nbG9iYWxWYXJzICYmIHR5cGVvZiBwYXJzZXJDb25maWcuZ2xvYmFsVmFycyA9PSAi
b2JqZWN0IikKKyAgICAgICAgc3RhdGUuZ2xvYmFsVmFycyA9IHBhcnNlckNvbmZpZy5nbG9iYWxW
YXJzOwogICAgICAgcmV0dXJuIHN0YXRlOwogICAgIH0sCgpAQCAtNTc1LDcgKzYxMCw3IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2Vy
Q29uZmlnKSB7CiAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4g
MDsKICAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgw
KSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWw7CiAgICAgICAvLyBLbHVkZ2UgdG8gcHJldmVudCAn
bWF5YmVsc2UnIGZyb20gYmxvY2tpbmcgbGV4aWNhbCBzY29wZSBwb3BzCi0gICAgICBmb3IgKHZh
ciBpID0gc3RhdGUuY2MubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgIGlmICghL15c
cyplbHNlXGIvLnRlc3QodGV4dEFmdGVyKSkgZm9yICh2YXIgaSA9IHN0YXRlLmNjLmxlbmd0aCAt
IDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIHZhciBjID0gc3RhdGUuY2NbaV07CiAgICAgICAg
IGlmIChjID09IHBvcGxleCkgbGV4aWNhbCA9IGxleGljYWwucHJldjsKICAgICAgICAgZWxzZSBp
ZiAoYyAhPSBtYXliZWVsc2UpIGJyZWFrOwpAQCAtNjAzLDYgKzYzOCw3IEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgICAgZm9sZDogImJyYWNlIiwKCiAgICAgaGVscGVyVHlwZToganNvbk1vZGUgPyAianNvbiIg
OiAiamF2YXNjcmlwdCIsCisgICAganNvbmxkTW9kZToganNvbmxkTW9kZSwKICAgICBqc29uTW9k
ZToganNvbk1vZGUKICAgfTsKIH0pOwpAQCAtNjEzLDUgKzY0OSw4IEBAIENvZGVNaXJyb3IuZGVm
aW5lTUlNRSgiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CiBDb2RlTWly
cm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOwog
Q29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi9qc29uIiwge25hbWU6ICJqYXZhc2Ny
aXB0IiwganNvbjogdHJ1ZX0pOwogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94
LWpzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0cnVlfSk7CitDb2RlTWlycm9yLmRl
ZmluZU1JTUUoImFwcGxpY2F0aW9uL2xkK2pzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29u
bGQ6IHRydWV9KTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC90eXBlc2NyaXB0IiwgeyBu
YW1lOiAiamF2YXNjcmlwdCIsIHR5cGVzY3JpcHQ6IHRydWUgfSk7CiBDb2RlTWlycm9yLmRlZmlu
ZU1JTUUoImFwcGxpY2F0aW9uL3R5cGVzY3JpcHQiLCB7IG5hbWU6ICJqYXZhc2NyaXB0IiwgdHlw
ZXNjcmlwdDogdHJ1ZSB9KTsKKworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2xpdmVzY3JpcHQuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2xpdmVz
Y3JpcHQuanMKaW5kZXggYzAwMDMyNC4uOTMyMmJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9saXZlc2NyaXB0Lmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3IvbGl2ZXNjcmlwdC5qcwpAQCAtMiw2ICsyLDE3IEBACiAgKiBMaW5rIHRvIHRoZSBwcm9q
ZWN0J3MgR2l0SHViIHBhZ2U6CiAgKiBodHRwczovL2dpdGh1Yi5jb20vZHVyYWxvZy9Db2RlTWly
cm9yCiAgKi8KKworKGZ1bmN0aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9i
amVjdCIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKKyAgICBtb2Qo
cmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSk7CisgIGVsc2UgaWYgKHR5cGVvZiBkZWZp
bmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAgICBkZWZpbmUoWyIuLi8u
Li9saWIvY29kZW1pcnJvciJdLCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52Cisg
ICAgbW9kKENvZGVNaXJyb3IpOworfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgeworInVzZSBzdHJp
Y3QiOworCiAoZnVuY3Rpb24oKSB7CiAgIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgnbGl2ZXNjcmlw
dCcsIGZ1bmN0aW9uKCl7CiAgICAgdmFyIHRva2VuQmFzZSwgZXh0ZXJuYWw7CkBAIC0yNjUsMyAr
Mjc2LDUgQEAKIH0pKCk7CgogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCd0ZXh0L3gtbGl2ZXNjcmlw
dCcsICdsaXZlc2NyaXB0Jyk7CisKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9tYXRjaGJyYWNrZXRzLmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9t
YXRjaGJyYWNrZXRzLmpzCmluZGV4IDlkOWIzODgyLi5kY2RkZTgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNo
YnJhY2tldHMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9tYXRjaGJyYWNrZXRzLmpzCkBAIC0xLDczICsxLDEwMCBAQAotKGZ1
bmN0aW9uKCkgeworKGZ1bmN0aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9i
amVjdCIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKKyAgICBtb2Qo
cmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSk7CisgIGVsc2UgaWYgKHR5cGVvZiBkZWZp
bmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAgICBkZWZpbmUoWyIuLi8u
Li9saWIvY29kZW1pcnJvciJdLCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52Cisg
ICAgbW9kKENvZGVNaXJyb3IpOworfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgewogICB2YXIgaWVf
bHQ4ID0gL01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYKICAgICAoZG9jdW1l
bnQuZG9jdW1lbnRNb2RlID09IG51bGwgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgOCk7Cgog
ICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3M7CgogICB2YXIgbWF0Y2hpbmcgPSB7IigiOiAiKT4i
LCAiKSI6ICIoPCIsICJbIjogIl0+IiwgIl0iOiAiWzwiLCAieyI6ICJ9PiIsICJ9IjogIns8In07
Ci0gIGZ1bmN0aW9uIGZpbmRNYXRjaGluZ0JyYWNrZXQoY20sIHdoZXJlLCBzdHJpY3QpIHsKLSAg
ICB2YXIgc3RhdGUgPSBjbS5zdGF0ZS5tYXRjaEJyYWNrZXRzOwotICAgIHZhciBtYXhTY2FuTGVu
ID0gKHN0YXRlICYmIHN0YXRlLm1heFNjYW5MaW5lTGVuZ3RoKSB8fCAxMDAwMDsKLSAgICB2YXIg
bWF4U2NhbkxpbmVzID0gKHN0YXRlICYmIHN0YXRlLm1heFNjYW5MaW5lcykgfHwgMTAwOwoKLSAg
ICB2YXIgY3VyID0gd2hlcmUgfHwgY20uZ2V0Q3Vyc29yKCksIGxpbmUgPSBjbS5nZXRMaW5lSGFu
ZGxlKGN1ci5saW5lKSwgcG9zID0gY3VyLmNoIC0gMTsKKyAgZnVuY3Rpb24gZmluZE1hdGNoaW5n
QnJhY2tldChjbSwgd2hlcmUsIHN0cmljdCwgY29uZmlnKSB7CisgICAgdmFyIGxpbmUgPSBjbS5n
ZXRMaW5lSGFuZGxlKHdoZXJlLmxpbmUpLCBwb3MgPSB3aGVyZS5jaCAtIDE7CiAgICAgdmFyIG1h
dGNoID0gKHBvcyA+PSAwICYmIG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQocG9zKV0pIHx8IG1h
dGNoaW5nW2xpbmUudGV4dC5jaGFyQXQoKytwb3MpXTsKICAgICBpZiAoIW1hdGNoKSByZXR1cm4g
bnVsbDsKLSAgICB2YXIgZm9yd2FyZCA9IG1hdGNoLmNoYXJBdCgxKSA9PSAiPiIsIGQgPSBmb3J3
YXJkID8gMSA6IC0xOwotICAgIGlmIChzdHJpY3QgJiYgZm9yd2FyZCAhPSAocG9zID09IGN1ci5j
aCkpIHJldHVybiBudWxsOwotICAgIHZhciBzdHlsZSA9IGNtLmdldFRva2VuVHlwZUF0KFBvcyhj
dXIubGluZSwgcG9zICsgMSkpOworICAgIHZhciBkaXIgPSBtYXRjaC5jaGFyQXQoMSkgPT0gIj4i
ID8gMSA6IC0xOworICAgIGlmIChzdHJpY3QgJiYgKGRpciA+IDApICE9IChwb3MgPT0gd2hlcmUu
Y2gpKSByZXR1cm4gbnVsbDsKKyAgICB2YXIgc3R5bGUgPSBjbS5nZXRUb2tlblR5cGVBdChQb3Mo
d2hlcmUubGluZSwgcG9zICsgMSkpOwoKLSAgICB2YXIgc3RhY2sgPSBbbGluZS50ZXh0LmNoYXJB
dChwb3MpXSwgcmUgPSAvWygpe31bXF1dLzsKLSAgICBmdW5jdGlvbiBzY2FuKGxpbmUsIGxpbmVO
bywgc3RhcnQpIHsKLSAgICAgIGlmICghbGluZS50ZXh0KSByZXR1cm47Ci0gICAgICB2YXIgcG9z
ID0gZm9yd2FyZCA/IDAgOiBsaW5lLnRleHQubGVuZ3RoIC0gMSwgZW5kID0gZm9yd2FyZCA/IGxp
bmUudGV4dC5sZW5ndGggOiAtMTsKLSAgICAgIGlmIChsaW5lLnRleHQubGVuZ3RoID4gbWF4U2Nh
bkxlbikgcmV0dXJuIG51bGw7Ci0gICAgICBpZiAoc3RhcnQgIT0gbnVsbCkgcG9zID0gc3RhcnQg
KyBkOwotICAgICAgZm9yICg7IHBvcyAhPSBlbmQ7IHBvcyArPSBkKSB7Ci0gICAgICAgIHZhciBj
aCA9IGxpbmUudGV4dC5jaGFyQXQocG9zKTsKLSAgICAgICAgaWYgKHJlLnRlc3QoY2gpICYmIGNt
LmdldFRva2VuVHlwZUF0KFBvcyhsaW5lTm8sIHBvcyArIDEpKSA9PSBzdHlsZSkgeworICAgIHZh
ciBmb3VuZCA9IHNjYW5Gb3JCcmFja2V0KGNtLCBQb3Mod2hlcmUubGluZSwgcG9zICsgKGRpciA+
IDAgPyAxIDogMCkpLCBkaXIsIHN0eWxlIHx8IG51bGwsIGNvbmZpZyk7CisgICAgaWYgKGZvdW5k
ID09IG51bGwpIHJldHVybiBudWxsOworICAgIHJldHVybiB7ZnJvbTogUG9zKHdoZXJlLmxpbmUs
IHBvcyksIHRvOiBmb3VuZCAmJiBmb3VuZC5wb3MsCisgICAgICAgICAgICBtYXRjaDogZm91bmQg
JiYgZm91bmQuY2ggPT0gbWF0Y2guY2hhckF0KDApLCBmb3J3YXJkOiBkaXIgPiAwfTsKKyAgfQor
CisgIC8vIGJyYWNrZXRSZWdleCBpcyB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggdHlwZSBvZiBicmFj
a2V0IHRvIHNjYW4KKyAgLy8gc2hvdWxkIGJlIGEgcmVnZXhwLCBlLmcuIC9bW1xdXS8KKyAgLy8K
KyAgLy8gTm90ZTogSWYgIndoZXJlIiBpcyBvbiBhbiBvcGVuIGJyYWNrZXQsIHRoZW4gdGhpcyBi
cmFja2V0IGlzIGlnbm9yZWQuCisgIC8vCisgIC8vIFJldHVybnMgZmFsc2Ugd2hlbiBubyBicmFj
a2V0IHdhcyBmb3VuZCwgbnVsbCB3aGVuIGl0IHJlYWNoZWQKKyAgLy8gbWF4U2NhbkxpbmVzIGFu
ZCBnYXZlIHVwCisgIGZ1bmN0aW9uIHNjYW5Gb3JCcmFja2V0KGNtLCB3aGVyZSwgZGlyLCBzdHls
ZSwgY29uZmlnKSB7CisgICAgdmFyIG1heFNjYW5MZW4gPSAoY29uZmlnICYmIGNvbmZpZy5tYXhT
Y2FuTGluZUxlbmd0aCkgfHwgMTAwMDA7CisgICAgdmFyIG1heFNjYW5MaW5lcyA9IChjb25maWcg
JiYgY29uZmlnLm1heFNjYW5MaW5lcykgfHwgMTAwMDsKKworICAgIHZhciBzdGFjayA9IFtdOwor
ICAgIHZhciByZSA9IGNvbmZpZyAmJiBjb25maWcuYnJhY2tldFJlZ2V4ID8gY29uZmlnLmJyYWNr
ZXRSZWdleCA6IC9bKCl7fVtcXV0vOworICAgIHZhciBsaW5lRW5kID0gZGlyID4gMCA/IE1hdGgu
bWluKHdoZXJlLmxpbmUgKyBtYXhTY2FuTGluZXMsIGNtLmxhc3RMaW5lKCkgKyAxKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IE1hdGgubWF4KGNtLmZpcnN0TGluZSgpIC0gMSwgd2hlcmUu
bGluZSAtIG1heFNjYW5MaW5lcyk7CisgICAgZm9yICh2YXIgbGluZU5vID0gd2hlcmUubGluZTsg
bGluZU5vICE9IGxpbmVFbmQ7IGxpbmVObyArPSBkaXIpIHsKKyAgICAgIHZhciBsaW5lID0gY20u
Z2V0TGluZShsaW5lTm8pOworICAgICAgaWYgKCFsaW5lKSBjb250aW51ZTsKKyAgICAgIHZhciBw
b3MgPSBkaXIgPiAwID8gMCA6IGxpbmUubGVuZ3RoIC0gMSwgZW5kID0gZGlyID4gMCA/IGxpbmUu
bGVuZ3RoIDogLTE7CisgICAgICBpZiAobGluZS5sZW5ndGggPiBtYXhTY2FuTGVuKSBjb250aW51
ZTsKKyAgICAgIGlmIChsaW5lTm8gPT0gd2hlcmUubGluZSkgcG9zID0gd2hlcmUuY2ggLSAoZGly
IDwgMCA/IDEgOiAwKTsKKyAgICAgIGZvciAoOyBwb3MgIT0gZW5kOyBwb3MgKz0gZGlyKSB7Cisg
ICAgICAgIHZhciBjaCA9IGxpbmUuY2hhckF0KHBvcyk7CisgICAgICAgIGlmIChyZS50ZXN0KGNo
KSAmJiAoc3R5bGUgPT09IHVuZGVmaW5lZCB8fCBjbS5nZXRUb2tlblR5cGVBdChQb3MobGluZU5v
LCBwb3MgKyAxKSkgPT0gc3R5bGUpKSB7CiAgICAgICAgICAgdmFyIG1hdGNoID0gbWF0Y2hpbmdb
Y2hdOwotICAgICAgICAgIGlmIChtYXRjaC5jaGFyQXQoMSkgPT0gIj4iID09IGZvcndhcmQpIHN0
YWNrLnB1c2goY2gpOwotICAgICAgICAgIGVsc2UgaWYgKHN0YWNrLnBvcCgpICE9IG1hdGNoLmNo
YXJBdCgwKSkgcmV0dXJuIHtwb3M6IHBvcywgbWF0Y2g6IGZhbHNlfTsKLSAgICAgICAgICBlbHNl
IGlmICghc3RhY2subGVuZ3RoKSByZXR1cm4ge3BvczogcG9zLCBtYXRjaDogdHJ1ZX07CisgICAg
ICAgICAgaWYgKChtYXRjaC5jaGFyQXQoMSkgPT0gIj4iKSA9PSAoZGlyID4gMCkpIHN0YWNrLnB1
c2goY2gpOworICAgICAgICAgIGVsc2UgaWYgKCFzdGFjay5sZW5ndGgpIHJldHVybiB7cG9zOiBQ
b3MobGluZU5vLCBwb3MpLCBjaDogY2h9OworICAgICAgICAgIGVsc2Ugc3RhY2sucG9wKCk7CiAg
ICAgICAgIH0KICAgICAgIH0KICAgICB9Ci0gICAgZm9yICh2YXIgaSA9IGN1ci5saW5lLCBmb3Vu
ZCwgZSA9IGZvcndhcmQgPyBNYXRoLm1pbihpICsgbWF4U2NhbkxpbmVzLCBjbS5saW5lQ291bnQo
KSkgOiBNYXRoLm1heCgtMSwgaSAtIG1heFNjYW5MaW5lcyk7IGkgIT0gZTsgaSs9ZCkgewotICAg
ICAgaWYgKGkgPT0gY3VyLmxpbmUpIGZvdW5kID0gc2NhbihsaW5lLCBpLCBwb3MpOwotICAgICAg
ZWxzZSBmb3VuZCA9IHNjYW4oY20uZ2V0TGluZUhhbmRsZShpKSwgaSk7Ci0gICAgICBpZiAoZm91
bmQpIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4ge2Zyb206IFBvcyhjdXIubGluZSwgcG9zKSwg
dG86IGZvdW5kICYmIFBvcyhpLCBmb3VuZC5wb3MpLAotICAgICAgICAgICAgbWF0Y2g6IGZvdW5k
ICYmIGZvdW5kLm1hdGNoLCBmb3J3YXJkOiBmb3J3YXJkfTsKKyAgICByZXR1cm4gbGluZU5vIC0g
ZGlyID09IChkaXIgPiAwID8gY20ubGFzdExpbmUoKSA6IGNtLmZpcnN0TGluZSgpKSA/IGZhbHNl
IDogbnVsbDsKICAgfQoKLSAgZnVuY3Rpb24gbWF0Y2hCcmFja2V0cyhjbSwgYXV0b2NsZWFyKSB7
CisgIGZ1bmN0aW9uIG1hdGNoQnJhY2tldHMoY20sIGF1dG9jbGVhciwgY29uZmlnKSB7CiAgICAg
Ly8gRGlzYWJsZSBicmFjZSBtYXRjaGluZyBpbiBsb25nIGxpbmVzLCBzaW5jZSBpdCdsbCBjYXVz
ZSBodWdlbHkgc2xvdyB1cGRhdGVzCiAgICAgdmFyIG1heEhpZ2hsaWdodExlbiA9IGNtLnN0YXRl
Lm1hdGNoQnJhY2tldHMubWF4SGlnaGxpZ2h0TGluZUxlbmd0aCB8fCAxMDAwOwotICAgIHZhciBm
b3VuZCA9IGZpbmRNYXRjaGluZ0JyYWNrZXQoY20pOwotICAgIGlmICghZm91bmQgfHwgY20uZ2V0
TGluZShmb3VuZC5mcm9tLmxpbmUpLmxlbmd0aCA+IG1heEhpZ2hsaWdodExlbiB8fAotICAgICAg
IGZvdW5kLnRvICYmIGNtLmdldExpbmUoZm91bmQudG8ubGluZSkubGVuZ3RoID4gbWF4SGlnaGxp
Z2h0TGVuKQotICAgICAgcmV0dXJuOworICAgIHZhciBtYXJrcyA9IFtdLCByYW5nZXMgPSBjbS5s
aXN0U2VsZWN0aW9ucygpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsg
aSsrKSB7CisgICAgICB2YXIgbWF0Y2ggPSByYW5nZXNbaV0uZW1wdHkoKSAmJiBmaW5kTWF0Y2hp
bmdCcmFja2V0KGNtLCByYW5nZXNbaV0uaGVhZCwgZmFsc2UsIGNvbmZpZyk7CisgICAgICBpZiAo
bWF0Y2ggJiYgY20uZ2V0TGluZShtYXRjaC5mcm9tLmxpbmUpLmxlbmd0aCA8PSBtYXhIaWdobGln
aHRMZW4pIHsKKyAgICAgICAgdmFyIHN0eWxlID0gbWF0Y2gubWF0Y2ggPyAiQ29kZU1pcnJvci1t
YXRjaGluZ2JyYWNrZXQiIDogIkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IjsKKyAgICAg
ICAgbWFya3MucHVzaChjbS5tYXJrVGV4dChtYXRjaC5mcm9tLCBQb3MobWF0Y2guZnJvbS5saW5l
LCBtYXRjaC5mcm9tLmNoICsgMSksIHtjbGFzc05hbWU6IHN0eWxlfSkpOworICAgICAgICBpZiAo
bWF0Y2gudG8gJiYgY20uZ2V0TGluZShtYXRjaC50by5saW5lKS5sZW5ndGggPD0gbWF4SGlnaGxp
Z2h0TGVuKQorICAgICAgICAgIG1hcmtzLnB1c2goY20ubWFya1RleHQobWF0Y2gudG8sIFBvcyht
YXRjaC50by5saW5lLCBtYXRjaC50by5jaCArIDEpLCB7Y2xhc3NOYW1lOiBzdHlsZX0pKTsKKyAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAobWFya3MubGVuZ3RoKSB7CisgICAgICAvLyBLbHVkZ2Ug
dG8gd29yayBhcm91bmQgdGhlIElFIGJ1ZyBmcm9tIGlzc3VlICMxMTkzLCB3aGVyZSB0ZXh0Cisg
ICAgICAvLyBpbnB1dCBzdG9wcyBnb2luZyB0byB0aGUgdGV4dGFyZSB3aGV2ZXIgdGhpcyBmaXJl
cy4KKyAgICAgIGlmIChpZV9sdDggJiYgY20uc3RhdGUuZm9jdXNlZCkgY20uZGlzcGxheS5pbnB1
dC5mb2N1cygpOwoKLSAgICB2YXIgc3R5bGUgPSBmb3VuZC5tYXRjaCA/ICJDb2RlTWlycm9yLW1h
dGNoaW5nYnJhY2tldCIgOiAiQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQiOwotICAgIHZh
ciBvbmUgPSBjbS5tYXJrVGV4dChmb3VuZC5mcm9tLCBQb3MoZm91bmQuZnJvbS5saW5lLCBmb3Vu
ZC5mcm9tLmNoICsgMSksIHtjbGFzc05hbWU6IHN0eWxlfSk7Ci0gICAgdmFyIHR3byA9IGZvdW5k
LnRvICYmIGNtLm1hcmtUZXh0KGZvdW5kLnRvLCBQb3MoZm91bmQudG8ubGluZSwgZm91bmQudG8u
Y2ggKyAxKSwge2NsYXNzTmFtZTogc3R5bGV9KTsKLSAgICAvLyBLbHVkZ2UgdG8gd29yayBhcm91
bmQgdGhlIElFIGJ1ZyBmcm9tIGlzc3VlICMxMTkzLCB3aGVyZSB0ZXh0Ci0gICAgLy8gaW5wdXQg
c3RvcHMgZ29pbmcgdG8gdGhlIHRleHRhcmUgd2hldmVyIHRoaXMgZmlyZXMuCi0gICAgaWYgKGll
X2x0OCAmJiBjbS5zdGF0ZS5mb2N1c2VkKSBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7Ci0gICAg
dmFyIGNsZWFyID0gZnVuY3Rpb24oKSB7Ci0gICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7
IG9uZS5jbGVhcigpOyB0d28gJiYgdHdvLmNsZWFyKCk7IH0pOwotICAgIH07Ci0gICAgaWYgKGF1
dG9jbGVhcikgc2V0VGltZW91dChjbGVhciwgODAwKTsKLSAgICBlbHNlIHJldHVybiBjbGVhcjsK
KyAgICAgIHZhciBjbGVhciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBjbS5vcGVyYXRpb24oZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7IGkr
KykgbWFya3NbaV0uY2xlYXIoKTsKKyAgICAgICAgfSk7CisgICAgICB9OworICAgICAgaWYgKGF1
dG9jbGVhcikgc2V0VGltZW91dChjbGVhciwgODAwKTsKKyAgICAgIGVsc2UgcmV0dXJuIGNsZWFy
OworICAgIH0KICAgfQoKICAgdmFyIGN1cnJlbnRseUhpZ2hsaWdodGVkID0gbnVsbDsKICAgZnVu
Y3Rpb24gZG9NYXRjaEJyYWNrZXRzKGNtKSB7CiAgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkg
ewogICAgICAgaWYgKGN1cnJlbnRseUhpZ2hsaWdodGVkKSB7Y3VycmVudGx5SGlnaGxpZ2h0ZWQo
KTsgY3VycmVudGx5SGlnaGxpZ2h0ZWQgPSBudWxsO30KLSAgICAgIGlmICghY20uc29tZXRoaW5n
U2VsZWN0ZWQoKSkgY3VycmVudGx5SGlnaGxpZ2h0ZWQgPSBtYXRjaEJyYWNrZXRzKGNtLCBmYWxz
ZSk7CisgICAgICBjdXJyZW50bHlIaWdobGlnaHRlZCA9IG1hdGNoQnJhY2tldHMoY20sIGZhbHNl
LCBjbS5zdGF0ZS5tYXRjaEJyYWNrZXRzKTsKICAgICB9KTsKICAgfQoKQEAgLTgxLDcgKzEwOCwx
MCBAQAogICB9KTsKCiAgIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJtYXRjaEJyYWNrZXRz
IiwgZnVuY3Rpb24oKSB7bWF0Y2hCcmFja2V0cyh0aGlzLCB0cnVlKTt9KTsKLSAgQ29kZU1pcnJv
ci5kZWZpbmVFeHRlbnNpb24oImZpbmRNYXRjaGluZ0JyYWNrZXQiLCBmdW5jdGlvbihwb3MsIHN0
cmljdCl7Ci0gICAgcmV0dXJuIGZpbmRNYXRjaGluZ0JyYWNrZXQodGhpcywgcG9zLCBzdHJpY3Qp
OworICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigiZmluZE1hdGNoaW5nQnJhY2tldCIsIGZ1
bmN0aW9uKHBvcywgc3RyaWN0LCBjb25maWcpeworICAgIHJldHVybiBmaW5kTWF0Y2hpbmdCcmFj
a2V0KHRoaXMsIHBvcywgc3RyaWN0LCBjb25maWcpOworICB9KTsKKyAgQ29kZU1pcnJvci5kZWZp
bmVFeHRlbnNpb24oInNjYW5Gb3JCcmFja2V0IiwgZnVuY3Rpb24ocG9zLCBkaXIsIHN0eWxlLCBj
b25maWcpeworICAgIHJldHVybiBzY2FuRm9yQnJhY2tldCh0aGlzLCBwb3MsIGRpciwgc3R5bGUs
IGNvbmZpZyk7CiAgIH0pOwotfSkoKTsKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9vdmVybGF5LmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9vdmVy
bGF5LmpzCmluZGV4IGI3OTI4YTcuLmMxNmIwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivb3ZlcmxheS5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L292ZXJsYXkuanMKQEAgLTYsMTUgKzYsMjUgQEAKIC8vIG92ZXJsYXkgd2lucywgdW5sZXNzIHRo
ZSBjb21iaW5lIGFyZ3VtZW50IHdhcyB0cnVlLCBpbiB3aGljaCBjYXNlCiAvLyB0aGUgc3R5bGVz
IGFyZSBjb21iaW5lZC4KCi0vLyBvdmVybGF5UGFyc2VyIGlzIHRoZSBvbGQsIGRlcHJlY2F0ZWQg
bmFtZQotQ29kZU1pcnJvci5vdmVybGF5TW9kZSA9IENvZGVNaXJyb3Iub3ZlcmxheVBhcnNlciA9
IGZ1bmN0aW9uKGJhc2UsIG92ZXJsYXksIGNvbWJpbmUpIHsKKyhmdW5jdGlvbihtb2QpIHsKKyAg
aWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVj
dCIpIC8vIENvbW1vbkpTCisgICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikp
OworICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkg
Ly8gQU1ECisgICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsKKyAgZWxz
ZSAvLyBQbGFpbiBicm93c2VyIGVudgorICAgIG1vZChDb2RlTWlycm9yKTsKK30pKGZ1bmN0aW9u
KENvZGVNaXJyb3IpIHsKKyJ1c2Ugc3RyaWN0IjsKKworQ29kZU1pcnJvci5vdmVybGF5TW9kZSA9
IGZ1bmN0aW9uKGJhc2UsIG92ZXJsYXksIGNvbWJpbmUpIHsKICAgcmV0dXJuIHsKICAgICBzdGFy
dFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiB7CiAgICAgICAgIGJhc2U6IENvZGVN
aXJyb3Iuc3RhcnRTdGF0ZShiYXNlKSwKICAgICAgICAgb3ZlcmxheTogQ29kZU1pcnJvci5zdGFy
dFN0YXRlKG92ZXJsYXkpLAogICAgICAgICBiYXNlUG9zOiAwLCBiYXNlQ3VyOiBudWxsLAotICAg
ICAgICBvdmVybGF5UG9zOiAwLCBvdmVybGF5Q3VyOiBudWxsCisgICAgICAgIG92ZXJsYXlQb3M6
IDAsIG92ZXJsYXlDdXI6IG51bGwsCisgICAgICAgIGxpbmVTZWVuOiBudWxsCiAgICAgICB9Owog
ICAgIH0sCiAgICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewpAQCAtMjcsNiArMzcsMTIg
QEAgQ29kZU1pcnJvci5vdmVybGF5TW9kZSA9IENvZGVNaXJyb3Iub3ZlcmxheVBhcnNlciA9IGZ1
bmN0aW9uKGJhc2UsIG92ZXJsYXksIGNvbWIKICAgICB9LAoKICAgICB0b2tlbjogZnVuY3Rpb24o
c3RyZWFtLCBzdGF0ZSkgeworICAgICAgaWYgKHN0cmVhbS5zb2woKSB8fCBzdHJlYW0uc3RyaW5n
ICE9IHN0YXRlLmxpbmVTZWVuIHx8CisgICAgICAgICAgTWF0aC5taW4oc3RhdGUuYmFzZVBvcywg
c3RhdGUub3ZlcmxheVBvcykgPCBzdHJlYW0uc3RhcnQpIHsKKyAgICAgICAgc3RhdGUubGluZVNl
ZW4gPSBzdHJlYW0uc3RyaW5nOworICAgICAgICBzdGF0ZS5iYXNlUG9zID0gc3RhdGUub3Zlcmxh
eVBvcyA9IHN0cmVhbS5zdGFydDsKKyAgICAgIH0KKwogICAgICAgaWYgKHN0cmVhbS5zdGFydCA9
PSBzdGF0ZS5iYXNlUG9zKSB7CiAgICAgICAgIHN0YXRlLmJhc2VDdXIgPSBiYXNlLnRva2VuKHN0
cmVhbSwgc3RhdGUuYmFzZSk7CiAgICAgICAgIHN0YXRlLmJhc2VQb3MgPSBzdHJlYW0ucG9zOwpA
QCAtMzcsNyArNTMsNiBAQCBDb2RlTWlycm9yLm92ZXJsYXlNb2RlID0gQ29kZU1pcnJvci5vdmVy
bGF5UGFyc2VyID0gZnVuY3Rpb24oYmFzZSwgb3ZlcmxheSwgY29tYgogICAgICAgICBzdGF0ZS5v
dmVybGF5UG9zID0gc3RyZWFtLnBvczsKICAgICAgIH0KICAgICAgIHN0cmVhbS5wb3MgPSBNYXRo
Lm1pbihzdGF0ZS5iYXNlUG9zLCBzdGF0ZS5vdmVybGF5UG9zKTsKLSAgICAgIGlmIChzdHJlYW0u
ZW9sKCkpIHN0YXRlLmJhc2VQb3MgPSBzdGF0ZS5vdmVybGF5UG9zID0gMDsKCiAgICAgICBpZiAo
c3RhdGUub3ZlcmxheUN1ciA9PSBudWxsKSByZXR1cm4gc3RhdGUuYmFzZUN1cjsKICAgICAgIGlm
IChzdGF0ZS5iYXNlQ3VyICE9IG51bGwgJiYgY29tYmluZSkgcmV0dXJuIHN0YXRlLmJhc2VDdXIg
KyAiICIgKyBzdGF0ZS5vdmVybGF5Q3VyOwpAQCAtNTcsMyArNzIsNSBAQCBDb2RlTWlycm9yLm92
ZXJsYXlNb2RlID0gQ29kZU1pcnJvci5vdmVybGF5UGFyc2VyID0gZnVuY3Rpb24oYmFzZSwgb3Zl
cmxheSwgY29tYgogICAgIH0KICAgfTsKIH07CisKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9wbGFjZWhvbGRl
ci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3IvcGxhY2Vob2xkZXIuanMKaW5kZXggNzQ4YWZlNy4uMGZkYzliMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9w
bGFjZWhvbGRlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL3BsYWNlaG9sZGVyLmpzCkBAIC0xLDQgKzEsMTEgQEAKLShmdW5j
dGlvbigpIHsKKyhmdW5jdGlvbihtb2QpIHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmpl
Y3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCisgICAgbW9kKHJl
cXVpcmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikpOworICBlbHNlIGlmICh0eXBlb2YgZGVmaW5l
ID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgLy8gQU1ECisgICAgZGVmaW5lKFsiLi4vLi4v
bGliL2NvZGVtaXJyb3IiXSwgbW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudgorICAg
IG1vZChDb2RlTWlycm9yKTsKK30pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKICAgQ29kZU1pcnJv
ci5kZWZpbmVPcHRpb24oInBsYWNlaG9sZGVyIiwgIiIsIGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkg
ewogICAgIHZhciBwcmV2ID0gb2xkICYmIG9sZCAhPSBDb2RlTWlycm9yLkluaXQ7CiAgICAgaWYg
KHZhbCAmJiAhcHJldikgewpAQCAtNDUsNCArNTIsNCBAQAogICBmdW5jdGlvbiBpc0VtcHR5KGNt
KSB7CiAgICAgcmV0dXJuIChjbS5saW5lQ291bnQoKSA9PT0gMSkgJiYgKGNtLmdldExpbmUoMCkg
PT09ICIiKTsKICAgfQotfSkoKTsKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9ydW5tb2RlLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9ydW5tb2Rl
LmpzCmluZGV4IDdhYWZhMmEuLjM1MTg0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvcnVubW9kZS5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3J1
bm1vZGUuanMKQEAgLTEsMyArMSwxMyBAQAorKGZ1bmN0aW9uKG1vZCkgeworICBpZiAodHlwZW9m
IGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29t
bW9uSlMKKyAgICBtb2QocmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSk7CisgIGVsc2Ug
aWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAg
ICBkZWZpbmUoWyIuLi8uLi9saWIvY29kZW1pcnJvciJdLCBtb2QpOworICBlbHNlIC8vIFBsYWlu
IGJyb3dzZXIgZW52CisgICAgbW9kKENvZGVNaXJyb3IpOworfSkoZnVuY3Rpb24oQ29kZU1pcnJv
cikgeworInVzZSBzdHJpY3QiOworCiBDb2RlTWlycm9yLnJ1bk1vZGUgPSBmdW5jdGlvbihzdHJp
bmcsIG1vZGVzcGVjLCBjYWxsYmFjaywgb3B0aW9ucykgewogICB2YXIgbW9kZSA9IENvZGVNaXJy
b3IuZ2V0TW9kZShDb2RlTWlycm9yLmRlZmF1bHRzLCBtb2Rlc3BlYyk7CiAgIHZhciBpZSA9IC9N
U0lFIFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwpAQCAtNDMsNyArNTMsNyBAQCBDb2Rl
TWlycm9yLnJ1bk1vZGUgPSBmdW5jdGlvbihzdHJpbmcsIG1vZGVzcGVjLCBjYWxsYmFjaywgb3B0
aW9ucykgewogICAgIH07CiAgIH0KCi0gIHZhciBsaW5lcyA9IENvZGVNaXJyb3Iuc3BsaXRMaW5l
cyhzdHJpbmcpLCBzdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShtb2RlKTsKKyAgdmFyIGxp
bmVzID0gQ29kZU1pcnJvci5zcGxpdExpbmVzKHN0cmluZyksIHN0YXRlID0gKG9wdGlvbnMgJiYg
b3B0aW9ucy5zdGF0ZSkgfHwgQ29kZU1pcnJvci5zdGFydFN0YXRlKG1vZGUpOwogICBmb3IgKHZh
ciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgIGlmIChpKSBjYWxs
YmFjaygiXG4iKTsKICAgICB2YXIgc3RyZWFtID0gbmV3IENvZGVNaXJyb3IuU3RyaW5nU3RyZWFt
KGxpbmVzW2ldKTsKQEAgLTU0LDMgKzY0LDUgQEAgQ29kZU1pcnJvci5ydW5Nb2RlID0gZnVuY3Rp
b24oc3RyaW5nLCBtb2Rlc3BlYywgY2FsbGJhY2ssIG9wdGlvbnMpIHsKICAgICB9CiAgIH0KIH07
CisKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNzLmpzCmluZGV4IDljOWEwZGEuLjc0YWU5
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3Ivc2Fzcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3Nhc3MuanMKQEAgLTEsMyArMSwxMyBAQAorKGZ1
bmN0aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgdHlwZW9m
IG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKKyAgICBtb2QocmVxdWlyZSgiLi4vLi4v
bGliL2NvZGVtaXJyb3IiKSk7CisgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9u
IiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAgICBkZWZpbmUoWyIuLi8uLi9saWIvY29kZW1pcnJv
ciJdLCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52CisgICAgbW9kKENvZGVNaXJy
b3IpOworfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgeworInVzZSBzdHJpY3QiOworCiBDb2RlTWly
cm9yLmRlZmluZU1vZGUoInNhc3MiLCBmdW5jdGlvbihjb25maWcpIHsKICAgdmFyIHRva2VuUmVn
ZXhwID0gZnVuY3Rpb24od29yZHMpewogICAgIHJldHVybiBuZXcgUmVnRXhwKCJeIiArIHdvcmRz
LmpvaW4oInwiKSk7CkBAIC0zMjgsMyArMzM4LDUgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJz
YXNzIiwgZnVuY3Rpb24oY29uZmlnKSB7CiB9KTsKCiBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRl
eHQveC1zYXNzIiwgInNhc3MiKTsKKworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Iv
c2VhcmNoY3Vyc29yLmpzCmluZGV4IGMwMzRkNTguLjg5OWY0NGM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NlYXJj
aGN1cnNvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5qcwpAQCAtMSw0ICsxLDEyIEBACi0oZnVuY3Rp
b24oKXsKKyhmdW5jdGlvbihtb2QpIHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3Qi
ICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCisgICAgbW9kKHJlcXVp
cmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikpOworICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09
ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgLy8gQU1ECisgICAgZGVmaW5lKFsiLi4vLi4vbGli
L2NvZGVtaXJyb3IiXSwgbW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudgorICAgIG1v
ZChDb2RlTWlycm9yKTsKK30pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKKyAgInVzZSBzdHJpY3Qi
OwogICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3M7CgogICBmdW5jdGlvbiBTZWFyY2hDdXJzb3Io
ZG9jLCBxdWVyeSwgcG9zLCBjYXNlRm9sZCkgewpAQCAtNDcsNiArNTUsNyBAQAogICAgICAgICAg
ICAgICAgICAgbWF0Y2g6IG1hdGNofTsKICAgICAgIH07CiAgICAgfSBlbHNlIHsgLy8gU3RyaW5n
IHF1ZXJ5CisgICAgICB2YXIgb3JpZ1F1ZXJ5ID0gcXVlcnk7CiAgICAgICBpZiAoY2FzZUZvbGQp
IHF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKTsKICAgICAgIHZhciBmb2xkID0gY2FzZUZvbGQg
PyBmdW5jdGlvbihzdHIpe3JldHVybiBzdHIudG9Mb3dlckNhc2UoKTt9IDogZnVuY3Rpb24oc3Ry
KXtyZXR1cm4gc3RyO307CiAgICAgICB2YXIgdGFyZ2V0ID0gcXVlcnkuc3BsaXQoIlxuIik7CkBA
IC01OCwzMyArNjcsNDUgQEAKICAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBmdW5jdGlvbigpIHt9
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJl
dmVyc2UsIHBvcykgewotICAgICAgICAgICAgdmFyIGxpbmUgPSBmb2xkKGRvYy5nZXRMaW5lKHBv
cy5saW5lKSksIGxlbiA9IHF1ZXJ5Lmxlbmd0aCwgbWF0Y2g7Ci0gICAgICAgICAgICBpZiAocmV2
ZXJzZSA/IChwb3MuY2ggPj0gbGVuICYmIChtYXRjaCA9IGxpbmUubGFzdEluZGV4T2YocXVlcnks
IHBvcy5jaCAtIGxlbikpICE9IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgOiAobWF0Y2gg
PSBsaW5lLmluZGV4T2YocXVlcnksIHBvcy5jaCkpICE9IC0xKQotICAgICAgICAgICAgICByZXR1
cm4ge2Zyb206IFBvcyhwb3MubGluZSwgbWF0Y2gpLAotICAgICAgICAgICAgICAgICAgICAgIHRv
OiBQb3MocG9zLmxpbmUsIG1hdGNoICsgbGVuKX07CisgICAgICAgICAgICBpZiAocmV2ZXJzZSkg
eworICAgICAgICAgICAgICB2YXIgb3JpZyA9IGRvYy5nZXRMaW5lKHBvcy5saW5lKS5zbGljZSgw
LCBwb3MuY2gpLCBsaW5lID0gZm9sZChvcmlnKTsKKyAgICAgICAgICAgICAgdmFyIG1hdGNoID0g
bGluZS5sYXN0SW5kZXhPZihxdWVyeSk7CisgICAgICAgICAgICAgIGlmIChtYXRjaCA+IC0xKSB7
CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBhZGp1c3RQb3Mob3JpZywgbGluZSwgbWF0Y2gpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB7ZnJvbTogUG9zKHBvcy5saW5lLCBtYXRjaCksIHRvOiBQ
b3MocG9zLmxpbmUsIG1hdGNoICsgb3JpZ1F1ZXJ5Lmxlbmd0aCl9OworICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgIHZhciBvcmlnID0gZG9jLmdl
dExpbmUocG9zLmxpbmUpLnNsaWNlKHBvcy5jaCksIGxpbmUgPSBmb2xkKG9yaWcpOworICAgICAg
ICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5pbmRleE9mKHF1ZXJ5KTsKKyAgICAgICAgICAgICAg
IGlmIChtYXRjaCA+IC0xKSB7CisgICAgICAgICAgICAgICAgIG1hdGNoID0gYWRqdXN0UG9zKG9y
aWcsIGxpbmUsIG1hdGNoKSArIHBvcy5jaDsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHtmcm9t
OiBQb3MocG9zLmxpbmUsIG1hdGNoKSwgdG86IFBvcyhwb3MubGluZSwgbWF0Y2ggKyBvcmlnUXVl
cnkubGVuZ3RoKX07CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAg
fTsKICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIG9yaWdUYXJnZXQgPSBv
cmlnUXVlcnkuc3BsaXQoIlxuIik7CiAgICAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJl
dmVyc2UsIHBvcykgewotICAgICAgICAgIHZhciBsbiA9IHBvcy5saW5lLCBpZHggPSAocmV2ZXJz
ZSA/IHRhcmdldC5sZW5ndGggLSAxIDogMCksIG1hdGNoID0gdGFyZ2V0W2lkeF0sIGxpbmUgPSBm
b2xkKGRvYy5nZXRMaW5lKGxuKSk7Ci0gICAgICAgICAgdmFyIG9mZnNldEEgPSAocmV2ZXJzZSA/
IGxpbmUuaW5kZXhPZihtYXRjaCkgKyBtYXRjaC5sZW5ndGggOiBsaW5lLmxhc3RJbmRleE9mKG1h
dGNoKSk7Ci0gICAgICAgICAgaWYgKHJldmVyc2UgPyBvZmZzZXRBID4gcG9zLmNoIHx8IG9mZnNl
dEEgIT0gbWF0Y2gubGVuZ3RoCi0gICAgICAgICAgICAgIDogb2Zmc2V0QSA8IHBvcy5jaCB8fCBv
ZmZzZXRBICE9IGxpbmUubGVuZ3RoIC0gbWF0Y2gubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIGlmIChyZXZlcnNlID8gIWxuIDog
bG4gPT0gZG9jLmxpbmVDb3VudCgpIC0gMSkgcmV0dXJuOwotICAgICAgICAgICAgbGluZSA9IGZv
bGQoZG9jLmdldExpbmUobG4gKz0gcmV2ZXJzZSA/IC0xIDogMSkpOwotICAgICAgICAgICAgbWF0
Y2ggPSB0YXJnZXRbcmV2ZXJzZSA/IC0taWR4IDogKytpZHhdOwotICAgICAgICAgICAgaWYgKGlk
eCA+IDAgJiYgaWR4IDwgdGFyZ2V0Lmxlbmd0aCAtIDEpIHsKLSAgICAgICAgICAgICAgaWYgKGxp
bmUgIT0gbWF0Y2gpIHJldHVybjsKLSAgICAgICAgICAgICAgZWxzZSBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHZhciBvZmZzZXRCID0gKHJldmVyc2UgPyBsaW5lLmxhc3RJ
bmRleE9mKG1hdGNoKSA6IGxpbmUuaW5kZXhPZihtYXRjaCkgKyBtYXRjaC5sZW5ndGgpOwotICAg
ICAgICAgICAgaWYgKHJldmVyc2UgPyBvZmZzZXRCICE9IGxpbmUubGVuZ3RoIC0gbWF0Y2gubGVu
Z3RoIDogb2Zmc2V0QiAhPSBtYXRjaC5sZW5ndGgpCi0gICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIHZhciBzdGFydCA9IFBvcyhwb3MubGluZSwgb2Zmc2V0QSksIGVuZCA9IFBvcyhs
biwgb2Zmc2V0Qik7Ci0gICAgICAgICAgICByZXR1cm4ge2Zyb206IHJldmVyc2UgPyBlbmQgOiBz
dGFydCwgdG86IHJldmVyc2UgPyBzdGFydCA6IGVuZH07CisgICAgICAgICAgdmFyIGxhc3QgPSB0
YXJnZXQubGVuZ3RoIC0gMTsKKyAgICAgICAgICBpZiAocmV2ZXJzZSkgeworICAgICAgICAgICAg
aWYgKHBvcy5saW5lIC0gKHRhcmdldC5sZW5ndGggLSAxKSA8IGRvYy5maXJzdExpbmUoKSkgcmV0
dXJuOworICAgICAgICAgICAgaWYgKGZvbGQoZG9jLmdldExpbmUocG9zLmxpbmUpLnNsaWNlKDAs
IG9yaWdUYXJnZXRbbGFzdF0ubGVuZ3RoKSkgIT0gdGFyZ2V0W3RhcmdldC5sZW5ndGggLSAxXSkg
cmV0dXJuOworICAgICAgICAgICAgdmFyIHRvID0gUG9zKHBvcy5saW5lLCBvcmlnVGFyZ2V0W2xh
c3RdLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKHZhciBsbiA9IHBvcy5saW5lIC0gMSwgaSA9
IGxhc3QgLSAxOyBpID49IDE7IC0taSwgLS1sbikKKyAgICAgICAgICAgICAgaWYgKHRhcmdldFtp
XSAhPSBmb2xkKGRvYy5nZXRMaW5lKGxuKSkpIHJldHVybjsKKyAgICAgICAgICAgIHZhciBsaW5l
ID0gZG9jLmdldExpbmUobG4pLCBjdXQgPSBsaW5lLmxlbmd0aCAtIG9yaWdUYXJnZXRbMF0ubGVu
Z3RoOworICAgICAgICAgICAgaWYgKGZvbGQobGluZS5zbGljZShjdXQpKSAhPSB0YXJnZXRbMF0p
IHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB7ZnJvbTogUG9zKGxuLCBjdXQpLCB0bzogdG99
OworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocG9zLmxpbmUgKyAodGFyZ2V0
Lmxlbmd0aCAtIDEpID4gZG9jLmxhc3RMaW5lKCkpIHJldHVybjsKKyAgICAgICAgICAgIHZhciBs
aW5lID0gZG9jLmdldExpbmUocG9zLmxpbmUpLCBjdXQgPSBsaW5lLmxlbmd0aCAtIG9yaWdUYXJn
ZXRbMF0ubGVuZ3RoOworICAgICAgICAgICAgaWYgKGZvbGQobGluZS5zbGljZShjdXQpKSAhPSB0
YXJnZXRbMF0pIHJldHVybjsKKyAgICAgICAgICAgIHZhciBmcm9tID0gUG9zKHBvcy5saW5lLCBj
dXQpOworICAgICAgICAgICAgZm9yICh2YXIgbG4gPSBwb3MubGluZSArIDEsIGkgPSAxOyBpIDwg
bGFzdDsgKytpLCArK2xuKQorICAgICAgICAgICAgICBpZiAodGFyZ2V0W2ldICE9IGZvbGQoZG9j
LmdldExpbmUobG4pKSkgcmV0dXJuOworICAgICAgICAgICAgaWYgKGRvYy5nZXRMaW5lKGxuKS5z
bGljZSgwLCBvcmlnVGFyZ2V0W2xhc3RdLmxlbmd0aCkgIT0gdGFyZ2V0W2xhc3RdKSByZXR1cm47
CisgICAgICAgICAgICByZXR1cm4ge2Zyb206IGZyb20sIHRvOiBQb3MobG4sIG9yaWdUYXJnZXRb
bGFzdF0ubGVuZ3RoKX07CiAgICAgICAgICAgfQogICAgICAgICB9OwogICAgICAgfQpAQCAtMTA2
LDcgKzEyNyw2IEBACgogICAgICAgZm9yICg7OykgewogICAgICAgICBpZiAodGhpcy5wb3MgPSB0
aGlzLm1hdGNoZXMocmV2ZXJzZSwgcG9zKSkgewotICAgICAgICAgIGlmICghdGhpcy5wb3MuZnJv
bSB8fCAhdGhpcy5wb3MudG8pIHsgY29uc29sZS5sb2codGhpcy5tYXRjaGVzLCB0aGlzLnBvcyk7
IH0KICAgICAgICAgICB0aGlzLmF0T2NjdXJyZW5jZSA9IHRydWU7CiAgICAgICAgICAgcmV0dXJu
IHRoaXMucG9zLm1hdGNoIHx8IHRydWU7CiAgICAgICAgIH0KQEAgLTEzNCwxMCArMTU0LDMzIEBA
CiAgICAgfQogICB9OwoKKyAgLy8gTWFwcyBhIHBvc2l0aW9uIGluIGEgY2FzZS1mb2xkZWQgbGlu
ZSBiYWNrIHRvIGEgcG9zaXRpb24gaW4gdGhlIG9yaWdpbmFsIGxpbmUKKyAgLy8gKGNvbXBlbnNh
dGluZyBmb3IgY29kZXBvaW50cyBpbmNyZWFzaW5nIGluIG51bWJlciBkdXJpbmcgZm9sZGluZykK
KyAgZnVuY3Rpb24gYWRqdXN0UG9zKG9yaWcsIGZvbGRlZCwgcG9zKSB7CisgICAgaWYgKG9yaWcu
bGVuZ3RoID09IGZvbGRlZC5sZW5ndGgpIHJldHVybiBwb3M7CisgICAgZm9yICh2YXIgcG9zMSA9
IE1hdGgubWluKHBvcywgb3JpZy5sZW5ndGgpOzspIHsKKyAgICAgIHZhciBsZW4xID0gb3JpZy5z
bGljZSgwLCBwb3MxKS50b0xvd2VyQ2FzZSgpLmxlbmd0aDsKKyAgICAgIGlmIChsZW4xIDwgcG9z
KSArK3BvczE7CisgICAgICBlbHNlIGlmIChsZW4xID4gcG9zKSAtLXBvczE7CisgICAgICBlbHNl
IHJldHVybiBwb3MxOworICAgIH0KKyAgfQorCiAgIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9u
KCJnZXRTZWFyY2hDdXJzb3IiLCBmdW5jdGlvbihxdWVyeSwgcG9zLCBjYXNlRm9sZCkgewogICAg
IHJldHVybiBuZXcgU2VhcmNoQ3Vyc29yKHRoaXMuZG9jLCBxdWVyeSwgcG9zLCBjYXNlRm9sZCk7
CiAgIH0pOwogICBDb2RlTWlycm9yLmRlZmluZURvY0V4dGVuc2lvbigiZ2V0U2VhcmNoQ3Vyc29y
IiwgZnVuY3Rpb24ocXVlcnksIHBvcywgY2FzZUZvbGQpIHsKICAgICByZXR1cm4gbmV3IFNlYXJj
aEN1cnNvcih0aGlzLCBxdWVyeSwgcG9zLCBjYXNlRm9sZCk7CiAgIH0pOwotfSkoKTsKKworICBD
b2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigic2VsZWN0TWF0Y2hlcyIsIGZ1bmN0aW9uKHF1ZXJ5
LCBjYXNlRm9sZCkgeworICAgIHZhciByYW5nZXMgPSBbXSwgbmV4dDsKKyAgICB2YXIgY3VyID0g
dGhpcy5nZXRTZWFyY2hDdXJzb3IocXVlcnksIHRoaXMuZ2V0Q3Vyc29yKCJmcm9tIiksIGNhc2VG
b2xkKTsKKyAgICB3aGlsZSAobmV4dCA9IGN1ci5maW5kTmV4dCgpKSB7CisgICAgICBpZiAoQ29k
ZU1pcnJvci5jbXBQb3MoY3VyLnRvKCksIHRoaXMuZ2V0Q3Vyc29yKCJ0byIpKSA+IDApIGJyZWFr
OworICAgICAgcmFuZ2VzLnB1c2goe2FuY2hvcjogY3VyLmZyb20oKSwgaGVhZDogY3VyLnRvKCl9
KTsKKyAgICB9CisgICAgaWYgKHJhbmdlcy5sZW5ndGgpCisgICAgICB0aGlzLnNldFNlbGVjdGlv
bnMocmFuZ2VzLCAwKTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivc3FsLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zcWwuanMKaW5k
ZXggM2JlNjhjYS4uNDE3ZGIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zcWwuanMKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zcWwuanMKQEAgLTEs
MyArMSwxMyBAQAorKGZ1bmN0aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9i
amVjdCIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKKyAgICBtb2Qo
cmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSk7CisgIGVsc2UgaWYgKHR5cGVvZiBkZWZp
bmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAgICBkZWZpbmUoWyIuLi8u
Li9saWIvY29kZW1pcnJvciJdLCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52Cisg
ICAgbW9kKENvZGVNaXJyb3IpOworfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgeworInVzZSBzdHJp
Y3QiOworCiBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFy
c2VyQ29uZmlnKSB7CiAgICJ1c2Ugc3RyaWN0IjsKCkBAIC0xNzcsOSArMTg3LDEwIEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
CiAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgICB2YXIgY3gg
PSBzdGF0ZS5jb250ZXh0OwotICAgICAgaWYgKCFjeCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsK
LSAgICAgIGlmIChjeC5hbGlnbikgcmV0dXJuIGN4LmNvbCArICh0ZXh0QWZ0ZXIuY2hhckF0KDAp
ID09IGN4LnR5cGUgPyAwIDogMSk7Ci0gICAgICBlbHNlIHJldHVybiBjeC5pbmRlbnQgKyBjb25m
aWcuaW5kZW50VW5pdDsKKyAgICAgIGlmICghY3gpIHJldHVybiAwOworICAgICAgdmFyIGNsb3Np
bmcgPSB0ZXh0QWZ0ZXIuY2hhckF0KDApID09IGN4LnR5cGU7CisgICAgICBpZiAoY3guYWxpZ24p
IHJldHVybiBjeC5jb2wgKyAoY2xvc2luZyA/IDAgOiAxKTsKKyAgICAgIGVsc2UgcmV0dXJuIGN4
LmluZGVudCArIChjbG9zaW5nID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTsKICAgICB9LAoKICAg
ICBibG9ja0NvbW1lbnRTdGFydDogIi8qIiwKQEAgLTMyNSwxNCArMzM2LDI3IEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAg
Q29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcGxzcWwiLCB7CiAgICAgbmFtZTogICAgICAg
InNxbCIsCiAgICAgY2xpZW50OiAgICAgc2V0KCJhcHBpbmZvIGFycmF5c2l6ZSBhdXRvY29tbWl0
IGF1dG9wcmludCBhdXRvcmVjb3ZlcnkgYXV0b3RyYWNlIGJsb2NrdGVybWluYXRvciBicmVhayBi
dGl0bGUgY21kc2VwIGNvbHNlcCBjb21wYXRpYmlsaXR5IGNvbXB1dGUgY29uY2F0IGNvcHljb21t
aXQgY29weXR5cGVjaGVjayBkZWZpbmUgZGVzY3JpYmUgZWNobyBlZGl0ZmlsZSBlbWJlZGRlZCBl
c2NhcGUgZXhlYyBleGVjdXRlIGZlZWRiYWNrIGZsYWdnZXIgZmx1c2ggaGVhZGluZyBoZWFkc2Vw
IGluc3RhbmNlIGxpbmVzaXplIGxubyBsb2JvZmZzZXQgbG9nc291cmNlIGxvbmcgbG9uZ2NodW5r
c2l6ZSBtYXJrdXAgbmF0aXZlIG5ld3BhZ2UgbnVtZm9ybWF0IG51bXdpZHRoIHBhZ2VzaXplIHBh
dXNlIHBubyByZWNzZXAgcmVjc2VwY2hhciByZWxlYXNlIHJlcGZvb3RlciByZXBoZWFkZXIgc2Vy
dmVyb3V0cHV0IHNoaWZ0aW5vdXQgc2hvdyBzaG93bW9kZSBzaXplIHNwb29sIHNxbGJsYW5rbGlu
ZXMgc3FsY2FzZSBzcWxjb2RlIHNxbGNvbnRpbnVlIHNxbG51bWJlciBzcWxwbHVzY29tcGF0aWJp
bGl0eSBzcWxwcmVmaXggc3FscHJvbXB0IHNxbHRlcm1pbmF0b3Igc3VmZml4IHRhYiB0ZXJtIHRl
cm1vdXQgdGltZSB0aW1pbmcgdHJpbW91dCB0cmltc3Bvb2wgdHRpdGxlIHVuZGVybGluZSB2ZXJp
ZnkgdmVyc2lvbiB3cmFwIiksCi0gICAga2V5d29yZHM6ICAgc2V0KCJhYm9ydCBhY2NlcHQgYWNj
ZXNzIGFkZCBhbGwgYWx0ZXIgYW5kIGFueSBhcnJheSBhcnJheWxlbiBhcyBhc2MgYXNzZXJ0IGFz
c2lnbiBhdCBhdHRyaWJ1dGVzIGF1ZGl0IGF1dGhvcml6YXRpb24gYXZnIGJhc2VfdGFibGUgYmVn
aW4gYmV0d2VlbiBiaW5hcnlfaW50ZWdlciBib2R5IGJvb2xlYW4gYnkgY2FzZSBjYXN0IGNoYXIg
Y2hhcl9iYXNlIGNoZWNrIGNsb3NlIGNsdXN0ZXIgY2x1c3RlcnMgY29sYXV0aCBjb2x1bW4gY29t
bWVudCBjb21taXQgY29tcHJlc3MgY29ubmVjdCBjb25uZWN0ZWQgY29uc3RhbnQgY29uc3RyYWlu
dCBjcmFzaCBjcmVhdGUgY3VycmVudCBjdXJydmFsIGN1cnNvciBkYXRhX2Jhc2UgZGF0YWJhc2Ug
ZGF0ZSBkYmEgZGVhbGxvY2F0ZSBkZWJ1Z29mZiBkZWJ1Z29uIGRlY2ltYWwgZGVjbGFyZSBkZWZh
dWx0IGRlZmluaXRpb24gZGVsYXkgZGVsZXRlIGRlc2MgZGlnaXRzIGRpc3Bvc2UgZGlzdGluY3Qg
ZG8gZHJvcCBlbHNlIGVsc2lmIGVuYWJsZSBlbmQgZW50cnkgZXNjYXBlIGV4Y2VwdGlvbiBleGNl
cHRpb25faW5pdCBleGNoYW5nZSBleGNsdXNpdmUgZXhpc3RzIGV4aXQgZXh0ZXJuYWwgZmFzdCBm
ZXRjaCBmaWxlIGZvciBmb3JjZSBmb3JtIGZyb20gZnVuY3Rpb24gZ2VuZXJpYyBnb3RvIGdyYW50
IGdyb3VwIGhhdmluZyBpZGVudGlmaWVkIGlmIGltbWVkaWF0ZSBpbiBpbmNyZW1lbnQgaW5kZXgg
aW5kZXhlcyBpbmRpY2F0b3IgaW5pdGlhbCBpbml0cmFucyBpbnNlcnQgaW50ZXJmYWNlIGludGVy
c2VjdCBpbnRvIGlzIGtleSBsZXZlbCBsaWJyYXJ5IGxpa2UgbGltaXRlZCBsb2NhbCBsb2NrIGxv
ZyBsb2dnaW5nIGxvbmcgbG9vcCBtYXN0ZXIgbWF4ZXh0ZW50cyBtYXh0cmFucyBtZW1iZXIgbWlu
ZXh0ZW50cyBtaW51cyBtaXNsYWJlbCBtb2RlIG1vZGlmeSBtdWx0aXNldCBuZXcgbmV4dCBubyBu
b2F1ZGl0IG5vY29tcHJlc3Mgbm9sb2dnaW5nIG5vcGFyYWxsZWwgbm90IG5vd2FpdCBudW1iZXJf
YmFzZSBvYmplY3Qgb2Ygb2ZmIG9mZmxpbmUgb24gb25saW5lIG9ubHkgb3BlbiBvcHRpb24gb3Ig
b3JkZXIgb3V0IHBhY2thZ2UgcGFyYWxsZWwgcGFydGl0aW9uIHBjdGZyZWUgcGN0aW5jcmVhc2Ug
cGN0dXNlZCBwbHNfaW50ZWdlciBwb3NpdGl2ZSBwb3NpdGl2ZW4gcHJhZ21hIHByaW1hcnkgcHJp
b3IgcHJpdmF0ZSBwcml2aWxlZ2VzIHByb2NlZHVyZSBwdWJsaWMgcmFpc2UgcmFuZ2UgcmF3IHJl
YWQgcmVidWlsZCByZWNvcmQgcmVmIHJlZmVyZW5jZXMgcmVmcmVzaCByZWxlYXNlIHJlbmFtZSBy
ZXBsYWNlIHJlc291cmNlIHJlc3RyaWN0IHJldHVybiByZXR1cm5pbmcgcmV2ZXJzZSByZXZva2Ug
cm9sbGJhY2sgcm93IHJvd2lkIHJvd2xhYmVsIHJvd251bSByb3dzIHJ1biBzYXZlcG9pbnQgc2No
ZW1hIHNlZ21lbnQgc2VsZWN0IHNlcGFyYXRlIHNlc3Npb24gc2V0IHNoYXJlIHNuYXBzaG90IHNv
bWUgc3BhY2Ugc3BsaXQgc3FsIHN0YXJ0IHN0YXRlbWVudCBzdG9yYWdlIHN1YnR5cGUgc3VjY2Vz
c2Z1bCBzeW5vbnltIHRhYmF1dGggdGFibGUgdGFibGVzIHRhYmxlc3BhY2UgdGFzayB0ZXJtaW5h
dGUgdGhlbiB0byB0cmlnZ2VyIHRydW5jYXRlIHR5cGUgdW5pb24gdW5pcXVlIHVubGltaXRlZCB1
bnJlY292ZXJhYmxlIHVudXNhYmxlIHVwZGF0ZSB1c2UgdXNpbmcgdmFsaWRhdGUgdmFsdWUgdmFs
dWVzIHZhcmlhYmxlIHZpZXcgdmlld3Mgd2hlbiB3aGVuZXZlciB3aGVyZSB3aGlsZSB3aXRoIHdv
cmsiKSwKLSAgICBidWlsdGluOiAgICBzZXQoImJmaWxlIGJsb2IgY2hhcmFjdGVyIGNsb2IgZGVj
IGZsb2F0IGludCBpbnRlZ2VyIG1sc2xhYmVsIG5hdHVyYWwgbmF0dXJhbG4gbmNoYXIgbmNsb2Ig
bnVtYmVyIG51bWVyaWMgbnZhcmNoYXIyIHJlYWwgcm93dHlwZSBzaWdudHlwZSBzbWFsbGludCBz
dHJpbmcgdmFyY2hhciB2YXJjaGFyMiBhYnMgYWNvcyBhZGRfbW9udGhzIGFzY2lpIGFzaW4gYXRh
biBhdGFuMiBhdmVyYWdlIGJmaWxlbmFtZSBjZWlsIGNoYXJ0b3Jvd2lkIGNociBjb25jYXQgY29u
dmVydCBjb3MgY29zaCBjb3VudCBkZWNvZGUgZGVyZWYgZHVhbCBkdW1wIGR1cF92YWxfb25faW5k
ZXggZW1wdHkgZXJyb3IgZXhwIGZhbHNlIGZsb29yIGZvdW5kIGdsYiBncmVhdGVzdCBoZXh0b3Jh
dyBpbml0Y2FwIGluc3RyIGluc3RyYiBpc29wZW4gbGFzdF9kYXkgbGVhc3QgbGVuZ2h0IGxlbmdo
dGIgbG4gbG93ZXIgbHBhZCBsdHJpbSBsdWIgbWFrZV9yZWYgbWF4IG1pbiBtb2QgbW9udGhzX2Jl
dHdlZW4gbmV3X3RpbWUgbmV4dF9kYXkgbmV4dHZhbCBubHNfY2hhcnNldF9kZWNsX2xlbiBubHNf
Y2hhcnNldF9pZCBubHNfY2hhcnNldF9uYW1lIG5sc19pbml0Y2FwIG5sc19sb3dlciBubHNfc29y
dCBubHNfdXBwZXIgbmxzc29ydCBub19kYXRhX2ZvdW5kIG5vdGZvdW5kIG51bGwgbnZsIG90aGVy
cyBwb3dlciByYXd0b2hleCByZWZ0b2hleCByb3VuZCByb3djb3VudCByb3dpZHRvY2hhciBycGFk
IHJ0cmltIHNpZ24gc2luIHNpbmggc291bmRleCBzcWxjb2RlIHNxbGVycm0gc3FydCBzdGRkZXYg
c3Vic3RyIHN1YnN0cmIgc3VtIHN5c2RhdGUgdGFuIHRhbmggdG9fY2hhciB0b19kYXRlIHRvX2xh
YmVsIHRvX211bHRpX2J5dGUgdG9fbnVtYmVyIHRvX3NpbmdsZV9ieXRlIHRyYW5zbGF0ZSB0cnVl
IHRydW5jIHVpZCB1cHBlciB1c2VyIHVzZXJlbnYgdmFyaWFuY2UgdnNpemUiKSwKKyAgICBrZXl3
b3JkczogICBzZXQoImFib3J0IGFjY2VwdCBhY2Nlc3MgYWRkIGFsbCBhbHRlciBhbmQgYW55IGFy
cmF5IGFycmF5bGVuIGFzIGFzYyBhc3NlcnQgYXNzaWduIGF0IGF0dHJpYnV0ZXMgYXVkaXQgYXV0
aG9yaXphdGlvbiBhdmcgYmFzZV90YWJsZSBiZWdpbiBiZXR3ZWVuIGJpbmFyeV9pbnRlZ2VyIGJv
ZHkgYm9vbGVhbiBieSBjYXNlIGNhc3QgY2hhciBjaGFyX2Jhc2UgY2hlY2sgY2xvc2UgY2x1c3Rl
ciBjbHVzdGVycyBjb2xhdXRoIGNvbHVtbiBjb21tZW50IGNvbW1pdCBjb21wcmVzcyBjb25uZWN0
IGNvbm5lY3RlZCBjb25zdGFudCBjb25zdHJhaW50IGNyYXNoIGNyZWF0ZSBjdXJyZW50IGN1cnJ2
YWwgY3Vyc29yIGRhdGFfYmFzZSBkYXRhYmFzZSBkYXRlIGRiYSBkZWFsbG9jYXRlIGRlYnVnb2Zm
IGRlYnVnb24gZGVjaW1hbCBkZWNsYXJlIGRlZmF1bHQgZGVmaW5pdGlvbiBkZWxheSBkZWxldGUg
ZGVzYyBkaWdpdHMgZGlzcG9zZSBkaXN0aW5jdCBkbyBkcm9wIGVsc2UgZWxzZWlmIGVsc2lmIGVu
YWJsZSBlbmQgZW50cnkgZXNjYXBlIGV4Y2VwdGlvbiBleGNlcHRpb25faW5pdCBleGNoYW5nZSBl
eGNsdXNpdmUgZXhpc3RzIGV4aXQgZXh0ZXJuYWwgZmFzdCBmZXRjaCBmaWxlIGZvciBmb3JjZSBm
b3JtIGZyb20gZnVuY3Rpb24gZ2VuZXJpYyBnb3RvIGdyYW50IGdyb3VwIGhhdmluZyBpZGVudGlm
aWVkIGlmIGltbWVkaWF0ZSBpbiBpbmNyZW1lbnQgaW5kZXggaW5kZXhlcyBpbmRpY2F0b3IgaW5p
dGlhbCBpbml0cmFucyBpbnNlcnQgaW50ZXJmYWNlIGludGVyc2VjdCBpbnRvIGlzIGtleSBsZXZl
bCBsaWJyYXJ5IGxpa2UgbGltaXRlZCBsb2NhbCBsb2NrIGxvZyBsb2dnaW5nIGxvbmcgbG9vcCBt
YXN0ZXIgbWF4ZXh0ZW50cyBtYXh0cmFucyBtZW1iZXIgbWluZXh0ZW50cyBtaW51cyBtaXNsYWJl
bCBtb2RlIG1vZGlmeSBtdWx0aXNldCBuZXcgbmV4dCBubyBub2F1ZGl0IG5vY29tcHJlc3Mgbm9s
b2dnaW5nIG5vcGFyYWxsZWwgbm90IG5vd2FpdCBudW1iZXJfYmFzZSBvYmplY3Qgb2Ygb2ZmIG9m
ZmxpbmUgb24gb25saW5lIG9ubHkgb3BlbiBvcHRpb24gb3Igb3JkZXIgb3V0IHBhY2thZ2UgcGFy
YWxsZWwgcGFydGl0aW9uIHBjdGZyZWUgcGN0aW5jcmVhc2UgcGN0dXNlZCBwbHNfaW50ZWdlciBw
b3NpdGl2ZSBwb3NpdGl2ZW4gcHJhZ21hIHByaW1hcnkgcHJpb3IgcHJpdmF0ZSBwcml2aWxlZ2Vz
IHByb2NlZHVyZSBwdWJsaWMgcmFpc2UgcmFuZ2UgcmF3IHJlYWQgcmVidWlsZCByZWNvcmQgcmVm
IHJlZmVyZW5jZXMgcmVmcmVzaCByZWxlYXNlIHJlbmFtZSByZXBsYWNlIHJlc291cmNlIHJlc3Ry
aWN0IHJldHVybiByZXR1cm5pbmcgcmV0dXJucyByZXZlcnNlIHJldm9rZSByb2xsYmFjayByb3cg
cm93aWQgcm93bGFiZWwgcm93bnVtIHJvd3MgcnVuIHNhdmVwb2ludCBzY2hlbWEgc2VnbWVudCBz
ZWxlY3Qgc2VwYXJhdGUgc2Vzc2lvbiBzZXQgc2hhcmUgc25hcHNob3Qgc29tZSBzcGFjZSBzcGxp
dCBzcWwgc3RhcnQgc3RhdGVtZW50IHN0b3JhZ2Ugc3VidHlwZSBzdWNjZXNzZnVsIHN5bm9ueW0g
dGFiYXV0aCB0YWJsZSB0YWJsZXMgdGFibGVzcGFjZSB0YXNrIHRlcm1pbmF0ZSB0aGVuIHRvIHRy
aWdnZXIgdHJ1bmNhdGUgdHlwZSB1bmlvbiB1bmlxdWUgdW5saW1pdGVkIHVucmVjb3ZlcmFibGUg
dW51c2FibGUgdXBkYXRlIHVzZSB1c2luZyB2YWxpZGF0ZSB2YWx1ZSB2YWx1ZXMgdmFyaWFibGUg
dmlldyB2aWV3cyB3aGVuIHdoZW5ldmVyIHdoZXJlIHdoaWxlIHdpdGggd29yayIpLAorICAgIGJ1
aWx0aW46ICAgIHNldCgiYWJzIGFjb3MgYWRkX21vbnRocyBhc2NpaSBhc2luIGF0YW4gYXRhbjIg
YXZlcmFnZSBiZmlsZSBiZmlsZW5hbWUgYmlnc2VyaWFsIGJpdCBibG9iIGNlaWwgY2hhcmFjdGVy
IGNoYXJ0b3Jvd2lkIGNociBjbG9iIGNvbmNhdCBjb252ZXJ0IGNvcyBjb3NoIGNvdW50IGRlYyBk
ZWNvZGUgZGVyZWYgZHVhbCBkdW1wIGR1cF92YWxfb25faW5kZXggZW1wdHkgZXJyb3IgZXhwIGZh
bHNlIGZsb2F0IGZsb29yIGZvdW5kIGdsYiBncmVhdGVzdCBoZXh0b3JhdyBpbml0Y2FwIGluc3Ry
IGluc3RyYiBpbnQgaW50ZWdlciBpc29wZW4gbGFzdF9kYXkgbGVhc3QgbGVuZ2h0IGxlbmdodGIg
bG4gbG93ZXIgbHBhZCBsdHJpbSBsdWIgbWFrZV9yZWYgbWF4IG1pbiBtbHNsYWJlbCBtb2QgbW9u
dGhzX2JldHdlZW4gbmF0dXJhbCBuYXR1cmFsbiBuY2hhciBuY2xvYiBuZXdfdGltZSBuZXh0X2Rh
eSBuZXh0dmFsIG5sc19jaGFyc2V0X2RlY2xfbGVuIG5sc19jaGFyc2V0X2lkIG5sc19jaGFyc2V0
X25hbWUgbmxzX2luaXRjYXAgbmxzX2xvd2VyIG5sc19zb3J0IG5sc191cHBlciBubHNzb3J0IG5v
X2RhdGFfZm91bmQgbm90Zm91bmQgbnVsbCBudW1iZXIgbnVtZXJpYyBudmFyY2hhcjIgbnZsIG90
aGVycyBwb3dlciByYXd0b2hleCByZWFsIHJlZnRvaGV4IHJvdW5kIHJvd2NvdW50IHJvd2lkdG9j
aGFyIHJvd3R5cGUgcnBhZCBydHJpbSBzZXJpYWwgc2lnbiBzaWdudHlwZSBzaW4gc2luaCBzbWFs
bGludCBzb3VuZGV4IHNxbGNvZGUgc3FsZXJybSBzcXJ0IHN0ZGRldiBzdHJpbmcgc3Vic3RyIHN1
YnN0cmIgc3VtIHN5c2RhdGUgdGFuIHRhbmggdG9fY2hhciB0ZXh0IHRvX2RhdGUgdG9fbGFiZWwg
dG9fbXVsdGlfYnl0ZSB0b19udW1iZXIgdG9fc2luZ2xlX2J5dGUgdHJhbnNsYXRlIHRydWUgdHJ1
bmMgdWlkIHVubG9nZ2VkIHVwcGVyIHVzZXIgdXNlcmVudiB2YXJjaGFyIHZhcmNoYXIyIHZhcmlh
bmNlIHZhcnlpbmcgdnNpemUgeG1sIiksCiAgICAgb3BlcmF0b3JDaGFyczogL15bKitcLSU8PiE9
fl0vLAogICAgIGRhdGVTUUw6ICAgIHNldCgiZGF0ZSB0aW1lIHRpbWVzdGFtcCIpLAogICAgIHN1
cHBvcnQ6ICAgIHNldCgiZG91YmxlUXVvdGUgbkNoYXJDYXN0IHplcm9sZXNzRmxvYXQgYmluYXJ5
TnVtYmVyIGhleE51bWJlciIpCiAgIH0pOworCisgIC8vIENyZWF0ZWQgdG8gc3VwcG9ydCBzcGVj
aWZpYyBoaXZlIGtleXdvcmRzCisgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWhpdmUi
LCB7CisgICAgbmFtZTogInNxbCIsCisgICAga2V5d29yZHM6IHNldCgic2VsZWN0IGFsdGVyICRl
bGVtJCAka2V5JCAkdmFsdWUkIGFkZCBhZnRlciBhbGwgYW5hbHl6ZSBhbmQgYXJjaGl2ZSBhcyBh
c2MgYmVmb3JlIGJldHdlZW4gYmluYXJ5IGJvdGggYnVja2V0IGJ1Y2tldHMgYnkgY2FzY2FkZSBj
YXNlIGNhc3QgY2hhbmdlIGNsdXN0ZXIgY2x1c3RlcmVkIGNsdXN0ZXJzdGF0dXMgY29sbGVjdGlv
biBjb2x1bW4gY29sdW1ucyBjb21tZW50IGNvbXB1dGUgY29uY2F0ZW5hdGUgY29udGludWUgY3Jl
YXRlIGNyb3NzIGN1cnNvciBkYXRhIGRhdGFiYXNlIGRhdGFiYXNlcyBkYnByb3BlcnRpZXMgZGVm
ZXJyZWQgZGVsZXRlIGRlbGltaXRlZCBkZXNjIGRlc2NyaWJlIGRpcmVjdG9yeSBkaXNhYmxlIGRp
c3RpbmN0IGRpc3RyaWJ1dGUgZHJvcCBlbHNlIGVuYWJsZSBlbmQgZXNjYXBlZCBleGNsdXNpdmUg
ZXhpc3RzIGV4cGxhaW4gZXhwb3J0IGV4dGVuZGVkIGV4dGVybmFsIGZhbHNlIGZldGNoIGZpZWxk
cyBmaWxlZm9ybWF0IGZpcnN0IGZvcm1hdCBmb3JtYXR0ZWQgZnJvbSBmdWxsIGZ1bmN0aW9uIGZ1
bmN0aW9ucyBncmFudCBncm91cCBoYXZpbmcgaG9sZF9kZGx0aW1lIGlkeHByb3BlcnRpZXMgaWYg
aW1wb3J0IGluIGluZGV4IGluZGV4ZXMgaW5wYXRoIGlucHV0ZHJpdmVyIGlucHV0Zm9ybWF0IGlu
c2VydCBpbnRlcnNlY3QgaW50byBpcyBpdGVtcyBqb2luIGtleXMgbGF0ZXJhbCBsZWZ0IGxpa2Ug
bGltaXQgbGluZXMgbG9hZCBsb2NhbCBsb2NhdGlvbiBsb2NrIGxvY2tzIG1hcGpvaW4gbWF0ZXJp
YWxpemVkIG1pbnVzIG1zY2sgbm9fZHJvcCBub2NvbXByZXNzIG5vdCBvZiBvZmZsaW5lIG9uIG9w
dGlvbiBvciBvcmRlciBvdXQgb3V0ZXIgb3V0cHV0ZHJpdmVyIG91dHB1dGZvcm1hdCBvdmVyd3Jp
dGUgcGFydGl0aW9uIHBhcnRpdGlvbmVkIHBhcnRpdGlvbnMgcGVyY2VudCBwbHVzIHByZXNlcnZl
IHByb2NlZHVyZSBwdXJnZSByYW5nZSByY2ZpbGUgcmVhZCByZWFkb25seSByZWFkcyByZWJ1aWxk
IHJlY29yZHJlYWRlciByZWNvcmR3cml0ZXIgcmVjb3ZlciByZWR1Y2UgcmVnZXhwIHJlbmFtZSBy
ZXBhaXIgcmVwbGFjZSByZXN0cmljdCByZXZva2UgcmlnaHQgcmxpa2Ugcm93IHNjaGVtYSBzY2hl
bWFzIHNlbWkgc2VxdWVuY2VmaWxlIHNlcmRlIHNlcmRlcHJvcGVydGllcyBzZXQgc2hhcmVkIHNo
b3cgc2hvd19kYXRhYmFzZSBzb3J0IHNvcnRlZCBzc2wgc3RhdGlzdGljcyBzdG9yZWQgc3RyZWFt
dGFibGUgdGFibGUgdGFibGVzIHRhYmxlc2FtcGxlIHRibHByb3BlcnRpZXMgdGVtcG9yYXJ5IHRl
cm1pbmF0ZWQgdGV4dGZpbGUgdGhlbiB0bXAgdG8gdG91Y2ggdHJhbnNmb3JtIHRyaWdnZXIgdHJ1
ZSB1bmFyY2hpdmUgdW5kbyB1bmlvbiB1bmlxdWVqb2luIHVubG9jayB1cGRhdGUgdXNlIHVzaW5n
IHV0YyB1dGNfdG1lc3RhbXAgdmlldyB3aGVuIHdoZXJlIHdoaWxlIHdpdGgiKSwKKyAgICBidWls
dGluOiBzZXQoImJvb2wgYm9vbGVhbiBsb25nIHRpbWVzdGFtcCB0aW55aW50IHNtYWxsaW50IGJp
Z2ludCBpbnQgZmxvYXQgZG91YmxlIGRhdGUgZGF0ZXRpbWUgdW5zaWduZWQgc3RyaW5nIGFycmF5
IHN0cnVjdCBtYXAgdW5pb250eXBlIiksCisgICAgYXRvbXM6IHNldCgiZmFsc2UgdHJ1ZSBudWxs
IHVua25vd24iKSwKKyAgICBvcGVyYXRvckNoYXJzOiAvXlsqK1wtJTw+IT1dLywKKyAgICBkYXRl
U1FMOiBzZXQoImRhdGUgdGltZXN0YW1wIiksCisgICAgc3VwcG9ydDogc2V0KCJPREJDZG90VGFi
bGUgZG91YmxlUXVvdGUgYmluYXJ5TnVtYmVyIGhleE51bWJlciIpCisgIH0pOwogfSgpKTsKCit9
KTsKKwogLyoKICAgSG93IFByb3BlcnRpZXMgb2YgTWltZSBUeXBlcyBhcmUgdXNlZCBieSBTUUwg
TW9kZQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5h
bC9Db2RlTWlycm9yL3htbC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzCmluZGV4IDRmNDllMDcuLmI4YzQyOTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3IveG1sLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzCkBAIC0xLDcgKzEsMTggQEAKKyhmdW5jdGlvbihtb2Qp
IHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0g
Im9iamVjdCIpIC8vIENvbW1vbkpTCisgICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWly
cm9yIikpOworICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5l
LmFtZCkgLy8gQU1ECisgICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsK
KyAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudgorICAgIG1vZChDb2RlTWlycm9yKTsKK30pKGZ1
bmN0aW9uKENvZGVNaXJyb3IpIHsKKyJ1c2Ugc3RyaWN0IjsKKwogQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB2YXIgaW5kZW50
VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogICB2YXIgbXVsdGlsaW5lVGFnSW5kZW50RmFjdG9y
ID0gcGFyc2VyQ29uZmlnLm11bHRpbGluZVRhZ0luZGVudEZhY3RvciB8fCAxOwotICB2YXIgbXVs
dGlsaW5lVGFnSW5kZW50UGFzdFRhZyA9IHBhcnNlckNvbmZpZy5tdWx0aWxpbmVUYWdJbmRlbnRQ
YXN0VGFnIHx8IHRydWU7CisgIHZhciBtdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnID0gcGFyc2Vy
Q29uZmlnLm11bHRpbGluZVRhZ0luZGVudFBhc3RUYWc7CisgIGlmIChtdWx0aWxpbmVUYWdJbmRl
bnRQYXN0VGFnID09IG51bGwpIG11bHRpbGluZVRhZ0luZGVudFBhc3RUYWcgPSB0cnVlOwoKICAg
dmFyIEtsdWRnZXMgPSBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyB7CiAgICAgYXV0b1NlbGZDbG9z
ZXJzOiB7J2FyZWEnOiB0cnVlLCAnYmFzZSc6IHRydWUsICdicic6IHRydWUsICdjb2wnOiB0cnVl
LCAnY29tbWFuZCc6IHRydWUsCkBAIC0zMywxOSArNDQsMjEgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIH0sCiAgICAg
ZG9Ob3RJbmRlbnQ6IHsicHJlIjogdHJ1ZX0sCiAgICAgYWxsb3dVbnF1b3RlZDogdHJ1ZSwKLSAg
ICBhbGxvd01pc3Npbmc6IHRydWUKKyAgICBhbGxvd01pc3Npbmc6IHRydWUsCisgICAgY2FzZUZv
bGQ6IHRydWUKICAgfSA6IHsKICAgICBhdXRvU2VsZkNsb3NlcnM6IHt9LAogICAgIGltcGxpY2l0
bHlDbG9zZWQ6IHt9LAogICAgIGNvbnRleHRHcmFiYmVyczoge30sCiAgICAgZG9Ob3RJbmRlbnQ6
IHt9LAogICAgIGFsbG93VW5xdW90ZWQ6IGZhbHNlLAotICAgIGFsbG93TWlzc2luZzogZmFsc2UK
KyAgICBhbGxvd01pc3Npbmc6IGZhbHNlLAorICAgIGNhc2VGb2xkOiBmYWxzZQogICB9OwogICB2
YXIgYWxpZ25DREFUQSA9IHBhcnNlckNvbmZpZy5hbGlnbkNEQVRBOwoKICAgLy8gUmV0dXJuIHZh
cmlhYmxlcyBmb3IgdG9rZW5pemVycwotICB2YXIgdGFnTmFtZSwgdHlwZTsKKyAgdmFyIHR5cGUs
IHNldFN0eWxlOwoKICAgZnVuY3Rpb24gaW5UZXh0KHN0cmVhbSwgc3RhdGUpIHsKICAgICBmdW5j
dGlvbiBjaGFpbihwYXJzZXIpIHsKQEAgLTcyLDE0ICs4NSw5IEBAIENvZGVNaXJyb3IuZGVmaW5l
TW9kZSgieG1sIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgc3Rh
dGUudG9rZW5pemUgPSBpbkJsb2NrKCJtZXRhIiwgIj8+Iik7CiAgICAgICAgIHJldHVybiAibWV0
YSI7CiAgICAgICB9IGVsc2UgewotICAgICAgICB2YXIgaXNDbG9zZSA9IHN0cmVhbS5lYXQoIi8i
KTsKLSAgICAgICAgdGFnTmFtZSA9ICIiOwotICAgICAgICB2YXIgYzsKLSAgICAgICAgd2hpbGUg
KChjID0gc3RyZWFtLmVhdCgvW15cc1x1MDBhMD08PlwiXCdcLz9dLykpKSB0YWdOYW1lICs9IGM7
Ci0gICAgICAgIGlmICghdGFnTmFtZSkgcmV0dXJuICJ0YWcgZXJyb3IiOwotICAgICAgICB0eXBl
ID0gaXNDbG9zZSA/ICJjbG9zZVRhZyIgOiAib3BlblRhZyI7CisgICAgICAgIHR5cGUgPSBzdHJl
YW0uZWF0KCIvIikgPyAiY2xvc2VUYWciIDogIm9wZW5UYWciOwogICAgICAgICBzdGF0ZS50b2tl
bml6ZSA9IGluVGFnOwotICAgICAgICByZXR1cm4gInRhZyI7CisgICAgICAgIHJldHVybiAidGFn
IGJyYWNrZXQiOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAoY2ggPT0gIiYiKSB7CiAgICAgICB2
YXIgb2s7CkBAIC0xMDQsMTIgKzExMiwxNCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKGNoID09ICI+IiB8fCAo
Y2ggPT0gIi8iICYmIHN0cmVhbS5lYXQoIj4iKSkpIHsKICAgICAgIHN0YXRlLnRva2VuaXplID0g
aW5UZXh0OwogICAgICAgdHlwZSA9IGNoID09ICI+IiA/ICJlbmRUYWciIDogInNlbGZjbG9zZVRh
ZyI7Ci0gICAgICByZXR1cm4gInRhZyI7CisgICAgICByZXR1cm4gInRhZyBicmFja2V0IjsKICAg
ICB9IGVsc2UgaWYgKGNoID09ICI9IikgewogICAgICAgdHlwZSA9ICJlcXVhbHMiOwogICAgICAg
cmV0dXJuIG51bGw7CiAgICAgfSBlbHNlIGlmIChjaCA9PSAiPCIpIHsKICAgICAgIHN0YXRlLnRv
a2VuaXplID0gaW5UZXh0OworICAgICAgc3RhdGUuc3RhdGUgPSBiYXNlU3RhdGU7CisgICAgICBz
dGF0ZS50YWdOYW1lID0gc3RhdGUudGFnU3RhcnQgPSBudWxsOwogICAgICAgdmFyIG5leHQgPSBz
dGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgIHJldHVybiBuZXh0ID8gbmV4dCAr
ICIgZXJyb3IiIDogImVycm9yIjsKICAgICB9IGVsc2UgaWYgKC9bXCdcIl0vLnRlc3QoY2gpKSB7
CkBAIC0xMTcsNyArMTI3LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlv
bihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgc3RhdGUuc3RyaW5nU3RhcnRDb2wgPSBz
dHJlYW0uY29sdW1uKCk7CiAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0
ZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW15cc1x1MDBhMD08Plwi
XCddLyk7CisgICAgICBzdHJlYW0ubWF0Y2goL15bXlxzXHUwMGEwPTw+XCJcJ10qW15cc1x1MDBh
MD08PlwiXCdcL10vKTsKICAgICAgIHJldHVybiAid29yZCI7CiAgICAgfQogICB9CkBAIC0xNjks
MTM5ICsxNzksMTQxIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVuY3Rpb24oY29u
ZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICB9OwogICB9CgotICB2YXIgY3VyU3RhdGUsIGN1clN0
cmVhbSwgc2V0U3R5bGU7Ci0gIGZ1bmN0aW9uIHBhc3MoKSB7Ci0gICAgZm9yICh2YXIgaSA9IGFy
Z3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3VyU3RhdGUuY2MucHVzaChhcmd1bWVu
dHNbaV0pOwotICB9Ci0gIGZ1bmN0aW9uIGNvbnQoKSB7Ci0gICAgcGFzcy5hcHBseShudWxsLCBh
cmd1bWVudHMpOwotICAgIHJldHVybiB0cnVlOworICBmdW5jdGlvbiBDb250ZXh0KHN0YXRlLCB0
YWdOYW1lLCBzdGFydE9mTGluZSkgeworICAgIHRoaXMucHJldiA9IHN0YXRlLmNvbnRleHQ7Cisg
ICAgdGhpcy50YWdOYW1lID0gdGFnTmFtZTsKKyAgICB0aGlzLmluZGVudCA9IHN0YXRlLmluZGVu
dGVkOworICAgIHRoaXMuc3RhcnRPZkxpbmUgPSBzdGFydE9mTGluZTsKKyAgICBpZiAoS2x1ZGdl
cy5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lKSB8fCAoc3RhdGUuY29udGV4dCAm
JiBzdGF0ZS5jb250ZXh0Lm5vSW5kZW50KSkKKyAgICAgIHRoaXMubm9JbmRlbnQgPSB0cnVlOwog
ICB9Ci0KLSAgZnVuY3Rpb24gcHVzaENvbnRleHQodGFnTmFtZSwgc3RhcnRPZkxpbmUpIHsKLSAg
ICB2YXIgbm9JbmRlbnQgPSBLbHVkZ2VzLmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHRhZ05h
bWUpIHx8IChjdXJTdGF0ZS5jb250ZXh0ICYmIGN1clN0YXRlLmNvbnRleHQubm9JbmRlbnQpOwot
ICAgIGN1clN0YXRlLmNvbnRleHQgPSB7Ci0gICAgICBwcmV2OiBjdXJTdGF0ZS5jb250ZXh0LAot
ICAgICAgdGFnTmFtZTogdGFnTmFtZSwKLSAgICAgIGluZGVudDogY3VyU3RhdGUuaW5kZW50ZWQs
Ci0gICAgICBzdGFydE9mTGluZTogc3RhcnRPZkxpbmUsCi0gICAgICBub0luZGVudDogbm9JbmRl
bnQKLSAgICB9OworICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CisgICAgaWYgKHN0YXRl
LmNvbnRleHQpIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgIH0KLSAgZnVu
Y3Rpb24gcG9wQ29udGV4dCgpIHsKLSAgICBpZiAoY3VyU3RhdGUuY29udGV4dCkgY3VyU3RhdGUu
Y29udGV4dCA9IGN1clN0YXRlLmNvbnRleHQucHJldjsKKyAgZnVuY3Rpb24gbWF5YmVQb3BDb250
ZXh0KHN0YXRlLCBuZXh0VGFnTmFtZSkgeworICAgIHZhciBwYXJlbnRUYWdOYW1lOworICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICBpZiAoIXN0YXRlLmNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJu
OworICAgICAgfQorICAgICAgcGFyZW50VGFnTmFtZSA9IHN0YXRlLmNvbnRleHQudGFnTmFtZTsK
KyAgICAgIGlmICghS2x1ZGdlcy5jb250ZXh0R3JhYmJlcnMuaGFzT3duUHJvcGVydHkocGFyZW50
VGFnTmFtZSkgfHwKKyAgICAgICAgICAhS2x1ZGdlcy5jb250ZXh0R3JhYmJlcnNbcGFyZW50VGFn
TmFtZV0uaGFzT3duUHJvcGVydHkobmV4dFRhZ05hbWUpKSB7CisgICAgICAgIHJldHVybjsKKyAg
ICAgIH0KKyAgICAgIHBvcENvbnRleHQoc3RhdGUpOworICAgIH0KICAgfQoKLSAgZnVuY3Rpb24g
ZWxlbWVudCh0eXBlKSB7CisgIGZ1bmN0aW9uIGJhc2VTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRl
KSB7CiAgICAgaWYgKHR5cGUgPT0gIm9wZW5UYWciKSB7Ci0gICAgICBjdXJTdGF0ZS50YWdOYW1l
ID0gdGFnTmFtZTsKLSAgICAgIGN1clN0YXRlLnRhZ1N0YXJ0ID0gY3VyU3RyZWFtLmNvbHVtbigp
OwotICAgICAgcmV0dXJuIGNvbnQoYXR0cmlidXRlcywgZW5kdGFnKGN1clN0YXRlLnN0YXJ0T2ZM
aW5lKSk7CisgICAgICBzdGF0ZS50YWdTdGFydCA9IHN0cmVhbS5jb2x1bW4oKTsKKyAgICAgIHJl
dHVybiB0YWdOYW1lU3RhdGU7CiAgICAgfSBlbHNlIGlmICh0eXBlID09ICJjbG9zZVRhZyIpIHsK
LSAgICAgIHZhciBlcnIgPSBmYWxzZTsKLSAgICAgIGlmIChjdXJTdGF0ZS5jb250ZXh0KSB7Ci0g
ICAgICAgIGlmIChjdXJTdGF0ZS5jb250ZXh0LnRhZ05hbWUgIT0gdGFnTmFtZSkgewotICAgICAg
ICAgIGlmIChLbHVkZ2VzLmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoY3VyU3RhdGUu
Y29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSB7Ci0gICAgICAgICAgICBwb3BDb250ZXh0
KCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVyciA9ICFjdXJTdGF0ZS5jb250ZXh0IHx8IGN1
clN0YXRlLmNvbnRleHQudGFnTmFtZSAhPSB0YWdOYW1lOwotICAgICAgICB9Ci0gICAgICB9IGVs
c2UgewotICAgICAgICBlcnIgPSB0cnVlOwotICAgICAgfQotICAgICAgaWYgKGVycikgc2V0U3R5
bGUgPSAiZXJyb3IiOwotICAgICAgcmV0dXJuIGNvbnQoZW5kY2xvc2V0YWcoZXJyKSk7CisgICAg
ICByZXR1cm4gY2xvc2VUYWdOYW1lU3RhdGU7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBi
YXNlU3RhdGU7CiAgICAgfQotICAgIHJldHVybiBjb250KCk7Ci0gIH0KLSAgZnVuY3Rpb24gZW5k
dGFnKHN0YXJ0T2ZMaW5lKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHsKLSAgICAgIHZh
ciB0YWdOYW1lID0gY3VyU3RhdGUudGFnTmFtZTsKLSAgICAgIGN1clN0YXRlLnRhZ05hbWUgPSBj
dXJTdGF0ZS50YWdTdGFydCA9IG51bGw7Ci0gICAgICBpZiAodHlwZSA9PSAic2VsZmNsb3NlVGFn
IiB8fAotICAgICAgICAgICh0eXBlID09ICJlbmRUYWciICYmIEtsdWRnZXMuYXV0b1NlbGZDbG9z
ZXJzLmhhc093blByb3BlcnR5KHRhZ05hbWUudG9Mb3dlckNhc2UoKSkpKSB7Ci0gICAgICAgIG1h
eWJlUG9wQ29udGV4dCh0YWdOYW1lLnRvTG93ZXJDYXNlKCkpOwotICAgICAgICByZXR1cm4gY29u
dCgpOwotICAgICAgfQotICAgICAgaWYgKHR5cGUgPT0gImVuZFRhZyIpIHsKLSAgICAgICAgbWF5
YmVQb3BDb250ZXh0KHRhZ05hbWUudG9Mb3dlckNhc2UoKSk7Ci0gICAgICAgIHB1c2hDb250ZXh0
KHRhZ05hbWUsIHN0YXJ0T2ZMaW5lKTsKLSAgICAgICAgcmV0dXJuIGNvbnQoKTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBjb250KCk7Ci0gICAgfTsKICAgfQotICBmdW5jdGlvbiBlbmRjbG9zZXRh
ZyhlcnIpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24odHlwZSkgewotICAgICAgaWYgKGVycikgc2V0
U3R5bGUgPSAiZXJyb3IiOwotICAgICAgaWYgKHR5cGUgPT0gImVuZFRhZyIpIHsgcG9wQ29udGV4
dCgpOyByZXR1cm4gY29udCgpOyB9CisgIGZ1bmN0aW9uIHRhZ05hbWVTdGF0ZSh0eXBlLCBzdHJl
YW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CisgICAgICBzdGF0ZS50YWdO
YW1lID0gc3RyZWFtLmN1cnJlbnQoKTsKKyAgICAgIHNldFN0eWxlID0gInRhZyI7CisgICAgICBy
ZXR1cm4gYXR0clN0YXRlOworICAgIH0gZWxzZSB7CiAgICAgICBzZXRTdHlsZSA9ICJlcnJvciI7
Ci0gICAgICByZXR1cm4gY29udChhcmd1bWVudHMuY2FsbGVlKTsKLSAgICB9OworICAgICAgcmV0
dXJuIHRhZ05hbWVTdGF0ZTsKKyAgICB9CiAgIH0KLSAgZnVuY3Rpb24gbWF5YmVQb3BDb250ZXh0
KG5leHRUYWdOYW1lKSB7Ci0gICAgdmFyIHBhcmVudFRhZ05hbWU7Ci0gICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgIGlmICghY3VyU3RhdGUuY29udGV4dCkgewotICAgICAgICByZXR1cm47Ci0gICAg
ICB9Ci0gICAgICBwYXJlbnRUYWdOYW1lID0gY3VyU3RhdGUuY29udGV4dC50YWdOYW1lLnRvTG93
ZXJDYXNlKCk7Ci0gICAgICBpZiAoIUtsdWRnZXMuY29udGV4dEdyYWJiZXJzLmhhc093blByb3Bl
cnR5KHBhcmVudFRhZ05hbWUpIHx8Ci0gICAgICAgICAgIUtsdWRnZXMuY29udGV4dEdyYWJiZXJz
W3BhcmVudFRhZ05hbWVdLmhhc093blByb3BlcnR5KG5leHRUYWdOYW1lKSkgewotICAgICAgICBy
ZXR1cm47CisgIGZ1bmN0aW9uIGNsb3NlVGFnTmFtZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUp
IHsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHsKKyAgICAgIHZhciB0YWdOYW1lID0gc3RyZWFt
LmN1cnJlbnQoKTsKKyAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQudGFn
TmFtZSAhPSB0YWdOYW1lICYmCisgICAgICAgICAgS2x1ZGdlcy5pbXBsaWNpdGx5Q2xvc2VkLmhh
c093blByb3BlcnR5KHN0YXRlLmNvbnRleHQudGFnTmFtZSkpCisgICAgICAgIHBvcENvbnRleHQo
c3RhdGUpOworICAgICAgaWYgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC50YWdOYW1l
ID09IHRhZ05hbWUpIHsKKyAgICAgICAgc2V0U3R5bGUgPSAidGFnIjsKKyAgICAgICAgcmV0dXJu
IGNsb3NlU3RhdGU7CisgICAgICB9IGVsc2UgeworICAgICAgICBzZXRTdHlsZSA9ICJ0YWcgZXJy
b3IiOworICAgICAgICByZXR1cm4gY2xvc2VTdGF0ZUVycjsKICAgICAgIH0KLSAgICAgIHBvcENv
bnRleHQoKTsKKyAgICB9IGVsc2UgeworICAgICAgc2V0U3R5bGUgPSAiZXJyb3IiOworICAgICAg
cmV0dXJuIGNsb3NlU3RhdGVFcnI7CiAgICAgfQogICB9CgotICBmdW5jdGlvbiBhdHRyaWJ1dGVz
KHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAid29yZCIpIHtzZXRTdHlsZSA9ICJhdHRyaWJ1dGUi
OyByZXR1cm4gY29udChhdHRyaWJ1dGUsIGF0dHJpYnV0ZXMpO30KLSAgICBpZiAodHlwZSA9PSAi
ZW5kVGFnIiB8fCB0eXBlID09ICJzZWxmY2xvc2VUYWciKSByZXR1cm4gcGFzcygpOworICBmdW5j
dGlvbiBjbG9zZVN0YXRlKHR5cGUsIF9zdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUgIT0g
ImVuZFRhZyIpIHsKKyAgICAgIHNldFN0eWxlID0gImVycm9yIjsKKyAgICAgIHJldHVybiBjbG9z
ZVN0YXRlOworICAgIH0KKyAgICBwb3BDb250ZXh0KHN0YXRlKTsKKyAgICByZXR1cm4gYmFzZVN0
YXRlOworICB9CisgIGZ1bmN0aW9uIGNsb3NlU3RhdGVFcnIodHlwZSwgc3RyZWFtLCBzdGF0ZSkg
eworICAgIHNldFN0eWxlID0gImVycm9yIjsKKyAgICByZXR1cm4gY2xvc2VTdGF0ZSh0eXBlLCBz
dHJlYW0sIHN0YXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGF0dHJTdGF0ZSh0eXBlLCBfc3RyZWFt
LCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09ICJ3b3JkIikgeworICAgICAgc2V0U3R5bGUgPSAi
YXR0cmlidXRlIjsKKyAgICAgIHJldHVybiBhdHRyRXFTdGF0ZTsKKyAgICB9IGVsc2UgaWYgKHR5
cGUgPT0gImVuZFRhZyIgfHwgdHlwZSA9PSAic2VsZmNsb3NlVGFnIikgeworICAgICAgdmFyIHRh
Z05hbWUgPSBzdGF0ZS50YWdOYW1lLCB0YWdTdGFydCA9IHN0YXRlLnRhZ1N0YXJ0OworICAgICAg
c3RhdGUudGFnTmFtZSA9IHN0YXRlLnRhZ1N0YXJ0ID0gbnVsbDsKKyAgICAgIGlmICh0eXBlID09
ICJzZWxmY2xvc2VUYWciIHx8CisgICAgICAgICAgS2x1ZGdlcy5hdXRvU2VsZkNsb3NlcnMuaGFz
T3duUHJvcGVydHkodGFnTmFtZSkpIHsKKyAgICAgICAgbWF5YmVQb3BDb250ZXh0KHN0YXRlLCB0
YWdOYW1lKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG1heWJlUG9wQ29udGV4dChzdGF0ZSwg
dGFnTmFtZSk7CisgICAgICAgIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZSwgdGFn
TmFtZSwgdGFnU3RhcnQgPT0gc3RhdGUuaW5kZW50ZWQpOworICAgICAgfQorICAgICAgcmV0dXJu
IGJhc2VTdGF0ZTsKKyAgICB9CiAgICAgc2V0U3R5bGUgPSAiZXJyb3IiOwotICAgIHJldHVybiBj
b250KGF0dHJpYnV0ZXMpOworICAgIHJldHVybiBhdHRyU3RhdGU7CiAgIH0KLSAgZnVuY3Rpb24g
YXR0cmlidXRlKHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAiZXF1YWxzIikgcmV0dXJuIGNvbnQo
YXR0dmFsdWUsIGF0dHJpYnV0ZXMpOworICBmdW5jdGlvbiBhdHRyRXFTdGF0ZSh0eXBlLCBzdHJl
YW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gImVxdWFscyIpIHJldHVybiBhdHRyVmFsdWVT
dGF0ZTsKICAgICBpZiAoIUtsdWRnZXMuYWxsb3dNaXNzaW5nKSBzZXRTdHlsZSA9ICJlcnJvciI7
Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAid29yZCIpIHtzZXRTdHlsZSA9ICJhdHRyaWJ1dGUiOyBy
ZXR1cm4gY29udChhdHRyaWJ1dGUsIGF0dHJpYnV0ZXMpO30KLSAgICByZXR1cm4gKHR5cGUgPT0g
ImVuZFRhZyIgfHwgdHlwZSA9PSAic2VsZmNsb3NlVGFnIikgPyBwYXNzKCkgOiBjb250KCk7Cisg
ICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKICAgfQotICBmdW5jdGlv
biBhdHR2YWx1ZSh0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJldHVybiBjb250
KGF0dHZhbHVlbWF5YmUpOwotICAgIGlmICh0eXBlID09ICJ3b3JkIiAmJiBLbHVkZ2VzLmFsbG93
VW5xdW90ZWQpIHtzZXRTdHlsZSA9ICJzdHJpbmciOyByZXR1cm4gY29udCgpO30KKyAgZnVuY3Rp
b24gYXR0clZhbHVlU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09
ICJzdHJpbmciKSByZXR1cm4gYXR0ckNvbnRpbnVlZFN0YXRlOworICAgIGlmICh0eXBlID09ICJ3
b3JkIiAmJiBLbHVkZ2VzLmFsbG93VW5xdW90ZWQpIHtzZXRTdHlsZSA9ICJzdHJpbmciOyByZXR1
cm4gYXR0clN0YXRlO30KICAgICBzZXRTdHlsZSA9ICJlcnJvciI7Ci0gICAgcmV0dXJuICh0eXBl
ID09ICJlbmRUYWciIHx8IHR5cGUgPT0gInNlbGZDbG9zZVRhZyIpID8gcGFzcygpIDogY29udCgp
OworICAgIHJldHVybiBhdHRyU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSk7CiAgIH0KLSAgZnVu
Y3Rpb24gYXR0dmFsdWVtYXliZSh0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJl
dHVybiBjb250KGF0dHZhbHVlbWF5YmUpOwotICAgIGVsc2UgcmV0dXJuIHBhc3MoKTsKKyAgZnVu
Y3Rpb24gYXR0ckNvbnRpbnVlZFN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAo
dHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGF0dHJDb250aW51ZWRTdGF0ZTsKKyAgICByZXR1cm4g
YXR0clN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwogICB9CgogICByZXR1cm4gewogICAgIHN0
YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHt0b2tlbml6ZTogaW5UZXh0LCBj
YzogW10sIGluZGVudGVkOiAwLCBzdGFydE9mTGluZTogdHJ1ZSwgdGFnTmFtZTogbnVsbCwgdGFn
U3RhcnQ6IG51bGwsIGNvbnRleHQ6IG51bGx9OworICAgICAgcmV0dXJuIHt0b2tlbml6ZTogaW5U
ZXh0LAorICAgICAgICAgICAgICBzdGF0ZTogYmFzZVN0YXRlLAorICAgICAgICAgICAgICBpbmRl
bnRlZDogMCwKKyAgICAgICAgICAgICAgdGFnTmFtZTogbnVsbCwgdGFnU3RhcnQ6IG51bGwsCisg
ICAgICAgICAgICAgIGNvbnRleHQ6IG51bGx9OwogICAgIH0sCgogICAgIHRva2VuOiBmdW5jdGlv
bihzdHJlYW0sIHN0YXRlKSB7Ci0gICAgICBpZiAoIXN0YXRlLnRhZ05hbWUgJiYgc3RyZWFtLnNv
bCgpKSB7Ci0gICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTsKKyAgICAgIGlmICghc3Rh
dGUudGFnTmFtZSAmJiBzdHJlYW0uc29sKCkpCiAgICAgICAgIHN0YXRlLmluZGVudGVkID0gc3Ry
ZWFtLmluZGVudGF0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkp
IHJldHVybiBudWxsOwoKLSAgICAgIHNldFN0eWxlID0gdHlwZSA9IHRhZ05hbWUgPSBudWxsOwor
ICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKKyAgICAgIHR5cGUgPSBu
dWxsOwogICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7Ci0g
ICAgICBzdGF0ZS50eXBlID0gdHlwZTsKICAgICAgIGlmICgoc3R5bGUgfHwgdHlwZSkgJiYgc3R5
bGUgIT0gImNvbW1lbnQiKSB7Ci0gICAgICAgIGN1clN0YXRlID0gc3RhdGU7IGN1clN0cmVhbSA9
IHN0cmVhbTsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICB2YXIgY29tYiA9IHN0
YXRlLmNjLnBvcCgpIHx8IGVsZW1lbnQ7Ci0gICAgICAgICAgaWYgKGNvbWIodHlwZSB8fCBzdHls
ZSkpIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIHNldFN0eWxlID0gbnVsbDsKKyAgICAgICAg
c3RhdGUuc3RhdGUgPSBzdGF0ZS5zdGF0ZSh0eXBlIHx8IHN0eWxlLCBzdHJlYW0sIHN0YXRlKTsK
KyAgICAgICAgaWYgKHNldFN0eWxlKQorICAgICAgICAgIHN0eWxlID0gc2V0U3R5bGUgPT0gImVy
cm9yIiA/IHN0eWxlICsgIiBlcnJvciIgOiBzZXRTdHlsZTsKICAgICAgIH0KLSAgICAgIHN0YXRl
LnN0YXJ0T2ZMaW5lID0gZmFsc2U7Ci0gICAgICBpZiAoc2V0U3R5bGUpCi0gICAgICAgIHN0eWxl
ID0gc2V0U3R5bGUgPT0gImVycm9yIiA/IHN0eWxlICsgIiBlcnJvciIgOiBzZXRTdHlsZTsKICAg
ICAgIHJldHVybiBzdHlsZTsKICAgICB9LAoKQEAgLTMxMSw4ICszMjMsOCBAQCBDb2RlTWlycm9y
LmRlZmluZU1vZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAg
ICBpZiAoc3RhdGUudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSkgewogICAgICAgICByZXR1cm4gc3Rh
dGUuc3RyaW5nU3RhcnRDb2wgKyAxOwogICAgICAgfQotICAgICAgaWYgKChzdGF0ZS50b2tlbml6
ZSAhPSBpblRhZyAmJiBzdGF0ZS50b2tlbml6ZSAhPSBpblRleHQpIHx8Ci0gICAgICAgICAgY29u
dGV4dCAmJiBjb250ZXh0Lm5vSW5kZW50KQorICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5u
b0luZGVudCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgIGlmIChzdGF0ZS50b2tlbml6
ZSAhPSBpblRhZyAmJiBzdGF0ZS50b2tlbml6ZSAhPSBpblRleHQpCiAgICAgICAgIHJldHVybiBm
dWxsTGluZSA/IGZ1bGxMaW5lLm1hdGNoKC9eKFxzKikvKVswXS5sZW5ndGggOiAwOwogICAgICAg
Ly8gSW5kZW50IHRoZSBzdGFydHMgb2YgYXR0cmlidXRlIG5hbWVzLgogICAgICAgaWYgKHN0YXRl
LnRhZ05hbWUpIHsKQEAgLTMyMiwxNSArMzM0LDM0IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgi
eG1sIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgICByZXR1cm4g
c3RhdGUudGFnU3RhcnQgKyBpbmRlbnRVbml0ICogbXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yOwog
ICAgICAgfQogICAgICAgaWYgKGFsaWduQ0RBVEEgJiYgLzwhXFtDREFUQVxbLy50ZXN0KHRleHRB
ZnRlcikpIHJldHVybiAwOwotICAgICAgaWYgKGNvbnRleHQgJiYgL148XC8vLnRlc3QodGV4dEFm
dGVyKSkKLSAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjsKKyAgICAgIHZhciB0YWdBZnRl
ciA9IHRleHRBZnRlciAmJiAvXjwoXC8pPyhbXHdfOlwuLV0qKS8uZXhlYyh0ZXh0QWZ0ZXIpOwor
ICAgICAgaWYgKHRhZ0FmdGVyICYmIHRhZ0FmdGVyWzFdKSB7IC8vIENsb3NpbmcgdGFnIHNwb3R0
ZWQKKyAgICAgICAgd2hpbGUgKGNvbnRleHQpIHsKKyAgICAgICAgICBpZiAoY29udGV4dC50YWdO
YW1lID09IHRhZ0FmdGVyWzJdKSB7CisgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wcmV2
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfSBlbHNlIGlmIChLbHVkZ2VzLmltcGxp
Y2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoY29udGV4dC50YWdOYW1lKSkgeworICAgICAgICAg
ICAgY29udGV4dCA9IGNvbnRleHQucHJldjsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHRhZ0Fm
dGVyKSB7IC8vIE9wZW5pbmcgdGFnIHNwb3R0ZWQKKyAgICAgICAgd2hpbGUgKGNvbnRleHQpIHsK
KyAgICAgICAgICB2YXIgZ3JhYmJlcnMgPSBLbHVkZ2VzLmNvbnRleHRHcmFiYmVyc1tjb250ZXh0
LnRhZ05hbWVdOworICAgICAgICAgIGlmIChncmFiYmVycyAmJiBncmFiYmVycy5oYXNPd25Qcm9w
ZXJ0eSh0YWdBZnRlclsyXSkpCisgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wcmV2Owor
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CiAg
ICAgICB3aGlsZSAoY29udGV4dCAmJiAhY29udGV4dC5zdGFydE9mTGluZSkKICAgICAgICAgY29u
dGV4dCA9IGNvbnRleHQucHJldjsKICAgICAgIGlmIChjb250ZXh0KSByZXR1cm4gY29udGV4dC5p
bmRlbnQgKyBpbmRlbnRVbml0OwogICAgICAgZWxzZSByZXR1cm4gMDsKICAgICB9LAoKLSAgICBl
bGVjdHJpY0NoYXJzOiAiLyIsCisgICAgZWxlY3RyaWNJbnB1dDogLzxcL1tcc1x3Ol0rPiQvLAog
ICAgIGJsb2NrQ29tbWVudFN0YXJ0OiAiPCEtLSIsCiAgICAgYmxvY2tDb21tZW50RW5kOiAiLS0+
IiwKCkBAIC0zNDMsMyArMzc0LDUgQEAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIs
ICJ4bWwiKTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwgInhtbCIp
OwogaWYgKCFDb2RlTWlycm9yLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIikp
CiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIiwge25hbWU6ICJ4bWwiLCBodG1s
TW9kZTogdHJ1ZX0pOworCit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRp
b25UZXh0RWRpdG9yLmNzcwppbmRleCA0MjE3M2VlLi44NWQyZTBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9u
VGV4dEVkaXRvci5jc3MKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuY3NzCkBAIC02MSw3ICs2MSw3IEBA
CiAgICAgZGlzcGxheTogbm9uZTsKIH0KCi0uY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVN
aXJyb3IgLkNvZGVNaXJyb3ItbGluZXMgcHJlIHNwYW46bm90KC5jc3Mtc3R5bGUtZGVjbGFyYXRp
b24tcHJvcGVydHkpOm5vdCguQ29kZU1pcnJvci13aWRnZXQpOm5vdCguY20tY29tbWVudCk6bm90
KC5jbS10YWIpLAorLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWly
cm9yLWxpbmVzIHByZSA+IHNwYW4gc3Bhbjpub3QoLmNzcy1zdHlsZS1kZWNsYXJhdGlvbi1wcm9w
ZXJ0eSk6bm90KC5Db2RlTWlycm9yLXdpZGdldCk6bm90KC5jbS1jb21tZW50KTpub3QoLmNtLXRh
YiksCiAuY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGlu
ZXMgLmNzcy1zdHlsZS1kZWNsYXJhdGlvbi1wcm9wZXJ0eS5kaXNhYmxlZCwKIC5jc3Mtc3R5bGUt
dGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAuQ29kZU1pcnJvci1saW5lcyAuY3NzLXN0eWxlLWRl
Y2xhcmF0aW9uLXByb3BlcnR5LmludmFsaWQsCiAuY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNv
ZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGluZXMgLmNzcy1zdHlsZS1kZWNsYXJhdGlvbi1wcm9wZXJ0
eS5vdGhlci12ZW5kb3IsCkBAIC03Miw3ICs3Miw3IEBACiAgICAgLXdlYmtpdC10ZXh0LXN0cm9r
ZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpOwogfQoKLS5jc3Mtc3R5bGUtdGV4dC1lZGl0b3Ig
PiAuQ29kZU1pcnJvciAuQ29kZU1pcnJvci1saW5lcyBwcmUgc3Bhbjpub3QoLmNzcy1zdHlsZS1k
ZWNsYXJhdGlvbi1wcm9wZXJ0eSk6bm90KC5Db2RlTWlycm9yLXdpZGdldCk6bm90KC5jbS1jb21t
ZW50KTpub3QoLmNtLXRhYiksCisuY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3Ig
LkNvZGVNaXJyb3ItbGluZXMgcHJlID4gc3BhbiBzcGFuOm5vdCguY3NzLXN0eWxlLWRlY2xhcmF0
aW9uLXByb3BlcnR5KTpub3QoLkNvZGVNaXJyb3Itd2lkZ2V0KTpub3QoLmNtLWNvbW1lbnQpOm5v
dCguY20tdGFiKSwKIC5jc3Mtc3R5bGUtdGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAuQ29kZU1p
cnJvci1saW5lcyAuY3NzLXN0eWxlLWRlY2xhcmF0aW9uLXByb3BlcnR5LmludmFsaWQgewogICAg
IC13ZWJraXQtdGV4dC1zdHJva2UtY29sb3I6IHJnYmEoMjU1LCAwLCAwLCAwLjYpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ1NTU3R5
bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qcwppbmRleCBkNWUw
ZmFkLi5kZDBlYmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uVGV4
dEVkaXRvci5qcwpAQCAtMzk4LDcgKzM5OCw3IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgc3dhdGNoRWxl
bWVudC50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2xpY2sgdG8gb3BlbiBhIGNvbG9y
cGlja2VyLiBTaGlmdC1jbGljayB0byBjaGFuZ2UgY29sb3IgZm9ybWF0LiIpOwogICAgICAgICAg
ICAgICAgIHN3YXRjaEVsZW1lbnQuY2xhc3NOYW1lID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVj
bGFyYXRpb25UZXh0RWRpdG9yLkNvbG9yU3dhdGNoRWxlbWVudFN0eWxlQ2xhc3NOYW1lOwogICAg
ICAgICAgICAgICAgIHN3YXRjaEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlz
Ll9jb2xvclN3YXRjaENsaWNrZWQuYmluZCh0aGlzKSk7Ci0KKwogICAgICAgICAgICAgICAgIHZh
ciBzd2F0Y2hJbm5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAg
ICAgICAgICAgICAgICAgc3dhdGNoSW5uZXJFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9
IGNvbG9yU3RyaW5nOwogICAgICAgICAgICAgICAgIHN3YXRjaEVsZW1lbnQuYXBwZW5kQ2hpbGQo
c3dhdGNoSW5uZXJFbGVtZW50KTsKQEAgLTg1Miw3ICs4NTIsNyBAQCBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAg
IHRoaXMuX2NvZGVNaXJyb3Iuc2V0VmFsdWUoc3R5bGVUZXh0KTsKCiAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX3ByZWZpeFdoaXRlc3BhY2UpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nv
ZGVNaXJyb3IucmVtb3ZlTGluZSgwKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29kZU1p
cnJvci5yZXBsYWNlUmFuZ2UoIiIsIHtsaW5lOiAwLCBjaDogMH0sIHtsaW5lOiAxLCBjaDogMH0p
OwoKICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3VmZml4V2hpdGVzcGFjZSkgewogICAgICAg
ICAgICAgICAgICAgICB2YXIgbGluZUNvdW50ID0gdGhpcy5fY29kZU1pcnJvci5saW5lQ291bnQo
KTsKQEAgLTk1Myw3ICs5NTMsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRl
eHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIXRoaXMuX3N0eWxlIHx8ICF0aGlz
Ll9zdHlsZS5vd25lclJ1bGUgfHwgIXRoaXMuX3N0eWxlLm93bmVyUnVsZS5zb3VyY2VDb2RlTG9j
YXRpb24pCiAgICAgICAgICAgICB0aGlzLl9qdW1wVG9TeW1ib2xUcmFja2luZ01vZGVFbmFibGVk
ID0gZmFsc2U7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2p1bXBUb1N5bWJvbFRy
YWNraW5nTW9kZUVuYWJsZWQgPSBXZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLm1ldGFLZXkgJiYg
IVdlYkluc3BlY3Rvci5tb2RpZmllcktleXMuYWx0S2V5ICYmICFXZWJJbnNwZWN0b3IubW9kaWZp
ZXJLZXlzLnNoaWZ0S2V5OworICAgICAgICAgICAgdGhpcy5fanVtcFRvU3ltYm9sVHJhY2tpbmdN
b2RlRW5hYmxlZCA9IFdlYkluc3BlY3Rvci5tb2RpZmllcktleXMuYWx0S2V5ICYmICFXZWJJbnNw
ZWN0b3IubW9kaWZpZXJLZXlzLm1ldGFLZXkgJiYgIVdlYkluc3BlY3Rvci5tb2RpZmllcktleXMu
c2hpZnRLZXk7CgogICAgICAgICBpZiAob2xkSnVtcFRvU3ltYm9sVHJhY2tpbmdNb2RlRW5hYmxl
ZCAhPT0gdGhpcy5fanVtcFRvU3ltYm9sVHJhY2tpbmdNb2RlRW5hYmxlZCkgewogICAgICAgICAg
ICAgaWYgKHRoaXMuX2p1bXBUb1N5bWJvbFRyYWNraW5nTW9kZUVuYWJsZWQpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291cmNlRGV0
YWlsc1NpZGViYXJQYW5lbC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1Jlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qcwppbmRleCA1ZmVlZTFlLi4yMjA1
MTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzCkBA
IC0zODAsNyArMzgwLDcgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5l
bC5wcm90b3R5cGUgPSB7CgogICAgICAgICBpZiAoIXJlc291cmNlKQogICAgICAgICAgICAgcmV0
dXJuOwotCisKICAgICAgICAgLy8gSGlkZSB0aGUgc2VjdGlvbiBpZiB3ZSdyZSBub3QgZGVhbGlu
ZyB3aXRoIGFuIGltYWdlIG9yIGlmIHRoZSBsb2FkIGZhaWxlZC4KICAgICAgICAgaWYgKHJlc291
cmNlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLkltYWdlIHx8IHJlc291cmNl
LmZhaWxlZCkgewogICAgICAgICAgICAgdmFyIGltYWdlU2VjdGlvbkVsZW1lbnQgPSB0aGlzLl9p
bWFnZVNpemVTZWN0aW9uLmVsZW1lbnQ7CkBAIC0zODgsMTAgKzM4OCwxMCBAQCBXZWJJbnNwZWN0
b3IuUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
ICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQoaW1hZ2VTZWN0aW9uRWxlbWVudCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQorCiAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2Vj
dGlvbiBpcyBkaXNwbGF5ZWQsIHJpZ2h0IGJlZm9yZSB0aGUgIkxvY2F0aW9uIiBzZWN0aW9uLgog
ICAgICAgICB0aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2ltYWdlU2l6ZVNlY3Rpb24u
ZWxlbWVudCwgdGhpcy5fbG9jYXRpb25TZWN0aW9uLmVsZW1lbnQpOwotCisKICAgICAgICAgLy8g
R2V0IHRoZSBtZXRyaWNzIGZvciB0aGlzIHJlc291cmNlIGFuZCBmaWxsIGluIHRoZSBtZXRyaWNz
IHJvd3Mgd2l0aCB0aGF0IGluZm9ybWF0aW9uLgogICAgICAgICByZXNvdXJjZS5nZXRJbWFnZVNp
emUoZnVuY3Rpb24oc2l6ZSkgewogICAgICAgICAgICAgdGhpcy5faW1hZ2VXaWR0aFJvdy52YWx1
ZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJWZweCIpLmZvcm1hdChzaXplLndpZHRoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1N5bnRh
eEhpZ2hsaWdodGluZ0RlZmF1bHRUaGVtZS5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9TeW50YXhIaWdobGlnaHRpbmdEZWZhdWx0VGhlbWUuY3NzCmluZGV4
IGE2YWM4YzAuLjE5OTNiNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1N5bnRheEhpZ2hsaWdodGluZ0RlZmF1bHRUaGVtZS5jc3MKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ludGF4SGlnaGxpZ2h0
aW5nRGVmYXVsdFRoZW1lLmNzcwpAQCAtNDEsMTQgKzQxLDE2IEBACiB9CgogLmNtLXMtZGVmYXVs
dCAuY20tdGFnLAorLmNtLXMtZGVmYXVsdCAuY20tYnJhY2tldCwKKy5jbS1zLWRlZmF1bHQgLmNt
LXRhZy5jbS1icmFja2V0LAogLmNtLXMtZGVmYXVsdCAuY20tYXRvbSwKIC5jbS1zLWRlZmF1bHQg
LmNtLWtleXdvcmQsCisuY20tcy1kZWZhdWx0IC5jbS1tLWNzcy5jbS10YWcsCiAuY20tcy1kZWZh
dWx0IC5jbS1tLWNzcy5jbS1tZXRhLAotLmNtLXMtZGVmYXVsdCAuY20tbS1jc3MuY20tcHJvcGVy
dHksCi0uY20tcy1kZWZhdWx0IC5jbS1tLWNzcy5jbS1zdHJpbmctMiwKKy5jbS1zLWRlZmF1bHQg
LmNtLW0tY3NzLmNtLXZhcmlhYmxlLTMsCiAuY20tcy1kZWZhdWx0IC5jbS1tLWphdmFzY3JpcHQu
Y20tYnVpbHRpbiwKIC5zeW50YXgtaGlnaGxpZ2h0ZWQgLmNzcy1rZXl3b3JkLAotLnN5bnRheC1o
aWdobGlnaHRlZCAuY3NzLXByb3BlcnR5LAorLnN5bnRheC1oaWdobGlnaHRlZCAuY3NzLXRhZywK
IC5zeW50YXgtaGlnaGxpZ2h0ZWQgLmNzcy1hdC1ydWxlLAogLnN5bnRheC1oaWdobGlnaHRlZCAu
Y3NzLWltcG9ydGFudCwKIC5zeW50YXgtaGlnaGxpZ2h0ZWQgLmphdmFzY3JpcHQta2V5d29yZCwK
QEAgLTY5LDkgKzcxLDEwIEBACiAuY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIsCiAuY20tcy1k
ZWZhdWx0IC5jbS12YXJpYWJsZSwKIC5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIsCi0uY20t
cy1kZWZhdWx0IC5jbS12YXJpYWJsZS0zLAotLmNtLXMtZGVmYXVsdCAuY20tbS1jc3MuY20tdGFn
LAorLmNtLXMtZGVmYXVsdCAuY20tbS1jc3MuY20tc3RyaW5nLTIsCiAuY20tcy1kZWZhdWx0IC5j
bS1tLWNzcy5jbS1idWlsdGluLAorLmNtLXMtZGVmYXVsdCAuY20tbS1jc3MuY20tcHJvcGVydHks
Cisuc3ludGF4LWhpZ2hsaWdodGVkIC5jc3MtcHJvcGVydHksCiAuc3ludGF4LWhpZ2hsaWdodGVk
IC5jc3Mtc2VsZWN0b3IsCiAuc3ludGF4LWhpZ2hsaWdodGVkIC5qYXZhc2NyaXB0LWlkZW50IHsK
ICAgICBjb2xvcjogaW5oZXJpdDsK
</data>
<flag name="review"
          id="253697"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229337</attachid>
            <date>2014-04-14 19:17:04 -0700</date>
            <delta_ts>2014-04-14 21:32:13 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix: Update to CodeMirror 4.0.</desc>
            <filename>codemirror4_rev1.diff</filename>
            <type>text/plain</type>
            <size>895714</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDk0YTBiZTAuLjhjZmM3YWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE0LTA0LTE0ICBKb25vIFdlbGxzICA8
am9ub3dlbGxzQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgdG8gQ29kZU1pcnJvciA0LjAu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAwMTkK
KworICAgICAgICBUaGUgQ29kZU1pcnJvciA0LjAgbGlicmFyeSBhZGRzIG11bHRpcGxlIHNlbGVj
dGlvbnMgYW5kIHRoZSBhYmlsaXR5IHRvCisgICAgICAgIHVuZG8vcmVkbyBzZWxlY3Rpb25zLiBT
ZWxlY3Rpb25zIGFyZSBtYWRlIGJ5IGhvbGRpbmcgdGhlIENvbW1hbmQgKENtZCkga2V5CisgICAg
ICAgIGFuZCBjbGlja2luZyBpbnRvIGFuIGVkaXRvciwgb3IgYnkgaG9sZGluZyBPcHRpb24gKEFs
dCkgYW5kIG1ha2luZyBhIGJsb2NrCisgICAgICAgIHNlbGVjdGlvbiBmb2xsb3dlZCBieSBlbnRl
cmluZyBhIGNoYXJhY3RlciBvciBtb3ZpbmcgdGhlIGN1cnNvci4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvdXBkYXRlLWNvZGVtaXJy
b3ItcmVzb3VyY2VzLnJiOgorICAgICAgICAqIFNjcmlwdHMvdXBkYXRlLXByZXR0eS1wcmludGVy
LnJiOgorICAgICAgICBVcGRhdGUgc2NyaXB0cyB0byByZWZsZWN0IHVwZGF0ZWQgbG9jYXRpb25z
IGZvciBDb2RlTWlycm9yIGZpbGVzLgorICAgICAgICBObyBsb25nZXIgY29waWVzIExFU1MgbW9k
ZSBmaWxlIGFzIHRoaXMgaGFzIGJlZW4gaW50ZWdyYXRlZCBpbnRvIENTUyBtb2RlCisgICAgICAg
IGluIENvZGVNaXJyb3IgNC4wLgorCisgICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvY29k
ZW1pcnJvci5jc3M6CisgICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5q
czoKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9jc3MuanM6CisgICAgICAgICogVG9v
bHMvUHJldHR5UHJpbnRpbmcvamF2YXNjcmlwdC5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvanVyZS5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvc2VicmFja2V0cy5qczoKKyAgICAgICAgKiBVc2VySW50
ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5jc3M6CisgICAgICAgICogVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanM6CisgICAgICAgICog
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZmZlZXNjcmlwdC5qczoKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29tbWVudC5qczoKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9odG1sbWl4ZWQuanM6CisgICAgICAg
ICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanM6CisgICAg
ICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2xpdmVzY3JpcHQuanM6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMu
anM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXku
anM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3BsYWNlaG9s
ZGVyLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9ydW5t
b2RlLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNz
LmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zZWFyY2hj
dXJzb3IuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3Nx
bC5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpz
OgorICAgICAgICBVcGRhdGUgdG8gQ29kZU1pcnJvciA0LjAuCisKKyAgICAgICAgKiBVc2VySW50
ZXJmYWNlL01haW4uaHRtbDogUmVtb3ZlIGxlc3MuanMgd2hpY2ggaXMgbm93IHBhcnQgb2YgY3Nz
LmpzLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9u
VGV4dEVkaXRvci5jc3M6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURl
Y2xhcmF0aW9uVGV4dEVkaXRvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURl
Y2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2NyZWF0ZUNvbG9yU3dhdGNo
ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9y
LnByb3RvdHlwZS5fdXBkYXRlSnVtcFRvU3ltYm9sVHJhY2tpbmdNb2RlKToKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL1ZpZXdzL1N5bnRheEhpZ2hsaWdodGluZ0RlZmF1bHRUaGVtZS5jc3M6Cisg
ICAgICAgIFVwZGF0ZSBzdHlsZXMgdG8gbWF0Y2ggQ29kZU1pcnJvciBjaGFuZ2VzLiBVcGRhdGUg
Q1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanMKKyAgICAgICAgdG8gbWF0Y2ggQ29kZU1p
cnJvciBBUEkgdXBkYXRlcyAoZG9jLnJlbW92ZUxpbmUoKSBoYXMgYmVlbiByZW1vdmVkLCBzbwor
ICAgICAgICByZXBsYWNlUmFuZ2UoKSBpcyB1c2VkIGluc3RlYWQpLiBBbHNvIHRoZSB0b2tlblRy
YWNraW5nQ29udHJvbGxlciBpcyBub3cgZW5hYmxlZCBpbiB0aGUKKyAgICAgICAgQ1NTU3R5bGVE
ZWNsYXJhdGlvblRleHRFZGl0b3IgYW5kIFNvdXJjZUNvZGVUZXh0RWRpdG9yIHdoZW4gdGhlIE9w
dGlvbiAoQWx0KSBrZXkKKyAgICAgICAgaXMgcHJlc3NlZCBpbnN0ZWFkIG9mIHRoZSBDb21tYW5k
IChDbWQpIGtleSBzbyBhcyBub3QgdG8gY29uZmxpY3Qgd2l0aCBtdWx0aXBsZQorICAgICAgICBj
dXJzb3IgcGxhY2VtZW50IGluIHRoZSBDb2RlTWlycm9yIHVwZGF0ZS4KKwogMjAxNC0wNC0wOCAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luZG93c10g
R2VuZXJhdGUgT3B0aW1pemVkIFdlYkluc3BlY3RvclVJIGluIFJlbGVhc2UgQnVpbGQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL3VwZGF0ZS1jb2RlbWlycm9yLXJl
c291cmNlcy5yYiBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL3VwZGF0ZS1jb2RlbWly
cm9yLXJlc291cmNlcy5yYgppbmRleCA2MDg2MDMwLi5lNzViOWRiIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy91cGRhdGUtY29kZW1pcnJvci1yZXNvdXJjZXMucmIK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvdXBkYXRlLWNvZGVtaXJyb3ItcmVz
b3VyY2VzLnJiCkBAIC00Myw3ICs0Myw2IEBAIENPREVfTUlSUk9SX0ZJTEVTX1RPX0NPUFkgPSAl
dygKICAgbW9kZS9jc3MvY3NzLmpzCiAgIG1vZGUvaHRtbG1peGVkL2h0bWxtaXhlZC5qcwogICBt
b2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcwotICBtb2RlL2xlc3MvbGVzcy5qcwogICBtb2Rl
L2xpdmVzY3JpcHQvbGl2ZXNjcmlwdC5qcwogICBtb2RlL3Nhc3Mvc2Fzcy5qcwogICBtb2RlL3Nx
bC9zcWwuanMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL3VwZGF0
ZS1wcmV0dHktcHJpbnRlci5yYiBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL3VwZGF0
ZS1wcmV0dHktcHJpbnRlci5yYgppbmRleCBkMDkxZTBkLi5mYjc2MjQxIDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy91cGRhdGUtcHJldHR5LXByaW50ZXIucmIKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvdXBkYXRlLXByZXR0eS1wcmludGVyLnJi
CkBAIC0yMywyMSArMjMsMjEgQEAgZW5kCiAKICMgQ29weSB0aGUgZm9ybWF0dGVyIGFuZCBDb2Rl
TWlycm9yIGZpbGVzIGZyb20gVXNlckludGVyZmFjZSB0byBUb29scy4KIFVTRVJfSU5URVJGQUNF
X1RPX1RPT0xTX01BUCA9IHsKLSAgIlVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJv
ckZvcm1hdHRlcnMuanMiICAgID0+ICJUb29scy9QcmV0dHlQcmludGluZy9Db2RlTWlycm9yRm9y
bWF0dGVycy5qcyIsCisgICJVc2VySW50ZXJmYWNlL1ZpZXdzL0NvZGVNaXJyb3JGb3JtYXR0ZXJz
LmpzIiAgICAgICAgICA9PiAiVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRl
cnMuanMiLAogICAiVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXIuanMiICAgICAg
ICAgICAgICAgPT4gIlRvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlci5qcyIsCiAgICJVc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzIiA9PiAiVG9v
bHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMiLAogCi0gICJVc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5jc3MiID0+ICJUb29scy9Q
cmV0dHlQcmludGluZy9jb2RlbWlycm9yLmNzcyIsCi0gICJVc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IvY29kZW1pcnJvci5qcyIgID0+ICJUb29scy9QcmV0dHlQcmludGluZy9jb2Rl
bWlycm9yLmpzIiwKLSAgIlVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2Ny
aXB0LmpzIiAgPT4gIlRvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanMiLAotICAiVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qcyIgICAgICAgICA9PiAiVG9vbHMv
UHJldHR5UHJpbnRpbmcvY3NzLmpzIiwKKyAgIlVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9jb2RlbWlycm9yLmNzcyIgICAgID0+ICJUb29scy9QcmV0dHlQcmludGluZy9jb2RlbWly
cm9yLmNzcyIsCisgICJVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJv
ci5qcyIgICAgICA9PiAiVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5qcyIsCisgICJV
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qcyIgICAgICA9PiAi
VG9vbHMvUHJldHR5UHJpbnRpbmcvamF2YXNjcmlwdC5qcyIsCisgICJVc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzIiAgICAgICAgICAgICA9PiAiVG9vbHMvUHJldHR5UHJp
bnRpbmcvY3NzLmpzIiwKIH0KIAogIyBDb3B5IG9ubHkgdGhlIGZvcm1hdHRlciBmaWxlcyBmcm9t
IFRvb2xzIHRvIFVzZXJJbnRlcmZhY2UuCiBUT09MU19UT19VU0VSX0lOVEVSRkFDRV9NQVAgPSB7
Ci0gICJUb29scy9QcmV0dHlQcmludGluZy9Db2RlTWlycm9yRm9ybWF0dGVycy5qcyIgICAgPT4g
IlVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMiLAotICAi
VG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyLmpzIiAgICAgICAgICAgICAgID0+ICJVc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlci5qcyIsCi0gICJUb29scy9QcmV0dHlQcmlu
dGluZy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcyIgPT4gIlVzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMiCisgICJUb29scy9QcmV0dHlQcmludGlu
Zy9Db2RlTWlycm9yRm9ybWF0dGVycy5qcyIgICAgICAgICA9PiAiVXNlckludGVyZmFjZS9WaWV3
cy9Db2RlTWlycm9yRm9ybWF0dGVycy5qcyIsCisgICJUb29scy9QcmV0dHlQcmludGluZy9Gb3Jt
YXR0ZXIuanMiICAgICAgICAgICAgICAgICAgICA9PiAiVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9Gb3JtYXR0ZXIuanMiLAorICAiVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVu
dEJ1aWxkZXIuanMiICAgICAgPT4gIlVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVy
Q29udGVudEJ1aWxkZXIuanMiCiB9CiAKIHdlYl9pbnNwZWN0b3JfcGF0aCA9IEZpbGUuZXhwYW5k
X3BhdGggRmlsZS5qb2luKEZpbGUuZGlybmFtZShfX0ZJTEVfXyksICIuLiIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5j
c3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJv
ci5jc3MKaW5kZXggMjNlYWY3NC4uMDk4YTMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2NvZGVtaXJyb3IuY3NzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmNzcwpAQCAtMzYs
MTMgKzM2LDE0IEBACiAgIG1pbi13aWR0aDogMjBweDsKICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAg
IGNvbG9yOiAjOTk5OworICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OworICBib3gtc2l6
aW5nOiBjb250ZW50LWJveDsKIH0KIAogLyogQ1VSU09SICovCiAKIC5Db2RlTWlycm9yIGRpdi5D
b2RlTWlycm9yLWN1cnNvciB7CiAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7Ci0gIHot
aW5kZXg6IDM7CiB9CiAvKiBTaG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0
ICovCiAuQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewpAQCAtNTIs
MjQgKzUzLDI5IEBACiAgIHdpZHRoOiBhdXRvOwogICBib3JkZXI6IDA7CiAgIGJhY2tncm91bmQ6
ICM3ZTc7Ci0gIHotaW5kZXg6IDE7CiB9CiAvKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBp
biBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLS5Db2RlTWlycm9yIGRpdi5Db2RlTWly
cm9yLWN1cnNvci5Db2RlTWlycm9yLW92ZXJ3cml0ZSB7fQorZGl2LkNvZGVNaXJyb3Itb3Zlcndy
aXRlIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7fQogCiAuY20tdGFiIHsgZGlzcGxheTogaW5saW5l
LWJsb2NrOyB9CiAKKy5Db2RlTWlycm9yLXJ1bGVyIHsKKyAgYm9yZGVyLWxlZnQ6IDFweCBzb2xp
ZCAjY2NjOworICBwb3NpdGlvbjogYWJzb2x1dGU7Cit9CisKIC8qIERFRkFVTFQgVEhFTUUgKi8K
IAogLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7Y29sb3I6ICM3MDg7fQogLmNtLXMtZGVmYXVs
dCAuY20tYXRvbSB7Y29sb3I6ICMyMTk7fQogLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHtjb2xv
cjogIzE2NDt9CiAuY20tcy1kZWZhdWx0IC5jbS1kZWYge2NvbG9yOiAjMDBmO30KLS5jbS1zLWRl
ZmF1bHQgLmNtLXZhcmlhYmxlIHtjb2xvcjogYmxhY2s7fQorLmNtLXMtZGVmYXVsdCAuY20tdmFy
aWFibGUsCisuY20tcy1kZWZhdWx0IC5jbS1wdW5jdHVhdGlvbiwKKy5jbS1zLWRlZmF1bHQgLmNt
LXByb3BlcnR5LAorLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3Ige30KIC5jbS1zLWRlZmF1bHQg
LmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjMDVhO30KIC5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxl
LTMge2NvbG9yOiAjMDg1O30KLS5jbS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5IHtjb2xvcjogYmxh
Y2s7fQotLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3Ige2NvbG9yOiBibGFjazt9CiAuY20tcy1k
ZWZhdWx0IC5jbS1jb21tZW50IHtjb2xvcjogI2E1MDt9CiAuY20tcy1kZWZhdWx0IC5jbS1zdHJp
bmcge2NvbG9yOiAjYTExO30KIC5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0yIHtjb2xvcjogI2Y1
MDt9CkBAIC0xMTQsNyArMTIwLDcgQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5v
bm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBt
YXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgIC8q
IFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAgIG1hcmdpbi1ib3R0b206
IC0zMHB4OyBtYXJnaW4tcmlnaHQ6IC0zMHB4OwotICBwYWRkaW5nLWJvdHRvbTogMzBweDsgcGFk
ZGluZy1yaWdodDogMzBweDsKKyAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgIGhlaWdodDogMTAw
JTsKICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGlu
ZyB0aGUgZWxlbWVudCAqLwogICBwb3NpdGlvbjogcmVsYXRpdmU7CkBAIC0xMjMsNiArMTI5LDkg
QEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29s
b3I6ICNmMjI7fQogfQogLkNvZGVNaXJyb3Itc2l6ZXIgewogICBwb3NpdGlvbjogcmVsYXRpdmU7
CisgIGJvcmRlci1yaWdodDogMzBweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgLW1vei1ib3gtc2l6
aW5nOiBjb250ZW50LWJveDsKKyAgYm94LXNpemluZzogY29udGVudC1ib3g7CiB9CiAKIC8qIFRo
ZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBz
Y3JvbGxpbmcKQEAgLTE5NywxNiArMjA2LDcgQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWly
cm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogICB3aGl0ZS1zcGFjZTogcHJl
LXdyYXA7CiAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKIH0KLS5Db2RlTWlycm9yLWNvZGUgcHJlIHsK
LSAgYm9yZGVyLXJpZ2h0OiAzMHB4IHNvbGlkIHRyYW5zcGFyZW50OwotICB3aWR0aDogLXdlYmtp
dC1maXQtY29udGVudDsKLSAgd2lkdGg6IC1tb3otZml0LWNvbnRlbnQ7Ci0gIHdpZHRoOiBmaXQt
Y29udGVudDsKLX0KLS5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3ItY29kZSBwcmUgewotICBi
b3JkZXItcmlnaHQ6IG5vbmU7Ci0gIHdpZHRoOiBhdXRvOwotfQorCiAuQ29kZU1pcnJvci1saW5l
YmFja2dyb3VuZCB7CiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgbGVmdDogMDsgcmlnaHQ6IDA7
IHRvcDogMDsgYm90dG9tOiAwOwpAQCAtMjM2LDE2ICsyMzYsMjIgQEAgZGl2LkNvZGVNaXJyb3Ig
c3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogCiAuQ29k
ZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0g
IHZpc2liaWxpdHk6IGhpZGRlbjsKICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICB3aWR0aDogMDsK
IH0KLS5Db2RlTWlycm9yLWZvY3VzZWQgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKKworZGl2LkNv
ZGVNaXJyb3ItY3Vyc29ycyB7CisgIHZpc2liaWxpdHk6IGhpZGRlbjsKKyAgcG9zaXRpb246IHJl
bGF0aXZlOworICB6LWluZGV4OiAxOworfQorLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1p
cnJvci1jdXJzb3JzIHsKICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKIH0KIAogLkNvZGVNaXJyb3It
c2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDlkOWQ5OyB9CiAuQ29kZU1pcnJvci1mb2N1c2VkIC5D
b2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogI2Q3ZDRmMDsgfQorLkNvZGVNaXJyb3It
Y3Jvc3NoYWlyIHsgY3Vyc29yOiBjcm9zc2hhaXI7IH0KIAogLmNtLXNlYXJjaGluZyB7CiAgIGJh
Y2tncm91bmQ6ICNmZmE7CkBAIC0yNTUsOSArMjYxLDEyIEBAIGRpdi5Db2RlTWlycm9yIHNwYW4u
Q29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KIC8qIElFNyBoYWNr
IHRvIHByZXZlbnQgaXQgZnJvbSByZXR1cm5pbmcgZnVubnkgb2Zmc2V0VG9wcyBvbiB0aGUgc3Bh
bnMgKi8KIC5Db2RlTWlycm9yIHNwYW4geyAqdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOyB9
CiAKKy8qIFVzZWQgdG8gZm9yY2UgYSBib3JkZXIgbW9kZWwgZm9yIGEgbm9kZSAqLworLmNtLWZv
cmNlLWJvcmRlciB7IHBhZGRpbmctcmlnaHQ6IC4xcHg7IH0KKwogQG1lZGlhIHByaW50IHsKICAg
LyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KLSAgLkNvZGVNaXJyb3IgZGl2LkNv
ZGVNaXJyb3ItY3Vyc29yIHsKKyAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7
CiAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmpzCmluZGV4IDQ2
MzczYmYuLjFhNzBjZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9Q
cmV0dHlQcmludGluZy9jb2RlbWlycm9yLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9U
b29scy9QcmV0dHlQcmludGluZy9jb2RlbWlycm9yLmpzCkBAIC0xLDIzICsxLDM2IEBACi0vLyBD
b2RlTWlycm9yIGlzIHRoZSBvbmx5IGdsb2JhbCB2YXIgd2UgY2xhaW0KLXdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgeworLy8gVGhpcyBpcyBDb2RlTWlycm9yIChodHRwOi8vY29kZW1p
cnJvci5uZXQpLCBhIGNvZGUgZWRpdG9yCisvLyBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0IG9u
IHRvcCBvZiB0aGUgYnJvd3NlcidzIERPTS4KKy8vCisvLyBZb3UgY2FuIGZpbmQgc29tZSB0ZWNo
bmljYWwgYmFja2dyb3VuZCBmb3Igc29tZSBvZiB0aGUgY29kZSBiZWxvdworLy8gYXQgaHR0cDov
L21hcmlqbmhhdmVyYmVrZS5ubC9ibG9nLyNjbS1pbnRlcm5hbHMgLgorCisoZnVuY3Rpb24obW9k
KSB7CisgIGlmICh0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlID09
ICJvYmplY3QiKSAvLyBDb21tb25KUworICAgIG1vZHVsZS5leHBvcnRzID0gbW9kKCk7CisgIGVs
c2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQK
KyAgICByZXR1cm4gZGVmaW5lKFtdLCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52
CisgICAgdGhpcy5Db2RlTWlycm9yID0gbW9kKCk7Cit9KShmdW5jdGlvbigpIHsKICAgInVzZSBz
dHJpY3QiOwogCiAgIC8vIEJST1dTRVIgU05JRkZJTkcKIAotICAvLyBDcnVkZSwgYnV0IG5lY2Vz
c2FyeSB0byBoYW5kbGUgYSBudW1iZXIgb2YgaGFyZC10by1mZWF0dXJlLWRldGVjdAotICAvLyBi
dWdzIGFuZCBiZWhhdmlvciBkaWZmZXJlbmNlcy4KKyAgLy8gS2x1ZGdlcyBmb3IgYnVncyBhbmQg
YmVoYXZpb3IgZGlmZmVyZW5jZXMgdGhhdCBjYW4ndCBiZSBmZWF0dXJlCisgIC8vIGRldGVjdGVk
IGFyZSBlbmFibGVkIGJhc2VkIG9uIHVzZXJBZ2VudCBldGMgc25pZmZpbmcuCisKICAgdmFyIGdl
Y2tvID0gL2dlY2tvXC9cZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIC8vIElFMTEg
Y3VycmVudGx5IGRvZXNuJ3QgY291bnQgYXMgJ2llJywgc2luY2UgaXQgaGFzIGFsbW9zdCBub25l
IG9mCi0gIC8vIHRoZSBzYW1lIGJ1Z3MgYXMgZWFybGllciB2ZXJzaW9ucy4gVXNlIGllX2d0MTAg
dG8gaGFuZGxlCi0gIC8vIGluY29tcGF0aWJpbGl0aWVzIGluIHRoYXQgdmVyc2lvbi4KLSAgdmFy
IGllID0gL01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZhciBpZV9sdDgg
PSBpZSAmJiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09IG51bGwgfHwgZG9jdW1lbnQuZG9jdW1l
bnRNb2RlIDwgOCk7Ci0gIHZhciBpZV9sdDkgPSBpZSAmJiAoZG9jdW1lbnQuZG9jdW1lbnRNb2Rl
ID09IG51bGwgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgOSk7Ci0gIHZhciBpZV9ndDEwID0g
L1RyaWRlbnRcLyhbNy05XXxcZHsyLH0pXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Cisg
IC8vIGllX3VwdG9OIG1lYW5zIEludGVybmV0IEV4cGxvcmVyIHZlcnNpb24gTiBvciBsb3dlcgor
ICB2YXIgaWVfdXB0bzEwID0gL01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Cisg
IHZhciBpZV91cHRvNyA9IGllX3VwdG8xMCAmJiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09IG51
bGwgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgOCk7CisgIHZhciBpZV91cHRvOCA9IGllX3Vw
dG8xMCAmJiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09IG51bGwgfHwgZG9jdW1lbnQuZG9jdW1l
bnRNb2RlIDwgOSk7CisgIHZhciBpZV91cHRvOSA9IGllX3VwdG8xMCAmJiAoZG9jdW1lbnQuZG9j
dW1lbnRNb2RlID09IG51bGwgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgMTApOworICB2YXIg
aWVfMTF1cCA9IC9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51c2Vy
QWdlbnQpOworICB2YXIgaWUgPSBpZV91cHRvMTAgfHwgaWVfMTF1cDsKICAgdmFyIHdlYmtpdCA9
IC9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICAgdmFyIHF0d2Via2l0ID0g
d2Via2l0ICYmIC9RdFwvXGQrXC5cZCsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgIHZh
ciBjaHJvbWUgPSAvQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZhciBv
cGVyYSA9IC9PcGVyYVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOworICB2YXIgcHJlc3Rv
ID0gL09wZXJhXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgIHZhciBzYWZhcmkgPSAv
QXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvcik7CiAgIHZhciBraHRtbCA9IC9L
SFRNTFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogICB2YXIgbWFjX2dlTGlvbiA9IC9N
YWMgT1MgWCAxXGRcRChbNy05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwpA
QCAtMzAsMTUxICs0MywxODEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
IHZhciBtYWMgPSBpb3MgfHwgL01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pOwogICB2YXIg
d2luZG93cyA9IC93aW4vaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7CiAKLSAgdmFyIG9wZXJh
X3ZlcnNpb24gPSBvcGVyYSAmJiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9WZXJzaW9uXC8o
XGQqXC5cZCopLyk7Ci0gIGlmIChvcGVyYV92ZXJzaW9uKSBvcGVyYV92ZXJzaW9uID0gTnVtYmVy
KG9wZXJhX3ZlcnNpb25bMV0pOwotICBpZiAob3BlcmFfdmVyc2lvbiAmJiBvcGVyYV92ZXJzaW9u
ID49IDE1KSB7IG9wZXJhID0gZmFsc2U7IHdlYmtpdCA9IHRydWU7IH0KKyAgdmFyIHByZXN0b192
ZXJzaW9uID0gcHJlc3RvICYmIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cLyhc
ZCpcLlxkKikvKTsKKyAgaWYgKHByZXN0b192ZXJzaW9uKSBwcmVzdG9fdmVyc2lvbiA9IE51bWJl
cihwcmVzdG9fdmVyc2lvblsxXSk7CisgIGlmIChwcmVzdG9fdmVyc2lvbiAmJiBwcmVzdG9fdmVy
c2lvbiA+PSAxNSkgeyBwcmVzdG8gPSBmYWxzZTsgd2Via2l0ID0gdHJ1ZTsgfQogICAvLyBTb21l
IGJyb3dzZXJzIHVzZSB0aGUgd3JvbmcgZXZlbnQgcHJvcGVydGllcyB0byBzaWduYWwgY21kL2N0
cmwgb24gT1MgWAotICB2YXIgZmxpcEN0cmxDbWQgPSBtYWMgJiYgKHF0d2Via2l0IHx8IG9wZXJh
ICYmIChvcGVyYV92ZXJzaW9uID09IG51bGwgfHwgb3BlcmFfdmVyc2lvbiA8IDEyLjExKSk7Ci0g
IHZhciBjYXB0dXJlTWlkZGxlQ2xpY2sgPSBnZWNrbyB8fCAoaWUgJiYgIWllX2x0OSk7CisgIHZh
ciBmbGlwQ3RybENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwgcHJlc3RvICYmIChwcmVzdG9fdmVy
c2lvbiA9PSBudWxsIHx8IHByZXN0b192ZXJzaW9uIDwgMTIuMTEpKTsKKyAgdmFyIGNhcHR1cmVS
aWdodENsaWNrID0gZ2Vja28gfHwgKGllICYmICFpZV91cHRvOCk7CiAKLSAgLy8gT3B0aW1pemUg
c29tZSBjb2RlIHdoZW4gdGhlc2UgZmVhdHVyZXMgYXJlIG5vdCB1c2VkCisgIC8vIE9wdGltaXpl
IHNvbWUgY29kZSB3aGVuIHRoZXNlIGZlYXR1cmVzIGFyZSBub3QgdXNlZC4KICAgdmFyIHNhd1Jl
YWRPbmx5U3BhbnMgPSBmYWxzZSwgc2F3Q29sbGFwc2VkU3BhbnMgPSBmYWxzZTsKIAotICAvLyBD
T05TVFJVQ1RPUgorICAvLyBFRElUT1IgQ09OU1RSVUNUT1IKKworICAvLyBBIENvZGVNaXJyb3Ig
aW5zdGFuY2UgcmVwcmVzZW50cyBhbiBlZGl0b3IuIFRoaXMgaXMgdGhlIG9iamVjdAorICAvLyB0
aGF0IHVzZXIgY29kZSBpcyB1c3VhbGx5IGRlYWxpbmcgd2l0aC4KIAogICBmdW5jdGlvbiBDb2Rl
TWlycm9yKHBsYWNlLCBvcHRpb25zKSB7CiAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvZGVN
aXJyb3IpKSByZXR1cm4gbmV3IENvZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpOwogCiAgICAgdGhp
cy5vcHRpb25zID0gb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgLy8gRGV0ZXJtaW5lIGVm
ZmVjdGl2ZSBvcHRpb25zIGJhc2VkIG9uIGdpdmVuIHZhbHVlcyBhbmQgZGVmYXVsdHMuCi0gICAg
Zm9yICh2YXIgb3B0IGluIGRlZmF1bHRzKSBpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0
KSAmJiBkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShvcHQpKQotICAgICAgb3B0aW9uc1tvcHRdID0g
ZGVmYXVsdHNbb3B0XTsKKyAgICBjb3B5T2JqKGRlZmF1bHRzLCBvcHRpb25zLCBmYWxzZSk7CiAg
ICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKG9wdGlvbnMpOwogCi0gICAgdmFyIGRvY1N0YXJ0
ID0gdHlwZW9mIG9wdGlvbnMudmFsdWUgPT0gInN0cmluZyIgPyAwIDogb3B0aW9ucy52YWx1ZS5m
aXJzdDsKLSAgICB2YXIgZGlzcGxheSA9IHRoaXMuZGlzcGxheSA9IG1ha2VEaXNwbGF5KHBsYWNl
LCBkb2NTdGFydCk7CisgICAgdmFyIGRvYyA9IG9wdGlvbnMudmFsdWU7CisgICAgaWYgKHR5cGVv
ZiBkb2MgPT0gInN0cmluZyIpIGRvYyA9IG5ldyBEb2MoZG9jLCBvcHRpb25zLm1vZGUpOworICAg
IHRoaXMuZG9jID0gZG9jOworCisgICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXkgPSBuZXcg
RGlzcGxheShwbGFjZSwgZG9jKTsKICAgICBkaXNwbGF5LndyYXBwZXIuQ29kZU1pcnJvciA9IHRo
aXM7CiAgICAgdXBkYXRlR3V0dGVycyh0aGlzKTsKLSAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMg
JiYgIW1vYmlsZSkgZm9jdXNJbnB1dCh0aGlzKTsKLQotICAgIHRoaXMuc3RhdGUgPSB7a2V5TWFw
czogW10sCi0gICAgICAgICAgICAgICAgICBvdmVybGF5czogW10sCi0gICAgICAgICAgICAgICAg
ICBtb2RlR2VuOiAwLAotICAgICAgICAgICAgICAgICAgb3ZlcndyaXRlOiBmYWxzZSwgZm9jdXNl
ZDogZmFsc2UsCi0gICAgICAgICAgICAgICAgICBzdXBwcmVzc0VkaXRzOiBmYWxzZSwgcGFzdGVJ
bmNvbWluZzogZmFsc2UsCi0gICAgICAgICAgICAgICAgICBkcmFnZ2luZ1RleHQ6IGZhbHNlLAot
ICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiBuZXcgRGVsYXllZCgpfTsKLQogICAgIHRoZW1l
Q2hhbmdlZCh0aGlzKTsKICAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpCiAgICAgICB0aGlz
LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOworICAgIGlm
IChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSBmb2N1c0lucHV0KHRoaXMpOwogCi0gICAg
dmFyIGRvYyA9IG9wdGlvbnMudmFsdWU7Ci0gICAgaWYgKHR5cGVvZiBkb2MgPT0gInN0cmluZyIp
IGRvYyA9IG5ldyBEb2Mob3B0aW9ucy52YWx1ZSwgb3B0aW9ucy5tb2RlKTsKLSAgICBvcGVyYXRp
b24odGhpcywgYXR0YWNoRG9jKSh0aGlzLCBkb2MpOworICAgIHRoaXMuc3RhdGUgPSB7CisgICAg
ICBrZXlNYXBzOiBbXSwgIC8vIHN0b3JlcyBtYXBzIGFkZGVkIGJ5IGFkZEtleU1hcAorICAgICAg
b3ZlcmxheXM6IFtdLCAvLyBoaWdobGlnaHRpbmcgb3ZlcmxheXMsIGFzIGFkZGVkIGJ5IGFkZE92
ZXJsYXkKKyAgICAgIG1vZGVHZW46IDAsICAgLy8gYnVtcGVkIHdoZW4gbW9kZS9vdmVybGF5IGNo
YW5nZXMsIHVzZWQgdG8gaW52YWxpZGF0ZSBoaWdobGlnaHRpbmcgaW5mbworICAgICAgb3Zlcndy
aXRlOiBmYWxzZSwgZm9jdXNlZDogZmFsc2UsCisgICAgICBzdXBwcmVzc0VkaXRzOiBmYWxzZSwg
Ly8gdXNlZCB0byBkaXNhYmxlIGVkaXRpbmcgZHVyaW5nIGtleSBoYW5kbGVycyB3aGVuIGluIHJl
YWRPbmx5IG1vZGUKKyAgICAgIHBhc3RlSW5jb21pbmc6IGZhbHNlLCBjdXRJbmNvbWluZzogZmFs
c2UsIC8vIGhlbHAgcmVjb2duaXplIHBhc3RlL2N1dCBlZGl0cyBpbiByZWFkSW5wdXQKKyAgICAg
IGRyYWdnaW5nVGV4dDogZmFsc2UsCisgICAgICBoaWdobGlnaHQ6IG5ldyBEZWxheWVkKCkgLy8g
c3RvcmVzIGhpZ2hsaWdodCB3b3JrZXIgdGltZW91dAorICAgIH07CiAKICAgICAvLyBPdmVycmlk
ZSBtYWdpYyB0ZXh0YXJlYSBjb250ZW50IHJlc3RvcmUgdGhhdCBJRSBzb21ldGltZXMgZG9lcwog
ICAgIC8vIG9uIG91ciBoaWRkZW4gdGV4dGFyZWEgb24gcmVsb2FkCi0gICAgaWYgKGllKSBzZXRU
aW1lb3V0KGJpbmQocmVzZXRJbnB1dCwgdGhpcywgdHJ1ZSksIDIwKTsKKyAgICBpZiAoaWVfdXB0
bzEwKSBzZXRUaW1lb3V0KGJpbmQocmVzZXRJbnB1dCwgdGhpcywgdHJ1ZSksIDIwKTsKIAogICAg
IHJlZ2lzdGVyRXZlbnRIYW5kbGVycyh0aGlzKTsKLSAgICAvLyBJRSB0aHJvd3MgdW5zcGVjaWZp
ZWQgZXJyb3IgaW4gY2VydGFpbiBjYXNlcywgd2hlbgotICAgIC8vIHRyeWluZyB0byBhY2Nlc3Mg
YWN0aXZlRWxlbWVudCBiZWZvcmUgb25sb2FkCi0gICAgdmFyIGhhc0ZvY3VzOyB0cnkgeyBoYXNG
b2N1cyA9IChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGRpc3BsYXkuaW5wdXQpOyB9IGNhdGNo
KGUpIHsgfQotICAgIGlmIChoYXNGb2N1cyB8fCAob3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmls
ZSkpIHNldFRpbWVvdXQoYmluZChvbkZvY3VzLCB0aGlzKSwgMjApOwotICAgIGVsc2Ugb25CbHVy
KHRoaXMpOwogCi0gICAgb3BlcmF0aW9uKHRoaXMsIGZ1bmN0aW9uKCkgewotICAgICAgZm9yICh2
YXIgb3B0IGluIG9wdGlvbkhhbmRsZXJzKQotICAgICAgICBpZiAob3B0aW9uSGFuZGxlcnMucHJv
cGVydHlJc0VudW1lcmFibGUob3B0KSkKLSAgICAgICAgICBvcHRpb25IYW5kbGVyc1tvcHRdKHRo
aXMsIG9wdGlvbnNbb3B0XSwgSW5pdCk7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRI
b29rcy5sZW5ndGg7ICsraSkgaW5pdEhvb2tzW2ldKHRoaXMpOwotICAgIH0pKCk7CisgICAgdmFy
IGNtID0gdGhpczsKKyAgICBydW5Jbk9wKHRoaXMsIGZ1bmN0aW9uKCkgeworICAgICAgY20uY3Vy
T3AuZm9yY2VVcGRhdGUgPSB0cnVlOworICAgICAgYXR0YWNoRG9jKGNtLCBkb2MpOworCisgICAg
ICBpZiAoKG9wdGlvbnMuYXV0b2ZvY3VzICYmICFtb2JpbGUpIHx8IGFjdGl2ZUVsdCgpID09IGRp
c3BsYXkuaW5wdXQpCisgICAgICAgIHNldFRpbWVvdXQoYmluZChvbkZvY3VzLCBjbSksIDIwKTsK
KyAgICAgIGVsc2UKKyAgICAgICAgb25CbHVyKGNtKTsKKworICAgICAgZm9yICh2YXIgb3B0IGlu
IG9wdGlvbkhhbmRsZXJzKSBpZiAob3B0aW9uSGFuZGxlcnMuaGFzT3duUHJvcGVydHkob3B0KSkK
KyAgICAgICAgb3B0aW9uSGFuZGxlcnNbb3B0XShjbSwgb3B0aW9uc1tvcHRdLCBJbml0KTsKKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdEhvb2tzLmxlbmd0aDsgKytpKSBpbml0SG9va3Nb
aV0oY20pOworICAgIH0pOwogICB9CiAKICAgLy8gRElTUExBWSBDT05TVFJVQ1RPUgogCi0gIGZ1
bmN0aW9uIG1ha2VEaXNwbGF5KHBsYWNlLCBkb2NTdGFydCkgewotICAgIHZhciBkID0ge307Cisg
IC8vIFRoZSBkaXNwbGF5IGhhbmRsZXMgdGhlIERPTSBpbnRlZ3JhdGlvbiwgYm90aCBmb3IgaW5w
dXQgcmVhZGluZworICAvLyBhbmQgY29udGVudCBkcmF3aW5nLiBJdCBob2xkcyByZWZlcmVuY2Vz
IHRvIERPTSBub2RlcyBhbmQKKyAgLy8gZGlzcGxheS1yZWxhdGVkIHN0YXRlLgogCi0gICAgdmFy
IGlucHV0ID0gZC5pbnB1dCA9IGVsdCgidGV4dGFyZWEiLCBudWxsLCBudWxsLCAicG9zaXRpb246
IGFic29sdXRlOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbTsgb3V0bGluZTog
bm9uZTsgZm9udC1zaXplOiA0cHg7Iik7CisgIGZ1bmN0aW9uIERpc3BsYXkocGxhY2UsIGRvYykg
eworICAgIHZhciBkID0gdGhpczsKKworICAgIC8vIFRoZSBzZW1paGlkZGVuIHRleHRhcmVhIHRo
YXQgaXMgZm9jdXNlZCB3aGVuIHRoZSBlZGl0b3IgaXMKKyAgICAvLyBmb2N1c2VkLCBhbmQgcmVj
ZWl2ZXMgaW5wdXQuCisgICAgdmFyIGlucHV0ID0gZC5pbnB1dCA9IGVsdCgidGV4dGFyZWEiLCBu
dWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBo
ZWlnaHQ6IDFlbTsgb3V0bGluZTogbm9uZSIpOworICAgIC8vIFRoZSB0ZXh0YXJlYSBpcyBrZXB0
IHBvc2l0aW9uZWQgbmVhciB0aGUgY3Vyc29yIHRvIHByZXZlbnQgdGhlCisgICAgLy8gZmFjdCB0
aGF0IGl0J2xsIGJlIHNjcm9sbGVkIGludG8gdmlldyBvbiBpbnB1dCBmcm9tIHNjcm9sbGluZwor
ICAgIC8vIG91ciBmYWtlIGN1cnNvciBvdXQgb2Ygdmlldy4gT24gd2Via2l0LCB3aGVuIHdyYXA9
b2ZmLCBwYXN0ZSBpcworICAgIC8vIHZlcnkgc2xvdy4gU28gbWFrZSB0aGUgYXJlYSB3aWRlIGlu
c3RlYWQuCiAgICAgaWYgKHdlYmtpdCkgaW5wdXQuc3R5bGUud2lkdGggPSAiMTAwMHB4IjsKICAg
ICBlbHNlIGlucHV0LnNldEF0dHJpYnV0ZSgid3JhcCIsICJvZmYiKTsKLSAgICAvLyBpZiBib3Jk
ZXI6IDA7IC0tIGlPUyBmYWlscyB0byBvcGVuIGtleWJvYXJkIChpc3N1ZSAjMTI4NykKKyAgICAv
LyBJZiBib3JkZXI6IDA7IC0tIGlPUyBmYWlscyB0byBvcGVuIGtleWJvYXJkIChpc3N1ZSAjMTI4
NykKICAgICBpZiAoaW9zKSBpbnB1dC5zdHlsZS5ib3JkZXIgPSAiMXB4IHNvbGlkIGJsYWNrIjsK
ICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0IiwgIm9mZiIpOyBpbnB1dC5zZXRB
dHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwgIm9mZiIpOyBpbnB1dC5zZXRBdHRyaWJ1dGUoInNw
ZWxsY2hlY2siLCAiZmFsc2UiKTsKIAogICAgIC8vIFdyYXBzIGFuZCBoaWRlcyBpbnB1dCB0ZXh0
YXJlYQogICAgIGQuaW5wdXREaXYgPSBlbHQoImRpdiIsIFtpbnB1dF0sIG51bGwsICJvdmVyZmxv
dzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIp
OwotICAgIC8vIFRoZSBhY3R1YWwgZmFrZSBzY3JvbGxiYXJzLgotICAgIGQuc2Nyb2xsYmFySCA9
IGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbnVsbCwgbnVsbCwgImhlaWdodDogMXB4IildLCAiQ29k
ZU1pcnJvci1oc2Nyb2xsYmFyIik7Ci0gICAgZC5zY3JvbGxiYXJWID0gZWx0KCJkaXYiLCBbZWx0
KCJkaXYiLCBudWxsLCBudWxsLCAid2lkdGg6IDFweCIpXSwgIkNvZGVNaXJyb3ItdnNjcm9sbGJh
ciIpOworICAgIC8vIFRoZSBmYWtlIHNjcm9sbGJhciBlbGVtZW50cy4KKyAgICBkLnNjcm9sbGJh
ckggPSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJoZWlnaHQ6IDEwMCU7IG1p
bi1oZWlnaHQ6IDFweCIpXSwgIkNvZGVNaXJyb3ItaHNjcm9sbGJhciIpOworICAgIGQuc2Nyb2xs
YmFyViA9IGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbnVsbCwgbnVsbCwgIm1pbi13aWR0aDogMXB4
IildLCAiQ29kZU1pcnJvci12c2Nyb2xsYmFyIik7CisgICAgLy8gQ292ZXJzIGJvdHRvbS1yaWdo
dCBzcXVhcmUgd2hlbiBib3RoIHNjcm9sbGJhcnMgYXJlIHByZXNlbnQuCiAgICAgZC5zY3JvbGxi
YXJGaWxsZXIgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIi
KTsKKyAgICAvLyBDb3ZlcnMgYm90dG9tIG9mIGd1dHRlciB3aGVuIGNvdmVyR3V0dGVyTmV4dFRv
U2Nyb2xsYmFyIGlzIG9uCisgICAgLy8gYW5kIGggc2Nyb2xsYmFyIGlzIHByZXNlbnQuCiAgICAg
ZC5ndXR0ZXJGaWxsZXIgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlci1maWxs
ZXIiKTsKLSAgICAvLyBESVZzIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBhbmQgdGhlIGFjdHVh
bCBjb2RlCisgICAgLy8gV2lsbCBjb250YWluIHRoZSBhY3R1YWwgY29kZSwgcG9zaXRpb25lZCB0
byBjb3ZlciB0aGUgdmlld3BvcnQuCiAgICAgZC5saW5lRGl2ID0gZWx0KCJkaXYiLCBudWxsLCAi
Q29kZU1pcnJvci1jb2RlIik7CisgICAgLy8gRWxlbWVudHMgYXJlIGFkZGVkIHRvIHRoZXNlIHRv
IHJlcHJlc2VudCBzZWxlY3Rpb24gYW5kIGN1cnNvcnMuCiAgICAgZC5zZWxlY3Rpb25EaXYgPSBl
bHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDEiKTsK
LSAgICAvLyBCbGlua3kgY3Vyc29yLCBhbmQgZWxlbWVudCB1c2VkIHRvIGVuc3VyZSBjdXJzb3Ig
Zml0cyBhdCB0aGUgZW5kIG9mIGEgbGluZQotICAgIGQuY3Vyc29yID0gZWx0KCJkaXYiLCAiXHUw
MGEwIiwgIkNvZGVNaXJyb3ItY3Vyc29yIik7Ci0gICAgLy8gU2Vjb25kYXJ5IGN1cnNvciwgc2hv
d24gd2hlbiBvbiBhICdqdW1wJyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0Ci0gICAgZC5vdGhlckN1
cnNvciA9IGVsdCgiZGl2IiwgIlx1MDBhMCIsICJDb2RlTWlycm9yLWN1cnNvciBDb2RlTWlycm9y
LXNlY29uZGFyeWN1cnNvciIpOwotICAgIC8vIFVzZWQgdG8gbWVhc3VyZSB0ZXh0IHNpemUKKyAg
ICBkLmN1cnNvckRpdiA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItY3Vyc29ycyIpOwor
ICAgIC8vIEEgdmlzaWJpbGl0eTogaGlkZGVuIGVsZW1lbnQgdXNlZCB0byBmaW5kIHRoZSBzaXpl
IG9mIHRoaW5ncy4KICAgICBkLm1lYXN1cmUgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9y
LW1lYXN1cmUiKTsKKyAgICAvLyBXaGVuIGxpbmVzIG91dHNpZGUgb2YgdGhlIHZpZXdwb3J0IGFy
ZSBtZWFzdXJlZCwgdGhleSBhcmUgZHJhd24gaW4gdGhpcy4KKyAgICBkLmxpbmVNZWFzdXJlID0g
ZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1tZWFzdXJlIik7CiAgICAgLy8gV3JhcHMgZXZl
cnl0aGluZyB0aGF0IG5lZWRzIHRvIGV4aXN0IGluc2lkZSB0aGUgdmVydGljYWxseS1wYWRkZWQg
Y29vcmRpbmF0ZSBzeXN0ZW0KLSAgICBkLmxpbmVTcGFjZSA9IGVsdCgiZGl2IiwgW2QubWVhc3Vy
ZSwgZC5zZWxlY3Rpb25EaXYsIGQubGluZURpdiwgZC5jdXJzb3IsIGQub3RoZXJDdXJzb3JdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxp
bmU6IG5vbmUiKTsKLSAgICAvLyBNb3ZlZCBhcm91bmQgaXRzIHBhcmVudCB0byBjb3ZlciB2aXNp
YmxlIHZpZXcKKyAgICBkLmxpbmVTcGFjZSA9IGVsdCgiZGl2IiwgW2QubWVhc3VyZSwgZC5saW5l
TWVhc3VyZSwgZC5zZWxlY3Rpb25EaXYsIGQuY3Vyc29yRGl2LCBkLmxpbmVEaXZdLAorICAgICAg
ICAgICAgICAgICAgICAgIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUi
KTsKKyAgICAvLyBNb3ZlZCBhcm91bmQgaXRzIHBhcmVudCB0byBjb3ZlciB2aXNpYmxlIHZpZXcu
CiAgICAgZC5tb3ZlciA9IGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgW2QubGluZVNwYWNlXSwgIkNv
ZGVNaXJyb3ItbGluZXMiKV0sIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmUiKTsKLSAgICAvLyBT
ZXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgdGV4dCwgY2F1c2VzIHNjcm9sbGluZworICAgIC8vIFNl
dCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudCwgYWxsb3dpbmcgc2Nyb2xsaW5nLgogICAg
IGQuc2l6ZXIgPSBlbHQoImRpdiIsIFtkLm1vdmVyXSwgIkNvZGVNaXJyb3Itc2l6ZXIiKTsKLSAg
ICAvLyBEIGlzIG5lZWRlZCBiZWNhdXNlIGJlaGF2aW9yIG9mIGVsdHMgd2l0aCBvdmVyZmxvdzog
YXV0byBhbmQgcGFkZGluZyBpcyBpbmNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzCisgICAgLy8g
QmVoYXZpb3Igb2YgZWx0cyB3aXRoIG92ZXJmbG93OiBhdXRvIGFuZCBwYWRkaW5nIGlzCisgICAg
Ly8gaW5jb25zaXN0ZW50IGFjcm9zcyBicm93c2Vycy4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0
aGUKKyAgICAvLyBzY3JvbGxhYmxlIGFyZWEgaXMgYmlnIGVub3VnaC4KICAgICBkLmhlaWdodEZv
cmNlciA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0
OiAiICsgc2Nyb2xsZXJDdXRPZmYgKyAicHg7IHdpZHRoOiAxcHg7Iik7Ci0gICAgLy8gV2lsbCBj
b250YWluIHRoZSBndXR0ZXJzLCBpZiBhbnkKKyAgICAvLyBXaWxsIGNvbnRhaW4gdGhlIGd1dHRl
cnMsIGlmIGFueS4KICAgICBkLmd1dHRlcnMgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9y
LWd1dHRlcnMiKTsKICAgICBkLmxpbmVHdXR0ZXIgPSBudWxsOwotICAgIC8vIFByb3ZpZGVzIHNj
cm9sbGluZworICAgIC8vIEFjdHVhbCBzY3JvbGxhYmxlIGVsZW1lbnQuCiAgICAgZC5zY3JvbGxl
ciA9IGVsdCgiZGl2IiwgW2Quc2l6ZXIsIGQuaGVpZ2h0Rm9yY2VyLCBkLmd1dHRlcnNdLCAiQ29k
ZU1pcnJvci1zY3JvbGwiKTsKICAgICBkLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgi
LCAiLTEiKTsKICAgICAvLyBUaGUgZWxlbWVudCBpbiB3aGljaCB0aGUgZWRpdG9yIGxpdmVzLgog
ICAgIGQud3JhcHBlciA9IGVsdCgiZGl2IiwgW2QuaW5wdXREaXYsIGQuc2Nyb2xsYmFySCwgZC5z
Y3JvbGxiYXJWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2Nyb2xsYmFyRmlsbGVy
LCBkLmd1dHRlckZpbGxlciwgZC5zY3JvbGxlcl0sICJDb2RlTWlycm9yIik7Ci0gICAgLy8gV29y
ayBhcm91bmQgSUU3IHotaW5kZXggYnVnCi0gICAgaWYgKGllX2x0OCkgeyBkLmd1dHRlcnMuc3R5
bGUuekluZGV4ID0gLTE7IGQuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0ID0gMDsgfQotICAg
IGlmIChwbGFjZS5hcHBlbmRDaGlsZCkgcGxhY2UuYXBwZW5kQ2hpbGQoZC53cmFwcGVyKTsgZWxz
ZSBwbGFjZShkLndyYXBwZXIpOwogCisgICAgLy8gV29yayBhcm91bmQgSUU3IHotaW5kZXggYnVn
IChub3QgcGVyZmVjdCwgaGVuY2UgSUU3IG5vdCByZWFsbHkgYmVpbmcgc3VwcG9ydGVkKQorICAg
IGlmIChpZV91cHRvNykgeyBkLmd1dHRlcnMuc3R5bGUuekluZGV4ID0gLTE7IGQuc2Nyb2xsZXIu
c3R5bGUucGFkZGluZ1JpZ2h0ID0gMDsgfQogICAgIC8vIE5lZWRlZCB0byBoaWRlIGJpZyBibHVl
IGJsaW5raW5nIGN1cnNvciBvbiBNb2JpbGUgU2FmYXJpCiAgICAgaWYgKGlvcykgaW5wdXQuc3R5
bGUud2lkdGggPSAiMHB4IjsKICAgICBpZiAoIXdlYmtpdCkgZC5zY3JvbGxlci5kcmFnZ2FibGUg
PSB0cnVlOwogICAgIC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAogICAgIGlm
IChraHRtbCkgeyBkLmlucHV0RGl2LnN0eWxlLmhlaWdodCA9ICIxcHgiOyBkLmlucHV0RGl2LnN0
eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsgfQogICAgIC8vIE5lZWQgdG8gc2V0IGEgbWluaW11
bSB3aWR0aCB0byBzZWUgdGhlIHNjcm9sbGJhciBvbiBJRTcgKGJ1dCBtdXN0IG5vdCBzZXQgaXQg
b24gSUU4KS4KLSAgICBlbHNlIGlmIChpZV9sdDgpIGQuc2Nyb2xsYmFySC5zdHlsZS5taW5XaWR0
aCA9IGQuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aCA9ICIxOHB4IjsKLQotICAgIC8vIEN1cnJl
bnQgdmlzaWJsZSByYW5nZSAobWF5IGJlIGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuCi0g
ICAgZC52aWV3T2Zmc2V0ID0gZC5sYXN0U2l6ZUMgPSAwOwotICAgIGQuc2hvd2luZ0Zyb20gPSBk
LnNob3dpbmdUbyA9IGRvY1N0YXJ0OworICAgIGlmIChpZV91cHRvNykgZC5zY3JvbGxiYXJILnN0
eWxlLm1pbkhlaWdodCA9IGQuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aCA9ICIxOHB4IjsKKwor
ICAgIGlmIChwbGFjZS5hcHBlbmRDaGlsZCkgcGxhY2UuYXBwZW5kQ2hpbGQoZC53cmFwcGVyKTsK
KyAgICBlbHNlIHBsYWNlKGQud3JhcHBlcik7CisKKyAgICAvLyBDdXJyZW50IHJlbmRlcmVkIHJh
bmdlIChtYXkgYmUgYmlnZ2VyIHRoYW4gdGhlIHZpZXcgd2luZG93KS4KKyAgICBkLnZpZXdGcm9t
ID0gZC52aWV3VG8gPSBkb2MuZmlyc3Q7CisgICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHJl
bmRlcmVkIGxpbmVzLgorICAgIGQudmlldyA9IFtdOworICAgIC8vIEhvbGRzIGluZm8gYWJvdXQg
YSBzaW5nbGUgcmVuZGVyZWQgbGluZSB3aGVuIGl0IHdhcyByZW5kZXJlZAorICAgIC8vIGZvciBt
ZWFzdXJlbWVudCwgd2hpbGUgbm90IGluIHZpZXcuCisgICAgZC5leHRlcm5hbE1lYXN1cmVkID0g
bnVsbDsKKyAgICAvLyBFbXB0eSBzcGFjZSAoaW4gcGl4ZWxzKSBhYm92ZSB0aGUgdmlldworICAg
IGQudmlld09mZnNldCA9IDA7CisgICAgZC5sYXN0U2l6ZUMgPSAwOworICAgIGQudXBkYXRlTGlu
ZU51bWJlcnMgPSBudWxsOwogCiAgICAgLy8gVXNlZCB0byBvbmx5IHJlc2l6ZSB0aGUgbGluZSBu
dW1iZXIgZ3V0dGVyIHdoZW4gbmVjZXNzYXJ5ICh3aGVuCiAgICAgLy8gdGhlIGFtb3VudCBvZiBs
aW5lcyBjcm9zc2VzIGEgYm91bmRhcnkgdGhhdCBtYWtlcyBpdHMgd2lkdGggY2hhbmdlKQogICAg
IGQubGluZU51bVdpZHRoID0gZC5saW5lTnVtSW5uZXJXaWR0aCA9IGQubGluZU51bUNoYXJzID0g
bnVsbDsKICAgICAvLyBTZWUgcmVhZElucHV0IGFuZCByZXNldElucHV0CiAgICAgZC5wcmV2SW5w
dXQgPSAiIjsKLSAgICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIGEgbm9uLWhvcml6b250YWwtc2Nyb2xs
aW5nIHdpZGdldCBpcyBhZGRlZC4gQXMKLSAgICAvLyBhbiBvcHRpbWl6YXRpb24sIHdpZGdldCBh
bGlnbmluZyBpcyBza2lwcGVkIHdoZW4gZCBpcyBmYWxzZS4KKyAgICAvLyBTZXQgdG8gdHJ1ZSB3
aGVuIGEgbm9uLWhvcml6b250YWwtc2Nyb2xsaW5nIGxpbmUgd2lkZ2V0IGlzCisgICAgLy8gYWRk
ZWQuIEFzIGFuIG9wdGltaXphdGlvbiwgbGluZSB3aWRnZXQgYWxpZ25pbmcgaXMgc2tpcHBlZCB3
aGVuCisgICAgLy8gdGhpcyBpcyBmYWxzZS4KICAgICBkLmFsaWduV2lkZ2V0cyA9IGZhbHNlOwot
ICAgIC8vIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSBjdXJyZW50bHkgZXhwZWN0IGlu
cHV0IHRvIGFwcGVhcgotICAgIC8vIChhZnRlciBzb21lIGV2ZW50IGxpa2UgJ2tleXByZXNzJyBv
ciAnaW5wdXQnKSBhbmQgYXJlIHBvbGxpbmcKLSAgICAvLyBpbnRlbnNpdmVseS4KKyAgICAvLyBG
bGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgd2UgZXhwZWN0IGlucHV0IHRvIGFwcGVhciByZWFs
IHNvb24KKyAgICAvLyBub3cgKGFmdGVyIHNvbWUgZXZlbnQgbGlrZSAna2V5cHJlc3MnIG9yICdp
bnB1dCcpIGFuZCBhcmUKKyAgICAvLyBwb2xsaW5nIGludGVuc2l2ZWx5LgogICAgIGQucG9sbGlu
Z0Zhc3QgPSBmYWxzZTsKICAgICAvLyBTZWxmLXJlc2V0dGluZyB0aW1lb3V0IGZvciB0aGUgcG9s
bGVyCiAgICAgZC5wb2xsID0gbmV3IERlbGF5ZWQoKTsKIAotICAgIGQuY2FjaGVkQ2hhcldpZHRo
ID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gbnVsbDsKLSAgICBkLm1lYXN1cmVMaW5lQ2FjaGUgPSBb
XTsKLSAgICBkLm1lYXN1cmVMaW5lQ2FjaGVQb3MgPSAwOworICAgIGQuY2FjaGVkQ2hhcldpZHRo
ID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5jYWNoZWRQYWRkaW5nSCA9IG51bGw7CiAKICAgICAv
LyBUcmFja3Mgd2hlbiByZXNldElucHV0IGhhcyBwdW50ZWQgdG8ganVzdCBwdXR0aW5nIGEgc2hv
cnQKLSAgICAvLyBzdHJpbmcgaW5zdGVhZCBvZiB0aGUgKGxhcmdlKSBzZWxlY3Rpb24uCisgICAg
Ly8gc3RyaW5nIGludG8gdGhlIHRleHRhcmVhIGluc3RlYWQgb2YgdGhlIGZ1bGwgc2VsZWN0aW9u
LgogICAgIGQuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IGZhbHNlOwogCiAgICAgLy8gVHJhY2tzIHRo
ZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHNvIHRoYXQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyCkBA
IC0xODYsNyArMjI5LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
Ly8gVXNlZCBmb3IgbWVhc3VyaW5nIHdoZWVsIHNjcm9sbGluZyBncmFudWxhcml0eQogICAgIGQu
d2hlZWxEWCA9IGQud2hlZWxEWSA9IGQud2hlZWxTdGFydFggPSBkLndoZWVsU3RhcnRZID0gbnVs
bDsKIAotICAgIHJldHVybiBkOworICAgIC8vIFRydWUgd2hlbiBzaGlmdCBpcyBoZWxkIGRvd24u
CisgICAgZC5zaGlmdCA9IGZhbHNlOwogICB9CiAKICAgLy8gU1RBVEUgVVBEQVRFUwpAQCAtMTk1
LDYgKzIzOSwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICBmdW5j
dGlvbiBsb2FkTW9kZShjbSkgewogICAgIGNtLmRvYy5tb2RlID0gQ29kZU1pcnJvci5nZXRNb2Rl
KGNtLm9wdGlvbnMsIGNtLmRvYy5tb2RlT3B0aW9uKTsKKyAgICByZXNldE1vZGVTdGF0ZShjbSk7
CisgIH0KKworICBmdW5jdGlvbiByZXNldE1vZGVTdGF0ZShjbSkgewogICAgIGNtLmRvYy5pdGVy
KGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIGxpbmUuc3RhdGVB
ZnRlciA9IG51bGw7CiAgICAgICBpZiAobGluZS5zdHlsZXMpIGxpbmUuc3R5bGVzID0gbnVsbDsK
QEAgLTIwNywxMSArMjU1LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
CiAgIGZ1bmN0aW9uIHdyYXBwaW5nQ2hhbmdlZChjbSkgewogICAgIGlmIChjbS5vcHRpb25zLmxp
bmVXcmFwcGluZykgewotICAgICAgY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSArPSAiIENv
ZGVNaXJyb3Itd3JhcCI7CisgICAgICBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2Rl
TWlycm9yLXdyYXAiKTsKICAgICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGggPSAi
IjsKICAgICB9IGVsc2UgewotICAgICAgY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSA9IGNt
LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itd3JhcCIsICIi
KTsKLSAgICAgIGNvbXB1dGVNYXhMZW5ndGgoY20pOworICAgICAgcm1DbGFzcyhjbS5kaXNwbGF5
LndyYXBwZXIsICJDb2RlTWlycm9yLXdyYXAiKTsKKyAgICAgIGZpbmRNYXhMaW5lKGNtKTsKICAg
ICB9CiAgICAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSk7CiAgICAgcmVnQ2hhbmdlKGNtKTsKQEAg
LTIxOSwxNiArMjY3LDI0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKXt1cGRhdGVTY3JvbGxiYXJzKGNtKTt9LCAxMDApOwogICB9
CiAKKyAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgZXN0aW1hdGVzIHRoZSBoZWlnaHQgb2Yg
YSBsaW5lLCB0byB1c2UgYXMKKyAgLy8gZmlyc3QgYXBwcm94aW1hdGlvbiB1bnRpbCB0aGUgbGlu
ZSBiZWNvbWVzIHZpc2libGUgKGFuZCBpcyB0aHVzCisgIC8vIHByb3Blcmx5IG1lYXN1cmFibGUp
LgogICBmdW5jdGlvbiBlc3RpbWF0ZUhlaWdodChjbSkgewogICAgIHZhciB0aCA9IHRleHRIZWln
aHQoY20uZGlzcGxheSksIHdyYXBwaW5nID0gY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7CiAgICAg
dmFyIHBlckxpbmUgPSB3cmFwcGluZyAmJiBNYXRoLm1heCg1LCBjbS5kaXNwbGF5LnNjcm9sbGVy
LmNsaWVudFdpZHRoIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpIC0gMyk7CiAgICAgcmV0dXJuIGZ1
bmN0aW9uKGxpbmUpIHsKLSAgICAgIGlmIChsaW5lSXNIaWRkZW4oY20uZG9jLCBsaW5lKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICBlbHNlIGlmICh3cmFwcGluZykKLSAgICAgICAgcmV0dXJu
IChNYXRoLmNlaWwobGluZS50ZXh0Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDEpICogdGg7CisgICAg
ICBpZiAobGluZUlzSGlkZGVuKGNtLmRvYywgbGluZSkpIHJldHVybiAwOworCisgICAgICB2YXIg
d2lkZ2V0c0hlaWdodCA9IDA7CisgICAgICBpZiAobGluZS53aWRnZXRzKSBmb3IgKHZhciBpID0g
MDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAobGluZS53aWRn
ZXRzW2ldLmhlaWdodCkgd2lkZ2V0c0hlaWdodCArPSBsaW5lLndpZGdldHNbaV0uaGVpZ2h0Owor
ICAgICAgfQorCisgICAgICBpZiAod3JhcHBpbmcpCisgICAgICAgIHJldHVybiB3aWRnZXRzSGVp
Z2h0ICsgKE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMSkgKiB0aDsK
ICAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHRoOworICAgICAgICByZXR1cm4gd2lkZ2V0c0hl
aWdodCArIHRoOwogICAgIH07CiAgIH0KIApAQCAtMjQ0LDcgKzMwMCw2IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBtYXAgPSBrZXlNYXBbY20ub3B0aW9ucy5r
ZXlNYXBdLCBzdHlsZSA9IG1hcC5zdHlsZTsKICAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NO
YW1lID0gY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1rZXltYXAt
XFMrL2csICIiKSArCiAgICAgICAoc3R5bGUgPyAiIGNtLWtleW1hcC0iICsgc3R5bGUgOiAiIik7
Ci0gICAgY20uc3RhdGUuZGlzYWJsZUlucHV0ID0gbWFwLmRpc2FibGVJbnB1dDsKICAgfQogCiAg
IGZ1bmN0aW9uIHRoZW1lQ2hhbmdlZChjbSkgewpAQCAtMjU5LDYgKzMxNCw4IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXthbGln
bkhvcml6b250YWxseShjbSk7fSwgMjApOwogICB9CiAKKyAgLy8gUmVidWlsZCB0aGUgZ3V0dGVy
IGVsZW1lbnRzLCBlbnN1cmUgdGhlIG1hcmdpbiB0byB0aGUgbGVmdCBvZiB0aGUKKyAgLy8gY29k
ZSBtYXRjaGVzIHRoZWlyIHdpZHRoLgogICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXJzKGNtKSB7CiAg
ICAgdmFyIGd1dHRlcnMgPSBjbS5kaXNwbGF5Lmd1dHRlcnMsIHNwZWNzID0gY20ub3B0aW9ucy5n
dXR0ZXJzOwogICAgIHJlbW92ZUNoaWxkcmVuKGd1dHRlcnMpOwpAQCAtMjcxLDMzICszMjgsNDQg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB9CiAgICAgfQogICAg
IGd1dHRlcnMuc3R5bGUuZGlzcGxheSA9IGkgPyAiIiA6ICJub25lIjsKKyAgICB1cGRhdGVHdXR0
ZXJTcGFjZShjbSk7CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXJTcGFjZShjbSkgewor
ICAgIHZhciB3aWR0aCA9IGNtLmRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aDsKKyAgICBjbS5k
aXNwbGF5LnNpemVyLnN0eWxlLm1hcmdpbkxlZnQgPSB3aWR0aCArICJweCI7CisgICAgY20uZGlz
cGxheS5zY3JvbGxiYXJILnN0eWxlLmxlZnQgPSBjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8gd2lk
dGggKyAicHgiIDogMDsKICAgfQogCi0gIGZ1bmN0aW9uIGxpbmVMZW5ndGgoZG9jLCBsaW5lKSB7
CisgIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBsZW5ndGggb2YgYSBsaW5lLCB0YWtpbmcgaW50
byBhY2NvdW50CisgIC8vIGNvbGxhcHNlZCByYW5nZXMgKHNlZSBtYXJrVGV4dCkgdGhhdCBtaWdo
dCBoaWRlIHBhcnRzLCBhbmQgam9pbgorICAvLyBvdGhlciBsaW5lcyBvbnRvIGl0LgorICBmdW5j
dGlvbiBsaW5lTGVuZ3RoKGxpbmUpIHsKICAgICBpZiAobGluZS5oZWlnaHQgPT0gMCkgcmV0dXJu
IDA7CiAgICAgdmFyIGxlbiA9IGxpbmUudGV4dC5sZW5ndGgsIG1lcmdlZCwgY3VyID0gbGluZTsK
ICAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQoY3VyKSkgewotICAgICAg
dmFyIGZvdW5kID0gbWVyZ2VkLmZpbmQoKTsKLSAgICAgIGN1ciA9IGdldExpbmUoZG9jLCBmb3Vu
ZC5mcm9tLmxpbmUpOworICAgICAgdmFyIGZvdW5kID0gbWVyZ2VkLmZpbmQoMCwgdHJ1ZSk7Cisg
ICAgICBjdXIgPSBmb3VuZC5mcm9tLmxpbmU7CiAgICAgICBsZW4gKz0gZm91bmQuZnJvbS5jaCAt
IGZvdW5kLnRvLmNoOwogICAgIH0KICAgICBjdXIgPSBsaW5lOwogICAgIHdoaWxlIChtZXJnZWQg
PSBjb2xsYXBzZWRTcGFuQXRFbmQoY3VyKSkgewotICAgICAgdmFyIGZvdW5kID0gbWVyZ2VkLmZp
bmQoKTsKKyAgICAgIHZhciBmb3VuZCA9IG1lcmdlZC5maW5kKDAsIHRydWUpOwogICAgICAgbGVu
IC09IGN1ci50ZXh0Lmxlbmd0aCAtIGZvdW5kLmZyb20uY2g7Ci0gICAgICBjdXIgPSBnZXRMaW5l
KGRvYywgZm91bmQudG8ubGluZSk7CisgICAgICBjdXIgPSBmb3VuZC50by5saW5lOwogICAgICAg
bGVuICs9IGN1ci50ZXh0Lmxlbmd0aCAtIGZvdW5kLnRvLmNoOwogICAgIH0KICAgICByZXR1cm4g
bGVuOwogICB9CiAKLSAgZnVuY3Rpb24gY29tcHV0ZU1heExlbmd0aChjbSkgeworICAvLyBGaW5k
IHRoZSBsb25nZXN0IGxpbmUgaW4gdGhlIGRvY3VtZW50LgorICBmdW5jdGlvbiBmaW5kTWF4TGlu
ZShjbSkgewogICAgIHZhciBkID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jOwogICAgIGQubWF4
TGluZSA9IGdldExpbmUoZG9jLCBkb2MuZmlyc3QpOwotICAgIGQubWF4TGluZUxlbmd0aCA9IGxp
bmVMZW5ndGgoZG9jLCBkLm1heExpbmUpOworICAgIGQubWF4TGluZUxlbmd0aCA9IGxpbmVMZW5n
dGgoZC5tYXhMaW5lKTsKICAgICBkLm1heExpbmVDaGFuZ2VkID0gdHJ1ZTsKICAgICBkb2MuaXRl
cihmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2YXIgbGVuID0gbGluZUxlbmd0aChkb2MsIGxpbmUp
OworICAgICAgdmFyIGxlbiA9IGxpbmVMZW5ndGgobGluZSk7CiAgICAgICBpZiAobGVuID4gZC5t
YXhMaW5lTGVuZ3RoKSB7CiAgICAgICAgIGQubWF4TGluZUxlbmd0aCA9IGxlbjsKICAgICAgICAg
ZC5tYXhMaW5lID0gbGluZTsKQEAgLTMxOSwyMSArMzg3LDMzIEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogCiAgIC8vIFNDUk9MTEJBUlMKIAorICAvLyBQcmVwYXJlIERPTSBy
ZWFkcyBuZWVkZWQgdG8gdXBkYXRlIHRoZSBzY3JvbGxiYXJzLiBEb25lIGluIG9uZQorICAvLyBz
aG90IHRvIG1pbmltaXplIHVwZGF0ZS9tZWFzdXJlIHJvdW5kdHJpcHMuCisgIGZ1bmN0aW9uIG1l
YXN1cmVGb3JTY3JvbGxiYXJzKGNtKSB7CisgICAgdmFyIHNjcm9sbCA9IGNtLmRpc3BsYXkuc2Ny
b2xsZXI7CisgICAgcmV0dXJuIHsKKyAgICAgIGNsaWVudEhlaWdodDogc2Nyb2xsLmNsaWVudEhl
aWdodCwKKyAgICAgIGJhckhlaWdodDogY20uZGlzcGxheS5zY3JvbGxiYXJWLmNsaWVudEhlaWdo
dCwKKyAgICAgIHNjcm9sbFdpZHRoOiBzY3JvbGwuc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoOiBz
Y3JvbGwuY2xpZW50V2lkdGgsCisgICAgICBiYXJXaWR0aDogY20uZGlzcGxheS5zY3JvbGxiYXJI
LmNsaWVudFdpZHRoLAorICAgICAgZG9jSGVpZ2h0OiBNYXRoLnJvdW5kKGNtLmRvYy5oZWlnaHQg
KyBwYWRkaW5nVmVydChjbS5kaXNwbGF5KSkKKyAgICB9OworICB9CisKICAgLy8gUmUtc3luY2hy
b25pemUgdGhlIGZha2Ugc2Nyb2xsYmFycyB3aXRoIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKLSAg
Ly8gY29udGVudC4gT3B0aW9uYWxseSBmb3JjZSBhIHNjcm9sbFRvcC4KLSAgZnVuY3Rpb24gdXBk
YXRlU2Nyb2xsYmFycyhjbSkgewotICAgIHZhciBkID0gY20uZGlzcGxheSwgZG9jSGVpZ2h0ID0g
Y20uZG9jLmhlaWdodDsKLSAgICB2YXIgdG90YWxIZWlnaHQgPSBkb2NIZWlnaHQgKyBwYWRkaW5n
VmVydChkKTsKLSAgICBkLnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IGQuaGVpZ2h0Rm9yY2VyLnN0
eWxlLnRvcCA9IHRvdGFsSGVpZ2h0ICsgInB4IjsKLSAgICBkLmd1dHRlcnMuc3R5bGUuaGVpZ2h0
ID0gTWF0aC5tYXgodG90YWxIZWlnaHQsIGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xs
ZXJDdXRPZmYpICsgInB4IjsKLSAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gTWF0aC5tYXgodG90YWxI
ZWlnaHQsIGQuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0KTsKLSAgICB2YXIgbmVlZHNIID0gZC5zY3Jv
bGxlci5zY3JvbGxXaWR0aCA+IChkLnNjcm9sbGVyLmNsaWVudFdpZHRoICsgMSk7Ci0gICAgdmFy
IG5lZWRzViA9IHNjcm9sbEhlaWdodCA+IChkLnNjcm9sbGVyLmNsaWVudEhlaWdodCArIDEpOwor
ICAvLyBjb250ZW50LgorICBmdW5jdGlvbiB1cGRhdGVTY3JvbGxiYXJzKGNtLCBtZWFzdXJlKSB7
CisgICAgaWYgKCFtZWFzdXJlKSBtZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOwor
ICAgIHZhciBkID0gY20uZGlzcGxheTsKKyAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gbWVhc3VyZS5k
b2NIZWlnaHQgKyBzY3JvbGxlckN1dE9mZjsKKyAgICB2YXIgbmVlZHNIID0gbWVhc3VyZS5zY3Jv
bGxXaWR0aCA+IG1lYXN1cmUuY2xpZW50V2lkdGg7CisgICAgdmFyIG5lZWRzViA9IHNjcm9sbEhl
aWdodCA+IG1lYXN1cmUuY2xpZW50SGVpZ2h0OwogICAgIGlmIChuZWVkc1YpIHsKICAgICAgIGQu
c2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgIGQuc2Nyb2xsYmFyVi5z
dHlsZS5ib3R0b20gPSBuZWVkc0ggPyBzY3JvbGxiYXJXaWR0aChkLm1lYXN1cmUpICsgInB4IiA6
ICIwIjsKKyAgICAgIC8vIEEgYnVnIGluIElFOCBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBu
ZWdhdGl2ZSwgc28gZ3VhcmQgaXQuCiAgICAgICBkLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHls
ZS5oZWlnaHQgPQotICAgICAgICAoc2Nyb2xsSGVpZ2h0IC0gZC5zY3JvbGxlci5jbGllbnRIZWln
aHQgKyBkLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KSArICJweCI7CisgICAgICAgIE1hdGgubWF4
KDAsIHNjcm9sbEhlaWdodCAtIG1lYXN1cmUuY2xpZW50SGVpZ2h0ICsgKG1lYXN1cmUuYmFySGVp
Z2h0IHx8IGQuc2Nyb2xsYmFyVi5jbGllbnRIZWlnaHQpKSArICJweCI7CiAgICAgfSBlbHNlIHsK
ICAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICBkLnNjcm9sbGJh
clYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQgPSAiMCI7CkBAIC0zNDIsNyArNDIyLDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBkLnNjcm9sbGJhckguc3R5bGUu
ZGlzcGxheSA9ICJibG9jayI7CiAgICAgICBkLnNjcm9sbGJhckguc3R5bGUucmlnaHQgPSBuZWVk
c1YgPyBzY3JvbGxiYXJXaWR0aChkLm1lYXN1cmUpICsgInB4IiA6ICIwIjsKICAgICAgIGQuc2Ny
b2xsYmFySC5maXJzdENoaWxkLnN0eWxlLndpZHRoID0KLSAgICAgICAgKGQuc2Nyb2xsZXIuc2Ny
b2xsV2lkdGggLSBkLnNjcm9sbGVyLmNsaWVudFdpZHRoICsgZC5zY3JvbGxiYXJILmNsaWVudFdp
ZHRoKSArICJweCI7CisgICAgICAgIChtZWFzdXJlLnNjcm9sbFdpZHRoIC0gbWVhc3VyZS5jbGll
bnRXaWR0aCArIChtZWFzdXJlLmJhcldpZHRoIHx8IGQuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCkp
ICsgInB4IjsKICAgICB9IGVsc2UgewogICAgICAgZC5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXkg
PSAiIjsKICAgICAgIGQuc2Nyb2xsYmFySC5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gIjAiOwpA
QCAtMzU5LDMzICs0MzksNjEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAK
ICAgICBpZiAobWFjX2dlTGlvbiAmJiBzY3JvbGxiYXJXaWR0aChkLm1lYXN1cmUpID09PSAwKSB7
CiAgICAgICBkLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGggPSBkLnNjcm9sbGJhckguc3R5bGUu
bWluSGVpZ2h0ID0gbWFjX2dlTW91bnRhaW5MaW9uID8gIjE4cHgiIDogIjEycHgiOwotICAgICAg
ZC5zY3JvbGxiYXJWLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBkLnNjcm9sbGJhckguc3R5bGUucG9p
bnRlckV2ZW50cyA9ICJub25lIjsKKyAgICAgIHZhciBiYXJNb3VzZURvd24gPSBmdW5jdGlvbihl
KSB7CisgICAgICAgIGlmIChlX3RhcmdldChlKSAhPSBkLnNjcm9sbGJhclYgJiYgZV90YXJnZXQo
ZSkgIT0gZC5zY3JvbGxiYXJIKQorICAgICAgICAgIG9wZXJhdGlvbihjbSwgb25Nb3VzZURvd24p
KGUpOworICAgICAgfTsKKyAgICAgIG9uKGQuc2Nyb2xsYmFyViwgIm1vdXNlZG93biIsIGJhck1v
dXNlRG93bik7CisgICAgICBvbihkLnNjcm9sbGJhckgsICJtb3VzZWRvd24iLCBiYXJNb3VzZURv
d24pOwogICAgIH0KICAgfQogCisgIC8vIENvbXB1dGUgdGhlIGxpbmVzIHRoYXQgYXJlIHZpc2li
bGUgaW4gYSBnaXZlbiB2aWV3cG9ydCAoZGVmYXVsdHMKKyAgLy8gdGhlIHRoZSBjdXJyZW50IHNj
cm9sbCBwb3NpdGlvbikuIHZpZXdQb3J0IG1heSBjb250YWluIHRvcCwKKyAgLy8gaGVpZ2h0LCBh
bmQgZW5zdXJlIChzZWUgb3Auc2Nyb2xsVG9Qb3MpIHByb3BlcnRpZXMuCiAgIGZ1bmN0aW9uIHZp
c2libGVMaW5lcyhkaXNwbGF5LCBkb2MsIHZpZXdQb3J0KSB7Ci0gICAgdmFyIHRvcCA9IGRpc3Bs
YXkuc2Nyb2xsZXIuc2Nyb2xsVG9wLCBoZWlnaHQgPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVp
Z2h0OwotICAgIGlmICh0eXBlb2Ygdmlld1BvcnQgPT0gIm51bWJlciIpIHRvcCA9IHZpZXdQb3J0
OwotICAgIGVsc2UgaWYgKHZpZXdQb3J0KSB7dG9wID0gdmlld1BvcnQudG9wOyBoZWlnaHQgPSB2
aWV3UG9ydC5ib3R0b20gLSB2aWV3UG9ydC50b3A7fQorICAgIHZhciB0b3AgPSB2aWV3UG9ydCAm
JiB2aWV3UG9ydC50b3AgIT0gbnVsbCA/IHZpZXdQb3J0LnRvcCA6IGRpc3BsYXkuc2Nyb2xsZXIu
c2Nyb2xsVG9wOwogICAgIHRvcCA9IE1hdGguZmxvb3IodG9wIC0gcGFkZGluZ1RvcChkaXNwbGF5
KSk7Ci0gICAgdmFyIGJvdHRvbSA9IE1hdGguY2VpbCh0b3AgKyBoZWlnaHQpOwotICAgIHJldHVy
biB7ZnJvbTogbGluZUF0SGVpZ2h0KGRvYywgdG9wKSwgdG86IGxpbmVBdEhlaWdodChkb2MsIGJv
dHRvbSl9OworICAgIHZhciBib3R0b20gPSB2aWV3UG9ydCAmJiB2aWV3UG9ydC5ib3R0b20gIT0g
bnVsbCA/IHZpZXdQb3J0LmJvdHRvbSA6IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWln
aHQ7CisKKyAgICB2YXIgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIHRvcCksIHRvID0gbGluZUF0
SGVpZ2h0KGRvYywgYm90dG9tKTsKKyAgICAvLyBFbnN1cmUgaXMgYSB7ZnJvbToge2xpbmUsIGNo
fSwgdG86IHtsaW5lLCBjaH19IG9iamVjdCwgYW5kCisgICAgLy8gZm9yY2VzIHRob3NlIGxpbmVz
IGludG8gdGhlIHZpZXdwb3J0IChpZiBwb3NzaWJsZSkuCisgICAgaWYgKHZpZXdQb3J0ICYmIHZp
ZXdQb3J0LmVuc3VyZSkgeworICAgICAgdmFyIGVuc3VyZUZyb20gPSB2aWV3UG9ydC5lbnN1cmUu
ZnJvbS5saW5lLCBlbnN1cmVUbyA9IHZpZXdQb3J0LmVuc3VyZS50by5saW5lOworICAgICAgaWYg
KGVuc3VyZUZyb20gPCBmcm9tKQorICAgICAgICByZXR1cm4ge2Zyb206IGVuc3VyZUZyb20sCisg
ICAgICAgICAgICAgICAgdG86IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5l
KGRvYywgZW5zdXJlRnJvbSkpICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCl9OworICAg
ICAgaWYgKE1hdGgubWluKGVuc3VyZVRvLCBkb2MubGFzdExpbmUoKSkgPj0gdG8pCisgICAgICAg
IHJldHVybiB7ZnJvbTogbGluZUF0SGVpZ2h0KGRvYywgaGVpZ2h0QXRMaW5lKGdldExpbmUoZG9j
LCBlbnN1cmVUbykpIC0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCksCisgICAgICAgICAg
ICAgICAgdG86IGVuc3VyZVRvfTsKKyAgICB9CisgICAgcmV0dXJuIHtmcm9tOiBmcm9tLCB0bzog
dG99OwogICB9CiAKICAgLy8gTElORSBOVU1CRVJTCiAKKyAgLy8gUmUtYWxpZ24gbGluZSBudW1i
ZXJzIGFuZCBndXR0ZXIgbWFya3MgdG8gY29tcGVuc2F0ZSBmb3IKKyAgLy8gaG9yaXpvbnRhbCBz
Y3JvbGxpbmcuCiAgIGZ1bmN0aW9uIGFsaWduSG9yaXpvbnRhbGx5KGNtKSB7Ci0gICAgdmFyIGRp
c3BsYXkgPSBjbS5kaXNwbGF5OworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgdmlldyA9
IGRpc3BsYXkudmlldzsKICAgICBpZiAoIWRpc3BsYXkuYWxpZ25XaWRnZXRzICYmICghZGlzcGxh
eS5ndXR0ZXJzLmZpcnN0Q2hpbGQgfHwgIWNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpKSByZXR1cm47
CiAgICAgdmFyIGNvbXAgPSBjb21wZW5zYXRlRm9ySFNjcm9sbChkaXNwbGF5KSAtIGRpc3BsYXku
c2Nyb2xsZXIuc2Nyb2xsTGVmdCArIGNtLmRvYy5zY3JvbGxMZWZ0OwotICAgIHZhciBndXR0ZXJX
ID0gZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoLCBsID0gY29tcCArICJweCI7Ci0gICAgZm9y
ICh2YXIgbiA9IGRpc3BsYXkubGluZURpdi5maXJzdENoaWxkOyBuOyBuID0gbi5uZXh0U2libGlu
ZykgaWYgKG4uYWxpZ25hYmxlKSB7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgYSA9IG4uYWxpZ25h
YmxlOyBpIDwgYS5sZW5ndGg7ICsraSkgYVtpXS5zdHlsZS5sZWZ0ID0gbDsKKyAgICB2YXIgZ3V0
dGVyVyA9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCwgbGVmdCA9IGNvbXAgKyAicHgiOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykgaWYgKCF2aWV3W2ldLmhp
ZGRlbikgeworICAgICAgaWYgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgJiYgdmlld1tpXS5ndXR0
ZXIpCisgICAgICAgIHZpZXdbaV0uZ3V0dGVyLnN0eWxlLmxlZnQgPSBsZWZ0OworICAgICAgdmFy
IGFsaWduID0gdmlld1tpXS5hbGlnbmFibGU7CisgICAgICBpZiAoYWxpZ24pIGZvciAodmFyIGog
PSAwOyBqIDwgYWxpZ24ubGVuZ3RoOyBqKyspCisgICAgICAgIGFsaWduW2pdLnN0eWxlLmxlZnQg
PSBsZWZ0OwogICAgIH0KICAgICBpZiAoY20ub3B0aW9ucy5maXhlZEd1dHRlcikKICAgICAgIGRp
c3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0ID0gKGNvbXAgKyBndXR0ZXJXKSArICJweCI7CiAgIH0K
IAorICAvLyBVc2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBsaW5lIG51bWJlciBndXR0ZXIgaXMgc3Rp
bGwgdGhlIHJpZ2h0CisgIC8vIHNpemUgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50IHNpemUuIFJl
dHVybnMgdHJ1ZSB3aGVuIGFuIHVwZGF0ZQorICAvLyBpcyBuZWVkZWQuCiAgIGZ1bmN0aW9uIG1h
eWJlVXBkYXRlTGluZU51bWJlcldpZHRoKGNtKSB7CiAgICAgaWYgKCFjbS5vcHRpb25zLmxpbmVO
dW1iZXJzKSByZXR1cm4gZmFsc2U7CiAgICAgdmFyIGRvYyA9IGNtLmRvYywgbGFzdCA9IGxpbmVO
dW1iZXJGb3IoY20ub3B0aW9ucywgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSwgZGlzcGxheSA9
IGNtLmRpc3BsYXk7CkBAIC0zOTgsNiArNTA2LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgICBkaXNwbGF5LmxpbmVOdW1XaWR0aCA9IGRpc3BsYXkubGluZU51bUlu
bmVyV2lkdGggKyBwYWRkaW5nOwogICAgICAgZGlzcGxheS5saW5lTnVtQ2hhcnMgPSBkaXNwbGF5
LmxpbmVOdW1Jbm5lcldpZHRoID8gbGFzdC5sZW5ndGggOiAtMTsKICAgICAgIGRpc3BsYXkubGlu
ZUd1dHRlci5zdHlsZS53aWR0aCA9IGRpc3BsYXkubGluZU51bVdpZHRoICsgInB4IjsKKyAgICAg
IHVwZGF0ZUd1dHRlclNwYWNlKGNtKTsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC00MDYsMTkxICs1MTUsMTkzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBsaW5lTnVtYmVyRm9yKG9wdGlvbnMsIGkpIHsKICAg
ICByZXR1cm4gU3RyaW5nKG9wdGlvbnMubGluZU51bWJlckZvcm1hdHRlcihpICsgb3B0aW9ucy5m
aXJzdExpbmVOdW1iZXIpKTsKICAgfQorCisgIC8vIENvbXB1dGVzIGRpc3BsYXkuc2Nyb2xsZXIu
c2Nyb2xsTGVmdCArIGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCwKKyAgLy8gYnV0IHVzaW5n
IGdldEJvdW5kaW5nQ2xpZW50UmVjdCB0byBnZXQgYSBzdWItcGl4ZWwtYWNjdXJhdGUKKyAgLy8g
cmVzdWx0LgogICBmdW5jdGlvbiBjb21wZW5zYXRlRm9ySFNjcm9sbChkaXNwbGF5KSB7Ci0gICAg
cmV0dXJuIGdldFJlY3QoZGlzcGxheS5zY3JvbGxlcikubGVmdCAtIGdldFJlY3QoZGlzcGxheS5z
aXplcikubGVmdDsKKyAgICByZXR1cm4gZGlzcGxheS5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKS5sZWZ0IC0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0
OwogICB9CiAKICAgLy8gRElTUExBWSBEUkFXSU5HCiAKLSAgZnVuY3Rpb24gdXBkYXRlRGlzcGxh
eShjbSwgY2hhbmdlcywgdmlld1BvcnQsIGZvcmNlZCkgewotICAgIHZhciBvbGRGcm9tID0gY20u
ZGlzcGxheS5zaG93aW5nRnJvbSwgb2xkVG8gPSBjbS5kaXNwbGF5LnNob3dpbmdUbywgdXBkYXRl
ZDsKKyAgLy8gVXBkYXRlcyB0aGUgZGlzcGxheSwgc2VsZWN0aW9uLCBhbmQgc2Nyb2xsYmFycywg
dXNpbmcgdGhlCisgIC8vIGluZm9ybWF0aW9uIGluIGRpc3BsYXkudmlldyB0byBmaW5kIG91dCB3
aGljaCBub2RlcyBhcmUgbm8gbG9uZ2VyCisgIC8vIHVwLXRvLWRhdGUuIFRyaWVzIHRvIGJhaWwg
b3V0IGVhcmx5IHdoZW4gbm8gY2hhbmdlcyBhcmUgbmVlZGVkLAorICAvLyB1bmxlc3MgZm9yY2Vk
IGlzIHRydWUuCisgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBhY3R1YWwgdXBkYXRlIGhhcHBlbmVk
LCBmYWxzZSBvdGhlcndpc2UuCisgIGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXkoY20sIHZpZXdQb3J0
LCBmb3JjZWQpIHsKKyAgICB2YXIgb2xkRnJvbSA9IGNtLmRpc3BsYXkudmlld0Zyb20sIG9sZFRv
ID0gY20uZGlzcGxheS52aWV3VG8sIHVwZGF0ZWQ7CiAgICAgdmFyIHZpc2libGUgPSB2aXNpYmxl
TGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3UG9ydCk7CiAgICAgZm9yICh2YXIgZmlyc3Qg
PSB0cnVlOzsgZmlyc3QgPSBmYWxzZSkgewogICAgICAgdmFyIG9sZFdpZHRoID0gY20uZGlzcGxh
eS5zY3JvbGxlci5jbGllbnRXaWR0aDsKLSAgICAgIGlmICghdXBkYXRlRGlzcGxheUlubmVyKGNt
LCBjaGFuZ2VzLCB2aXNpYmxlLCBmb3JjZWQpKSBicmVhazsKKyAgICAgIGlmICghdXBkYXRlRGlz
cGxheUlubmVyKGNtLCB2aXNpYmxlLCBmb3JjZWQpKSBicmVhazsKICAgICAgIHVwZGF0ZWQgPSB0
cnVlOwotICAgICAgY2hhbmdlcyA9IFtdOworCisgICAgICAvLyBJZiB0aGUgbWF4IGxpbmUgY2hh
bmdlZCBzaW5jZSBpdCB3YXMgbGFzdCBtZWFzdXJlZCwgbWVhc3VyZSBpdCwKKyAgICAgIC8vIGFu
ZCBlbnN1cmUgdGhlIGRvY3VtZW50J3Mgd2lkdGggbWF0Y2hlcyBpdC4KKyAgICAgIGlmIChjbS5k
aXNwbGF5Lm1heExpbmVDaGFuZ2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykKKyAgICAg
ICAgYWRqdXN0Q29udGVudFdpZHRoKGNtKTsKKworICAgICAgdmFyIGJhck1lYXN1cmUgPSBtZWFz
dXJlRm9yU2Nyb2xsYmFycyhjbSk7CiAgICAgICB1cGRhdGVTZWxlY3Rpb24oY20pOwotICAgICAg
dXBkYXRlU2Nyb2xsYmFycyhjbSk7CisgICAgICBzZXREb2N1bWVudEhlaWdodChjbSwgYmFyTWVh
c3VyZSk7CisgICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTsKKyAgICAgIGlm
ICh3ZWJraXQgJiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpCisgICAgICAgIGNoZWNrRm9yV2Vi
a2l0V2lkdGhCdWcoY20sIGJhck1lYXN1cmUpOyAvLyAoSXNzdWUgIzI0MjApCiAgICAgICBpZiAo
Zmlyc3QgJiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgb2xkV2lkdGggIT0gY20uZGlzcGxh
eS5zY3JvbGxlci5jbGllbnRXaWR0aCkgewogICAgICAgICBmb3JjZWQgPSB0cnVlOwogICAgICAg
ICBjb250aW51ZTsKICAgICAgIH0KICAgICAgIGZvcmNlZCA9IGZhbHNlOwogCi0gICAgICAvLyBD
bGlwIGZvcmNlZCB2aWV3cG9ydCB0byBhY3R1YWwgc2Nyb2xsYWJsZSBhcmVhCi0gICAgICBpZiAo
dmlld1BvcnQpCi0gICAgICAgIHZpZXdQb3J0ID0gTWF0aC5taW4oY20uZGlzcGxheS5zY3JvbGxl
ci5zY3JvbGxIZWlnaHQgLSBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygdmlld1BvcnQgPT0gIm51bWJlciIgPyB2aWV3
UG9ydCA6IHZpZXdQb3J0LnRvcCk7CisgICAgICAvLyBDbGlwIGZvcmNlZCB2aWV3cG9ydCB0byBh
Y3R1YWwgc2Nyb2xsYWJsZSBhcmVhLgorICAgICAgaWYgKHZpZXdQb3J0ICYmIHZpZXdQb3J0LnRv
cCAhPSBudWxsKQorICAgICAgICB2aWV3UG9ydCA9IHt0b3A6IE1hdGgubWluKGJhck1lYXN1cmUu
ZG9jSGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYgLSBiYXJNZWFzdXJlLmNsaWVudEhlaWdodCwgdmll
d1BvcnQudG9wKX07CisgICAgICAvLyBVcGRhdGVkIGxpbmUgaGVpZ2h0cyBtaWdodCByZXN1bHQg
aW4gdGhlIGRyYXduIGFyZWEgbm90CisgICAgICAvLyBhY3R1YWxseSBjb3ZlcmluZyB0aGUgdmll
d3BvcnQuIEtlZXAgbG9vcGluZyB1bnRpbCBpdCBkb2VzLgogICAgICAgdmlzaWJsZSA9IHZpc2li
bGVMaW5lcyhjbS5kaXNwbGF5LCBjbS5kb2MsIHZpZXdQb3J0KTsKLSAgICAgIGlmICh2aXNpYmxl
LmZyb20gPj0gY20uZGlzcGxheS5zaG93aW5nRnJvbSAmJiB2aXNpYmxlLnRvIDw9IGNtLmRpc3Bs
YXkuc2hvd2luZ1RvKQorICAgICAgaWYgKHZpc2libGUuZnJvbSA+PSBjbS5kaXNwbGF5LnZpZXdG
cm9tICYmIHZpc2libGUudG8gPD0gY20uZGlzcGxheS52aWV3VG8pCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAorICAgIGNtLmRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBudWxsOwogICAgIGlm
ICh1cGRhdGVkKSB7CiAgICAgICBzaWduYWxMYXRlcihjbSwgInVwZGF0ZSIsIGNtKTsKLSAgICAg
IGlmIChjbS5kaXNwbGF5LnNob3dpbmdGcm9tICE9IG9sZEZyb20gfHwgY20uZGlzcGxheS5zaG93
aW5nVG8gIT0gb2xkVG8pCi0gICAgICAgIHNpZ25hbExhdGVyKGNtLCAidmlld3BvcnRDaGFuZ2Ui
LCBjbSwgY20uZGlzcGxheS5zaG93aW5nRnJvbSwgY20uZGlzcGxheS5zaG93aW5nVG8pOworICAg
ICAgaWYgKGNtLmRpc3BsYXkudmlld0Zyb20gIT0gb2xkRnJvbSB8fCBjbS5kaXNwbGF5LnZpZXdU
byAhPSBvbGRUbykKKyAgICAgICAgc2lnbmFsTGF0ZXIoY20sICJ2aWV3cG9ydENoYW5nZSIsIGNt
LCBjbS5kaXNwbGF5LnZpZXdGcm9tLCBjbS5kaXNwbGF5LnZpZXdUbyk7CiAgICAgfQogICAgIHJl
dHVybiB1cGRhdGVkOwogICB9CiAKLSAgLy8gVXNlcyBhIHNldCBvZiBjaGFuZ2VzIHBsdXMgdGhl
IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIHRvCi0gIC8vIGRldGVybWluZSB3aGljaCBET00gdXBk
YXRlcyBoYXZlIHRvIGJlIG1hZGUsIGFuZCBtYWtlcyB0aGUKLSAgLy8gdXBkYXRlcy4KLSAgZnVu
Y3Rpb24gdXBkYXRlRGlzcGxheUlubmVyKGNtLCBjaGFuZ2VzLCB2aXNpYmxlLCBmb3JjZWQpIHsK
KyAgLy8gRG9lcyB0aGUgYWN0dWFsIHVwZGF0aW5nIG9mIHRoZSBsaW5lIGRpc3BsYXkuIEJhaWxz
IG91dAorICAvLyAocmV0dXJuaW5nIGZhbHNlKSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gYmUg
ZG9uZSBhbmQgZm9yY2VkIGlzCisgIC8vIGZhbHNlLgorICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5
SW5uZXIoY20sIHZpc2libGUsIGZvcmNlZCkgewogICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxh
eSwgZG9jID0gY20uZG9jOwotICAgIGlmICghZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoKSB7
Ci0gICAgICBkaXNwbGF5LnNob3dpbmdGcm9tID0gZGlzcGxheS5zaG93aW5nVG8gPSBkb2MuZmly
c3Q7Ci0gICAgICBkaXNwbGF5LnZpZXdPZmZzZXQgPSAwOworICAgIGlmICghZGlzcGxheS53cmFw
cGVyLm9mZnNldFdpZHRoKSB7CisgICAgICByZXNldFZpZXcoY20pOwogICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIC8vIEJhaWwgb3V0IGlmIHRoZSB2aXNpYmxlIGFyZWEgaXMgYWxyZWFkeSBy
ZW5kZXJlZCBhbmQgbm90aGluZyBjaGFuZ2VkLgotICAgIGlmICghZm9yY2VkICYmIGNoYW5nZXMu
bGVuZ3RoID09IDAgJiYKLSAgICAgICAgdmlzaWJsZS5mcm9tID4gZGlzcGxheS5zaG93aW5nRnJv
bSAmJiB2aXNpYmxlLnRvIDwgZGlzcGxheS5zaG93aW5nVG8pCisgICAgaWYgKCFmb3JjZWQgJiYg
dmlzaWJsZS5mcm9tID49IGRpc3BsYXkudmlld0Zyb20gJiYgdmlzaWJsZS50byA8PSBkaXNwbGF5
LnZpZXdUbyAmJgorICAgICAgICBjb3VudERpcnR5VmlldyhjbSkgPT0gMCkKICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChtYXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0aChjbSkpCi0gICAgICBjaGFu
Z2VzID0gW3tmcm9tOiBkb2MuZmlyc3QsIHRvOiBkb2MuZmlyc3QgKyBkb2Muc2l6ZX1dOwotICAg
IHZhciBndXR0ZXJXID0gZGlzcGxheS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0ID0gZGlzcGxheS5n
dXR0ZXJzLm9mZnNldFdpZHRoICsgInB4IjsKLSAgICBkaXNwbGF5LnNjcm9sbGJhckguc3R5bGUu
bGVmdCA9IGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBndXR0ZXJXIDogIjAiOwotCi0gICAgLy8g
VXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGluZXMgbmVlZCB0aGVpciBsaW5lIG51bWJlcnMgdXBk
YXRlZAotICAgIHZhciBwb3NpdGlvbnNDaGFuZ2VkRnJvbSA9IEluZmluaXR5OwotICAgIGlmIChj
bS5vcHRpb25zLmxpbmVOdW1iZXJzKQotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2Vz
Lmxlbmd0aDsgKytpKQotICAgICAgICBpZiAoY2hhbmdlc1tpXS5kaWZmICYmIGNoYW5nZXNbaV0u
ZnJvbSA8IHBvc2l0aW9uc0NoYW5nZWRGcm9tKSB7IHBvc2l0aW9uc0NoYW5nZWRGcm9tID0gY2hh
bmdlc1tpXS5mcm9tOyB9CisgICAgICByZXNldFZpZXcoY20pOworICAgIHZhciBkaW1zID0gZ2V0
RGltZW5zaW9ucyhjbSk7CiAKKyAgICAvLyBDb21wdXRlIGEgc3VpdGFibGUgbmV3IHZpZXdwb3J0
IChmcm9tICYgdG8pCiAgICAgdmFyIGVuZCA9IGRvYy5maXJzdCArIGRvYy5zaXplOwogICAgIHZh
ciBmcm9tID0gTWF0aC5tYXgodmlzaWJsZS5mcm9tIC0gY20ub3B0aW9ucy52aWV3cG9ydE1hcmdp
biwgZG9jLmZpcnN0KTsKICAgICB2YXIgdG8gPSBNYXRoLm1pbihlbmQsIHZpc2libGUudG8gKyBj
bS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTsKLSAgICBpZiAoZGlzcGxheS5zaG93aW5nRnJvbSA8
IGZyb20gJiYgZnJvbSAtIGRpc3BsYXkuc2hvd2luZ0Zyb20gPCAyMCkgZnJvbSA9IE1hdGgubWF4
KGRvYy5maXJzdCwgZGlzcGxheS5zaG93aW5nRnJvbSk7Ci0gICAgaWYgKGRpc3BsYXkuc2hvd2lu
Z1RvID4gdG8gJiYgZGlzcGxheS5zaG93aW5nVG8gLSB0byA8IDIwKSB0byA9IE1hdGgubWluKGVu
ZCwgZGlzcGxheS5zaG93aW5nVG8pOworICAgIGlmIChkaXNwbGF5LnZpZXdGcm9tIDwgZnJvbSAm
JiBmcm9tIC0gZGlzcGxheS52aWV3RnJvbSA8IDIwKSBmcm9tID0gTWF0aC5tYXgoZG9jLmZpcnN0
LCBkaXNwbGF5LnZpZXdGcm9tKTsKKyAgICBpZiAoZGlzcGxheS52aWV3VG8gPiB0byAmJiBkaXNw
bGF5LnZpZXdUbyAtIHRvIDwgMjApIHRvID0gTWF0aC5taW4oZW5kLCBkaXNwbGF5LnZpZXdUbyk7
CiAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zKSB7Ci0gICAgICBmcm9tID0gbGluZU5vKHZpc3Vh
bExpbmUoZG9jLCBnZXRMaW5lKGRvYywgZnJvbSkpKTsKLSAgICAgIHdoaWxlICh0byA8IGVuZCAm
JiBsaW5lSXNIaWRkZW4oZG9jLCBnZXRMaW5lKGRvYywgdG8pKSkgKyt0bzsKLSAgICB9Ci0KLSAg
ICAvLyBDcmVhdGUgYSByYW5nZSBvZiB0aGVvcmV0aWNhbGx5IGludGFjdCBsaW5lcywgYW5kIHB1
bmNoIGhvbGVzCi0gICAgLy8gaW4gdGhhdCB1c2luZyB0aGUgY2hhbmdlIGluZm8uCi0gICAgdmFy
IGludGFjdCA9IFt7ZnJvbTogTWF0aC5tYXgoZGlzcGxheS5zaG93aW5nRnJvbSwgZG9jLmZpcnN0
KSwKLSAgICAgICAgICAgICAgICAgICB0bzogTWF0aC5taW4oZGlzcGxheS5zaG93aW5nVG8sIGVu
ZCl9XTsKLSAgICBpZiAoaW50YWN0WzBdLmZyb20gPj0gaW50YWN0WzBdLnRvKSBpbnRhY3QgPSBb
XTsKLSAgICBlbHNlIGludGFjdCA9IGNvbXB1dGVJbnRhY3QoaW50YWN0LCBjaGFuZ2VzKTsKLSAg
ICAvLyBXaGVuIG1lcmdlZCBsaW5lcyBhcmUgcHJlc2VudCwgd2UgbWlnaHQgaGF2ZSB0byByZWR1
Y2UgdGhlCi0gICAgLy8gaW50YWN0IHJhbmdlcyBiZWNhdXNlIGNoYW5nZXMgaW4gY29udGludWVk
IGZyYWdtZW50cyBvZiB0aGUKLSAgICAvLyBpbnRhY3QgbGluZXMgZG8gcmVxdWlyZSB0aGUgbGlu
ZXMgdG8gYmUgcmVkcmF3bi4KLSAgICBpZiAoc2F3Q29sbGFwc2VkU3BhbnMpCi0gICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGludGFjdC5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgcmFuZ2Ug
PSBpbnRhY3RbaV0sIG1lcmdlZDsKLSAgICAgICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNw
YW5BdEVuZChnZXRMaW5lKGRvYywgcmFuZ2UudG8gLSAxKSkpIHsKLSAgICAgICAgICB2YXIgbmV3
VG8gPSBtZXJnZWQuZmluZCgpLmZyb20ubGluZTsKLSAgICAgICAgICBpZiAobmV3VG8gPiByYW5n
ZS5mcm9tKSByYW5nZS50byA9IG5ld1RvOwotICAgICAgICAgIGVsc2UgeyBpbnRhY3Quc3BsaWNl
KGktLSwgMSk7IGJyZWFrOyB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIC8vIENsaXAgb2Zm
IHRoZSBwYXJ0cyB0aGF0IHdvbid0IGJlIHZpc2libGUKLSAgICB2YXIgaW50YWN0TGluZXMgPSAw
OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50YWN0Lmxlbmd0aDsgKytpKSB7Ci0gICAgICB2
YXIgcmFuZ2UgPSBpbnRhY3RbaV07Ci0gICAgICBpZiAocmFuZ2UuZnJvbSA8IGZyb20pIHJhbmdl
LmZyb20gPSBmcm9tOwotICAgICAgaWYgKHJhbmdlLnRvID4gdG8pIHJhbmdlLnRvID0gdG87Ci0g
ICAgICBpZiAocmFuZ2UuZnJvbSA+PSByYW5nZS50bykgaW50YWN0LnNwbGljZShpLS0sIDEpOwot
ICAgICAgZWxzZSBpbnRhY3RMaW5lcyArPSByYW5nZS50byAtIHJhbmdlLmZyb207Ci0gICAgfQot
ICAgIGlmICghZm9yY2VkICYmIGludGFjdExpbmVzID09IHRvIC0gZnJvbSAmJiBmcm9tID09IGRp
c3BsYXkuc2hvd2luZ0Zyb20gJiYgdG8gPT0gZGlzcGxheS5zaG93aW5nVG8pIHsKLSAgICAgIHVw
ZGF0ZVZpZXdPZmZzZXQoY20pOwotICAgICAgcmV0dXJuOworICAgICAgZnJvbSA9IHZpc3VhbExp
bmVObyhjbS5kb2MsIGZyb20pOworICAgICAgdG8gPSB2aXN1YWxMaW5lRW5kTm8oY20uZG9jLCB0
byk7CiAgICAgfQotICAgIGludGFjdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtyZXR1cm4gYS5mcm9t
IC0gYi5mcm9tO30pOwogCi0gICAgLy8gQXZvaWQgY3Jhc2hpbmcgb24gSUUncyAidW5zcGVjaWZp
ZWQgZXJyb3IiIHdoZW4gaW4gaWZyYW1lcwotICAgIHRyeSB7Ci0gICAgICB2YXIgZm9jdXNlZCA9
IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Ci0gICAgfSBjYXRjaChlKSB7fQotICAgIGlmIChpbnRh
Y3RMaW5lcyA8ICh0byAtIGZyb20pICogLjcpIGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5
ID0gIm5vbmUiOwotICAgIHBhdGNoRGlzcGxheShjbSwgZnJvbSwgdG8sIGludGFjdCwgcG9zaXRp
b25zQ2hhbmdlZEZyb20pOwotICAgIGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gIiI7
Ci0gICAgaWYgKGZvY3VzZWQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPSBmb2N1c2VkICYm
IGZvY3VzZWQub2Zmc2V0SGVpZ2h0KSBmb2N1c2VkLmZvY3VzKCk7Ci0KLSAgICB2YXIgZGlmZmVy
ZW50ID0gZnJvbSAhPSBkaXNwbGF5LnNob3dpbmdGcm9tIHx8IHRvICE9IGRpc3BsYXkuc2hvd2lu
Z1RvIHx8CisgICAgdmFyIGRpZmZlcmVudCA9IGZyb20gIT0gZGlzcGxheS52aWV3RnJvbSB8fCB0
byAhPSBkaXNwbGF5LnZpZXdUbyB8fAogICAgICAgZGlzcGxheS5sYXN0U2l6ZUMgIT0gZGlzcGxh
eS53cmFwcGVyLmNsaWVudEhlaWdodDsKLSAgICAvLyBUaGlzIGlzIGp1c3QgYSBib2d1cyBmb3Jt
dWxhIHRoYXQgZGV0ZWN0cyB3aGVuIHRoZSBlZGl0b3IgaXMKLSAgICAvLyByZXNpemVkIG9yIHRo
ZSBmb250IHNpemUgY2hhbmdlcy4KKyAgICBhZGp1c3RWaWV3KGNtLCBmcm9tLCB0byk7CisKKyAg
ICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoZ2V0TGluZShjbS5kb2MsIGRpc3Bs
YXkudmlld0Zyb20pKTsKKyAgICAvLyBQb3NpdGlvbiB0aGUgbW92ZXIgZGl2IHRvIGFsaWduIHdp
dGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uCisgICAgY20uZGlzcGxheS5tb3Zlci5zdHls
ZS50b3AgPSBkaXNwbGF5LnZpZXdPZmZzZXQgKyAicHgiOworCisgICAgdmFyIHRvVXBkYXRlID0g
Y291bnREaXJ0eVZpZXcoY20pOworICAgIGlmICghZGlmZmVyZW50ICYmIHRvVXBkYXRlID09IDAg
JiYgIWZvcmNlZCkgcmV0dXJuOworCisgICAgLy8gRm9yIGJpZyBjaGFuZ2VzLCB3ZSBoaWRlIHRo
ZSBlbmNsb3NpbmcgZWxlbWVudCBkdXJpbmcgdGhlCisgICAgLy8gdXBkYXRlLCBzaW5jZSB0aGF0
IHNwZWVkcyB1cCB0aGUgb3BlcmF0aW9ucyBvbiBtb3N0IGJyb3dzZXJzLgorICAgIHZhciBmb2N1
c2VkID0gYWN0aXZlRWx0KCk7CisgICAgaWYgKHRvVXBkYXRlID4gNCkgZGlzcGxheS5saW5lRGl2
LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgcGF0Y2hEaXNwbGF5KGNtLCBkaXNwbGF5LnVw
ZGF0ZUxpbmVOdW1iZXJzLCBkaW1zKTsKKyAgICBpZiAodG9VcGRhdGUgPiA0KSBkaXNwbGF5Lmxp
bmVEaXYuc3R5bGUuZGlzcGxheSA9ICIiOworICAgIC8vIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBh
IHdpZGdldCB3aXRoIGEgZm9jdXNlZCBlbGVtZW50IHRoYXQgZ290CisgICAgLy8gaGlkZGVuIG9y
IHVwZGF0ZWQsIGlmIHNvIHJlLWZvY3VzIGl0LgorICAgIGlmIChmb2N1c2VkICYmIGFjdGl2ZUVs
dCgpICE9IGZvY3VzZWQgJiYgZm9jdXNlZC5vZmZzZXRIZWlnaHQpIGZvY3VzZWQuZm9jdXMoKTsK
KworICAgIC8vIFByZXZlbnQgc2VsZWN0aW9uIGFuZCBjdXJzb3JzIGZyb20gaW50ZXJmZXJpbmcg
d2l0aCB0aGUgc2Nyb2xsCisgICAgLy8gd2lkdGguCisgICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxh
eS5jdXJzb3JEaXYpOworICAgIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkuc2VsZWN0aW9uRGl2KTsK
KwogICAgIGlmIChkaWZmZXJlbnQpIHsKICAgICAgIGRpc3BsYXkubGFzdFNpemVDID0gZGlzcGxh
eS53cmFwcGVyLmNsaWVudEhlaWdodDsKICAgICAgIHN0YXJ0V29ya2VyKGNtLCA0MDApOwogICAg
IH0KLSAgICBkaXNwbGF5LnNob3dpbmdGcm9tID0gZnJvbTsgZGlzcGxheS5zaG93aW5nVG8gPSB0
bzsKIAogICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKTsKLSAgICB1cGRhdGVWaWV3T2Zm
c2V0KGNtKTsKIAogICAgIHJldHVybiB0cnVlOwogICB9CiAKKyAgZnVuY3Rpb24gYWRqdXN0Q29u
dGVudFdpZHRoKGNtKSB7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OworICAgIHZhciB3
aWR0aCA9IG1lYXN1cmVDaGFyKGNtLCBkaXNwbGF5Lm1heExpbmUsIGRpc3BsYXkubWF4TGluZS50
ZXh0Lmxlbmd0aCkubGVmdDsKKyAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gZmFsc2U7Cisg
ICAgdmFyIG1pbldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggKyAzKTsKKyAgICB2YXIgbWF4U2Ny
b2xsTGVmdCA9IE1hdGgubWF4KDAsIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCArIG1pbldpZHRo
ICsgc2Nyb2xsZXJDdXRPZmYgLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKTsKKyAgICBk
aXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gbWluV2lkdGggKyAicHgiOworICAgIGlmICht
YXhTY3JvbGxMZWZ0IDwgY20uZG9jLnNjcm9sbExlZnQpCisgICAgICBzZXRTY3JvbGxMZWZ0KGNt
LCBNYXRoLm1pbihkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsIG1heFNjcm9sbExlZnQpLCB0
cnVlKTsKKyAgfQorCisgIGZ1bmN0aW9uIHNldERvY3VtZW50SGVpZ2h0KGNtLCBtZWFzdXJlKSB7
CisgICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5taW5IZWlnaHQgPSBjbS5kaXNwbGF5LmhlaWdo
dEZvcmNlci5zdHlsZS50b3AgPSBtZWFzdXJlLmRvY0hlaWdodCArICJweCI7CisgICAgY20uZGlz
cGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IE1hdGgubWF4KG1lYXN1cmUuZG9jSGVpZ2h0LCBt
ZWFzdXJlLmNsaWVudEhlaWdodCAtIHNjcm9sbGVyQ3V0T2ZmKSArICJweCI7CisgIH0KKworCisg
IGZ1bmN0aW9uIGNoZWNrRm9yV2Via2l0V2lkdGhCdWcoY20sIG1lYXN1cmUpIHsKKyAgICAvLyBX
b3JrIGFyb3VuZCBXZWJraXQgYnVnIHdoZXJlIGl0IHNvbWV0aW1lcyByZXNlcnZlcyBzcGFjZSBm
b3IgYQorICAgIC8vIG5vbi1leGlzdGluZyBwaGFudG9tIHNjcm9sbGJhciBpbiB0aGUgc2Nyb2xs
ZXIgKElzc3VlICMyNDIwKQorICAgIGlmIChjbS5kaXNwbGF5LnNpemVyLm9mZnNldFdpZHRoICsg
Y20uZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoIDwgY20uZGlzcGxheS5zY3JvbGxlci5jbGll
bnRXaWR0aCAtIDEpIHsKKyAgICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0g
Y20uZGlzcGxheS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gIjBweCI7CisgICAgICBjbS5kaXNw
bGF5Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gbWVhc3VyZS5kb2NIZWlnaHQgKyAicHgiOworICAg
IH0KKyAgfQorCisgIC8vIFJlYWQgdGhlIGFjdHVhbCBoZWlnaHRzIG9mIHRoZSByZW5kZXJlZCBs
aW5lcywgYW5kIHVwZGF0ZSB0aGVpcgorICAvLyBzdG9yZWQgaGVpZ2h0cyB0byBtYXRjaC4KICAg
ZnVuY3Rpb24gdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pIHsKICAgICB2YXIgZGlzcGxheSA9
IGNtLmRpc3BsYXk7CiAgICAgdmFyIHByZXZCb3R0b20gPSBkaXNwbGF5LmxpbmVEaXYub2Zmc2V0
VG9wOwotICAgIGZvciAodmFyIG5vZGUgPSBkaXNwbGF5LmxpbmVEaXYuZmlyc3RDaGlsZCwgaGVp
Z2h0OyBub2RlOyBub2RlID0gbm9kZS5uZXh0U2libGluZykgaWYgKG5vZGUubGluZU9iaikgewot
ICAgICAgaWYgKGllX2x0OCkgewotICAgICAgICB2YXIgYm90ID0gbm9kZS5vZmZzZXRUb3AgKyBu
b2RlLm9mZnNldEhlaWdodDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BsYXkudmlldy5s
ZW5ndGg7IGkrKykgeworICAgICAgdmFyIGN1ciA9IGRpc3BsYXkudmlld1tpXSwgaGVpZ2h0Owor
ICAgICAgaWYgKGN1ci5oaWRkZW4pIGNvbnRpbnVlOworICAgICAgaWYgKGllX3VwdG83KSB7Cisg
ICAgICAgIHZhciBib3QgPSBjdXIubm9kZS5vZmZzZXRUb3AgKyBjdXIubm9kZS5vZmZzZXRIZWln
aHQ7CiAgICAgICAgIGhlaWdodCA9IGJvdCAtIHByZXZCb3R0b207CiAgICAgICAgIHByZXZCb3R0
b20gPSBib3Q7CiAgICAgICB9IGVsc2UgewotICAgICAgICB2YXIgYm94ID0gZ2V0UmVjdChub2Rl
KTsKKyAgICAgICAgdmFyIGJveCA9IGN1ci5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwog
ICAgICAgICBoZWlnaHQgPSBib3guYm90dG9tIC0gYm94LnRvcDsKICAgICAgIH0KLSAgICAgIHZh
ciBkaWZmID0gbm9kZS5saW5lT2JqLmhlaWdodCAtIGhlaWdodDsKKyAgICAgIHZhciBkaWZmID0g
Y3VyLmxpbmUuaGVpZ2h0IC0gaGVpZ2h0OwogICAgICAgaWYgKGhlaWdodCA8IDIpIGhlaWdodCA9
IHRleHRIZWlnaHQoZGlzcGxheSk7CiAgICAgICBpZiAoZGlmZiA+IC4wMDEgfHwgZGlmZiA8IC0u
MDAxKSB7Ci0gICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobm9kZS5saW5lT2JqLCBoZWlnaHQpOwot
ICAgICAgICB2YXIgd2lkZ2V0cyA9IG5vZGUubGluZU9iai53aWRnZXRzOwotICAgICAgICBpZiAo
d2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkgPCB3aWRnZXRzLmxlbmd0aDsgKytpKQotICAgICAg
ICAgIHdpZGdldHNbaV0uaGVpZ2h0ID0gd2lkZ2V0c1tpXS5ub2RlLm9mZnNldEhlaWdodDsKKyAg
ICAgICAgdXBkYXRlTGluZUhlaWdodChjdXIubGluZSwgaGVpZ2h0KTsKKyAgICAgICAgdXBkYXRl
V2lkZ2V0SGVpZ2h0KGN1ci5saW5lKTsKKyAgICAgICAgaWYgKGN1ci5yZXN0KSBmb3IgKHZhciBq
ID0gMDsgaiA8IGN1ci5yZXN0Lmxlbmd0aDsgaisrKQorICAgICAgICAgIHVwZGF0ZVdpZGdldEhl
aWdodChjdXIucmVzdFtqXSk7CiAgICAgICB9CiAgICAgfQogICB9CiAKLSAgZnVuY3Rpb24gdXBk
YXRlVmlld09mZnNldChjbSkgewotICAgIHZhciBvZmYgPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQg
PSBoZWlnaHRBdExpbmUoY20sIGdldExpbmUoY20uZG9jLCBjbS5kaXNwbGF5LnNob3dpbmdGcm9t
KSk7Ci0gICAgLy8gUG9zaXRpb24gdGhlIG1vdmVyIGRpdiB0byBhbGlnbiB3aXRoIHRoZSBjdXJy
ZW50IHZpcnR1YWwgc2Nyb2xsIHBvc2l0aW9uCi0gICAgY20uZGlzcGxheS5tb3Zlci5zdHlsZS50
b3AgPSBvZmYgKyAicHgiOwotICB9Ci0KLSAgZnVuY3Rpb24gY29tcHV0ZUludGFjdChpbnRhY3Qs
IGNoYW5nZXMpIHsKLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoYW5nZXMubGVuZ3RoIHx8IDA7
IGkgPCBsOyArK2kpIHsKLSAgICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ldLCBpbnRhY3QyID0g
W10sIGRpZmYgPSBjaGFuZ2UuZGlmZiB8fCAwOwotICAgICAgZm9yICh2YXIgaiA9IDAsIGwyID0g
aW50YWN0Lmxlbmd0aDsgaiA8IGwyOyArK2opIHsKLSAgICAgICAgdmFyIHJhbmdlID0gaW50YWN0
W2pdOwotICAgICAgICBpZiAoY2hhbmdlLnRvIDw9IHJhbmdlLmZyb20gJiYgY2hhbmdlLmRpZmYp
IHsKLSAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206IHJhbmdlLmZyb20gKyBkaWZmLCB0bzog
cmFuZ2UudG8gKyBkaWZmfSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLnRvIDw9IHJhbmdl
LmZyb20gfHwgY2hhbmdlLmZyb20gPj0gcmFuZ2UudG8pIHsKLSAgICAgICAgICBpbnRhY3QyLnB1
c2gocmFuZ2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChjaGFuZ2UuZnJvbSA+
IHJhbmdlLmZyb20pCi0gICAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206IHJhbmdlLmZyb20s
IHRvOiBjaGFuZ2UuZnJvbX0pOwotICAgICAgICAgIGlmIChjaGFuZ2UudG8gPCByYW5nZS50bykK
LSAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogY2hhbmdlLnRvICsgZGlmZiwgdG86IHJh
bmdlLnRvICsgZGlmZn0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpbnRhY3QgPSBpbnRh
Y3QyOwotICAgIH0KLSAgICByZXR1cm4gaW50YWN0OworICAvLyBSZWFkIGFuZCBzdG9yZSB0aGUg
aGVpZ2h0IG9mIGxpbmUgd2lkZ2V0cyBhc3NvY2lhdGVkIHdpdGggdGhlCisgIC8vIGdpdmVuIGxp
bmUuCisgIGZ1bmN0aW9uIHVwZGF0ZVdpZGdldEhlaWdodChsaW5lKSB7CisgICAgaWYgKGxpbmUu
d2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpCisg
ICAgICBsaW5lLndpZGdldHNbaV0uaGVpZ2h0ID0gbGluZS53aWRnZXRzW2ldLm5vZGUub2Zmc2V0
SGVpZ2h0OwogICB9CiAKKyAgLy8gRG8gYSBidWxrLXJlYWQgb2YgdGhlIERPTSBwb3NpdGlvbnMg
YW5kIHNpemVzIG5lZWRlZCB0byBkcmF3IHRoZQorICAvLyB2aWV3LCBzbyB0aGF0IHdlIGRvbid0
IGludGVybGVhdmUgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUgRE9NLgogICBmdW5jdGlvbiBn
ZXREaW1lbnNpb25zKGNtKSB7CiAgICAgdmFyIGQgPSBjbS5kaXNwbGF5LCBsZWZ0ID0ge30sIHdp
ZHRoID0ge307CiAgICAgZm9yICh2YXIgbiA9IGQuZ3V0dGVycy5maXJzdENoaWxkLCBpID0gMDsg
bjsgbiA9IG4ubmV4dFNpYmxpbmcsICsraSkgewpAQCAtNjA0LDE1NCArNzE1LDIwNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIHdyYXBwZXJXaWR0aDog
ZC53cmFwcGVyLmNsaWVudFdpZHRofTsKICAgfQogCi0gIGZ1bmN0aW9uIHBhdGNoRGlzcGxheShj
bSwgZnJvbSwgdG8sIGludGFjdCwgdXBkYXRlTnVtYmVyc0Zyb20pIHsKLSAgICB2YXIgZGltcyA9
IGdldERpbWVuc2lvbnMoY20pOworICAvLyBTeW5jIHRoZSBhY3R1YWwgZGlzcGxheSBET00gc3Ry
dWN0dXJlIHdpdGggZGlzcGxheS52aWV3LCByZW1vdmluZworICAvLyBub2RlcyBmb3IgbGluZXMg
dGhhdCBhcmUgbm8gbG9uZ2VyIGluIHZpZXcsIGFuZCBjcmVhdGluZyB0aGUgb25lcworICAvLyB0
aGF0IGFyZSBub3QgdGhlcmUgeWV0LCBhbmQgdXBkYXRpbmcgdGhlIG9uZXMgdGhhdCBhcmUgb3V0
IG9mCisgIC8vIGRhdGUuCisgIGZ1bmN0aW9uIHBhdGNoRGlzcGxheShjbSwgdXBkYXRlTnVtYmVy
c0Zyb20sIGRpbXMpIHsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGxpbmVOdW1iZXJz
ID0gY20ub3B0aW9ucy5saW5lTnVtYmVyczsKLSAgICBpZiAoIWludGFjdC5sZW5ndGggJiYgKCF3
ZWJraXQgfHwgIWNtLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0KSkKLSAgICAgIHJlbW92ZUNo
aWxkcmVuKGRpc3BsYXkubGluZURpdik7CiAgICAgdmFyIGNvbnRhaW5lciA9IGRpc3BsYXkubGlu
ZURpdiwgY3VyID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7CiAKICAgICBmdW5jdGlvbiBybShub2Rl
KSB7CiAgICAgICB2YXIgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICBpZiAod2Via2l0
ICYmIG1hYyAmJiBjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCA9PSBub2RlKSB7CisgICAg
ICAvLyBXb3JrcyBhcm91bmQgYSB0aHJvdy1zY3JvbGwgYnVnIGluIE9TIFggV2Via2l0CisgICAg
ICBpZiAod2Via2l0ICYmIG1hYyAmJiBjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCA9PSBu
b2RlKQogICAgICAgICBub2RlLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICAgIG5vZGUu
bGluZU9iaiA9IG51bGw7Ci0gICAgICB9IGVsc2UgeworICAgICAgZWxzZQogICAgICAgICBub2Rl
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7Ci0gICAgICB9CiAgICAgICByZXR1cm4gbmV4
dDsKICAgICB9CiAKLSAgICB2YXIgbmV4dEludGFjdCA9IGludGFjdC5zaGlmdCgpLCBsaW5lTiA9
IGZyb207Ci0gICAgY20uZG9jLml0ZXIoZnJvbSwgdG8sIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAg
IGlmIChuZXh0SW50YWN0ICYmIG5leHRJbnRhY3QudG8gPT0gbGluZU4pIG5leHRJbnRhY3QgPSBp
bnRhY3Quc2hpZnQoKTsKLSAgICAgIGlmIChsaW5lSXNIaWRkZW4oY20uZG9jLCBsaW5lKSkgewot
ICAgICAgICBpZiAobGluZS5oZWlnaHQgIT0gMCkgdXBkYXRlTGluZUhlaWdodChsaW5lLCAwKTsK
LSAgICAgICAgaWYgKGxpbmUud2lkZ2V0cyAmJiBjdXIgJiYgY3VyLnByZXZpb3VzU2libGluZykg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICB2YXIgdyA9IGxpbmUud2lkZ2V0c1tpXTsKLSAgICAgICAgICBpZiAody5zaG93SWZIaWRkZW4p
IHsKLSAgICAgICAgICAgIHZhciBwcmV2ID0gY3VyLnByZXZpb3VzU2libGluZzsKLSAgICAgICAg
ICAgIGlmICgvcHJlL2kudGVzdChwcmV2Lm5vZGVOYW1lKSkgewotICAgICAgICAgICAgICB2YXIg
d3JhcCA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwotICAg
ICAgICAgICAgICBwcmV2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHdyYXAsIHByZXYpOwotICAg
ICAgICAgICAgICB3cmFwLmFwcGVuZENoaWxkKHByZXYpOwotICAgICAgICAgICAgICBwcmV2ID0g
d3JhcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciB3bm9kZSA9IHByZXYuYXBwZW5k
Q2hpbGQoZWx0KCJkaXYiLCBbdy5ub2RlXSwgIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTsKLSAg
ICAgICAgICAgIGlmICghdy5oYW5kbGVNb3VzZUV2ZW50cykgd25vZGUuaWdub3JlRXZlbnRzID0g
dHJ1ZTsKLSAgICAgICAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3LCB3bm9kZSwgcHJldiwgZGlt
cyk7Ci0gICAgICAgICAgfQorICAgIHZhciB2aWV3ID0gZGlzcGxheS52aWV3LCBsaW5lTiA9IGRp
c3BsYXkudmlld0Zyb207CisgICAgLy8gTG9vcCBvdmVyIHRoZSBlbGVtZW50cyBpbiB0aGUgdmll
dywgc3luY2luZyBjdXIgKHRoZSBET00gbm9kZXMKKyAgICAvLyBpbiBkaXNwbGF5LmxpbmVEaXYp
IHdpdGggdGhlIHZpZXcgYXMgd2UgZ28uCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxl
bmd0aDsgaSsrKSB7CisgICAgICB2YXIgbGluZVZpZXcgPSB2aWV3W2ldOworICAgICAgaWYgKGxp
bmVWaWV3LmhpZGRlbikgeworICAgICAgfSBlbHNlIGlmICghbGluZVZpZXcubm9kZSkgeyAvLyBO
b3QgZHJhd24geWV0CisgICAgICAgIHZhciBub2RlID0gYnVpbGRMaW5lRWxlbWVudChjbSwgbGlu
ZVZpZXcsIGxpbmVOLCBkaW1zKTsKKyAgICAgICAgY29udGFpbmVyLmluc2VydEJlZm9yZShub2Rl
LCBjdXIpOworICAgICAgfSBlbHNlIHsgLy8gQWxyZWFkeSBkcmF3bgorICAgICAgICB3aGlsZSAo
Y3VyICE9IGxpbmVWaWV3Lm5vZGUpIGN1ciA9IHJtKGN1cik7CisgICAgICAgIHZhciB1cGRhdGVO
dW1iZXIgPSBsaW5lTnVtYmVycyAmJiB1cGRhdGVOdW1iZXJzRnJvbSAhPSBudWxsICYmCisgICAg
ICAgICAgdXBkYXRlTnVtYmVyc0Zyb20gPD0gbGluZU4gJiYgbGluZVZpZXcubGluZU51bWJlcjsK
KyAgICAgICAgaWYgKGxpbmVWaWV3LmNoYW5nZXMpIHsKKyAgICAgICAgICBpZiAoaW5kZXhPZihs
aW5lVmlldy5jaGFuZ2VzLCAiZ3V0dGVyIikgPiAtMSkgdXBkYXRlTnVtYmVyID0gZmFsc2U7Cisg
ICAgICAgICAgdXBkYXRlTGluZUZvckNoYW5nZXMoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7
CiAgICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAobmV4dEludGFjdCAmJiBuZXh0SW50YWN0LmZy
b20gPD0gbGluZU4gJiYgbmV4dEludGFjdC50byA+IGxpbmVOKSB7Ci0gICAgICAgIC8vIFRoaXMg
bGluZSBpcyBpbnRhY3QuIFNraXAgdG8gdGhlIGFjdHVhbCBub2RlLiBVcGRhdGUgaXRzCi0gICAg
ICAgIC8vIGxpbmUgbnVtYmVyIGlmIG5lZWRlZC4KLSAgICAgICAgd2hpbGUgKGN1ci5saW5lT2Jq
ICE9IGxpbmUpIGN1ciA9IHJtKGN1cik7Ci0gICAgICAgIGlmIChsaW5lTnVtYmVycyAmJiB1cGRh
dGVOdW1iZXJzRnJvbSA8PSBsaW5lTiAmJiBjdXIubGluZU51bWJlcikKLSAgICAgICAgICBzZXRU
ZXh0Q29udGVudChjdXIubGluZU51bWJlciwgbGluZU51bWJlckZvcihjbS5vcHRpb25zLCBsaW5l
TikpOwotICAgICAgICBjdXIgPSBjdXIubmV4dFNpYmxpbmc7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICAvLyBGb3IgbGluZXMgd2l0aCB3aWRnZXRzLCBtYWtlIGFuIGF0dGVtcHQgdG8gZmluZCBh
bmQgcmV1c2UKLSAgICAgICAgLy8gdGhlIGV4aXN0aW5nIGVsZW1lbnQsIHNvIHRoYXQgd2lkZ2V0
cyBhcmVuJ3QgbmVlZGxlc3NseQotICAgICAgICAvLyByZW1vdmVkIGFuZCByZS1pbnNlcnRlZCBp
bnRvIHRoZSBkb20KLSAgICAgICAgaWYgKGxpbmUud2lkZ2V0cykgZm9yICh2YXIgaiA9IDAsIHNl
YXJjaCA9IGN1ciwgcmV1c2U7IHNlYXJjaCAmJiBqIDwgMjA7ICsraiwgc2VhcmNoID0gc2VhcmNo
Lm5leHRTaWJsaW5nKQotICAgICAgICAgIGlmIChzZWFyY2gubGluZU9iaiA9PSBsaW5lICYmIC9k
aXYvaS50ZXN0KHNlYXJjaC5ub2RlTmFtZSkpIHsgcmV1c2UgPSBzZWFyY2g7IGJyZWFrOyB9Ci0g
ICAgICAgIC8vIFRoaXMgbGluZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuCi0gICAgICAgIHZhciBs
aW5lTm9kZSA9IGJ1aWxkTGluZUVsZW1lbnQoY20sIGxpbmUsIGxpbmVOLCBkaW1zLCByZXVzZSk7
Ci0gICAgICAgIGlmIChsaW5lTm9kZSAhPSByZXVzZSkgewotICAgICAgICAgIGNvbnRhaW5lci5p
bnNlcnRCZWZvcmUobGluZU5vZGUsIGN1cik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
d2hpbGUgKGN1ciAhPSByZXVzZSkgY3VyID0gcm0oY3VyKTsKLSAgICAgICAgICBjdXIgPSBjdXIu
bmV4dFNpYmxpbmc7CisgICAgICAgIGlmICh1cGRhdGVOdW1iZXIpIHsKKyAgICAgICAgICByZW1v
dmVDaGlsZHJlbihsaW5lVmlldy5saW5lTnVtYmVyKTsKKyAgICAgICAgICBsaW5lVmlldy5saW5l
TnVtYmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmVOdW1iZXJGb3Io
Y20ub3B0aW9ucywgbGluZU4pKSk7CiAgICAgICAgIH0KLQotICAgICAgICBsaW5lTm9kZS5saW5l
T2JqID0gbGluZTsKKyAgICAgICAgY3VyID0gbGluZVZpZXcubm9kZS5uZXh0U2libGluZzsKICAg
ICAgIH0KLSAgICAgICsrbGluZU47Ci0gICAgfSk7CisgICAgICBsaW5lTiArPSBsaW5lVmlldy5z
aXplOworICAgIH0KICAgICB3aGlsZSAoY3VyKSBjdXIgPSBybShjdXIpOwogICB9CiAKLSAgZnVu
Y3Rpb24gYnVpbGRMaW5lRWxlbWVudChjbSwgbGluZSwgbGluZU5vLCBkaW1zLCByZXVzZSkgewot
ICAgIHZhciBidWlsdCA9IGJ1aWxkTGluZUNvbnRlbnQoY20sIGxpbmUpLCBsaW5lRWxlbWVudCA9
IGJ1aWx0LnByZTsKLSAgICB2YXIgbWFya2VycyA9IGxpbmUuZ3V0dGVyTWFya2VycywgZGlzcGxh
eSA9IGNtLmRpc3BsYXksIHdyYXA7Ci0KLSAgICB2YXIgYmdDbGFzcyA9IGJ1aWx0LmJnQ2xhc3Mg
PyBidWlsdC5iZ0NsYXNzICsgIiAiICsgKGxpbmUuYmdDbGFzcyB8fCAiIikgOiBsaW5lLmJnQ2xh
c3M7Ci0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmICFtYXJrZXJzICYmICFiZ0Ns
YXNzICYmICFsaW5lLndyYXBDbGFzcyAmJiAhbGluZS53aWRnZXRzKQotICAgICAgcmV0dXJuIGxp
bmVFbGVtZW50OworICAvLyBXaGVuIGFuIGFzcGVjdCBvZiBhIGxpbmUgY2hhbmdlcywgYSBzdHJp
bmcgaXMgYWRkZWQgdG8KKyAgLy8gbGluZVZpZXcuY2hhbmdlcy4gVGhpcyB1cGRhdGVzIHRoZSBy
ZWxldmFudCBwYXJ0IG9mIHRoZSBsaW5lJ3MKKyAgLy8gRE9NIHN0cnVjdHVyZS4KKyAgZnVuY3Rp
b24gdXBkYXRlTGluZUZvckNoYW5nZXMoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykgeworICAg
IGZvciAodmFyIGogPSAwOyBqIDwgbGluZVZpZXcuY2hhbmdlcy5sZW5ndGg7IGorKykgeworICAg
ICAgdmFyIHR5cGUgPSBsaW5lVmlldy5jaGFuZ2VzW2pdOworICAgICAgaWYgKHR5cGUgPT0gInRl
eHQiKSB1cGRhdGVMaW5lVGV4dChjbSwgbGluZVZpZXcpOworICAgICAgZWxzZSBpZiAodHlwZSA9
PSAiZ3V0dGVyIikgdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTsK
KyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImNsYXNzIikgdXBkYXRlTGluZUNsYXNzZXMobGluZVZp
ZXcpOworICAgICAgZWxzZSBpZiAodHlwZSA9PSAid2lkZ2V0IikgdXBkYXRlTGluZVdpZGdldHMo
bGluZVZpZXcsIGRpbXMpOworICAgIH0KKyAgICBsaW5lVmlldy5jaGFuZ2VzID0gbnVsbDsKKyAg
fQogCi0gICAgLy8gTGluZXMgd2l0aCBndXR0ZXIgZWxlbWVudHMsIHdpZGdldHMgb3IgYSBiYWNr
Z3JvdW5kIGNsYXNzIG5lZWQKLSAgICAvLyB0byBiZSB3cmFwcGVkIGFnYWluLCBhbmQgaGF2ZSB0
aGUgZXh0cmEgZWxlbWVudHMgYWRkZWQgdG8gdGhlCi0gICAgLy8gd3JhcHBlciBkaXYKKyAgLy8g
TGluZXMgd2l0aCBndXR0ZXIgZWxlbWVudHMsIHdpZGdldHMgb3IgYSBiYWNrZ3JvdW5kIGNsYXNz
IG5lZWQgdG8KKyAgLy8gYmUgd3JhcHBlZCwgYW5kIGhhdmUgdGhlIGV4dHJhIGVsZW1lbnRzIGFk
ZGVkIHRvIHRoZSB3cmFwcGVyIGRpdgorICBmdW5jdGlvbiBlbnN1cmVMaW5lV3JhcHBlZChsaW5l
VmlldykgeworICAgIGlmIChsaW5lVmlldy5ub2RlID09IGxpbmVWaWV3LnRleHQpIHsKKyAgICAg
IGxpbmVWaWV3Lm5vZGUgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogcmVsYXRp
dmUiKTsKKyAgICAgIGlmIChsaW5lVmlldy50ZXh0LnBhcmVudE5vZGUpCisgICAgICAgIGxpbmVW
aWV3LnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobGluZVZpZXcubm9kZSwgbGluZVZpZXcu
dGV4dCk7CisgICAgICBsaW5lVmlldy5ub2RlLmFwcGVuZENoaWxkKGxpbmVWaWV3LnRleHQpOwor
ICAgICAgaWYgKGllX3VwdG83KSBsaW5lVmlldy5ub2RlLnN0eWxlLnpJbmRleCA9IDI7CisgICAg
fQorICAgIHJldHVybiBsaW5lVmlldy5ub2RlOworICB9CiAKLSAgICBpZiAocmV1c2UpIHsKLSAg
ICAgIHJldXNlLmFsaWduYWJsZSA9IG51bGw7Ci0gICAgICB2YXIgaXNPayA9IHRydWUsIHdpZGdl
dHNTZWVuID0gMCwgaW5zZXJ0QmVmb3JlID0gbnVsbDsKLSAgICAgIGZvciAodmFyIG4gPSByZXVz
ZS5maXJzdENoaWxkLCBuZXh0OyBuOyBuID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gbi5uZXh0
U2libGluZzsKLSAgICAgICAgaWYgKCEvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChu
LmNsYXNzTmFtZSkpIHsKLSAgICAgICAgICByZXVzZS5yZW1vdmVDaGlsZChuKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHdpZGdldCA9IGxpbmUud2lkZ2V0c1tpXTsKLSAg
ICAgICAgICAgIGlmICh3aWRnZXQubm9kZSA9PSBuLmZpcnN0Q2hpbGQpIHsKLSAgICAgICAgICAg
ICAgaWYgKCF3aWRnZXQuYWJvdmUgJiYgIWluc2VydEJlZm9yZSkgaW5zZXJ0QmVmb3JlID0gbjsK
LSAgICAgICAgICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbiwgcmV1c2UsIGRpbXMp
OwotICAgICAgICAgICAgICArK3dpZGdldHNTZWVuOwotICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGkgPT0gbGluZS53aWRnZXRz
Lmxlbmd0aCkgeyBpc09rID0gZmFsc2U7IGJyZWFrOyB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIHJldXNlLmluc2VydEJlZm9yZShsaW5lRWxlbWVudCwgaW5zZXJ0QmVmb3JlKTsKLSAgICAg
IGlmIChpc09rICYmIHdpZGdldHNTZWVuID09IGxpbmUud2lkZ2V0cy5sZW5ndGgpIHsKLSAgICAg
ICAgd3JhcCA9IHJldXNlOwotICAgICAgICByZXVzZS5jbGFzc05hbWUgPSBsaW5lLndyYXBDbGFz
cyB8fCAiIjsKLSAgICAgIH0KKyAgZnVuY3Rpb24gdXBkYXRlTGluZUJhY2tncm91bmQobGluZVZp
ZXcpIHsKKyAgICB2YXIgY2xzID0gbGluZVZpZXcuYmdDbGFzcyA/IGxpbmVWaWV3LmJnQ2xhc3Mg
KyAiICIgKyAobGluZVZpZXcubGluZS5iZ0NsYXNzIHx8ICIiKSA6IGxpbmVWaWV3LmxpbmUuYmdD
bGFzczsKKyAgICBpZiAoY2xzKSBjbHMgKz0gIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIjsK
KyAgICBpZiAobGluZVZpZXcuYmFja2dyb3VuZCkgeworICAgICAgaWYgKGNscykgbGluZVZpZXcu
YmFja2dyb3VuZC5jbGFzc05hbWUgPSBjbHM7CisgICAgICBlbHNlIHsgbGluZVZpZXcuYmFja2dy
b3VuZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGxpbmVWaWV3LmJhY2tncm91bmQpOyBsaW5lVmll
dy5iYWNrZ3JvdW5kID0gbnVsbDsgfQorICAgIH0gZWxzZSBpZiAoY2xzKSB7CisgICAgICB2YXIg
d3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTsKKyAgICAgIGxpbmVWaWV3LmJhY2tn
cm91bmQgPSB3cmFwLmluc2VydEJlZm9yZShlbHQoImRpdiIsIG51bGwsIGNscyksIHdyYXAuZmly
c3RDaGlsZCk7CiAgICAgfQotICAgIGlmICghd3JhcCkgewotICAgICAgd3JhcCA9IGVsdCgiZGl2
IiwgbnVsbCwgbGluZS53cmFwQ2xhc3MsICJwb3NpdGlvbjogcmVsYXRpdmUiKTsKLSAgICAgIHdy
YXAuYXBwZW5kQ2hpbGQobGluZUVsZW1lbnQpOworICB9CisKKyAgLy8gV3JhcHBlciBhcm91bmQg
YnVpbGRMaW5lQ29udGVudCB3aGljaCB3aWxsIHJldXNlIHRoZSBzdHJ1Y3R1cmUKKyAgLy8gaW4g
ZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkIHdoZW4gcG9zc2libGUuCisgIGZ1bmN0aW9uIGdldExp
bmVDb250ZW50KGNtLCBsaW5lVmlldykgeworICAgIHZhciBleHQgPSBjbS5kaXNwbGF5LmV4dGVy
bmFsTWVhc3VyZWQ7CisgICAgaWYgKGV4dCAmJiBleHQubGluZSA9PSBsaW5lVmlldy5saW5lKSB7
CisgICAgICBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOworICAgICAgbGluZVZp
ZXcubWVhc3VyZSA9IGV4dC5tZWFzdXJlOworICAgICAgcmV0dXJuIGV4dC5idWlsdDsKICAgICB9
Ci0gICAgLy8gS2x1ZGdlIHRvIG1ha2Ugc3VyZSB0aGUgc3R5bGVkIGVsZW1lbnQgbGllcyBiZWhp
bmQgdGhlIHNlbGVjdGlvbiAoYnkgei1pbmRleCkKLSAgICBpZiAoYmdDbGFzcykKLSAgICAgIHdy
YXAuaW5zZXJ0QmVmb3JlKGVsdCgiZGl2IiwgbnVsbCwgYmdDbGFzcyArICIgQ29kZU1pcnJvci1s
aW5lYmFja2dyb3VuZCIpLCB3cmFwLmZpcnN0Q2hpbGQpOworICAgIHJldHVybiBidWlsZExpbmVD
b250ZW50KGNtLCBsaW5lVmlldyk7CisgIH0KKworICAvLyBSZWRyYXcgdGhlIGxpbmUncyB0ZXh0
LiBJbnRlcmFjdHMgd2l0aCB0aGUgYmFja2dyb3VuZCBhbmQgdGV4dAorICAvLyBjbGFzc2VzIGJl
Y2F1c2UgdGhlIG1vZGUgbWF5IG91dHB1dCB0b2tlbnMgdGhhdCBpbmZsdWVuY2UgdGhlc2UKKyAg
Ly8gY2xhc3Nlcy4KKyAgZnVuY3Rpb24gdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KSB7Cisg
ICAgdmFyIGNscyA9IGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lOworICAgIHZhciBidWlsdCA9IGdl
dExpbmVDb250ZW50KGNtLCBsaW5lVmlldyk7CisgICAgaWYgKGxpbmVWaWV3LnRleHQgPT0gbGlu
ZVZpZXcubm9kZSkgbGluZVZpZXcubm9kZSA9IGJ1aWx0LnByZTsKKyAgICBsaW5lVmlldy50ZXh0
LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGJ1aWx0LnByZSwgbGluZVZpZXcudGV4dCk7CisgICAg
bGluZVZpZXcudGV4dCA9IGJ1aWx0LnByZTsKKyAgICBpZiAoYnVpbHQuYmdDbGFzcyAhPSBsaW5l
Vmlldy5iZ0NsYXNzIHx8IGJ1aWx0LnRleHRDbGFzcyAhPSBsaW5lVmlldy50ZXh0Q2xhc3MpIHsK
KyAgICAgIGxpbmVWaWV3LmJnQ2xhc3MgPSBidWlsdC5iZ0NsYXNzOworICAgICAgbGluZVZpZXcu
dGV4dENsYXNzID0gYnVpbHQudGV4dENsYXNzOworICAgICAgdXBkYXRlTGluZUNsYXNzZXMobGlu
ZVZpZXcpOworICAgIH0gZWxzZSBpZiAoY2xzKSB7CisgICAgICBsaW5lVmlldy50ZXh0LmNsYXNz
TmFtZSA9IGNsczsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVMaW5lQ2xhc3Nlcyhs
aW5lVmlldykgeworICAgIHVwZGF0ZUxpbmVCYWNrZ3JvdW5kKGxpbmVWaWV3KTsKKyAgICBpZiAo
bGluZVZpZXcubGluZS53cmFwQ2xhc3MpCisgICAgICBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmll
dykuY2xhc3NOYW1lID0gbGluZVZpZXcubGluZS53cmFwQ2xhc3M7CisgICAgZWxzZSBpZiAobGlu
ZVZpZXcubm9kZSAhPSBsaW5lVmlldy50ZXh0KQorICAgICAgbGluZVZpZXcubm9kZS5jbGFzc05h
bWUgPSAiIjsKKyAgICB2YXIgdGV4dENsYXNzID0gbGluZVZpZXcudGV4dENsYXNzID8gbGluZVZp
ZXcudGV4dENsYXNzICsgIiAiICsgKGxpbmVWaWV3LmxpbmUudGV4dENsYXNzIHx8ICIiKSA6IGxp
bmVWaWV3LmxpbmUudGV4dENsYXNzOworICAgIGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lID0gdGV4
dENsYXNzIHx8ICIiOworICB9CisKKyAgZnVuY3Rpb24gdXBkYXRlTGluZUd1dHRlcihjbSwgbGlu
ZVZpZXcsIGxpbmVOLCBkaW1zKSB7CisgICAgaWYgKGxpbmVWaWV3Lmd1dHRlcikgeworICAgICAg
bGluZVZpZXcubm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5ndXR0ZXIpOworICAgICAgbGluZVZp
ZXcuZ3V0dGVyID0gbnVsbDsKKyAgICB9CisgICAgdmFyIG1hcmtlcnMgPSBsaW5lVmlldy5saW5l
Lmd1dHRlck1hcmtlcnM7CiAgICAgaWYgKGNtLm9wdGlvbnMubGluZU51bWJlcnMgfHwgbWFya2Vy
cykgewotICAgICAgdmFyIGd1dHRlcldyYXAgPSB3cmFwLmluc2VydEJlZm9yZShlbHQoImRpdiIs
IG51bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIgKwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIg
PyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyAicHgiKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcC5maXJzdENoaWxkKTsKLSAg
ICAgIGlmIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSAod3JhcC5hbGlnbmFibGUgfHwgKHdyYXAu
YWxpZ25hYmxlID0gW10pKS5wdXNoKGd1dHRlcldyYXApOworICAgICAgdmFyIHdyYXAgPSBlbnN1
cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7CisgICAgICB2YXIgZ3V0dGVyV3JhcCA9IGxpbmVWaWV3
Lmd1dHRlciA9CisgICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKGVsdCgiZGl2IiwgbnVsbCwgIkNv
ZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIiLCAicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiICsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8g
ZGltcy5maXhlZFBvcyA6IC1kaW1zLmd1dHRlclRvdGFsV2lkdGgpICsgInB4IiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmVWaWV3LnRleHQpOwogICAgICAgaWYgKGNtLm9wdGlvbnMu
bGluZU51bWJlcnMgJiYgKCFtYXJrZXJzIHx8ICFtYXJrZXJzWyJDb2RlTWlycm9yLWxpbmVudW1i
ZXJzIl0pKQotICAgICAgICB3cmFwLmxpbmVOdW1iZXIgPSBndXR0ZXJXcmFwLmFwcGVuZENoaWxk
KAotICAgICAgICAgIGVsdCgiZGl2IiwgbGluZU51bWJlckZvcihjbS5vcHRpb25zLCBsaW5lTm8p
LAorICAgICAgICBsaW5lVmlldy5saW5lTnVtYmVyID0gZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZCgK
KyAgICAgICAgICBlbHQoImRpdiIsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgbGluZU4pLAog
ICAgICAgICAgICAgICAiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVs
dCIsCiAgICAgICAgICAgICAgICJsZWZ0OiAiICsgZGltcy5ndXR0ZXJMZWZ0WyJDb2RlTWlycm9y
LWxpbmVudW1iZXJzIl0gKyAicHg7IHdpZHRoOiAiCi0gICAgICAgICAgICAgICsgZGlzcGxheS5s
aW5lTnVtSW5uZXJXaWR0aCArICJweCIpKTsKLSAgICAgIGlmIChtYXJrZXJzKQotICAgICAgICBm
b3IgKHZhciBrID0gMDsgayA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsraykgewotICAg
ICAgICAgIHZhciBpZCA9IGNtLm9wdGlvbnMuZ3V0dGVyc1trXSwgZm91bmQgPSBtYXJrZXJzLmhh
c093blByb3BlcnR5KGlkKSAmJiBtYXJrZXJzW2lkXTsKLSAgICAgICAgICBpZiAoZm91bmQpCi0g
ICAgICAgICAgICBndXR0ZXJXcmFwLmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW2ZvdW5kXSwgIkNv
ZGVNaXJyb3ItZ3V0dGVyLWVsdCIsICJsZWZ0OiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpbXMuZ3V0dGVyTGVmdFtpZF0gKyAicHg7IHdpZHRoOiAiICsgZGlt
cy5ndXR0ZXJXaWR0aFtpZF0gKyAicHgiKSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgKyBj
bS5kaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoICsgInB4IikpOworICAgICAgaWYgKG1hcmtlcnMp
IGZvciAodmFyIGsgPSAwOyBrIDwgY20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsgKytrKSB7Cisg
ICAgICAgIHZhciBpZCA9IGNtLm9wdGlvbnMuZ3V0dGVyc1trXSwgZm91bmQgPSBtYXJrZXJzLmhh
c093blByb3BlcnR5KGlkKSAmJiBtYXJrZXJzW2lkXTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAg
ICAgICAgIGd1dHRlcldyYXAuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBbZm91bmRdLCAiQ29kZU1p
cnJvci1ndXR0ZXItZWx0IiwgImxlZnQ6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpbXMuZ3V0dGVyTGVmdFtpZF0gKyAicHg7IHdpZHRoOiAiICsgZGltcy5ndXR0
ZXJXaWR0aFtpZF0gKyAicHgiKSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24g
dXBkYXRlTGluZVdpZGdldHMobGluZVZpZXcsIGRpbXMpIHsKKyAgICBpZiAobGluZVZpZXcuYWxp
Z25hYmxlKSBsaW5lVmlldy5hbGlnbmFibGUgPSBudWxsOworICAgIGZvciAodmFyIG5vZGUgPSBs
aW5lVmlldy5ub2RlLmZpcnN0Q2hpbGQsIG5leHQ7IG5vZGU7IG5vZGUgPSBuZXh0KSB7CisgICAg
ICB2YXIgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7CisgICAgICBpZiAobm9kZS5jbGFzc05hbWUg
PT0gIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpCisgICAgICAgIGxpbmVWaWV3Lm5vZGUucmVtb3Zl
Q2hpbGQobm9kZSk7CiAgICAgfQotICAgIGlmIChpZV9sdDgpIHdyYXAuc3R5bGUuekluZGV4ID0g
MjsKLSAgICBpZiAobGluZS53aWRnZXRzICYmIHdyYXAgIT0gcmV1c2UpIGZvciAodmFyIGkgPSAw
LCB3cyA9IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsgKytpKSB7CisgICAgaW5zZXJ0TGlu
ZVdpZGdldHMobGluZVZpZXcsIGRpbXMpOworICB9CisKKyAgLy8gQnVpbGQgYSBsaW5lJ3MgRE9N
IHJlcHJlc2VudGF0aW9uIGZyb20gc2NyYXRjaAorICBmdW5jdGlvbiBidWlsZExpbmVFbGVtZW50
KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpIHsKKyAgICB2YXIgYnVpbHQgPSBnZXRMaW5lQ29u
dGVudChjbSwgbGluZVZpZXcpOworICAgIGxpbmVWaWV3LnRleHQgPSBsaW5lVmlldy5ub2RlID0g
YnVpbHQucHJlOworICAgIGlmIChidWlsdC5iZ0NsYXNzKSBsaW5lVmlldy5iZ0NsYXNzID0gYnVp
bHQuYmdDbGFzczsKKyAgICBpZiAoYnVpbHQudGV4dENsYXNzKSBsaW5lVmlldy50ZXh0Q2xhc3Mg
PSBidWlsdC50ZXh0Q2xhc3M7CisKKyAgICB1cGRhdGVMaW5lQ2xhc3NlcyhsaW5lVmlldyk7Cisg
ICAgdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTsKKyAgICBpbnNl
cnRMaW5lV2lkZ2V0cyhsaW5lVmlldywgZGltcyk7CisgICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7
CisgIH0KKworICAvLyBBIGxpbmVWaWV3IG1heSBjb250YWluIG11bHRpcGxlIGxvZ2ljYWwgbGlu
ZXMgKHdoZW4gbWVyZ2VkIGJ5CisgIC8vIGNvbGxhcHNlZCBzcGFucykuIFRoZSB3aWRnZXRzIGZv
ciBhbGwgb2YgdGhlbSBuZWVkIHRvIGJlIGRyYXduLgorICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lk
Z2V0cyhsaW5lVmlldywgZGltcykgeworICAgIGluc2VydExpbmVXaWRnZXRzRm9yKGxpbmVWaWV3
LmxpbmUsIGxpbmVWaWV3LCBkaW1zLCB0cnVlKTsKKyAgICBpZiAobGluZVZpZXcucmVzdCkgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKQorICAgICAgaW5zZXJ0
TGluZVdpZGdldHNGb3IobGluZVZpZXcucmVzdFtpXSwgbGluZVZpZXcsIGRpbXMsIGZhbHNlKTsK
KyAgfQorCisgIGZ1bmN0aW9uIGluc2VydExpbmVXaWRnZXRzRm9yKGxpbmUsIGxpbmVWaWV3LCBk
aW1zLCBhbGxvd0Fib3ZlKSB7CisgICAgaWYgKCFsaW5lLndpZGdldHMpIHJldHVybjsKKyAgICB2
YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTsKKyAgICBmb3IgKHZhciBpID0g
MCwgd3MgPSBsaW5lLndpZGdldHM7IGkgPCB3cy5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIHdp
ZGdldCA9IHdzW2ldLCBub2RlID0gZWx0KCJkaXYiLCBbd2lkZ2V0Lm5vZGVdLCAiQ29kZU1pcnJv
ci1saW5ld2lkZ2V0Iik7CiAgICAgICBpZiAoIXdpZGdldC5oYW5kbGVNb3VzZUV2ZW50cykgbm9k
ZS5pZ25vcmVFdmVudHMgPSB0cnVlOwotICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwg
bm9kZSwgd3JhcCwgZGltcyk7Ci0gICAgICBpZiAod2lkZ2V0LmFib3ZlKQotICAgICAgICB3cmFw
Lmluc2VydEJlZm9yZShub2RlLCBjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmIGxpbmUuaGVpZ2h0
ICE9IDAgPyBndXR0ZXJXcmFwIDogbGluZUVsZW1lbnQpOworICAgICAgcG9zaXRpb25MaW5lV2lk
Z2V0KHdpZGdldCwgbm9kZSwgbGluZVZpZXcsIGRpbXMpOworICAgICAgaWYgKGFsbG93QWJvdmUg
JiYgd2lkZ2V0LmFib3ZlKQorICAgICAgICB3cmFwLmluc2VydEJlZm9yZShub2RlLCBsaW5lVmll
dy5ndXR0ZXIgfHwgbGluZVZpZXcudGV4dCk7CiAgICAgICBlbHNlCiAgICAgICAgIHdyYXAuYXBw
ZW5kQ2hpbGQobm9kZSk7CiAgICAgICBzaWduYWxMYXRlcih3aWRnZXQsICJyZWRyYXciKTsKICAg
ICB9Ci0gICAgcmV0dXJuIHdyYXA7CiAgIH0KIAotICBmdW5jdGlvbiBwb3NpdGlvbkxpbmVXaWRn
ZXQod2lkZ2V0LCBub2RlLCB3cmFwLCBkaW1zKSB7CisgIGZ1bmN0aW9uIHBvc2l0aW9uTGluZVdp
ZGdldCh3aWRnZXQsIG5vZGUsIGxpbmVWaWV3LCBkaW1zKSB7CiAgICAgaWYgKHdpZGdldC5ub0hT
Y3JvbGwpIHsKLSAgICAgICh3cmFwLmFsaWduYWJsZSB8fCAod3JhcC5hbGlnbmFibGUgPSBbXSkp
LnB1c2gobm9kZSk7CisgICAgICAobGluZVZpZXcuYWxpZ25hYmxlIHx8IChsaW5lVmlldy5hbGln
bmFibGUgPSBbXSkpLnB1c2gobm9kZSk7CiAgICAgICB2YXIgd2lkdGggPSBkaW1zLndyYXBwZXJX
aWR0aDsKICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGRpbXMuZml4ZWRQb3MgKyAicHgiOwogICAg
ICAgaWYgKCF3aWRnZXQuY292ZXJHdXR0ZXIpIHsKQEAgLTc2Nyw1NyArOTMxLDM3MCBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgIH0KIAorICAvLyBQT1NJVElP
TiBPQkpFQ1QKKworICAvLyBBIFBvcyBpbnN0YW5jZSByZXByZXNlbnRzIGEgcG9zaXRpb24gd2l0
aGluIHRoZSB0ZXh0LgorICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3MgPSBmdW5jdGlvbihsaW5l
LCBjaCkgeworICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQb3MpKSByZXR1cm4gbmV3IFBvcyhs
aW5lLCBjaCk7CisgICAgdGhpcy5saW5lID0gbGluZTsgdGhpcy5jaCA9IGNoOworICB9OworCisg
IC8vIENvbXBhcmUgdHdvIHBvc2l0aW9ucywgcmV0dXJuIDAgaWYgdGhleSBhcmUgdGhlIHNhbWUs
IGEgbmVnYXRpdmUKKyAgLy8gbnVtYmVyIHdoZW4gYSBpcyBsZXNzLCBhbmQgYSBwb3NpdGl2ZSBu
dW1iZXIgb3RoZXJ3aXNlLgorICB2YXIgY21wID0gQ29kZU1pcnJvci5jbXBQb3MgPSBmdW5jdGlv
bihhLCBiKSB7IHJldHVybiBhLmxpbmUgLSBiLmxpbmUgfHwgYS5jaCAtIGIuY2g7IH07CisKKyAg
ZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0dXJuIFBvcyh4LmxpbmUsIHguY2gpO30KKyAgZnVuY3Rp
b24gbWF4UG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBiIDogYTsgfQorICBmdW5j
dGlvbiBtaW5Qb3MoYSwgYikgeyByZXR1cm4gY21wKGEsIGIpIDwgMCA/IGEgOiBiOyB9CisKICAg
Ly8gU0VMRUNUSU9OIC8gQ1VSU09SCiAKKyAgLy8gU2VsZWN0aW9uIG9iamVjdHMgYXJlIGltbXV0
YWJsZS4gQSBuZXcgb25lIGlzIGNyZWF0ZWQgZXZlcnkgdGltZQorICAvLyB0aGUgc2VsZWN0aW9u
IGNoYW5nZXMuIEEgc2VsZWN0aW9uIGlzIG9uZSBvciBtb3JlIG5vbi1vdmVybGFwcGluZworICAv
LyAoYW5kIG5vbi10b3VjaGluZykgcmFuZ2VzLCBzb3J0ZWQsIGFuZCBhbiBpbnRlZ2VyIHRoYXQg
aW5kaWNhdGVzCisgIC8vIHdoaWNoIG9uZSBpcyB0aGUgcHJpbWFyeSBzZWxlY3Rpb24gKHRoZSBv
bmUgdGhhdCdzIHNjcm9sbGVkIGludG8KKyAgLy8gdmlldywgdGhhdCBnZXRDdXJzb3IgcmV0dXJu
cywgZXRjKS4KKyAgZnVuY3Rpb24gU2VsZWN0aW9uKHJhbmdlcywgcHJpbUluZGV4KSB7CisgICAg
dGhpcy5yYW5nZXMgPSByYW5nZXM7CisgICAgdGhpcy5wcmltSW5kZXggPSBwcmltSW5kZXg7Cisg
IH0KKworICBTZWxlY3Rpb24ucHJvdG90eXBlID0geworICAgIHByaW1hcnk6IGZ1bmN0aW9uKCkg
eyByZXR1cm4gdGhpcy5yYW5nZXNbdGhpcy5wcmltSW5kZXhdOyB9LAorICAgIGVxdWFsczogZnVu
Y3Rpb24ob3RoZXIpIHsKKyAgICAgIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm4gdHJ1ZTsKKyAg
ICAgIGlmIChvdGhlci5wcmltSW5kZXggIT0gdGhpcy5wcmltSW5kZXggfHwgb3RoZXIucmFuZ2Vz
Lmxlbmd0aCAhPSB0aGlzLnJhbmdlcy5sZW5ndGgpIHJldHVybiBmYWxzZTsKKyAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIGhl
cmUgPSB0aGlzLnJhbmdlc1tpXSwgdGhlcmUgPSBvdGhlci5yYW5nZXNbaV07CisgICAgICAgIGlm
IChjbXAoaGVyZS5hbmNob3IsIHRoZXJlLmFuY2hvcikgIT0gMCB8fCBjbXAoaGVyZS5oZWFkLCB0
aGVyZS5oZWFkKSAhPSAwKSByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9LAorICAgIGRlZXBDb3B5OiBmdW5jdGlvbigpIHsKKyAgICAgIGZvciAodmFyIG91
dCA9IFtdLCBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKQorICAgICAgICBvdXRb
aV0gPSBuZXcgUmFuZ2UoY29weVBvcyh0aGlzLnJhbmdlc1tpXS5hbmNob3IpLCBjb3B5UG9zKHRo
aXMucmFuZ2VzW2ldLmhlYWQpKTsKKyAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKG91dCwgdGhp
cy5wcmltSW5kZXgpOworICAgIH0sCisgICAgc29tZXRoaW5nU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkg
eworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKykKKyAg
ICAgICAgaWYgKCF0aGlzLnJhbmdlc1tpXS5lbXB0eSgpKSByZXR1cm4gdHJ1ZTsKKyAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9LAorICAgIGNvbnRhaW5zOiBmdW5jdGlvbihwb3MsIGVuZCkgewor
ICAgICAgaWYgKCFlbmQpIGVuZCA9IHBvczsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5yYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5yYW5nZXNb
aV07CisgICAgICAgIGlmIChjbXAoZW5kLCByYW5nZS5mcm9tKCkpID49IDAgJiYgY21wKHBvcywg
cmFuZ2UudG8oKSkgPD0gMCkKKyAgICAgICAgICByZXR1cm4gaTsKKyAgICAgIH0KKyAgICAgIHJl
dHVybiAtMTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gUmFuZ2UoYW5jaG9yLCBoZWFkKSB7
CisgICAgdGhpcy5hbmNob3IgPSBhbmNob3I7IHRoaXMuaGVhZCA9IGhlYWQ7CisgIH0KKworICBS
YW5nZS5wcm90b3R5cGUgPSB7CisgICAgZnJvbTogZnVuY3Rpb24oKSB7IHJldHVybiBtaW5Qb3Mo
dGhpcy5hbmNob3IsIHRoaXMuaGVhZCk7IH0sCisgICAgdG86IGZ1bmN0aW9uKCkgeyByZXR1cm4g
bWF4UG9zKHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpOyB9LAorICAgIGVtcHR5OiBmdW5jdGlvbigp
IHsKKyAgICAgIHJldHVybiB0aGlzLmhlYWQubGluZSA9PSB0aGlzLmFuY2hvci5saW5lICYmIHRo
aXMuaGVhZC5jaCA9PSB0aGlzLmFuY2hvci5jaDsKKyAgICB9CisgIH07CisKKyAgLy8gVGFrZSBh
biB1bnNvcnRlZCwgcG90ZW50aWFsbHkgb3ZlcmxhcHBpbmcgc2V0IG9mIHJhbmdlcywgYW5kCisg
IC8vIGJ1aWxkIGEgc2VsZWN0aW9uIG91dCBvZiBpdC4gJ0NvbnN1bWVzJyByYW5nZXMgYXJyYXkg
KG1vZGlmeWluZworICAvLyBpdCkuCisgIGZ1bmN0aW9uIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5n
ZXMsIHByaW1JbmRleCkgeworICAgIHZhciBwcmltID0gcmFuZ2VzW3ByaW1JbmRleF07CisgICAg
cmFuZ2VzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gY21wKGEuZnJvbSgpLCBiLmZyb20o
KSk7IH0pOworICAgIHByaW1JbmRleCA9IGluZGV4T2YocmFuZ2VzLCBwcmltKTsKKyAgICBmb3Ig
KHZhciBpID0gMTsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIGN1ciA9IHJh
bmdlc1tpXSwgcHJldiA9IHJhbmdlc1tpIC0gMV07CisgICAgICBpZiAoY21wKHByZXYudG8oKSwg
Y3VyLmZyb20oKSkgPj0gMCkgeworICAgICAgICB2YXIgZnJvbSA9IG1pblBvcyhwcmV2LmZyb20o
KSwgY3VyLmZyb20oKSksIHRvID0gbWF4UG9zKHByZXYudG8oKSwgY3VyLnRvKCkpOworICAgICAg
ICB2YXIgaW52ID0gcHJldi5lbXB0eSgpID8gY3VyLmZyb20oKSA9PSBjdXIuaGVhZCA6IHByZXYu
ZnJvbSgpID09IHByZXYuaGVhZDsKKyAgICAgICAgaWYgKGkgPD0gcHJpbUluZGV4KSAtLXByaW1J
bmRleDsKKyAgICAgICAgcmFuZ2VzLnNwbGljZSgtLWksIDIsIG5ldyBSYW5nZShpbnYgPyB0byA6
IGZyb20sIGludiA/IGZyb20gOiB0bykpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbmV3
IFNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleCk7CisgIH0KKworICBmdW5jdGlvbiBzaW1wbGVT
ZWxlY3Rpb24oYW5jaG9yLCBoZWFkKSB7CisgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW25ldyBS
YW5nZShhbmNob3IsIGhlYWQgfHwgYW5jaG9yKV0sIDApOworICB9CisKKyAgLy8gTW9zdCBvZiB0
aGUgZXh0ZXJuYWwgQVBJIGNsaXBzIGdpdmVuIHBvc2l0aW9ucyB0byBtYWtlIHN1cmUgdGhleQor
ICAvLyBhY3R1YWxseSBleGlzdCB3aXRoaW4gdGhlIGRvY3VtZW50LgorICBmdW5jdGlvbiBjbGlw
TGluZShkb2MsIG4pIHtyZXR1cm4gTWF0aC5tYXgoZG9jLmZpcnN0LCBNYXRoLm1pbihuLCBkb2Mu
Zmlyc3QgKyBkb2Muc2l6ZSAtIDEpKTt9CisgIGZ1bmN0aW9uIGNsaXBQb3MoZG9jLCBwb3MpIHsK
KyAgICBpZiAocG9zLmxpbmUgPCBkb2MuZmlyc3QpIHJldHVybiBQb3MoZG9jLmZpcnN0LCAwKTsK
KyAgICB2YXIgbGFzdCA9IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTsKKyAgICBpZiAocG9zLmxp
bmUgPiBsYXN0KSByZXR1cm4gUG9zKGxhc3QsIGdldExpbmUoZG9jLCBsYXN0KS50ZXh0Lmxlbmd0
aCk7CisgICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGdldExpbmUoZG9jLCBwb3MubGluZSkudGV4
dC5sZW5ndGgpOworICB9CisgIGZ1bmN0aW9uIGNsaXBUb0xlbihwb3MsIGxpbmVsZW4pIHsKKyAg
ICB2YXIgY2ggPSBwb3MuY2g7CisgICAgaWYgKGNoID09IG51bGwgfHwgY2ggPiBsaW5lbGVuKSBy
ZXR1cm4gUG9zKHBvcy5saW5lLCBsaW5lbGVuKTsKKyAgICBlbHNlIGlmIChjaCA8IDApIHJldHVy
biBQb3MocG9zLmxpbmUsIDApOworICAgIGVsc2UgcmV0dXJuIHBvczsKKyAgfQorICBmdW5jdGlv
biBpc0xpbmUoZG9jLCBsKSB7cmV0dXJuIGwgPj0gZG9jLmZpcnN0ICYmIGwgPCBkb2MuZmlyc3Qg
KyBkb2Muc2l6ZTt9CisgIGZ1bmN0aW9uIGNsaXBQb3NBcnJheShkb2MsIGFycmF5KSB7CisgICAg
Zm9yICh2YXIgb3V0ID0gW10sIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIG91dFtpXSA9
IGNsaXBQb3MoZG9jLCBhcnJheVtpXSk7CisgICAgcmV0dXJuIG91dDsKKyAgfQorCisgIC8vIFNF
TEVDVElPTiBVUERBVEVTCisKKyAgLy8gVGhlICdzY3JvbGwnIHBhcmFtZXRlciBnaXZlbiB0byBt
YW55IG9mIHRoZXNlIGluZGljYXRlZCB3aGV0aGVyCisgIC8vIHRoZSBuZXcgY3Vyc29yIHBvc2l0
aW9uIHNob3VsZCBiZSBzY3JvbGxlZCBpbnRvIHZpZXcgYWZ0ZXIKKyAgLy8gbW9kaWZ5aW5nIHRo
ZSBzZWxlY3Rpb24uCisKKyAgLy8gSWYgc2hpZnQgaXMgaGVsZCBvciB0aGUgZXh0ZW5kIGZsYWcg
aXMgc2V0LCBleHRlbmRzIGEgcmFuZ2UgdG8KKyAgLy8gaW5jbHVkZSBhIGdpdmVuIHBvc2l0aW9u
IChhbmQgb3B0aW9uYWxseSBhIHNlY29uZCBwb3NpdGlvbikuCisgIC8vIE90aGVyd2lzZSwgc2lt
cGx5IHJldHVybnMgdGhlIHJhbmdlIGJldHdlZW4gdGhlIGdpdmVuIHBvc2l0aW9ucy4KKyAgLy8g
VXNlZCBmb3IgY3Vyc29yIG1vdGlvbiBhbmQgc3VjaC4KKyAgZnVuY3Rpb24gZXh0ZW5kUmFuZ2Uo
ZG9jLCByYW5nZSwgaGVhZCwgb3RoZXIpIHsKKyAgICBpZiAoZG9jLmNtICYmIGRvYy5jbS5kaXNw
bGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpIHsKKyAgICAgIHZhciBhbmNob3IgPSByYW5nZS5hbmNo
b3I7CisgICAgICBpZiAob3RoZXIpIHsKKyAgICAgICAgdmFyIHBvc0JlZm9yZSA9IGNtcChoZWFk
LCBhbmNob3IpIDwgMDsKKyAgICAgICAgaWYgKHBvc0JlZm9yZSAhPSAoY21wKG90aGVyLCBhbmNo
b3IpIDwgMCkpIHsKKyAgICAgICAgICBhbmNob3IgPSBoZWFkOworICAgICAgICAgIGhlYWQgPSBv
dGhlcjsKKyAgICAgICAgfSBlbHNlIGlmIChwb3NCZWZvcmUgIT0gKGNtcChoZWFkLCBvdGhlcikg
PCAwKSkgeworICAgICAgICAgIGhlYWQgPSBvdGhlcjsKKyAgICAgICAgfQorICAgICAgfQorICAg
ICAgcmV0dXJuIG5ldyBSYW5nZShhbmNob3IsIGhlYWQpOworICAgIH0gZWxzZSB7CisgICAgICBy
ZXR1cm4gbmV3IFJhbmdlKG90aGVyIHx8IGhlYWQsIGhlYWQpOworICAgIH0KKyAgfQorCisgIC8v
IEV4dGVuZCB0aGUgcHJpbWFyeSBzZWxlY3Rpb24gcmFuZ2UsIGRpc2NhcmQgdGhlIHJlc3QuCisg
IGZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbihkb2MsIGhlYWQsIG90aGVyLCBvcHRpb25zKSB7Cisg
ICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3IFNlbGVjdGlvbihbZXh0ZW5kUmFuZ2UoZG9jLCBkb2Mu
c2VsLnByaW1hcnkoKSwgaGVhZCwgb3RoZXIpXSwgMCksIG9wdGlvbnMpOworICB9CisKKyAgLy8g
RXh0ZW5kIGFsbCBzZWxlY3Rpb25zIChwb3MgaXMgYW4gYXJyYXkgb2Ygc2VsZWN0aW9ucyB3aXRo
IGxlbmd0aAorICAvLyBlcXVhbCB0aGUgbnVtYmVyIG9mIHNlbGVjdGlvbnMpCisgIGZ1bmN0aW9u
IGV4dGVuZFNlbGVjdGlvbnMoZG9jLCBoZWFkcywgb3B0aW9ucykgeworICAgIGZvciAodmFyIG91
dCA9IFtdLCBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKQorICAgICAgb3V0
W2ldID0gZXh0ZW5kUmFuZ2UoZG9jLCBkb2Muc2VsLnJhbmdlc1tpXSwgaGVhZHNbaV0sIG51bGwp
OworICAgIHZhciBuZXdTZWwgPSBub3JtYWxpemVTZWxlY3Rpb24ob3V0LCBkb2Muc2VsLnByaW1J
bmRleCk7CisgICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3U2VsLCBvcHRpb25zKTsKKyAgfQorCisg
IC8vIFVwZGF0ZXMgYSBzaW5nbGUgcmFuZ2UgaW4gdGhlIHNlbGVjdGlvbi4KKyAgZnVuY3Rpb24g
cmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIGksIHJhbmdlLCBvcHRpb25zKSB7CisgICAgdmFyIHJh
bmdlcyA9IGRvYy5zZWwucmFuZ2VzLnNsaWNlKDApOworICAgIHJhbmdlc1tpXSA9IHJhbmdlOwor
ICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIGRvYy5zZWwu
cHJpbUluZGV4KSwgb3B0aW9ucyk7CisgIH0KKworICAvLyBSZXNldCB0aGUgc2VsZWN0aW9uIHRv
IGEgc2luZ2xlIHJhbmdlLgorICBmdW5jdGlvbiBzZXRTaW1wbGVTZWxlY3Rpb24oZG9jLCBhbmNo
b3IsIGhlYWQsIG9wdGlvbnMpIHsKKyAgICBzZXRTZWxlY3Rpb24oZG9jLCBzaW1wbGVTZWxlY3Rp
b24oYW5jaG9yLCBoZWFkKSwgb3B0aW9ucyk7CisgIH0KKworICAvLyBHaXZlIGJlZm9yZVNlbGVj
dGlvbkNoYW5nZSBoYW5kbGVycyBhIGNoYW5nZSB0byBpbmZsdWVuY2UgYQorICAvLyBzZWxlY3Rp
b24gdXBkYXRlLgorICBmdW5jdGlvbiBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBzZWwpIHsK
KyAgICB2YXIgb2JqID0geworICAgICAgcmFuZ2VzOiBzZWwucmFuZ2VzLAorICAgICAgdXBkYXRl
OiBmdW5jdGlvbihyYW5nZXMpIHsKKyAgICAgICAgdGhpcy5yYW5nZXMgPSBbXTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgdGhpcy5y
YW5nZXNbaV0gPSBuZXcgUmFuZ2UoY2xpcFBvcyhkb2MsIHJhbmdlc1tpXS5hbmNob3IpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQb3MoZG9jLCByYW5nZXNbaV0u
aGVhZCkpOworICAgICAgfQorICAgIH07CisgICAgc2lnbmFsKGRvYywgImJlZm9yZVNlbGVjdGlv
bkNoYW5nZSIsIGRvYywgb2JqKTsKKyAgICBpZiAoZG9jLmNtKSBzaWduYWwoZG9jLmNtLCAiYmVm
b3JlU2VsZWN0aW9uQ2hhbmdlIiwgZG9jLmNtLCBvYmopOworICAgIGlmIChvYmoucmFuZ2VzICE9
IHNlbC5yYW5nZXMpIHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24ob2JqLnJhbmdlcywgb2JqLnJh
bmdlcy5sZW5ndGggLSAxKTsKKyAgICBlbHNlIHJldHVybiBzZWw7CisgIH0KKworICBmdW5jdGlv
biBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeShkb2MsIHNlbCwgb3B0aW9ucykgeworICAgIHZh
ciBkb25lID0gZG9jLmhpc3RvcnkuZG9uZSwgbGFzdCA9IGxzdChkb25lKTsKKyAgICBpZiAobGFz
dCAmJiBsYXN0LnJhbmdlcykgeworICAgICAgZG9uZVtkb25lLmxlbmd0aCAtIDFdID0gc2VsOwor
ICAgICAgc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRpb25zKTsKKyAgICB9IGVsc2Ug
eworICAgICAgc2V0U2VsZWN0aW9uKGRvYywgc2VsLCBvcHRpb25zKTsKKyAgICB9CisgIH0KKwor
ICAvLyBTZXQgYSBuZXcgc2VsZWN0aW9uLgorICBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZG9jLCBz
ZWwsIG9wdGlvbnMpIHsKKyAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9yaWdpbiAmJiBkb2Mu
Y20pIGRvYy5jbS5jdXJPcC5vcmlnaW4gPSBvcHRpb25zLm9yaWdpbjsKKyAgICBzZXRTZWxlY3Rp
b25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpOworICAgIGFkZFNlbGVjdGlvblRvSGlzdG9yeShk
b2MsIGRvYy5zZWwsIGRvYy5jbSA/IGRvYy5jbS5jdXJPcC5pZCA6IE5hTiwgb3B0aW9ucyk7Cisg
IH0KKworICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpIHsK
KyAgICBpZiAoaGFzSGFuZGxlcihkb2MsICJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSB8fCBkb2Mu
Y20gJiYgaGFzSGFuZGxlcihkb2MuY20sICJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSkKKyAgICAg
IHNlbCA9IGZpbHRlclNlbGVjdGlvbkNoYW5nZShkb2MsIHNlbCk7CisKKyAgICB2YXIgYmlhcyA9
IGNtcChzZWwucHJpbWFyeSgpLmhlYWQsIGRvYy5zZWwucHJpbWFyeSgpLmhlYWQpIDwgMCA/IC0x
IDogMTsKKyAgICBzZXRTZWxlY3Rpb25Jbm5lcihkb2MsIHNraXBBdG9taWNJblNlbGVjdGlvbihk
b2MsIHNlbCwgYmlhcywgdHJ1ZSkpOworCisgICAgaWYgKCEob3B0aW9ucyAmJiBvcHRpb25zLnNj
cm9sbCA9PT0gZmFsc2UpICYmIGRvYy5jbSkKKyAgICAgIGVuc3VyZUN1cnNvclZpc2libGUoZG9j
LmNtKTsKKyAgfQorCisgIGZ1bmN0aW9uIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2VsKSB7Cisg
ICAgaWYgKHNlbC5lcXVhbHMoZG9jLnNlbCkpIHJldHVybjsKKworICAgIGRvYy5zZWwgPSBzZWw7
CisKKyAgICBpZiAoZG9jLmNtKQorICAgICAgZG9jLmNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gZG9j
LmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPQorICAgICAgICBkb2MuY20uY3VyT3AuY3Vyc29y
QWN0aXZpdHkgPSB0cnVlOworICAgIHNpZ25hbExhdGVyKGRvYywgImN1cnNvckFjdGl2aXR5Iiwg
ZG9jKTsKKyAgfQorCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzZWxlY3Rpb24gZG9lcyBub3QgcGFy
dGlhbGx5IHNlbGVjdCBhbnkgYXRvbWljCisgIC8vIG1hcmtlZCByYW5nZXMuCisgIGZ1bmN0aW9u
IHJlQ2hlY2tTZWxlY3Rpb24oZG9jKSB7CisgICAgc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBza2lw
QXRvbWljSW5TZWxlY3Rpb24oZG9jLCBkb2Muc2VsLCBudWxsLCBmYWxzZSksIHNlbF9kb250U2Ny
b2xsKTsKKyAgfQorCisgIC8vIFJldHVybiBhIHNlbGVjdGlvbiB0aGF0IGRvZXMgbm90IHBhcnRp
YWxseSBzZWxlY3QgYW55IGF0b21pYworICAvLyByYW5nZXMuCisgIGZ1bmN0aW9uIHNraXBBdG9t
aWNJblNlbGVjdGlvbihkb2MsIHNlbCwgYmlhcywgbWF5Q2xlYXIpIHsKKyAgICB2YXIgb3V0Owor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAg
dmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTsKKyAgICAgIHZhciBuZXdBbmNob3IgPSBza2lwQXRv
bWljKGRvYywgcmFuZ2UuYW5jaG9yLCBiaWFzLCBtYXlDbGVhcik7CisgICAgICB2YXIgbmV3SGVh
ZCA9IHNraXBBdG9taWMoZG9jLCByYW5nZS5oZWFkLCBiaWFzLCBtYXlDbGVhcik7CisgICAgICBp
ZiAob3V0IHx8IG5ld0FuY2hvciAhPSByYW5nZS5hbmNob3IgfHwgbmV3SGVhZCAhPSByYW5nZS5o
ZWFkKSB7CisgICAgICAgIGlmICghb3V0KSBvdXQgPSBzZWwucmFuZ2VzLnNsaWNlKDAsIGkpOwor
ICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2UobmV3QW5jaG9yLCBuZXdIZWFkKTsKKyAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIG91dCA/IG5vcm1hbGl6ZVNlbGVjdGlvbihvdXQsIHNlbC5wcmlt
SW5kZXgpIDogc2VsOworICB9CisKKyAgLy8gRW5zdXJlIGEgZ2l2ZW4gcG9zaXRpb24gaXMgbm90
IGluc2lkZSBhbiBhdG9taWMgcmFuZ2UuCisgIGZ1bmN0aW9uIHNraXBBdG9taWMoZG9jLCBwb3Ms
IGJpYXMsIG1heUNsZWFyKSB7CisgICAgdmFyIGZsaXBwZWQgPSBmYWxzZSwgY3VyUG9zID0gcG9z
OworICAgIHZhciBkaXIgPSBiaWFzIHx8IDE7CisgICAgZG9jLmNhbnRFZGl0ID0gZmFsc2U7Cisg
ICAgc2VhcmNoOiBmb3IgKDs7KSB7CisgICAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBjdXJQ
b3MubGluZSk7CisgICAgICBpZiAobGluZS5tYXJrZWRTcGFucykgeworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICB2
YXIgc3AgPSBsaW5lLm1hcmtlZFNwYW5zW2ldLCBtID0gc3AubWFya2VyOworICAgICAgICAgIGlm
ICgoc3AuZnJvbSA9PSBudWxsIHx8IChtLmluY2x1c2l2ZUxlZnQgPyBzcC5mcm9tIDw9IGN1clBv
cy5jaCA6IHNwLmZyb20gPCBjdXJQb3MuY2gpKSAmJgorICAgICAgICAgICAgICAoc3AudG8gPT0g
bnVsbCB8fCAobS5pbmNsdXNpdmVSaWdodCA/IHNwLnRvID49IGN1clBvcy5jaCA6IHNwLnRvID4g
Y3VyUG9zLmNoKSkpIHsKKyAgICAgICAgICAgIGlmIChtYXlDbGVhcikgeworICAgICAgICAgICAg
ICBzaWduYWwobSwgImJlZm9yZUN1cnNvckVudGVyIik7CisgICAgICAgICAgICAgIGlmIChtLmV4
cGxpY2l0bHlDbGVhcmVkKSB7CisgICAgICAgICAgICAgICAgaWYgKCFsaW5lLm1hcmtlZFNwYW5z
KSBicmVhazsKKyAgICAgICAgICAgICAgICBlbHNlIHstLWk7IGNvbnRpbnVlO30KKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtLmF0b21pYykgY29udGlu
dWU7CisgICAgICAgICAgICB2YXIgbmV3UG9zID0gbS5maW5kKGRpciA8IDAgPyAtMSA6IDEpOwor
ICAgICAgICAgICAgaWYgKGNtcChuZXdQb3MsIGN1clBvcykgPT0gMCkgeworICAgICAgICAgICAg
ICBuZXdQb3MuY2ggKz0gZGlyOworICAgICAgICAgICAgICBpZiAobmV3UG9zLmNoIDwgMCkgewor
ICAgICAgICAgICAgICAgIGlmIChuZXdQb3MubGluZSA+IGRvYy5maXJzdCkgbmV3UG9zID0gY2xp
cFBvcyhkb2MsIFBvcyhuZXdQb3MubGluZSAtIDEpKTsKKyAgICAgICAgICAgICAgICBlbHNlIG5l
d1BvcyA9IG51bGw7CisgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3UG9zLmNoID4gbGluZS50
ZXh0Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlmIChuZXdQb3MubGluZSA8IGRvYy5maXJz
dCArIGRvYy5zaXplIC0gMSkgbmV3UG9zID0gUG9zKG5ld1Bvcy5saW5lICsgMSwgMCk7CisgICAg
ICAgICAgICAgICAgZWxzZSBuZXdQb3MgPSBudWxsOworICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgIGlmICghbmV3UG9zKSB7CisgICAgICAgICAgICAgICAgaWYgKGZsaXBwZWQpIHsKKyAg
ICAgICAgICAgICAgICAgIC8vIERyaXZlbiBpbiBhIGNvcm5lciAtLSBubyB2YWxpZCBjdXJzb3Ig
cG9zaXRpb24gZm91bmQgYXQgYWxsCisgICAgICAgICAgICAgICAgICAvLyAtLSB0cnkgYWdhaW4g
KndpdGgqIGNsZWFyaW5nLCBpZiB3ZSBkaWRuJ3QgYWxyZWFkeQorICAgICAgICAgICAgICAgICAg
aWYgKCFtYXlDbGVhcikgcmV0dXJuIHNraXBBdG9taWMoZG9jLCBwb3MsIGJpYXMsIHRydWUpOwor
ICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB0dXJuIG9mZiBlZGl0aW5nIHVudGlsIGZ1
cnRoZXIgbm90aWNlLCBhbmQgcmV0dXJuIHRoZSBzdGFydCBvZiB0aGUgZG9jCisgICAgICAgICAg
ICAgICAgICBkb2MuY2FudEVkaXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgcmV0dXJuIFBv
cyhkb2MuZmlyc3QsIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmbGlw
cGVkID0gdHJ1ZTsgbmV3UG9zID0gcG9zOyBkaXIgPSAtZGlyOworICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJQb3MgPSBuZXdQb3M7CisgICAgICAgICAgICBj
b250aW51ZSBzZWFyY2g7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBy
ZXR1cm4gY3VyUG9zOworICAgIH0KKyAgfQorCisgIC8vIFNFTEVDVElPTiBEUkFXSU5HCisKKyAg
Ly8gUmVkcmF3IHRoZSBzZWxlY3Rpb24gYW5kL29yIGN1cnNvcgogICBmdW5jdGlvbiB1cGRhdGVT
ZWxlY3Rpb24oY20pIHsKLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0gICAgdmFyIGNv
bGxhcHNlZCA9IHBvc0VxKGNtLmRvYy5zZWwuZnJvbSwgY20uZG9jLnNlbC50byk7Ci0gICAgaWYg
KGNvbGxhcHNlZCB8fCBjbS5vcHRpb25zLnNob3dDdXJzb3JXaGVuU2VsZWN0aW5nKQotICAgICAg
dXBkYXRlU2VsZWN0aW9uQ3Vyc29yKGNtKTsKLSAgICBlbHNlCi0gICAgICBkaXNwbGF5LmN1cnNv
ci5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5ID0gIm5v
bmUiOwotICAgIGlmICghY29sbGFwc2VkKQotICAgICAgdXBkYXRlU2VsZWN0aW9uUmFuZ2UoY20p
OwotICAgIGVsc2UKLSAgICAgIGRpc3BsYXkuc2VsZWN0aW9uRGl2LnN0eWxlLmRpc3BsYXkgPSAi
bm9uZSI7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7CisgICAg
dmFyIGN1ckZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAg
IHZhciBzZWxGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldOworICAgICAgdmFyIGNvbGxhcHNlZCA9
IHJhbmdlLmVtcHR5KCk7CisgICAgICBpZiAoY29sbGFwc2VkIHx8IGNtLm9wdGlvbnMuc2hvd0N1
cnNvcldoZW5TZWxlY3RpbmcpCisgICAgICAgIGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHJhbmdl
LCBjdXJGcmFnbWVudCk7CisgICAgICBpZiAoIWNvbGxhcHNlZCkKKyAgICAgICAgZHJhd1NlbGVj
dGlvblJhbmdlKGNtLCByYW5nZSwgc2VsRnJhZ21lbnQpOworICAgIH0KIAogICAgIC8vIE1vdmUg
dGhlIGhpZGRlbiB0ZXh0YXJlYSBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCBzY3JvbGxpbmcg
YXJ0aWZhY3RzCiAgICAgaWYgKGNtLm9wdGlvbnMubW92ZUlucHV0V2l0aEN1cnNvcikgewotICAg
ICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHMoY20sIGNtLmRvYy5zZWwuaGVhZCwgImRpdiIp
OwotICAgICAgdmFyIHdyYXBPZmYgPSBnZXRSZWN0KGRpc3BsYXkud3JhcHBlciksIGxpbmVPZmYg
PSBnZXRSZWN0KGRpc3BsYXkubGluZURpdik7Ci0gICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxl
LnRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQg
LSAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVhZFBvcy50b3AgKyBsaW5lT2ZmLnRvcCAtIHdyYXBPZmYudG9wKSkgKyAicHgiOwot
ICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS5sZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4o
ZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLmxlZnQgKyBsaW5lT2Zm
LmxlZnQgLSB3cmFwT2ZmLmxlZnQpKSArICJweCI7CisgICAgICB2YXIgaGVhZFBvcyA9IGN1cnNv
ckNvb3JkcyhjbSwgZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCwgImRpdiIpOworICAgICAgdmFyIHdy
YXBPZmYgPSBkaXNwbGF5LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGxpbmVPZmYg
PSBkaXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICB2YXIgdG9w
ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCAtIDEw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MudG9wICsgbGlu
ZU9mZi50b3AgLSB3cmFwT2ZmLnRvcCkpOworICAgICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBN
YXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggLSAxMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBvcy5sZWZ0ICsgbGluZU9mZi5sZWZ0IC0gd3Jh
cE9mZi5sZWZ0KSk7CisgICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcCA9IHRvcCArICJw
eCI7CisgICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IjsKICAg
ICB9CisKKyAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LmN1cnNvckRpdiwgY3VyRnJh
Z21lbnQpOworICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkuc2VsZWN0aW9uRGl2LCBz
ZWxGcmFnbWVudCk7CiAgIH0KIAotICAvLyBObyBzZWxlY3Rpb24sIHBsYWluIGN1cnNvcgotICBm
dW5jdGlvbiB1cGRhdGVTZWxlY3Rpb25DdXJzb3IoY20pIHsKLSAgICB2YXIgZGlzcGxheSA9IGNt
LmRpc3BsYXksIHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgY20uZG9jLnNlbC5oZWFkLCAiZGl2Iik7
Ci0gICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUubGVmdCA9IHBvcy5sZWZ0ICsgInB4IjsKLSAgICBk
aXNwbGF5LmN1cnNvci5zdHlsZS50b3AgPSBwb3MudG9wICsgInB4IjsKLSAgICBkaXNwbGF5LmN1
cnNvci5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heCgwLCBwb3MuYm90dG9tIC0gcG9zLnRvcCkgKiBj
bS5vcHRpb25zLmN1cnNvckhlaWdodCArICJweCI7Ci0gICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUu
ZGlzcGxheSA9ICIiOworICAvLyBEcmF3cyBhIGN1cnNvciBmb3IgdGhlIGdpdmVuIHJhbmdlCisg
IGZ1bmN0aW9uIGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHJhbmdlLCBvdXRwdXQpIHsKKyAgICB2
YXIgcG9zID0gY3Vyc29yQ29vcmRzKGNtLCByYW5nZS5oZWFkLCAiZGl2Iik7CisKKyAgICB2YXIg
Y3Vyc29yID0gb3V0cHV0LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgIlx1MDBhMCIsICJDb2RlTWly
cm9yLWN1cnNvciIpKTsKKyAgICBjdXJzb3Iuc3R5bGUubGVmdCA9IHBvcy5sZWZ0ICsgInB4IjsK
KyAgICBjdXJzb3Iuc3R5bGUudG9wID0gcG9zLnRvcCArICJweCI7CisgICAgY3Vyc29yLnN0eWxl
LmhlaWdodCA9IE1hdGgubWF4KDAsIHBvcy5ib3R0b20gLSBwb3MudG9wKSAqIGNtLm9wdGlvbnMu
Y3Vyc29ySGVpZ2h0ICsgInB4IjsKIAogICAgIGlmIChwb3Mub3RoZXIpIHsKLSAgICAgIGRpc3Bs
YXkub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgZGlzcGxheS5vdGhlckN1
cnNvci5zdHlsZS5sZWZ0ID0gcG9zLm90aGVyLmxlZnQgKyAicHgiOwotICAgICAgZGlzcGxheS5v
dGhlckN1cnNvci5zdHlsZS50b3AgPSBwb3Mub3RoZXIudG9wICsgInB4IjsKLSAgICAgIGRpc3Bs
YXkub3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gKHBvcy5vdGhlci5ib3R0b20gLSBwb3Mub3Ro
ZXIudG9wKSAqIC44NSArICJweCI7Ci0gICAgfSBlbHNlIHsgZGlzcGxheS5vdGhlckN1cnNvci5z
dHlsZS5kaXNwbGF5ID0gIm5vbmUiOyB9CisgICAgICAvLyBTZWNvbmRhcnkgY3Vyc29yLCBzaG93
biB3aGVuIG9uIGEgJ2p1bXAnIGluIGJpLWRpcmVjdGlvbmFsIHRleHQKKyAgICAgIHZhciBvdGhl
ckN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChlbHQoImRpdiIsICJcdTAwYTAiLCAiQ29kZU1p
cnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IiKSk7CisgICAgICBvdGhlckN1
cnNvci5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAgICBvdGhlckN1cnNvci5zdHlsZS5sZWZ0ID0g
cG9zLm90aGVyLmxlZnQgKyAicHgiOworICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUudG9wID0gcG9z
Lm90aGVyLnRvcCArICJweCI7CisgICAgICBvdGhlckN1cnNvci5zdHlsZS5oZWlnaHQgPSAocG9z
Lm90aGVyLmJvdHRvbSAtIHBvcy5vdGhlci50b3ApICogLjg1ICsgInB4IjsKKyAgICB9CiAgIH0K
IAotICAvLyBIaWdobGlnaHQgc2VsZWN0aW9uCi0gIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvblJh
bmdlKGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2MsIHNl
bCA9IGNtLmRvYy5zZWw7CisgIC8vIERyYXdzIHRoZSBnaXZlbiByYW5nZSBhcyBhIGhpZ2hsaWdo
dGVkIHNlbGVjdGlvbgorICBmdW5jdGlvbiBkcmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBv
dXRwdXQpIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKICAg
ICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAg
dmFyIGNsaWVudFdpZHRoID0gZGlzcGxheS5saW5lU3BhY2Uub2Zmc2V0V2lkdGgsIHBsID0gcGFk
ZGluZ0xlZnQoY20uZGlzcGxheSk7CisgICAgdmFyIHBhZGRpbmcgPSBwYWRkaW5nSChjbS5kaXNw
bGF5KSwgbGVmdFNpZGUgPSBwYWRkaW5nLmxlZnQsIHJpZ2h0U2lkZSA9IGRpc3BsYXkubGluZVNw
YWNlLm9mZnNldFdpZHRoIC0gcGFkZGluZy5yaWdodDsKIAogICAgIGZ1bmN0aW9uIGFkZChsZWZ0
LCB0b3AsIHdpZHRoLCBib3R0b20pIHsKICAgICAgIGlmICh0b3AgPCAwKSB0b3AgPSAwOworICAg
ICAgdG9wID0gTWF0aC5yb3VuZCh0b3ApOworICAgICAgYm90dG9tID0gTWF0aC5yb3VuZChib3R0
b20pOwogICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1p
cnJvci1zZWxlY3RlZCIsICJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIgKyBsZWZ0ICsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHg7IHRvcDogIiArIHRvcCArICJweDsgd2lk
dGg6ICIgKyAod2lkdGggPT0gbnVsbCA/IGNsaWVudFdpZHRoIC0gbGVmdCA6IHdpZHRoKSArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB4OyB0b3A6ICIgKyB0b3AgKyAicHg7IHdp
ZHRoOiAiICsgKHdpZHRoID09IG51bGwgPyByaWdodFNpZGUgLSBsZWZ0IDogd2lkdGgpICsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHg7IGhlaWdodDogIiArIChib3R0b20gLSB0
b3ApICsgInB4IikpOwogICAgIH0KIApAQCAtODQwLDQ0ICsxMzE3LDQ0IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgIGxlZnQgPSBsZWZ0UG9zLmxlZnQ7CiAg
ICAgICAgICAgcmlnaHQgPSByaWdodFBvcy5yaWdodDsKICAgICAgICAgfQotICAgICAgICBpZiAo
ZnJvbUFyZyA9PSBudWxsICYmIGZyb20gPT0gMCkgbGVmdCA9IHBsOworICAgICAgICBpZiAoZnJv
bUFyZyA9PSBudWxsICYmIGZyb20gPT0gMCkgbGVmdCA9IGxlZnRTaWRlOwogICAgICAgICBpZiAo
cmlnaHRQb3MudG9wIC0gbGVmdFBvcy50b3AgPiAzKSB7IC8vIERpZmZlcmVudCBsaW5lcywgZHJh
dyB0b3AgcGFydAogICAgICAgICAgIGFkZChsZWZ0LCBsZWZ0UG9zLnRvcCwgbnVsbCwgbGVmdFBv
cy5ib3R0b20pOwotICAgICAgICAgIGxlZnQgPSBwbDsKKyAgICAgICAgICBsZWZ0ID0gbGVmdFNp
ZGU7CiAgICAgICAgICAgaWYgKGxlZnRQb3MuYm90dG9tIDwgcmlnaHRQb3MudG9wKSBhZGQobGVm
dCwgbGVmdFBvcy5ib3R0b20sIG51bGwsIHJpZ2h0UG9zLnRvcCk7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKHRvQXJnID09IG51bGwgJiYgdG8gPT0gbGluZUxlbikgcmlnaHQgPSBjbGllbnRXaWR0
aDsKKyAgICAgICAgaWYgKHRvQXJnID09IG51bGwgJiYgdG8gPT0gbGluZUxlbikgcmlnaHQgPSBy
aWdodFNpZGU7CiAgICAgICAgIGlmICghc3RhcnQgfHwgbGVmdFBvcy50b3AgPCBzdGFydC50b3Ag
fHwgbGVmdFBvcy50b3AgPT0gc3RhcnQudG9wICYmIGxlZnRQb3MubGVmdCA8IHN0YXJ0LmxlZnQp
CiAgICAgICAgICAgc3RhcnQgPSBsZWZ0UG9zOwogICAgICAgICBpZiAoIWVuZCB8fCByaWdodFBv
cy5ib3R0b20gPiBlbmQuYm90dG9tIHx8IHJpZ2h0UG9zLmJvdHRvbSA9PSBlbmQuYm90dG9tICYm
IHJpZ2h0UG9zLnJpZ2h0ID4gZW5kLnJpZ2h0KQogICAgICAgICAgIGVuZCA9IHJpZ2h0UG9zOwot
ICAgICAgICBpZiAobGVmdCA8IHBsICsgMSkgbGVmdCA9IHBsOworICAgICAgICBpZiAobGVmdCA8
IGxlZnRTaWRlICsgMSkgbGVmdCA9IGxlZnRTaWRlOwogICAgICAgICBhZGQobGVmdCwgcmlnaHRQ
b3MudG9wLCByaWdodCAtIGxlZnQsIHJpZ2h0UG9zLmJvdHRvbSk7CiAgICAgICB9KTsKICAgICAg
IHJldHVybiB7c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZH07CiAgICAgfQogCi0gICAgaWYgKHNlbC5m
cm9tLmxpbmUgPT0gc2VsLnRvLmxpbmUpIHsKLSAgICAgIGRyYXdGb3JMaW5lKHNlbC5mcm9tLmxp
bmUsIHNlbC5mcm9tLmNoLCBzZWwudG8uY2gpOworICAgIHZhciBzRnJvbSA9IHJhbmdlLmZyb20o
KSwgc1RvID0gcmFuZ2UudG8oKTsKKyAgICBpZiAoc0Zyb20ubGluZSA9PSBzVG8ubGluZSkgewor
ICAgICAgZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNUby5jaCk7CiAgICAgfSBl
bHNlIHsKLSAgICAgIHZhciBmcm9tTGluZSA9IGdldExpbmUoZG9jLCBzZWwuZnJvbS5saW5lKSwg
dG9MaW5lID0gZ2V0TGluZShkb2MsIHNlbC50by5saW5lKTsKLSAgICAgIHZhciBzaW5nbGVWTGlu
ZSA9IHZpc3VhbExpbmUoZG9jLCBmcm9tTGluZSkgPT0gdmlzdWFsTGluZShkb2MsIHRvTGluZSk7
Ci0gICAgICB2YXIgbGVmdEVuZCA9IGRyYXdGb3JMaW5lKHNlbC5mcm9tLmxpbmUsIHNlbC5mcm9t
LmNoLCBzaW5nbGVWTGluZSA/IGZyb21MaW5lLnRleHQubGVuZ3RoIDogbnVsbCkuZW5kOwotICAg
ICAgdmFyIHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGluZShzZWwudG8ubGluZSwgc2luZ2xlVkxpbmUg
PyAwIDogbnVsbCwgc2VsLnRvLmNoKS5zdGFydDsKKyAgICAgIHZhciBmcm9tTGluZSA9IGdldExp
bmUoZG9jLCBzRnJvbS5saW5lKSwgdG9MaW5lID0gZ2V0TGluZShkb2MsIHNUby5saW5lKTsKKyAg
ICAgIHZhciBzaW5nbGVWTGluZSA9IHZpc3VhbExpbmUoZnJvbUxpbmUpID09IHZpc3VhbExpbmUo
dG9MaW5lKTsKKyAgICAgIHZhciBsZWZ0RW5kID0gZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zy
b20uY2gsIHNpbmdsZVZMaW5lID8gZnJvbUxpbmUudGV4dC5sZW5ndGggKyAxIDogbnVsbCkuZW5k
OworICAgICAgdmFyIHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGluZShzVG8ubGluZSwgc2luZ2xlVkxp
bmUgPyAwIDogbnVsbCwgc1RvLmNoKS5zdGFydDsKICAgICAgIGlmIChzaW5nbGVWTGluZSkgewog
ICAgICAgICBpZiAobGVmdEVuZC50b3AgPCByaWdodFN0YXJ0LnRvcCAtIDIpIHsKICAgICAgICAg
ICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIG51bGwsIGxlZnRFbmQuYm90dG9tKTsK
LSAgICAgICAgICBhZGQocGwsIHJpZ2h0U3RhcnQudG9wLCByaWdodFN0YXJ0LmxlZnQsIHJpZ2h0
U3RhcnQuYm90dG9tKTsKKyAgICAgICAgICBhZGQobGVmdFNpZGUsIHJpZ2h0U3RhcnQudG9wLCBy
aWdodFN0YXJ0LmxlZnQsIHJpZ2h0U3RhcnQuYm90dG9tKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIHJpZ2h0U3RhcnQubGVmdCAt
IGxlZnRFbmQucmlnaHQsIGxlZnRFbmQuYm90dG9tKTsKICAgICAgICAgfQogICAgICAgfQogICAg
ICAgaWYgKGxlZnRFbmQuYm90dG9tIDwgcmlnaHRTdGFydC50b3ApCi0gICAgICAgIGFkZChwbCwg
bGVmdEVuZC5ib3R0b20sIG51bGwsIHJpZ2h0U3RhcnQudG9wKTsKKyAgICAgICAgYWRkKGxlZnRT
aWRlLCBsZWZ0RW5kLmJvdHRvbSwgbnVsbCwgcmlnaHRTdGFydC50b3ApOwogICAgIH0KIAotICAg
IHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkuc2VsZWN0aW9uRGl2LCBmcmFnbWVudCk7Ci0g
ICAgZGlzcGxheS5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheSA9ICIiOworICAgIG91dHB1dC5h
cHBlbmRDaGlsZChmcmFnbWVudCk7CiAgIH0KIAogICAvLyBDdXJzb3ItYmxpbmtpbmcKQEAgLTg4
NiwzNyArMTM2MywzOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB2
YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CiAgICAgY2xlYXJJbnRlcnZhbChkaXNwbGF5LmJsaW5r
ZXIpOwogICAgIHZhciBvbiA9IHRydWU7Ci0gICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUudmlzaWJp
bGl0eSA9IGRpc3BsYXkub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eSA9ICIiOworICAgIGRp
c3BsYXkuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHkgPSAiIjsKICAgICBpZiAoY20ub3B0aW9u
cy5jdXJzb3JCbGlua1JhdGUgPiAwKQogICAgICAgZGlzcGxheS5ibGlua2VyID0gc2V0SW50ZXJ2
YWwoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHkg
PSBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLnZpc2liaWxpdHkgPSAob24gPSAhb24pID8gIiIg
OiAiaGlkZGVuIjsKKyAgICAgICAgZGlzcGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9
IChvbiA9ICFvbikgPyAiIiA6ICJoaWRkZW4iOwogICAgICAgfSwgY20ub3B0aW9ucy5jdXJzb3JC
bGlua1JhdGUpOwogICB9CiAKICAgLy8gSElHSExJR0hUIFdPUktFUgogCiAgIGZ1bmN0aW9uIHN0
YXJ0V29ya2VyKGNtLCB0aW1lKSB7Ci0gICAgaWYgKGNtLmRvYy5tb2RlLnN0YXJ0U3RhdGUgJiYg
Y20uZG9jLmZyb250aWVyIDwgY20uZGlzcGxheS5zaG93aW5nVG8pCisgICAgaWYgKGNtLmRvYy5t
b2RlLnN0YXJ0U3RhdGUgJiYgY20uZG9jLmZyb250aWVyIDwgY20uZGlzcGxheS52aWV3VG8pCiAg
ICAgICBjbS5zdGF0ZS5oaWdobGlnaHQuc2V0KHRpbWUsIGJpbmQoaGlnaGxpZ2h0V29ya2VyLCBj
bSkpOwogICB9CiAKICAgZnVuY3Rpb24gaGlnaGxpZ2h0V29ya2VyKGNtKSB7CiAgICAgdmFyIGRv
YyA9IGNtLmRvYzsKICAgICBpZiAoZG9jLmZyb250aWVyIDwgZG9jLmZpcnN0KSBkb2MuZnJvbnRp
ZXIgPSBkb2MuZmlyc3Q7Ci0gICAgaWYgKGRvYy5mcm9udGllciA+PSBjbS5kaXNwbGF5LnNob3dp
bmdUbykgcmV0dXJuOworICAgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxheS52aWV3VG8p
IHJldHVybjsKICAgICB2YXIgZW5kID0gK25ldyBEYXRlICsgY20ub3B0aW9ucy53b3JrVGltZTsK
ICAgICB2YXIgc3RhdGUgPSBjb3B5U3RhdGUoZG9jLm1vZGUsIGdldFN0YXRlQmVmb3JlKGNtLCBk
b2MuZnJvbnRpZXIpKTsKLSAgICB2YXIgY2hhbmdlZCA9IFtdLCBwcmV2Q2hhbmdlOwotICAgIGRv
Yy5pdGVyKGRvYy5mcm9udGllciwgTWF0aC5taW4oZG9jLmZpcnN0ICsgZG9jLnNpemUsIGNtLmRp
c3BsYXkuc2hvd2luZ1RvICsgNTAwKSwgZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGRvYy5m
cm9udGllciA+PSBjbS5kaXNwbGF5LnNob3dpbmdGcm9tKSB7IC8vIFZpc2libGUKKworICAgIHJ1
bkluT3AoY20sIGZ1bmN0aW9uKCkgeworICAgIGRvYy5pdGVyKGRvYy5mcm9udGllciwgTWF0aC5t
aW4oZG9jLmZpcnN0ICsgZG9jLnNpemUsIGNtLmRpc3BsYXkudmlld1RvICsgNTAwKSwgZnVuY3Rp
b24obGluZSkgeworICAgICAgaWYgKGRvYy5mcm9udGllciA+PSBjbS5kaXNwbGF5LnZpZXdGcm9t
KSB7IC8vIFZpc2libGUKICAgICAgICAgdmFyIG9sZFN0eWxlcyA9IGxpbmUuc3R5bGVzOwotICAg
ICAgICBsaW5lLnN0eWxlcyA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRlLCB0cnVlKTsK
KyAgICAgICAgdmFyIGhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgc3RhdGUs
IHRydWUpOworICAgICAgICBsaW5lLnN0eWxlcyA9IGhpZ2hsaWdodGVkLnN0eWxlczsKKyAgICAg
ICAgaWYgKGhpZ2hsaWdodGVkLmNsYXNzZXMpIGxpbmUuc3R5bGVDbGFzc2VzID0gaGlnaGxpZ2h0
ZWQuY2xhc3NlczsKKyAgICAgICAgZWxzZSBpZiAobGluZS5zdHlsZUNsYXNzZXMpIGxpbmUuc3R5
bGVDbGFzc2VzID0gbnVsbDsKICAgICAgICAgdmFyIGlzY2hhbmdlID0gIW9sZFN0eWxlcyB8fCBv
bGRTdHlsZXMubGVuZ3RoICE9IGxpbmUuc3R5bGVzLmxlbmd0aDsKICAgICAgICAgZm9yICh2YXIg
aSA9IDA7ICFpc2NoYW5nZSAmJiBpIDwgb2xkU3R5bGVzLmxlbmd0aDsgKytpKSBpc2NoYW5nZSA9
IG9sZFN0eWxlc1tpXSAhPSBsaW5lLnN0eWxlc1tpXTsKLSAgICAgICAgaWYgKGlzY2hhbmdlKSB7
Ci0gICAgICAgICAgaWYgKHByZXZDaGFuZ2UgJiYgcHJldkNoYW5nZS5lbmQgPT0gZG9jLmZyb250
aWVyKSBwcmV2Q2hhbmdlLmVuZCsrOwotICAgICAgICAgIGVsc2UgY2hhbmdlZC5wdXNoKHByZXZD
aGFuZ2UgPSB7c3RhcnQ6IGRvYy5mcm9udGllciwgZW5kOiBkb2MuZnJvbnRpZXIgKyAxfSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKGlzY2hhbmdlKSByZWdMaW5lQ2hhbmdlKGNtLCBkb2MuZnJv
bnRpZXIsICJ0ZXh0Iik7CiAgICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlTdGF0ZShkb2Mu
bW9kZSwgc3RhdGUpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgcHJvY2Vzc0xpbmUoY20sIGxp
bmUudGV4dCwgc3RhdGUpOwpAQCAtOTI4LDExICsxNDA2LDcgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgfQogICAgIH0pOwot
ICAgIGlmIChjaGFuZ2VkLmxlbmd0aCkKLSAgICAgIG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oKSB7
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlZC5sZW5ndGg7ICsraSkKLSAgICAg
ICAgICByZWdDaGFuZ2UodGhpcywgY2hhbmdlZFtpXS5zdGFydCwgY2hhbmdlZFtpXS5lbmQpOwot
ICAgICAgfSkoKTsKKyAgICB9KTsKICAgfQogCiAgIC8vIEZpbmRzIHRoZSBsaW5lIHRvIHN0YXJ0
IHdpdGggd2hlbiBzdGFydGluZyBhIHBhcnNlLiBUcmllcyB0bwpAQCAtOTY0LDcgKzE0MzgsNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBlbHNlIHN0YXRlID0gY29w
eVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSk7CiAgICAgZG9jLml0ZXIocG9zLCBuLCBmdW5jdGlvbihs
aW5lKSB7CiAgICAgICBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0LCBzdGF0ZSk7Ci0gICAgICB2
YXIgc2F2ZSA9IHBvcyA9PSBuIC0gMSB8fCBwb3MgJSA1ID09IDAgfHwgcG9zID49IGRpc3BsYXku
c2hvd2luZ0Zyb20gJiYgcG9zIDwgZGlzcGxheS5zaG93aW5nVG87CisgICAgICB2YXIgc2F2ZSA9
IHBvcyA9PSBuIC0gMSB8fCBwb3MgJSA1ID09IDAgfHwgcG9zID49IGRpc3BsYXkudmlld0Zyb20g
JiYgcG9zIDwgZGlzcGxheS52aWV3VG87CiAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBzYXZlID8g
Y29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSkgOiBudWxsOwogICAgICAgKytwb3M7CiAgICAgfSk7
CkBAIC05NzYsMTgzICsxNDUwLDIyMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKIAogICBmdW5jdGlvbiBwYWRkaW5nVG9wKGRpc3BsYXkpIHtyZXR1cm4gZGlzcGxheS5saW5l
U3BhY2Uub2Zmc2V0VG9wO30KICAgZnVuY3Rpb24gcGFkZGluZ1ZlcnQoZGlzcGxheSkge3JldHVy
biBkaXNwbGF5Lm1vdmVyLm9mZnNldEhlaWdodCAtIGRpc3BsYXkubGluZVNwYWNlLm9mZnNldEhl
aWdodDt9Ci0gIGZ1bmN0aW9uIHBhZGRpbmdMZWZ0KGRpc3BsYXkpIHsKLSAgICB2YXIgZSA9IHJl
bW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgZWx0KCJwcmUiLCBudWxsLCBudWxs
LCAidGV4dC1hbGlnbjogbGVmdCIpKS5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCAieCIpKTsKLSAg
ICByZXR1cm4gZS5vZmZzZXRMZWZ0OwotICB9Ci0KLSAgZnVuY3Rpb24gbWVhc3VyZUNoYXIoY20s
IGxpbmUsIGNoLCBkYXRhLCBiaWFzKSB7Ci0gICAgdmFyIGRpciA9IC0xOwotICAgIGRhdGEgPSBk
YXRhIHx8IG1lYXN1cmVMaW5lKGNtLCBsaW5lKTsKLSAgICBpZiAoZGF0YS5jcnVkZSkgewotICAg
ICAgdmFyIGxlZnQgPSBkYXRhLmxlZnQgKyBjaCAqIGRhdGEud2lkdGg7Ci0gICAgICByZXR1cm4g
e2xlZnQ6IGxlZnQsIHJpZ2h0OiBsZWZ0ICsgZGF0YS53aWR0aCwgdG9wOiBkYXRhLnRvcCwgYm90
dG9tOiBkYXRhLmJvdHRvbX07Ci0gICAgfQotCi0gICAgZm9yICh2YXIgcG9zID0gY2g7OyBwb3Mg
Kz0gZGlyKSB7Ci0gICAgICB2YXIgciA9IGRhdGFbcG9zXTsKLSAgICAgIGlmIChyKSBicmVhazsK
LSAgICAgIGlmIChkaXIgPCAwICYmIHBvcyA9PSAwKSBkaXIgPSAxOwotICAgIH0KLSAgICBiaWFz
ID0gcG9zID4gY2ggPyAibGVmdCIgOiBwb3MgPCBjaCA/ICJyaWdodCIgOiBiaWFzOwotICAgIGlm
IChiaWFzID09ICJsZWZ0IiAmJiByLmxlZnRTaWRlKSByID0gci5sZWZ0U2lkZTsKLSAgICBlbHNl
IGlmIChiaWFzID09ICJyaWdodCIgJiYgci5yaWdodFNpZGUpIHIgPSByLnJpZ2h0U2lkZTsKLSAg
ICByZXR1cm4ge2xlZnQ6IHBvcyA8IGNoID8gci5yaWdodCA6IHIubGVmdCwKLSAgICAgICAgICAg
IHJpZ2h0OiBwb3MgPiBjaCA/IHIubGVmdCA6IHIucmlnaHQsCi0gICAgICAgICAgICB0b3A6IHIu
dG9wLAotICAgICAgICAgICAgYm90dG9tOiByLmJvdHRvbX07Ci0gIH0KLQotICBmdW5jdGlvbiBm
aW5kQ2FjaGVkTWVhc3VyZW1lbnQoY20sIGxpbmUpIHsKLSAgICB2YXIgY2FjaGUgPSBjbS5kaXNw
bGF5Lm1lYXN1cmVMaW5lQ2FjaGU7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNoZS5sZW5n
dGg7ICsraSkgewotICAgICAgdmFyIG1lbW8gPSBjYWNoZVtpXTsKLSAgICAgIGlmIChtZW1vLnRl
eHQgPT0gbGluZS50ZXh0ICYmIG1lbW8ubWFya2VkU3BhbnMgPT0gbGluZS5tYXJrZWRTcGFucyAm
JgotICAgICAgICAgIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggPT0gbWVtby53aWR0
aCAmJgotICAgICAgICAgIG1lbW8uY2xhc3NlcyA9PSBsaW5lLnRleHRDbGFzcyArICJ8IiArIGxp
bmUud3JhcENsYXNzKQotICAgICAgICByZXR1cm4gbWVtbzsKLSAgICB9Ci0gIH0KLQotICBmdW5j
dGlvbiBjbGVhckNhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7Ci0gICAgdmFyIGV4aXN0cyA9
IGZpbmRDYWNoZWRNZWFzdXJlbWVudChjbSwgbGluZSk7Ci0gICAgaWYgKGV4aXN0cykgZXhpc3Rz
LnRleHQgPSBleGlzdHMubWVhc3VyZSA9IGV4aXN0cy5tYXJrZWRTcGFucyA9IG51bGw7Ci0gIH0K
LQotICBmdW5jdGlvbiBtZWFzdXJlTGluZShjbSwgbGluZSkgewotICAgIC8vIEZpcnN0IGxvb2sg
aW4gdGhlIGNhY2hlCi0gICAgdmFyIGNhY2hlZCA9IGZpbmRDYWNoZWRNZWFzdXJlbWVudChjbSwg
bGluZSk7Ci0gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZC5tZWFzdXJlOwotCi0gICAgLy8g
RmFpbGluZyB0aGF0LCByZWNvbXB1dGUgYW5kIHN0b3JlIHJlc3VsdCBpbiBjYWNoZQotICAgIHZh
ciBtZWFzdXJlID0gbWVhc3VyZUxpbmVJbm5lcihjbSwgbGluZSk7Ci0gICAgdmFyIGNhY2hlID0g
Y20uZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlOwotICAgIHZhciBtZW1vID0ge3RleHQ6IGxpbmUu
dGV4dCwgd2lkdGg6IGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgsCi0gICAgICAgICAg
ICAgICAgbWFya2VkU3BhbnM6IGxpbmUubWFya2VkU3BhbnMsIG1lYXN1cmU6IG1lYXN1cmUsCi0g
ICAgICAgICAgICAgICAgY2xhc3NlczogbGluZS50ZXh0Q2xhc3MgKyAifCIgKyBsaW5lLndyYXBD
bGFzc307Ci0gICAgaWYgKGNhY2hlLmxlbmd0aCA9PSAxNikgY2FjaGVbKytjbS5kaXNwbGF5Lm1l
YXN1cmVMaW5lQ2FjaGVQb3MgJSAxNl0gPSBtZW1vOwotICAgIGVsc2UgY2FjaGUucHVzaChtZW1v
KTsKLSAgICByZXR1cm4gbWVhc3VyZTsKLSAgfQotCi0gIGZ1bmN0aW9uIG1lYXN1cmVMaW5lSW5u
ZXIoY20sIGxpbmUpIHsKLSAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIGxpbmUu
dGV4dC5sZW5ndGggPj0gY20ub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pCi0gICAgICByZXR1
cm4gY3J1ZGVseU1lYXN1cmVMaW5lKGNtLCBsaW5lKTsKLQotICAgIHZhciBkaXNwbGF5ID0gY20u
ZGlzcGxheSwgbWVhc3VyZSA9IGVtcHR5QXJyYXkobGluZS50ZXh0Lmxlbmd0aCk7Ci0gICAgdmFy
IHByZSA9IGJ1aWxkTGluZUNvbnRlbnQoY20sIGxpbmUsIG1lYXN1cmUsIHRydWUpLnByZTsKLQot
ICAgIC8vIElFIGRvZXMgbm90IGNhY2hlIGVsZW1lbnQgcG9zaXRpb25zIG9mIGlubGluZSBlbGVt
ZW50cyBiZXR3ZWVuCi0gICAgLy8gY2FsbHMgdG8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0LiBUaGlz
IG1ha2VzIHRoZSBsb29wIGJlbG93LAotICAgIC8vIHdoaWNoIGdhdGhlcnMgdGhlIHBvc2l0aW9u
cyBvZiBhbGwgdGhlIGNoYXJhY3RlcnMgb24gdGhlIGxpbmUsCi0gICAgLy8gZG8gYW4gYW1vdW50
IG9mIGxheW91dCB3b3JrIHF1YWRyYXRpYyB0byB0aGUgbnVtYmVyIG9mCi0gICAgLy8gY2hhcmFj
dGVycy4gV2hlbiBsaW5lIHdyYXBwaW5nIGlzIG9mZiwgd2UgdHJ5IHRvIGltcHJvdmUgdGhpbmdz
Ci0gICAgLy8gYnkgZmlyc3Qgc3ViZGl2aWRpbmcgdGhlIGxpbmUgaW50byBhIGJ1bmNoIG9mIGlu
bGluZSBibG9ja3MsIHNvCi0gICAgLy8gdGhhdCBJRSBjYW4gcmV1c2UgbW9zdCBvZiB0aGUgbGF5
b3V0IGluZm9ybWF0aW9uIGZyb20gY2FjaGVzCi0gICAgLy8gZm9yIHRob3NlIGJsb2Nrcy4gVGhp
cyBkb2VzIGludGVyZmVyZSB3aXRoIGxpbmUgd3JhcHBpbmcsIHNvIGl0Ci0gICAgLy8gZG9lc24n
dCB3b3JrIHdoZW4gd3JhcHBpbmcgaXMgb24sIGJ1dCBpbiB0aGF0IGNhc2UgdGhlCi0gICAgLy8g
c2l0dWF0aW9uIGlzIHNsaWdodGx5IGJldHRlciwgc2luY2UgSUUgZG9lcyBjYWNoZSBsaW5lLXdy
YXBwaW5nCi0gICAgLy8gaW5mb3JtYXRpb24gYW5kIG9ubHkgcmVjb21wdXRlcyBwZXItbGluZS4K
LSAgICBpZiAoaWUgJiYgIWllX2x0OCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgcHJl
LmNoaWxkTm9kZXMubGVuZ3RoID4gMTAwKSB7Ci0gICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVu
dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgICB2YXIgY2h1bmsgPSAxMCwgbiA9IHBy
ZS5jaGlsZE5vZGVzLmxlbmd0aDsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBjaHVua3MgPSBNYXRo
LmNlaWwobiAvIGNodW5rKTsgaSA8IGNodW5rczsgKytpKSB7Ci0gICAgICAgIHZhciB3cmFwID0g
ZWx0KCJkaXYiLCBudWxsLCBudWxsLCAiZGlzcGxheTogaW5saW5lLWJsb2NrIik7Ci0gICAgICAg
IGZvciAodmFyIGogPSAwOyBqIDwgY2h1bmsgJiYgbjsgKytqKSB7Ci0gICAgICAgICAgd3JhcC5h
cHBlbmRDaGlsZChwcmUuZmlyc3RDaGlsZCk7Ci0gICAgICAgICAgLS1uOworICBmdW5jdGlvbiBw
YWRkaW5nSChkaXNwbGF5KSB7CisgICAgaWYgKGRpc3BsYXkuY2FjaGVkUGFkZGluZ0gpIHJldHVy
biBkaXNwbGF5LmNhY2hlZFBhZGRpbmdIOworICAgIHZhciBlID0gcmVtb3ZlQ2hpbGRyZW5BbmRB
ZGQoZGlzcGxheS5tZWFzdXJlLCBlbHQoInByZSIsICJ4IikpOworICAgIHZhciBzdHlsZSA9IHdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlID8gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZSkgOiBlLmN1
cnJlbnRTdHlsZTsKKyAgICByZXR1cm4gZGlzcGxheS5jYWNoZWRQYWRkaW5nSCA9IHtsZWZ0OiBw
YXJzZUludChzdHlsZS5wYWRkaW5nTGVmdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmlnaHQ6IHBhcnNlSW50KHN0eWxlLnBhZGRpbmdSaWdodCl9OworICB9CisKKyAg
Ly8gRW5zdXJlIHRoZSBsaW5lVmlldy53cmFwcGluZy5oZWlnaHRzIGFycmF5IGlzIHBvcHVsYXRl
ZC4gVGhpcyBpcworICAvLyBhbiBhcnJheSBvZiBib3R0b20gb2Zmc2V0cyBmb3IgdGhlIGxpbmVz
IHRoYXQgbWFrZSB1cCBhIGRyYXduCisgIC8vIGxpbmUuIFdoZW4gbGluZVdyYXBwaW5nIGlzIG9u
LCB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25lCisgIC8vIGhlaWdodC4KKyAgZnVuY3Rpb24g
ZW5zdXJlTGluZUhlaWdodHMoY20sIGxpbmVWaWV3LCByZWN0KSB7CisgICAgdmFyIHdyYXBwaW5n
ID0gY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7CisgICAgdmFyIGN1cldpZHRoID0gd3JhcHBpbmcg
JiYgY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDsKKyAgICBpZiAoIWxpbmVWaWV3Lm1l
YXN1cmUuaGVpZ2h0cyB8fCB3cmFwcGluZyAmJiBsaW5lVmlldy5tZWFzdXJlLndpZHRoICE9IGN1
cldpZHRoKSB7CisgICAgICB2YXIgaGVpZ2h0cyA9IGxpbmVWaWV3Lm1lYXN1cmUuaGVpZ2h0cyA9
IFtdOworICAgICAgaWYgKHdyYXBwaW5nKSB7CisgICAgICAgIGxpbmVWaWV3Lm1lYXN1cmUud2lk
dGggPSBjdXJXaWR0aDsKKyAgICAgICAgdmFyIHJlY3RzID0gbGluZVZpZXcudGV4dC5maXJzdENo
aWxkLmdldENsaWVudFJlY3RzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMu
bGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICAgICAgdmFyIGN1ciA9IHJlY3RzW2ldLCBuZXh0ID0g
cmVjdHNbaSArIDFdOworICAgICAgICAgIGlmIChNYXRoLmFicyhjdXIuYm90dG9tIC0gbmV4dC5i
b3R0b20pID4gMikKKyAgICAgICAgICAgIGhlaWdodHMucHVzaCgoY3VyLmJvdHRvbSArIG5leHQu
dG9wKSAvIDIgLSByZWN0LnRvcCk7CiAgICAgICAgIH0KLSAgICAgICAgZnJhZ21lbnQuYXBwZW5k
Q2hpbGQod3JhcCk7CiAgICAgICB9Ci0gICAgICBwcmUuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwot
ICAgIH0KLQotICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgcHJlKTsK
LQotICAgIHZhciBvdXRlciA9IGdldFJlY3QoZGlzcGxheS5saW5lRGl2KTsKLSAgICB2YXIgdnJh
bmdlcyA9IFtdLCBkYXRhID0gZW1wdHlBcnJheShsaW5lLnRleHQubGVuZ3RoKSwgbWF4Qm90ID0g
cHJlLm9mZnNldEhlaWdodDsKLSAgICAvLyBXb3JrIGFyb3VuZCBhbiBJRTcvOCBidWcgd2hlcmUg
aXQgd2lsbCBzb21ldGltZXMgaGF2ZSByYW5kb21seQotICAgIC8vIHJlcGxhY2VkIG91ciBwcmUg
d2l0aCBhIGNsb25lIGF0IHRoaXMgcG9pbnQuCi0gICAgaWYgKGllX2x0OSAmJiBkaXNwbGF5Lm1l
YXN1cmUuZmlyc3QgIT0gcHJlKQotICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5t
ZWFzdXJlLCBwcmUpOworICAgICAgaGVpZ2h0cy5wdXNoKHJlY3QuYm90dG9tIC0gcmVjdC50b3Ap
OworICAgIH0KKyAgfQorCisgIC8vIEZpbmQgYSBsaW5lIG1hcCAobWFwcGluZyBjaGFyYWN0ZXIg
b2Zmc2V0cyB0byB0ZXh0IG5vZGVzKSBhbmQgYQorICAvLyBtZWFzdXJlbWVudCBjYWNoZSBmb3Ig
dGhlIGdpdmVuIGxpbmUgbnVtYmVyLiAoQSBsaW5lIHZpZXcgbWlnaHQKKyAgLy8gY29udGFpbiBt
dWx0aXBsZSBsaW5lcyB3aGVuIGNvbGxhcHNlZCByYW5nZXMgYXJlIHByZXNlbnQuKQorICBmdW5j
dGlvbiBtYXBGcm9tTGluZVZpZXcobGluZVZpZXcsIGxpbmUsIGxpbmVOKSB7CisgICAgaWYgKGxp
bmVWaWV3LmxpbmUgPT0gbGluZSkKKyAgICAgIHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJl
Lm1hcCwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGV9OworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKykKKyAgICAgIGlmIChsaW5lVmlldy5yZXN0
W2ldID09IGxpbmUpCisgICAgICAgIHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcHNb
aV0sIGNhY2hlOiBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXX07CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKQorICAgICAgaWYgKGxpbmVObyhsaW5l
Vmlldy5yZXN0W2ldKSA+IGxpbmVOKQorICAgICAgICByZXR1cm4ge21hcDogbGluZVZpZXcubWVh
c3VyZS5tYXBzW2ldLCBjYWNoZTogbGluZVZpZXcubWVhc3VyZS5jYWNoZXNbaV0sIGJlZm9yZTog
dHJ1ZX07CisgIH0KKworICAvLyBSZW5kZXIgYSBsaW5lIGludG8gdGhlIGhpZGRlbiBub2RlIGRp
c3BsYXkuZXh0ZXJuYWxNZWFzdXJlZC4gVXNlZAorICAvLyB3aGVuIG1lYXN1cmVtZW50IGlzIG5l
ZWRlZCBmb3IgYSBsaW5lIHRoYXQncyBub3QgaW4gdGhlIHZpZXdwb3J0LgorICBmdW5jdGlvbiB1
cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7CisgICAgbGluZSA9IHZpc3VhbExp
bmUobGluZSk7CisgICAgdmFyIGxpbmVOID0gbGluZU5vKGxpbmUpOworICAgIHZhciB2aWV3ID0g
Y20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbmV3IExpbmVWaWV3KGNtLmRvYywgbGluZSwg
bGluZU4pOworICAgIHZpZXcubGluZU4gPSBsaW5lTjsKKyAgICB2YXIgYnVpbHQgPSB2aWV3LmJ1
aWx0ID0gYnVpbGRMaW5lQ29udGVudChjbSwgdmlldyk7CisgICAgdmlldy50ZXh0ID0gYnVpbHQu
cHJlOworICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRpc3BsYXkubGluZU1lYXN1cmUsIGJ1
aWx0LnByZSk7CisgICAgcmV0dXJuIHZpZXc7CisgIH0KKworICAvLyBHZXQgYSB7dG9wLCBib3R0
b20sIGxlZnQsIHJpZ2h0fSBib3ggKGluIGxpbmUtbG9jYWwgY29vcmRpbmF0ZXMpCisgIC8vIGZv
ciBhIGdpdmVuIGNoYXJhY3Rlci4KKyAgZnVuY3Rpb24gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGNo
LCBiaWFzKSB7CisgICAgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVNZWFz
dXJlRm9yTGluZShjbSwgbGluZSksIGNoLCBiaWFzKTsKKyAgfQorCisgIC8vIEZpbmQgYSBsaW5l
IHZpZXcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gbGluZSBudW1iZXIuCisgIGZ1bmN0
aW9uIGZpbmRWaWV3Rm9yTGluZShjbSwgbGluZU4pIHsKKyAgICBpZiAobGluZU4gPj0gY20uZGlz
cGxheS52aWV3RnJvbSAmJiBsaW5lTiA8IGNtLmRpc3BsYXkudmlld1RvKQorICAgICAgcmV0dXJu
IGNtLmRpc3BsYXkudmlld1tmaW5kVmlld0luZGV4KGNtLCBsaW5lTildOworICAgIHZhciBleHQg
PSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7CisgICAgaWYgKGV4dCAmJiBsaW5lTiA+PSBl
eHQubGluZU4gJiYgbGluZU4gPCBleHQubGluZU4gKyBleHQuc2l6ZSkKKyAgICAgIHJldHVybiBl
eHQ7CisgIH0KKworICAvLyBNZWFzdXJlbWVudCBjYW4gYmUgc3BsaXQgaW4gdHdvIHN0ZXBzLCB0
aGUgc2V0LXVwIHdvcmsgdGhhdAorICAvLyBhcHBsaWVzIHRvIHRoZSB3aG9sZSBsaW5lLCBhbmQg
dGhlIG1lYXN1cmVtZW50IG9mIHRoZSBhY3R1YWwKKyAgLy8gY2hhcmFjdGVyLiBGdW5jdGlvbnMg
bGlrZSBjb29yZHNDaGFyLCB0aGF0IG5lZWQgdG8gZG8gYSBsb3Qgb2YKKyAgLy8gbWVhc3VyZW1l
bnRzIGluIGEgcm93LCBjYW4gdGh1cyBlbnN1cmUgdGhhdCB0aGUgc2V0LXVwIHdvcmsgaXMKKyAg
Ly8gb25seSBkb25lIG9uY2UuCisgIGZ1bmN0aW9uIHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwg
bGluZSkgeworICAgIHZhciBsaW5lTiA9IGxpbmVObyhsaW5lKTsKKyAgICB2YXIgdmlldyA9IGZp
bmRWaWV3Rm9yTGluZShjbSwgbGluZU4pOworICAgIGlmICh2aWV3ICYmICF2aWV3LnRleHQpCisg
ICAgICB2aWV3ID0gbnVsbDsKKyAgICBlbHNlIGlmICh2aWV3ICYmIHZpZXcuY2hhbmdlcykKKyAg
ICAgIHVwZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCB2aWV3LCBsaW5lTiwgZ2V0RGltZW5zaW9ucyhj
bSkpOworICAgIGlmICghdmlldykKKyAgICAgIHZpZXcgPSB1cGRhdGVFeHRlcm5hbE1lYXN1cmVt
ZW50KGNtLCBsaW5lKTsKKworICAgIHZhciBpbmZvID0gbWFwRnJvbUxpbmVWaWV3KHZpZXcsIGxp
bmUsIGxpbmVOKTsKKyAgICByZXR1cm4geworICAgICAgbGluZTogbGluZSwgdmlldzogdmlldywg
cmVjdDogbnVsbCwKKyAgICAgIG1hcDogaW5mby5tYXAsIGNhY2hlOiBpbmZvLmNhY2hlLCBiZWZv
cmU6IGluZm8uYmVmb3JlLAorICAgICAgaGFzSGVpZ2h0czogZmFsc2UKKyAgICB9OworICB9CiAK
LSAgICBmdW5jdGlvbiBtZWFzdXJlUmVjdChyZWN0KSB7Ci0gICAgICB2YXIgdG9wID0gcmVjdC50
b3AgLSBvdXRlci50b3AsIGJvdCA9IHJlY3QuYm90dG9tIC0gb3V0ZXIudG9wOwotICAgICAgaWYg
KGJvdCA+IG1heEJvdCkgYm90ID0gbWF4Qm90OwotICAgICAgaWYgKHRvcCA8IDApIHRvcCA9IDA7
Ci0gICAgICBmb3IgKHZhciBpID0gdnJhbmdlcy5sZW5ndGggLSAyOyBpID49IDA7IGkgLT0gMikg
ewotICAgICAgICB2YXIgcnRvcCA9IHZyYW5nZXNbaV0sIHJib3QgPSB2cmFuZ2VzW2krMV07Ci0g
ICAgICAgIGlmIChydG9wID4gYm90IHx8IHJib3QgPCB0b3ApIGNvbnRpbnVlOwotICAgICAgICBp
ZiAocnRvcCA8PSB0b3AgJiYgcmJvdCA+PSBib3QgfHwKLSAgICAgICAgICAgIHRvcCA8PSBydG9w
ICYmIGJvdCA+PSByYm90IHx8Ci0gICAgICAgICAgICBNYXRoLm1pbihib3QsIHJib3QpIC0gTWF0
aC5tYXgodG9wLCBydG9wKSA+PSAoYm90IC0gdG9wKSA+PiAxKSB7Ci0gICAgICAgICAgdnJhbmdl
c1tpXSA9IE1hdGgubWluKHRvcCwgcnRvcCk7Ci0gICAgICAgICAgdnJhbmdlc1tpKzFdID0gTWF0
aC5tYXgoYm90LCByYm90KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAvLyBHaXZl
biBhIHByZXBhcmVkIG1lYXN1cmVtZW50IG9iamVjdCwgbWVhc3VyZXMgdGhlIHBvc2l0aW9uIG9m
IGFuCisgIC8vIGFjdHVhbCBjaGFyYWN0ZXIgKG9yIGZldGNoZXMgaXQgZnJvbSB0aGUgY2FjaGUp
LgorICBmdW5jdGlvbiBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMp
IHsKKyAgICBpZiAocHJlcGFyZWQuYmVmb3JlKSBjaCA9IC0xOworICAgIHZhciBrZXkgPSBjaCAr
IChiaWFzIHx8ICIiKSwgZm91bmQ7CisgICAgaWYgKHByZXBhcmVkLmNhY2hlLmhhc093blByb3Bl
cnR5KGtleSkpIHsKKyAgICAgIGZvdW5kID0gcHJlcGFyZWQuY2FjaGVba2V5XTsKKyAgICB9IGVs
c2UgeworICAgICAgaWYgKCFwcmVwYXJlZC5yZWN0KQorICAgICAgICBwcmVwYXJlZC5yZWN0ID0g
cHJlcGFyZWQudmlldy50ZXh0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgaWYgKCFw
cmVwYXJlZC5oYXNIZWlnaHRzKSB7CisgICAgICAgIGVuc3VyZUxpbmVIZWlnaHRzKGNtLCBwcmVw
YXJlZC52aWV3LCBwcmVwYXJlZC5yZWN0KTsKKyAgICAgICAgcHJlcGFyZWQuaGFzSGVpZ2h0cyA9
IHRydWU7CiAgICAgICB9Ci0gICAgICBpZiAoaSA8IDApIHsgaSA9IHZyYW5nZXMubGVuZ3RoOyB2
cmFuZ2VzLnB1c2godG9wLCBib3QpOyB9Ci0gICAgICByZXR1cm4ge2xlZnQ6IHJlY3QubGVmdCAt
IG91dGVyLmxlZnQsCi0gICAgICAgICAgICAgIHJpZ2h0OiByZWN0LnJpZ2h0IC0gb3V0ZXIubGVm
dCwKLSAgICAgICAgICAgICAgdG9wOiBpLCBib3R0b206IG51bGx9OwotICAgIH0KLSAgICBmdW5j
dGlvbiBmaW5pc2hSZWN0KHJlY3QpIHsKLSAgICAgIHJlY3QuYm90dG9tID0gdnJhbmdlc1tyZWN0
LnRvcCsxXTsKLSAgICAgIHJlY3QudG9wID0gdnJhbmdlc1tyZWN0LnRvcF07Ci0gICAgfQotCi0g
ICAgZm9yICh2YXIgaSA9IDAsIGN1cjsgaSA8IG1lYXN1cmUubGVuZ3RoOyArK2kpIGlmIChjdXIg
PSBtZWFzdXJlW2ldKSB7Ci0gICAgICB2YXIgbm9kZSA9IGN1ciwgcmVjdCA9IG51bGw7Ci0gICAg
ICAvLyBBIHdpZGdldCBtaWdodCB3cmFwLCBuZWVkcyBzcGVjaWFsIGNhcmUKLSAgICAgIGlmICgv
XGJDb2RlTWlycm9yLXdpZGdldFxiLy50ZXN0KGN1ci5jbGFzc05hbWUpICYmIGN1ci5nZXRDbGll
bnRSZWN0cykgewotICAgICAgICBpZiAoY3VyLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT0gMSkgbm9k
ZSA9IGN1ci5maXJzdENoaWxkOwotICAgICAgICB2YXIgcmVjdHMgPSBub2RlLmdldENsaWVudFJl
Y3RzKCk7Ci0gICAgICAgIGlmIChyZWN0cy5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgcmVjdCA9
IGRhdGFbaV0gPSBtZWFzdXJlUmVjdChyZWN0c1swXSk7Ci0gICAgICAgICAgcmVjdC5yaWdodFNp
ZGUgPSBtZWFzdXJlUmVjdChyZWN0c1tyZWN0cy5sZW5ndGggLSAxXSk7Ci0gICAgICAgIH0KKyAg
ICAgIGZvdW5kID0gbWVhc3VyZUNoYXJJbm5lcihjbSwgcHJlcGFyZWQsIGNoLCBiaWFzKTsKKyAg
ICAgIGlmICghZm91bmQuYm9ndXMpIHByZXBhcmVkLmNhY2hlW2tleV0gPSBmb3VuZDsKKyAgICB9
CisgICAgcmV0dXJuIHtsZWZ0OiBmb3VuZC5sZWZ0LCByaWdodDogZm91bmQucmlnaHQsIHRvcDog
Zm91bmQudG9wLCBib3R0b206IGZvdW5kLmJvdHRvbX07CisgIH0KKworICB2YXIgbnVsbFJlY3Qg
PSB7bGVmdDogMCwgcmlnaHQ6IDAsIHRvcDogMCwgYm90dG9tOiAwfTsKKworICBmdW5jdGlvbiBt
ZWFzdXJlQ2hhcklubmVyKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMpIHsKKyAgICB2YXIgbWFwID0g
cHJlcGFyZWQubWFwOworCisgICAgdmFyIG5vZGUsIHN0YXJ0LCBlbmQsIGNvbGxhcHNlOworICAg
IC8vIEZpcnN0LCBzZWFyY2ggdGhlIGxpbmUgbWFwIGZvciB0aGUgdGV4dCBub2RlIGNvcnJlc3Bv
bmRpbmcgdG8sCisgICAgLy8gb3IgY2xvc2VzdCB0bywgdGhlIHRhcmdldCBjaGFyYWN0ZXIuCisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpICs9IDMpIHsKKyAgICAgIHZhciBt
U3RhcnQgPSBtYXBbaV0sIG1FbmQgPSBtYXBbaSArIDFdOworICAgICAgaWYgKGNoIDwgbVN0YXJ0
KSB7CisgICAgICAgIHN0YXJ0ID0gMDsgZW5kID0gMTsKKyAgICAgICAgY29sbGFwc2UgPSAibGVm
dCI7CisgICAgICB9IGVsc2UgaWYgKGNoIDwgbUVuZCkgeworICAgICAgICBzdGFydCA9IGNoIC0g
bVN0YXJ0OworICAgICAgICBlbmQgPSBzdGFydCArIDE7CisgICAgICB9IGVsc2UgaWYgKGkgPT0g
bWFwLmxlbmd0aCAtIDMgfHwgY2ggPT0gbUVuZCAmJiBtYXBbaSArIDNdID4gY2gpIHsKKyAgICAg
ICAgZW5kID0gbUVuZCAtIG1TdGFydDsKKyAgICAgICAgc3RhcnQgPSBlbmQgLSAxOworICAgICAg
ICBpZiAoY2ggPj0gbUVuZCkgY29sbGFwc2UgPSAicmlnaHQiOworICAgICAgfQorICAgICAgaWYg
KHN0YXJ0ICE9IG51bGwpIHsKKyAgICAgICAgbm9kZSA9IG1hcFtpICsgMl07CisgICAgICAgIGlm
IChtU3RhcnQgPT0gbUVuZCAmJiBiaWFzID09IChub2RlLmluc2VydExlZnQgPyAibGVmdCIgOiAi
cmlnaHQiKSkKKyAgICAgICAgICBjb2xsYXBzZSA9IGJpYXM7CisgICAgICAgIGlmIChiaWFzID09
ICJsZWZ0IiAmJiBzdGFydCA9PSAwKQorICAgICAgICAgIHdoaWxlIChpICYmIG1hcFtpIC0gMl0g
PT0gbWFwW2kgLSAzXSAmJiBtYXBbaSAtIDFdLmluc2VydExlZnQpIHsKKyAgICAgICAgICAgIG5v
ZGUgPSBtYXBbKGkgLT0gMykgKyAyXTsKKyAgICAgICAgICAgIGNvbGxhcHNlID0gImxlZnQiOwor
ICAgICAgICAgIH0KKyAgICAgICAgaWYgKGJpYXMgPT0gInJpZ2h0IiAmJiBzdGFydCA9PSBtRW5k
IC0gbVN0YXJ0KQorICAgICAgICAgIHdoaWxlIChpIDwgbWFwLmxlbmd0aCAtIDMgJiYgbWFwW2kg
KyAzXSA9PSBtYXBbaSArIDRdICYmICFtYXBbaSArIDVdLmluc2VydExlZnQpIHsKKyAgICAgICAg
ICAgIG5vZGUgPSBtYXBbKGkgKz0gMykgKyAyXTsKKyAgICAgICAgICAgIGNvbGxhcHNlID0gInJp
Z2h0IjsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgfQotICAgICAgaWYgKCFy
ZWN0KSByZWN0ID0gZGF0YVtpXSA9IG1lYXN1cmVSZWN0KGdldFJlY3Qobm9kZSkpOwotICAgICAg
aWYgKGN1ci5tZWFzdXJlUmlnaHQpIHJlY3QucmlnaHQgPSBnZXRSZWN0KGN1ci5tZWFzdXJlUmln
aHQpLmxlZnQ7Ci0gICAgICBpZiAoY3VyLmxlZnRTaWRlKSByZWN0LmxlZnRTaWRlID0gbWVhc3Vy
ZVJlY3QoZ2V0UmVjdChjdXIubGVmdFNpZGUpKTsKLSAgICB9Ci0gICAgcmVtb3ZlQ2hpbGRyZW4o
Y20uZGlzcGxheS5tZWFzdXJlKTsKLSAgICBmb3IgKHZhciBpID0gMCwgY3VyOyBpIDwgZGF0YS5s
ZW5ndGg7ICsraSkgaWYgKGN1ciA9IGRhdGFbaV0pIHsKLSAgICAgIGZpbmlzaFJlY3QoY3VyKTsK
LSAgICAgIGlmIChjdXIubGVmdFNpZGUpIGZpbmlzaFJlY3QoY3VyLmxlZnRTaWRlKTsKLSAgICAg
IGlmIChjdXIucmlnaHRTaWRlKSBmaW5pc2hSZWN0KGN1ci5yaWdodFNpZGUpOwogICAgIH0KLSAg
ICByZXR1cm4gZGF0YTsKLSAgfQogCi0gIGZ1bmN0aW9uIGNydWRlbHlNZWFzdXJlTGluZShjbSwg
bGluZSkgewotICAgIHZhciBjb3B5ID0gbmV3IExpbmUobGluZS50ZXh0LnNsaWNlKDAsIDEwMCks
IG51bGwpOwotICAgIGlmIChsaW5lLnRleHRDbGFzcykgY29weS50ZXh0Q2xhc3MgPSBsaW5lLnRl
eHRDbGFzczsKLSAgICB2YXIgbWVhc3VyZSA9IG1lYXN1cmVMaW5lSW5uZXIoY20sIGNvcHkpOwot
ICAgIHZhciBsZWZ0ID0gbWVhc3VyZUNoYXIoY20sIGNvcHksIDAsIG1lYXN1cmUsICJsZWZ0Iik7
Ci0gICAgdmFyIHJpZ2h0ID0gbWVhc3VyZUNoYXIoY20sIGNvcHksIDk5LCBtZWFzdXJlLCAicmln
aHQiKTsKLSAgICByZXR1cm4ge2NydWRlOiB0cnVlLCB0b3A6IGxlZnQudG9wLCBsZWZ0OiBsZWZ0
LmxlZnQsIGJvdHRvbTogbGVmdC5ib3R0b20sIHdpZHRoOiAocmlnaHQucmlnaHQgLSBsZWZ0Lmxl
ZnQpIC8gMTAwfTsKKyAgICB2YXIgcmVjdDsKKyAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAzKSB7
IC8vIElmIGl0IGlzIGEgdGV4dCBub2RlLCB1c2UgYSByYW5nZSB0byByZXRyaWV2ZSB0aGUgY29v
cmRpbmF0ZXMuCisgICAgICB3aGlsZSAoc3RhcnQgJiYgaXNFeHRlbmRpbmdDaGFyKHByZXBhcmVk
LmxpbmUudGV4dC5jaGFyQXQobVN0YXJ0ICsgc3RhcnQpKSkgLS1zdGFydDsKKyAgICAgIHdoaWxl
IChtU3RhcnQgKyBlbmQgPCBtRW5kICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRl
eHQuY2hhckF0KG1TdGFydCArIGVuZCkpKSArK2VuZDsKKyAgICAgIGlmIChpZV91cHRvOCAmJiBz
dGFydCA9PSAwICYmIGVuZCA9PSBtRW5kIC0gbVN0YXJ0KSB7CisgICAgICAgIHJlY3QgPSBub2Rl
LnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICB9IGVsc2UgaWYgKGll
ICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7CisgICAgICAgIHZhciByZWN0cyA9IHJhbmdl
KG5vZGUsIHN0YXJ0LCBlbmQpLmdldENsaWVudFJlY3RzKCk7CisgICAgICAgIGlmIChyZWN0cy5s
ZW5ndGgpCisgICAgICAgICAgcmVjdCA9IHJlY3RzW2JpYXMgPT0gInJpZ2h0IiA/IHJlY3RzLmxl
bmd0aCAtIDEgOiAwXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJlY3QgPSBudWxsUmVjdDsK
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlY3QgPSByYW5nZShub2RlLCBzdGFydCwgZW5kKS5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBJZiBpdCBp
cyBhIHdpZGdldCwgc2ltcGx5IGdldCB0aGUgYm94IGZvciB0aGUgd2hvbGUgd2lkZ2V0LgorICAg
ICAgaWYgKHN0YXJ0ID4gMCkgY29sbGFwc2UgPSBiaWFzID0gInJpZ2h0IjsKKyAgICAgIHZhciBy
ZWN0czsKKyAgICAgIGlmIChjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiAocmVjdHMgPSBub2Rl
LmdldENsaWVudFJlY3RzKCkpLmxlbmd0aCA+IDEpCisgICAgICAgIHJlY3QgPSByZWN0c1tiaWFz
ID09ICJyaWdodCIgPyByZWN0cy5sZW5ndGggLSAxIDogMF07CisgICAgICBlbHNlCisgICAgICAg
IHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIH0KKyAgICBpZiAoaWVf
dXB0bzggJiYgIXN0YXJ0ICYmICghcmVjdCB8fCAhcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSkg
eworICAgICAgdmFyIHJTcGFuID0gbm9kZS5wYXJlbnROb2RlLmdldENsaWVudFJlY3RzKClbMF07
CisgICAgICBpZiAoclNwYW4pCisgICAgICAgIHJlY3QgPSB7bGVmdDogclNwYW4ubGVmdCwgcmln
aHQ6IHJTcGFuLmxlZnQgKyBjaGFyV2lkdGgoY20uZGlzcGxheSksIHRvcDogclNwYW4udG9wLCBi
b3R0b206IHJTcGFuLmJvdHRvbX07CisgICAgICBlbHNlCisgICAgICAgIHJlY3QgPSBudWxsUmVj
dDsKKyAgICB9CisKKyAgICB2YXIgdG9wLCBib3QgPSAocmVjdC5ib3R0b20gKyByZWN0LnRvcCkg
LyAyIC0gcHJlcGFyZWQucmVjdC50b3A7CisgICAgdmFyIGhlaWdodHMgPSBwcmVwYXJlZC52aWV3
Lm1lYXN1cmUuaGVpZ2h0czsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlaWdodHMubGVuZ3Ro
IC0gMTsgaSsrKQorICAgICAgaWYgKGJvdCA8IGhlaWdodHNbaV0pIGJyZWFrOworICAgIHRvcCA9
IGkgPyBoZWlnaHRzW2kgLSAxXSA6IDA7IGJvdCA9IGhlaWdodHNbaV07CisgICAgdmFyIHJlc3Vs
dCA9IHtsZWZ0OiAoY29sbGFwc2UgPT0gInJpZ2h0IiA/IHJlY3QucmlnaHQgOiByZWN0LmxlZnQp
IC0gcHJlcGFyZWQucmVjdC5sZWZ0LAorICAgICAgICAgICAgICAgICAgcmlnaHQ6IChjb2xsYXBz
ZSA9PSAibGVmdCIgPyByZWN0LmxlZnQgOiByZWN0LnJpZ2h0KSAtIHByZXBhcmVkLnJlY3QubGVm
dCwKKyAgICAgICAgICAgICAgICAgIHRvcDogdG9wLCBib3R0b206IGJvdH07CisgICAgaWYgKCFy
ZWN0LmxlZnQgJiYgIXJlY3QucmlnaHQpIHJlc3VsdC5ib2d1cyA9IHRydWU7CisgICAgcmV0dXJu
IHJlc3VsdDsKICAgfQogCi0gIGZ1bmN0aW9uIG1lYXN1cmVMaW5lV2lkdGgoY20sIGxpbmUpIHsK
LSAgICB2YXIgaGFzQmFkU3BhbiA9IGZhbHNlOwotICAgIGlmIChsaW5lLm1hcmtlZFNwYW5zKSBm
b3IgKHZhciBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnM7ICsraSkgewotICAgICAgdmFyIHNw
ID0gbGluZS5tYXJrZWRTcGFuc1tpXTsKLSAgICAgIGlmIChzcC5jb2xsYXBzZWQgJiYgKHNwLnRv
ID09IG51bGwgfHwgc3AudG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkpIGhhc0JhZFNwYW4gPSB0cnVl
OworICBmdW5jdGlvbiBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKGxpbmVWaWV3KSB7Cisg
ICAgaWYgKGxpbmVWaWV3Lm1lYXN1cmUpIHsKKyAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGUg
PSB7fTsKKyAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuaGVpZ2h0cyA9IG51bGw7CisgICAgICBpZiAo
bGluZVZpZXcucmVzdCkgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsg
aSsrKQorICAgICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXSA9IHt9OwogICAgIH0KLSAg
ICB2YXIgY2FjaGVkID0gIWhhc0JhZFNwYW4gJiYgZmluZENhY2hlZE1lYXN1cmVtZW50KGNtLCBs
aW5lKTsKLSAgICBpZiAoY2FjaGVkIHx8IGxpbmUudGV4dC5sZW5ndGggPj0gY20ub3B0aW9ucy5j
cnVkZU1lYXN1cmluZ0Zyb20pCi0gICAgICByZXR1cm4gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGxp
bmUudGV4dC5sZW5ndGgsIGNhY2hlZCAmJiBjYWNoZWQubWVhc3VyZSwgInJpZ2h0IikucmlnaHQ7
CisgIH0KIAotICAgIHZhciBwcmUgPSBidWlsZExpbmVDb250ZW50KGNtLCBsaW5lLCBudWxsLCB0
cnVlKS5wcmU7Ci0gICAgdmFyIGVuZCA9IHByZS5hcHBlbmRDaGlsZCh6ZXJvV2lkdGhFbGVtZW50
KGNtLmRpc3BsYXkubWVhc3VyZSkpOwotICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRpc3Bs
YXkubWVhc3VyZSwgcHJlKTsKLSAgICByZXR1cm4gZ2V0UmVjdChlbmQpLnJpZ2h0IC0gZ2V0UmVj
dChjbS5kaXNwbGF5LmxpbmVEaXYpLmxlZnQ7CisgIGZ1bmN0aW9uIGNsZWFyTGluZU1lYXN1cmVt
ZW50Q2FjaGUoY20pIHsKKyAgICBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZSA9IG51bGw7Cisg
ICAgcmVtb3ZlQ2hpbGRyZW4oY20uZGlzcGxheS5saW5lTWVhc3VyZSk7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjbS5kaXNwbGF5LnZpZXcubGVuZ3RoOyBpKyspCisgICAgICBjbGVhckxpbmVN
ZWFzdXJlbWVudENhY2hlRm9yKGNtLmRpc3BsYXkudmlld1tpXSk7CiAgIH0KIAogICBmdW5jdGlv
biBjbGVhckNhY2hlcyhjbSkgewotICAgIGNtLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5n
dGggPSBjbS5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3MgPSAwOwotICAgIGNtLmRpc3BsYXku
Y2FjaGVkQ2hhcldpZHRoID0gY20uZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ID0gbnVsbDsKKyAg
ICBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKGNtKTsKKyAgICBjbS5kaXNwbGF5LmNhY2hlZENo
YXJXaWR0aCA9IGNtLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IGNtLmRpc3BsYXkuY2FjaGVk
UGFkZGluZ0ggPSBudWxsOwogICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGNtLmRp
c3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlOwogICAgIGNtLmRpc3BsYXkubGluZU51bUNoYXJz
ID0gbnVsbDsKICAgfQpAQCAtMTE2MCw3ICsxNjczLDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIHBhZ2VTY3JvbGxYKCkgeyByZXR1cm4gd2luZG93LnBh
Z2VYT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSku
c2Nyb2xsTGVmdDsgfQogICBmdW5jdGlvbiBwYWdlU2Nyb2xsWSgpIHsgcmV0dXJuIHdpbmRvdy5w
YWdlWU9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkp
LnNjcm9sbFRvcDsgfQogCi0gIC8vIENvbnRleHQgaXMgb25lIG9mICJsaW5lIiwgImRpdiIgKGRp
c3BsYXkubGluZURpdiksICJsb2NhbCIvbnVsbCAoZWRpdG9yKSwgb3IgInBhZ2UiCisgIC8vIENv
bnZlcnRzIGEge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodH0gYm94IGZyb20gbGluZS1sb2NhbAor
ICAvLyBjb29yZGluYXRlcyBpbnRvIGFub3RoZXIgY29vcmRpbmF0ZSBzeXN0ZW0uIENvbnRleHQg
bWF5IGJlIG9uZSBvZgorICAvLyAibGluZSIsICJkaXYiIChkaXNwbGF5LmxpbmVEaXYpLCAibG9j
YWwiL251bGwgKGVkaXRvciksIG9yICJwYWdlIi4KICAgZnVuY3Rpb24gaW50b0Nvb3JkU3lzdGVt
KGNtLCBsaW5lT2JqLCByZWN0LCBjb250ZXh0KSB7CiAgICAgaWYgKGxpbmVPYmoud2lkZ2V0cykg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lT2JqLndpZGdldHMubGVuZ3RoOyArK2kpIGlmIChsaW5l
T2JqLndpZGdldHNbaV0uYWJvdmUpIHsKICAgICAgIHZhciBzaXplID0gd2lkZ2V0SGVpZ2h0KGxp
bmVPYmoud2lkZ2V0c1tpXSk7CkBAIC0xMTY4LDExICsxNjgzLDExIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAgICBpZiAoY29udGV4dCA9PSAibGluZSIpIHJl
dHVybiByZWN0OwogICAgIGlmICghY29udGV4dCkgY29udGV4dCA9ICJsb2NhbCI7Ci0gICAgdmFy
IHlPZmYgPSBoZWlnaHRBdExpbmUoY20sIGxpbmVPYmopOworICAgIHZhciB5T2ZmID0gaGVpZ2h0
QXRMaW5lKGxpbmVPYmopOwogICAgIGlmIChjb250ZXh0ID09ICJsb2NhbCIpIHlPZmYgKz0gcGFk
ZGluZ1RvcChjbS5kaXNwbGF5KTsKICAgICBlbHNlIHlPZmYgLT0gY20uZGlzcGxheS52aWV3T2Zm
c2V0OwogICAgIGlmIChjb250ZXh0ID09ICJwYWdlIiB8fCBjb250ZXh0ID09ICJ3aW5kb3ciKSB7
Ci0gICAgICB2YXIgbE9mZiA9IGdldFJlY3QoY20uZGlzcGxheS5saW5lU3BhY2UpOworICAgICAg
dmFyIGxPZmYgPSBjbS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsK
ICAgICAgIHlPZmYgKz0gbE9mZi50b3AgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdl
U2Nyb2xsWSgpKTsKICAgICAgIHZhciB4T2ZmID0gbE9mZi5sZWZ0ICsgKGNvbnRleHQgPT0gIndp
bmRvdyIgPyAwIDogcGFnZVNjcm9sbFgoKSk7CiAgICAgICByZWN0LmxlZnQgKz0geE9mZjsgcmVj
dC5yaWdodCArPSB4T2ZmOwpAQCAtMTE4MSw4ICsxNjk2LDggQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIHJlY3Q7CiAgIH0KIAotICAvLyBDb250ZXh0IG1h
eSBiZSAid2luZG93IiwgInBhZ2UiLCAiZGl2Iiwgb3IgImxvY2FsIi9udWxsCi0gIC8vIFJlc3Vs
dCBpcyBpbiAiZGl2IiBjb29yZHMKKyAgLy8gQ292ZXJ0cyBhIGJveCBmcm9tICJkaXYiIGNvb3Jk
cyB0byBhbm90aGVyIGNvb3JkaW5hdGUgc3lzdGVtLgorICAvLyBDb250ZXh0IG1heSBiZSAid2lu
ZG93IiwgInBhZ2UiLCAiZGl2Iiwgb3IgImxvY2FsIi9udWxsLgogICBmdW5jdGlvbiBmcm9tQ29v
cmRTeXN0ZW0oY20sIGNvb3JkcywgY29udGV4dCkgewogICAgIGlmIChjb250ZXh0ID09ICJkaXYi
KSByZXR1cm4gY29vcmRzOwogICAgIHZhciBsZWZ0ID0gY29vcmRzLmxlZnQsIHRvcCA9IGNvb3Jk
cy50b3A7CkBAIC0xMTkxLDI1ICsxNzA2LDI4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgICAgbGVmdCAtPSBwYWdlU2Nyb2xsWCgpOwogICAgICAgdG9wIC09IHBhZ2VT
Y3JvbGxZKCk7CiAgICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJsb2NhbCIgfHwgIWNvbnRleHQp
IHsKLSAgICAgIHZhciBsb2NhbEJveCA9IGdldFJlY3QoY20uZGlzcGxheS5zaXplcik7CisgICAg
ICB2YXIgbG9jYWxCb3ggPSBjbS5kaXNwbGF5LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OwogICAgICAgbGVmdCArPSBsb2NhbEJveC5sZWZ0OwogICAgICAgdG9wICs9IGxvY2FsQm94LnRv
cDsKICAgICB9CiAKLSAgICB2YXIgbGluZVNwYWNlQm94ID0gZ2V0UmVjdChjbS5kaXNwbGF5Lmxp
bmVTcGFjZSk7CisgICAgdmFyIGxpbmVTcGFjZUJveCA9IGNtLmRpc3BsYXkubGluZVNwYWNlLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgIHJldHVybiB7bGVmdDogbGVmdCAtIGxpbmVTcGFj
ZUJveC5sZWZ0LCB0b3A6IHRvcCAtIGxpbmVTcGFjZUJveC50b3B9OwogICB9CiAKICAgZnVuY3Rp
b24gY2hhckNvb3JkcyhjbSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBiaWFzKSB7CiAgICAgaWYg
KCFsaW5lT2JqKSBsaW5lT2JqID0gZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTsKLSAgICByZXR1
cm4gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBtZWFzdXJlQ2hhcihjbSwgbGluZU9iaiwg
cG9zLmNoLCBudWxsLCBiaWFzKSwgY29udGV4dCk7CisgICAgcmV0dXJuIGludG9Db29yZFN5c3Rl
bShjbSwgbGluZU9iaiwgbWVhc3VyZUNoYXIoY20sIGxpbmVPYmosIHBvcy5jaCwgYmlhcyksIGNv
bnRleHQpOwogICB9CiAKLSAgZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQs
IGxpbmVPYmosIG1lYXN1cmVtZW50KSB7CisgIC8vIFJldHVybnMgYSBib3ggZm9yIGEgZ2l2ZW4g
Y3Vyc29yIHBvc2l0aW9uLCB3aGljaCBtYXkgaGF2ZSBhbgorICAvLyAnb3RoZXInIHByb3BlcnR5
IGNvbnRhaW5pbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBzZWNvbmRhcnkgY3Vyc29yCisgIC8vIG9u
IGEgYmlkaSBib3VuZGFyeS4KKyAgZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRl
eHQsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSkgewogICAgIGxpbmVPYmogPSBsaW5lT2JqIHx8
IGdldExpbmUoY20uZG9jLCBwb3MubGluZSk7Ci0gICAgaWYgKCFtZWFzdXJlbWVudCkgbWVhc3Vy
ZW1lbnQgPSBtZWFzdXJlTGluZShjbSwgbGluZU9iaik7CisgICAgaWYgKCFwcmVwYXJlZE1lYXN1
cmUpIHByZXBhcmVkTWVhc3VyZSA9IHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZU9iaik7
CiAgICAgZnVuY3Rpb24gZ2V0KGNoLCByaWdodCkgewotICAgICAgdmFyIG0gPSBtZWFzdXJlQ2hh
cihjbSwgbGluZU9iaiwgY2gsIG1lYXN1cmVtZW50LCByaWdodCA/ICJyaWdodCIgOiAibGVmdCIp
OworICAgICAgdmFyIG0gPSBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUs
IGNoLCByaWdodCA/ICJyaWdodCIgOiAibGVmdCIpOwogICAgICAgaWYgKHJpZ2h0KSBtLmxlZnQg
PSBtLnJpZ2h0OyBlbHNlIG0ucmlnaHQgPSBtLmxlZnQ7CiAgICAgICByZXR1cm4gaW50b0Nvb3Jk
U3lzdGVtKGNtLCBsaW5lT2JqLCBtLCBjb250ZXh0KTsKICAgICB9CkBAIC0xMjM1LDQzICsxNzUz
LDU5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiB2YWw7
CiAgIH0KIAorICAvLyBVc2VkIHRvIGNoZWFwbHkgZXN0aW1hdGUgdGhlIGNvb3JkaW5hdGVzIGZv
ciBhIHBvc2l0aW9uLiBVc2VkIGZvcgorICAvLyBpbnRlcm1lZGlhdGUgc2Nyb2xsIHVwZGF0ZXMu
CisgIGZ1bmN0aW9uIGVzdGltYXRlQ29vcmRzKGNtLCBwb3MpIHsKKyAgICB2YXIgbGVmdCA9IDAs
IHBvcyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpOworICAgIGlmICghY20ub3B0aW9ucy5saW5lV3Jh
cHBpbmcpIGxlZnQgPSBjaGFyV2lkdGgoY20uZGlzcGxheSkgKiBwb3MuY2g7CisgICAgdmFyIGxp
bmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOworICAgIHZhciB0b3AgPSBoZWlnaHRB
dExpbmUobGluZU9iaikgKyBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpOworICAgIHJldHVybiB7bGVm
dDogbGVmdCwgcmlnaHQ6IGxlZnQsIHRvcDogdG9wLCBib3R0b206IHRvcCArIGxpbmVPYmouaGVp
Z2h0fTsKKyAgfQorCisgIC8vIFBvc2l0aW9ucyByZXR1cm5lZCBieSBjb29yZHNDaGFyIGNvbnRh
aW4gc29tZSBleHRyYSBpbmZvcm1hdGlvbi4KKyAgLy8geFJlbCBpcyB0aGUgcmVsYXRpdmUgeCBw
b3NpdGlvbiBvZiB0aGUgaW5wdXQgY29vcmRpbmF0ZXMgY29tcGFyZWQKKyAgLy8gdG8gdGhlIGZv
dW5kIHBvc2l0aW9uIChzbyB4UmVsID4gMCBtZWFucyB0aGUgY29vcmRpbmF0ZXMgYXJlIHRvCisg
IC8vIHRoZSByaWdodCBvZiB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uLCBmb3IgZXhhbXBsZSkuIFdo
ZW4gb3V0c2lkZQorICAvLyBpcyB0cnVlLCB0aGF0IG1lYW5zIHRoZSBjb29yZGluYXRlcyBsaWUg
b3V0c2lkZSB0aGUgbGluZSdzCisgIC8vIHZlcnRpY2FsIHJhbmdlLgogICBmdW5jdGlvbiBQb3NX
aXRoSW5mbyhsaW5lLCBjaCwgb3V0c2lkZSwgeFJlbCkgewotICAgIHZhciBwb3MgPSBuZXcgUG9z
KGxpbmUsIGNoKTsKKyAgICB2YXIgcG9zID0gUG9zKGxpbmUsIGNoKTsKICAgICBwb3MueFJlbCA9
IHhSZWw7CiAgICAgaWYgKG91dHNpZGUpIHBvcy5vdXRzaWRlID0gdHJ1ZTsKICAgICByZXR1cm4g
cG9zOwogICB9CiAKLSAgLy8gQ29vcmRzIG11c3QgYmUgbGluZVNwYWNlLWxvY2FsCisgIC8vIENv
bXB1dGUgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiBjbG9zZXN0IHRvIHRoZSBnaXZlbiBjb29yZGlu
YXRlcy4KKyAgLy8gSW5wdXQgbXVzdCBiZSBsaW5lU3BhY2UtbG9jYWwgKCJkaXYiIGNvb3JkaW5h
dGUgc3lzdGVtKS4KICAgZnVuY3Rpb24gY29vcmRzQ2hhcihjbSwgeCwgeSkgewogICAgIHZhciBk
b2MgPSBjbS5kb2M7CiAgICAgeSArPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7CiAgICAgaWYgKHkg
PCAwKSByZXR1cm4gUG9zV2l0aEluZm8oZG9jLmZpcnN0LCAwLCB0cnVlLCAtMSk7Ci0gICAgdmFy
IGxpbmVObyA9IGxpbmVBdEhlaWdodChkb2MsIHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNp
emUgLSAxOwotICAgIGlmIChsaW5lTm8gPiBsYXN0KQorICAgIHZhciBsaW5lTiA9IGxpbmVBdEhl
aWdodChkb2MsIHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxOworICAgIGlmIChs
aW5lTiA+IGxhc3QpCiAgICAgICByZXR1cm4gUG9zV2l0aEluZm8oZG9jLmZpcnN0ICsgZG9jLnNp
emUgLSAxLCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgsIHRydWUsIDEpOwogICAgIGlm
ICh4IDwgMCkgeCA9IDA7CiAKKyAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lTik7
CiAgICAgZm9yICg7OykgewotICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZU5v
KTsKLSAgICAgIHZhciBmb3VuZCA9IGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwgbGluZU5v
LCB4LCB5KTsKKyAgICAgIHZhciBmb3VuZCA9IGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwg
bGluZU4sIHgsIHkpOwogICAgICAgdmFyIG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5l
T2JqKTsKLSAgICAgIHZhciBtZXJnZWRQb3MgPSBtZXJnZWQgJiYgbWVyZ2VkLmZpbmQoKTsKKyAg
ICAgIHZhciBtZXJnZWRQb3MgPSBtZXJnZWQgJiYgbWVyZ2VkLmZpbmQoMCwgdHJ1ZSk7CiAgICAg
ICBpZiAobWVyZ2VkICYmIChmb3VuZC5jaCA+IG1lcmdlZFBvcy5mcm9tLmNoIHx8IGZvdW5kLmNo
ID09IG1lcmdlZFBvcy5mcm9tLmNoICYmIGZvdW5kLnhSZWwgPiAwKSkKLSAgICAgICAgbGluZU5v
ID0gbWVyZ2VkUG9zLnRvLmxpbmU7CisgICAgICAgIGxpbmVOID0gbGluZU5vKGxpbmVPYmogPSBt
ZXJnZWRQb3MudG8ubGluZSk7CiAgICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmb3VuZDsKICAg
ICB9CiAgIH0KIAogICBmdW5jdGlvbiBjb29yZHNDaGFySW5uZXIoY20sIGxpbmVPYmosIGxpbmVO
bywgeCwgeSkgewotICAgIHZhciBpbm5lck9mZiA9IHkgLSBoZWlnaHRBdExpbmUoY20sIGxpbmVP
YmopOworICAgIHZhciBpbm5lck9mZiA9IHkgLSBoZWlnaHRBdExpbmUobGluZU9iaik7CiAgICAg
dmFyIHdyb25nTGluZSA9IGZhbHNlLCBhZGp1c3QgPSAyICogY20uZGlzcGxheS53cmFwcGVyLmNs
aWVudFdpZHRoOwotICAgIHZhciBtZWFzdXJlbWVudCA9IG1lYXN1cmVMaW5lKGNtLCBsaW5lT2Jq
KTsKKyAgICB2YXIgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBs
aW5lT2JqKTsKIAogICAgIGZ1bmN0aW9uIGdldFgoY2gpIHsKLSAgICAgIHZhciBzcCA9IGN1cnNv
ckNvb3JkcyhjbSwgUG9zKGxpbmVObywgY2gpLCAibGluZSIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZU9iaiwgbWVhc3VyZW1lbnQpOworICAgICAgdmFyIHNwID0gY3Vyc29yQ29v
cmRzKGNtLCBQb3MobGluZU5vLCBjaCksICJsaW5lIiwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJl
KTsKICAgICAgIHdyb25nTGluZSA9IHRydWU7CiAgICAgICBpZiAoaW5uZXJPZmYgPiBzcC5ib3R0
b20pIHJldHVybiBzcC5sZWZ0IC0gYWRqdXN0OwogICAgICAgZWxzZSBpZiAoaW5uZXJPZmYgPCBz
cC50b3ApIHJldHVybiBzcC5sZWZ0ICsgYWRqdXN0OwpAQCAtMTI4OSw5ICsxODIzLDkgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBpZiAoYmlkaSA/IHRvID09IGZy
b20gfHwgdG8gPT0gbW92ZVZpc3VhbGx5KGxpbmVPYmosIGZyb20sIDEpIDogdG8gLSBmcm9tIDw9
IDEpIHsKICAgICAgICAgdmFyIGNoID0geCA8IGZyb21YIHx8IHggLSBmcm9tWCA8PSB0b1ggLSB4
ID8gZnJvbSA6IHRvOwogICAgICAgICB2YXIgeERpZmYgPSB4IC0gKGNoID09IGZyb20gPyBmcm9t
WCA6IHRvWCk7Ci0gICAgICAgIHdoaWxlIChpc0V4dGVuZGluZ0NoYXIudGVzdChsaW5lT2JqLnRl
eHQuY2hhckF0KGNoKSkpICsrY2g7CisgICAgICAgIHdoaWxlIChpc0V4dGVuZGluZ0NoYXIobGlu
ZU9iai50ZXh0LmNoYXJBdChjaCkpKSArK2NoOwogICAgICAgICB2YXIgcG9zID0gUG9zV2l0aElu
Zm8obGluZU5vLCBjaCwgY2ggPT0gZnJvbSA/IGZyb21PdXRzaWRlIDogdG9PdXRzaWRlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeERpZmYgPCAwID8gLTEgOiB4RGlmZiA/IDEgOiAw
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEaWZmIDwgLTEgPyAtMSA6IHhEaWZm
ID4gMSA/IDEgOiAwKTsKICAgICAgICAgcmV0dXJuIHBvczsKICAgICAgIH0KICAgICAgIHZhciBz
dGVwID0gTWF0aC5jZWlsKGRpc3QgLyAyKSwgbWlkZGxlID0gZnJvbSArIHN0ZXA7CkBAIC0xMzA2
LDYgKzE4NDAsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgfQogCiAg
IHZhciBtZWFzdXJlVGV4dDsKKyAgLy8gQ29tcHV0ZSB0aGUgZGVmYXVsdCB0ZXh0IGhlaWdodC4K
ICAgZnVuY3Rpb24gdGV4dEhlaWdodChkaXNwbGF5KSB7CiAgICAgaWYgKGRpc3BsYXkuY2FjaGVk
VGV4dEhlaWdodCAhPSBudWxsKSByZXR1cm4gZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0OwogICAg
IGlmIChtZWFzdXJlVGV4dCA9PSBudWxsKSB7CkBAIC0xMzI1LDg0ICsxODYwLDg5IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBoZWlnaHQgfHwgMTsKICAg
fQogCisgIC8vIENvbXB1dGUgdGhlIGRlZmF1bHQgY2hhcmFjdGVyIHdpZHRoLgogICBmdW5jdGlv
biBjaGFyV2lkdGgoZGlzcGxheSkgewogICAgIGlmIChkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCAh
PSBudWxsKSByZXR1cm4gZGlzcGxheS5jYWNoZWRDaGFyV2lkdGg7Ci0gICAgdmFyIGFuY2hvciA9
IGVsdCgic3BhbiIsICJ4Iik7CisgICAgdmFyIGFuY2hvciA9IGVsdCgic3BhbiIsICJ4eHh4eHh4
eHh4Iik7CiAgICAgdmFyIHByZSA9IGVsdCgicHJlIiwgW2FuY2hvcl0pOwogICAgIHJlbW92ZUNo
aWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgcHJlKTsKLSAgICB2YXIgd2lkdGggPSBhbmNo
b3Iub2Zmc2V0V2lkdGg7CisgICAgdmFyIHJlY3QgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCksIHdpZHRoID0gKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpIC8gMTA7CiAgICAgaWYgKHdp
ZHRoID4gMikgZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSB3aWR0aDsKICAgICByZXR1cm4gd2lk
dGggfHwgMTA7CiAgIH0KIAogICAvLyBPUEVSQVRJT05TCiAKLSAgLy8gT3BlcmF0aW9ucyBhcmUg
dXNlZCB0byB3cmFwIGNoYW5nZXMgaW4gc3VjaCBhIHdheSB0aGF0IGVhY2gKLSAgLy8gY2hhbmdl
IHdvbid0IGhhdmUgdG8gdXBkYXRlIHRoZSBjdXJzb3IgYW5kIGRpc3BsYXkgKHdoaWNoIHdvdWxk
Ci0gIC8vIGJlIGF3a3dhcmQsIHNsb3csIGFuZCBlcnJvci1wcm9uZSksIGJ1dCBpbnN0ZWFkIHVw
ZGF0ZXMgYXJlCi0gIC8vIGJhdGNoZWQgYW5kIHRoZW4gYWxsIGNvbWJpbmVkIGFuZCBleGVjdXRl
ZCBhdCBvbmNlLgorICAvLyBPcGVyYXRpb25zIGFyZSB1c2VkIHRvIHdyYXAgYSBzZXJpZXMgb2Yg
Y2hhbmdlcyB0byB0aGUgZWRpdG9yCisgIC8vIHN0YXRlIGluIHN1Y2ggYSB3YXkgdGhhdCBlYWNo
IGNoYW5nZSB3b24ndCBoYXZlIHRvIHVwZGF0ZSB0aGUKKyAgLy8gY3Vyc29yIGFuZCBkaXNwbGF5
ICh3aGljaCB3b3VsZCBiZSBhd2t3YXJkLCBzbG93LCBhbmQKKyAgLy8gZXJyb3ItcHJvbmUpLiBJ
bnN0ZWFkLCBkaXNwbGF5IHVwZGF0ZXMgYXJlIGJhdGNoZWQgYW5kIHRoZW4gYWxsCisgIC8vIGNv
bWJpbmVkIGFuZCBleGVjdXRlZCBhdCBvbmNlLgogCiAgIHZhciBuZXh0T3BJZCA9IDA7CisgIC8v
IFN0YXJ0IGEgbmV3IG9wZXJhdGlvbi4KICAgZnVuY3Rpb24gc3RhcnRPcGVyYXRpb24oY20pIHsK
ICAgICBjbS5jdXJPcCA9IHsKLSAgICAgIC8vIEFuIGFycmF5IG9mIHJhbmdlcyBvZiBsaW5lcyB0
aGF0IGhhdmUgdG8gYmUgdXBkYXRlZC4gU2VlCi0gICAgICAvLyB1cGRhdGVEaXNwbGF5LgotICAg
ICAgY2hhbmdlczogW10sCi0gICAgICBmb3JjZVVwZGF0ZTogZmFsc2UsCi0gICAgICB1cGRhdGVJ
bnB1dDogbnVsbCwKLSAgICAgIHVzZXJTZWxDaGFuZ2U6IG51bGwsCi0gICAgICB0ZXh0Q2hhbmdl
ZDogbnVsbCwKLSAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IGZhbHNlLAotICAgICAgY3Vyc29yQWN0
aXZpdHk6IGZhbHNlLAotICAgICAgdXBkYXRlTWF4TGluZTogZmFsc2UsCi0gICAgICB1cGRhdGVT
Y3JvbGxQb3M6IGZhbHNlLAotICAgICAgaWQ6ICsrbmV4dE9wSWQKKyAgICAgIHZpZXdDaGFuZ2Vk
OiBmYWxzZSwgICAgICAvLyBGbGFnIHRoYXQgaW5kaWNhdGVzIHRoYXQgbGluZXMgbWlnaHQgbmVl
ZCB0byBiZSByZWRyYXduCisgICAgICBzdGFydEhlaWdodDogY20uZG9jLmhlaWdodCwgLy8gVXNl
ZCB0byBkZXRlY3QgbmVlZCB0byB1cGRhdGUgc2Nyb2xsYmFyCisgICAgICBmb3JjZVVwZGF0ZTog
ZmFsc2UsICAgICAgLy8gVXNlZCB0byBmb3JjZSBhIHJlZHJhdworICAgICAgdXBkYXRlSW5wdXQ6
IG51bGwsICAgICAgIC8vIFdoZXRoZXIgdG8gcmVzZXQgdGhlIGlucHV0IHRleHRhcmVhCisgICAg
ICB0eXBpbmc6IGZhbHNlLCAgICAgICAgICAgLy8gV2hldGhlciB0aGlzIHJlc2V0IHNob3VsZCBi
ZSBjYXJlZnVsIHRvIGxlYXZlIGV4aXN0aW5nIHRleHQgKGZvciBjb21wb3NpdGluZykKKyAgICAg
IGNoYW5nZU9ianM6IG51bGwsICAgICAgICAvLyBBY2N1bXVsYXRlZCBjaGFuZ2VzLCBmb3IgZmly
aW5nIGNoYW5nZSBldmVudHMKKyAgICAgIG9yaWdpbjogbnVsbCwgICAgICAgICAgICAvLyBTZWxl
Y3Rpb24ncyBvcmlnaW4KKyAgICAgIGN1cnNvckFjdGl2aXR5OiBmYWxzZSwgICAvLyBXaGV0aGVy
IHRvIGZpcmUgYSBjdXJzb3JBY3Rpdml0eSBldmVudAorICAgICAgc2VsZWN0aW9uQ2hhbmdlZDog
ZmFsc2UsIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBuZWVkcyB0byBiZSByZWRyYXduCisgICAg
ICB1cGRhdGVNYXhMaW5lOiBmYWxzZSwgICAgLy8gU2V0IHdoZW4gdGhlIHdpZGVzdCBsaW5lIG5l
ZWRzIHRvIGJlIGRldGVybWluZWQgYW5ldworICAgICAgc2Nyb2xsTGVmdDogbnVsbCwgc2Nyb2xs
VG9wOiBudWxsLCAvLyBJbnRlcm1lZGlhdGUgc2Nyb2xsIHBvc2l0aW9uLCBub3QgcHVzaGVkIHRv
IERPTSB5ZXQKKyAgICAgIHNjcm9sbFRvUG9zOiBudWxsLCAgICAgICAvLyBVc2VkIHRvIHNjcm9s
bCB0byBhIHNwZWNpZmljIHBvc2l0aW9uCisgICAgICBpZDogKytuZXh0T3BJZCAgICAgICAgICAg
Ly8gVW5pcXVlIElECiAgICAgfTsKICAgICBpZiAoIWRlbGF5ZWRDYWxsYmFja0RlcHRoKyspIGRl
bGF5ZWRDYWxsYmFja3MgPSBbXTsKICAgfQogCisgIC8vIEZpbmlzaCBhbiBvcGVyYXRpb24sIHVw
ZGF0aW5nIHRoZSBkaXNwbGF5IGFuZCBzaWduYWxsaW5nIGRlbGF5ZWQgZXZlbnRzCiAgIGZ1bmN0
aW9uIGVuZE9wZXJhdGlvbihjbSkgewogICAgIHZhciBvcCA9IGNtLmN1ck9wLCBkb2MgPSBjbS5k
b2MsIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwogICAgIGNtLmN1ck9wID0gbnVsbDsKIAotICAgIGlm
IChvcC51cGRhdGVNYXhMaW5lKSBjb21wdXRlTWF4TGVuZ3RoKGNtKTsKLSAgICBpZiAoZGlzcGxh
eS5tYXhMaW5lQ2hhbmdlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgZGlzcGxheS5t
YXhMaW5lKSB7Ci0gICAgICB2YXIgd2lkdGggPSBtZWFzdXJlTGluZVdpZHRoKGNtLCBkaXNwbGF5
Lm1heExpbmUpOwotICAgICAgZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9IE1hdGgubWF4
KDAsIHdpZHRoICsgMyArIHNjcm9sbGVyQ3V0T2ZmKSArICJweCI7Ci0gICAgICBkaXNwbGF5Lm1h
eExpbmVDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICB2YXIgbWF4U2Nyb2xsTGVmdCA9IE1hdGgubWF4
KDAsIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCArIGRpc3BsYXkuc2l6ZXIub2Zmc2V0V2lkdGgg
LSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKTsKLSAgICAgIGlmIChtYXhTY3JvbGxMZWZ0
IDwgZG9jLnNjcm9sbExlZnQgJiYgIW9wLnVwZGF0ZVNjcm9sbFBvcykKLSAgICAgICAgc2V0U2Ny
b2xsTGVmdChjbSwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0LCBtYXhTY3Jv
bGxMZWZ0KSwgdHJ1ZSk7Ci0gICAgfQotICAgIHZhciBuZXdTY3JvbGxQb3MsIHVwZGF0ZWQ7Ci0g
ICAgaWYgKG9wLnVwZGF0ZVNjcm9sbFBvcykgewotICAgICAgbmV3U2Nyb2xsUG9zID0gb3AudXBk
YXRlU2Nyb2xsUG9zOwotICAgIH0gZWxzZSBpZiAob3Auc2VsZWN0aW9uQ2hhbmdlZCAmJiBkaXNw
bGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCkgeyAvLyBkb24ndCByZXNjcm9sbCBpZiBub3Qgdmlz
aWJsZQotICAgICAgdmFyIGNvb3JkcyA9IGN1cnNvckNvb3JkcyhjbSwgZG9jLnNlbC5oZWFkKTsK
LSAgICAgIG5ld1Njcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgY29vcmRzLmxlZnQs
IGNvb3Jkcy50b3AsIGNvb3Jkcy5sZWZ0LCBjb29yZHMuYm90dG9tKTsKLSAgICB9Ci0gICAgaWYg
KG9wLmNoYW5nZXMubGVuZ3RoIHx8IG9wLmZvcmNlVXBkYXRlIHx8IG5ld1Njcm9sbFBvcyAmJiBu
ZXdTY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHsKLSAgICAgIHVwZGF0ZWQgPSB1cGRhdGVE
aXNwbGF5KGNtLCBvcC5jaGFuZ2VzLCBuZXdTY3JvbGxQb3MgJiYgbmV3U2Nyb2xsUG9zLnNjcm9s
bFRvcCwgb3AuZm9yY2VVcGRhdGUpOworICAgIGlmIChvcC51cGRhdGVNYXhMaW5lKSBmaW5kTWF4
TGluZShjbSk7CisKKyAgICAvLyBJZiBpdCBsb29rcyBsaWtlIGFuIHVwZGF0ZSBtaWdodCBiZSBu
ZWVkZWQsIGNhbGwgdXBkYXRlRGlzcGxheQorICAgIGlmIChvcC52aWV3Q2hhbmdlZCB8fCBvcC5m
b3JjZVVwZGF0ZSB8fCBvcC5zY3JvbGxUb3AgIT0gbnVsbCB8fAorICAgICAgICBvcC5zY3JvbGxU
b1BvcyAmJiAob3Auc2Nyb2xsVG9Qb3MuZnJvbS5saW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Auc2Nyb2xsVG9Qb3MudG8ubGluZSA+PSBkaXNw
bGF5LnZpZXdUbykgfHwKKyAgICAgICAgZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCAmJiBjbS5vcHRp
b25zLmxpbmVXcmFwcGluZykgeworICAgICAgdmFyIHVwZGF0ZWQgPSB1cGRhdGVEaXNwbGF5KGNt
LCB7dG9wOiBvcC5zY3JvbGxUb3AsIGVuc3VyZTogb3Auc2Nyb2xsVG9Qb3N9LCBvcC5mb3JjZVVw
ZGF0ZSk7CiAgICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5vZmZzZXRIZWlnaHQpIGNtLmRv
Yy5zY3JvbGxUb3AgPSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDsKICAgICB9CisgICAg
Ly8gSWYgbm8gdXBkYXRlIHdhcyBydW4sIGJ1dCB0aGUgc2VsZWN0aW9uIGNoYW5nZWQsIHJlZHJh
dyB0aGF0LgogICAgIGlmICghdXBkYXRlZCAmJiBvcC5zZWxlY3Rpb25DaGFuZ2VkKSB1cGRhdGVT
ZWxlY3Rpb24oY20pOwotICAgIGlmIChvcC51cGRhdGVTY3JvbGxQb3MpIHsKLSAgICAgIHZhciB0
b3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbEhlaWdodCAt
IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LCBuZXdTY3JvbGxQb3Muc2Nyb2xsVG9wKSk7
Ci0gICAgICB2YXIgbGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkuc2Nyb2xsZXIu
c2Nyb2xsV2lkdGggLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLCBuZXdTY3JvbGxQb3Mu
c2Nyb2xsTGVmdCkpOworICAgIGlmICghdXBkYXRlZCAmJiBvcC5zdGFydEhlaWdodCAhPSBjbS5k
b2MuaGVpZ2h0KSB1cGRhdGVTY3JvbGxiYXJzKGNtKTsKKworICAgIC8vIFByb3BhZ2F0ZSB0aGUg
c2Nyb2xsIHBvc2l0aW9uIHRvIHRoZSBhY3R1YWwgRE9NIHNjcm9sbGVyCisgICAgaWYgKG9wLnNj
cm9sbFRvcCAhPSBudWxsICYmIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IG9wLnNjcm9s
bFRvcCkgeworICAgICAgdmFyIHRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkuc2Ny
b2xsZXIuc2Nyb2xsSGVpZ2h0IC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIG9wLnNj
cm9sbFRvcCkpOwogICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBkaXNwbGF5LnNj
cm9sbGJhclYuc2Nyb2xsVG9wID0gZG9jLnNjcm9sbFRvcCA9IHRvcDsKKyAgICB9CisgICAgaWYg
KG9wLnNjcm9sbExlZnQgIT0gbnVsbCAmJiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgIT0g
b3Auc2Nyb2xsTGVmdCkgeworICAgICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihk
aXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0
aCwgb3Auc2Nyb2xsTGVmdCkpOwogICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0g
ZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQgPSBkb2Muc2Nyb2xsTGVmdCA9IGxlZnQ7CiAg
ICAgICBhbGlnbkhvcml6b250YWxseShjbSk7Ci0gICAgICBpZiAob3Auc2Nyb2xsVG9Qb3MpCi0g
ICAgICAgIHNjcm9sbFBvc0ludG9WaWV3KGNtLCBjbGlwUG9zKGNtLmRvYywgb3Auc2Nyb2xsVG9Q
b3MuZnJvbSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQb3MoY20uZG9jLCBvcC5z
Y3JvbGxUb1Bvcy50byksIG9wLnNjcm9sbFRvUG9zLm1hcmdpbik7Ci0gICAgfSBlbHNlIGlmIChu
ZXdTY3JvbGxQb3MpIHsKLSAgICAgIHNjcm9sbEN1cnNvckludG9WaWV3KGNtKTsKICAgICB9Cisg
ICAgLy8gSWYgd2UgbmVlZCB0byBzY3JvbGwgYSBzcGVjaWZpYyBwb3NpdGlvbiBpbnRvIHZpZXcs
IGRvIHNvLgorICAgIGlmIChvcC5zY3JvbGxUb1BvcykgeworICAgICAgdmFyIGNvb3JkcyA9IHNj
cm9sbFBvc0ludG9WaWV3KGNtLCBjbGlwUG9zKGNtLmRvYywgb3Auc2Nyb2xsVG9Qb3MuZnJvbSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyhjbS5kb2MsIG9w
LnNjcm9sbFRvUG9zLnRvKSwgb3Auc2Nyb2xsVG9Qb3MubWFyZ2luKTsKKyAgICAgIGlmIChvcC5z
Y3JvbGxUb1Bvcy5pc0N1cnNvciAmJiBjbS5zdGF0ZS5mb2N1c2VkKSBtYXliZVNjcm9sbFdpbmRv
dyhjbSwgY29vcmRzKTsKKyAgICB9CisKICAgICBpZiAob3Auc2VsZWN0aW9uQ2hhbmdlZCkgcmVz
dGFydEJsaW5rKGNtKTsKIAogICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlu
cHV0KQotICAgICAgcmVzZXRJbnB1dChjbSwgb3AudXNlclNlbENoYW5nZSk7CisgICAgICByZXNl
dElucHV0KGNtLCBvcC50eXBpbmcpOwogCisgICAgLy8gRmlyZSBldmVudHMgZm9yIG1hcmtlcnMg
dGhhdCBhcmUgaGlkZGVuL3VuaWRkZW4gYnkgZWRpdGluZyBvcgorICAgIC8vIHVuZG9pbmcKICAg
ICB2YXIgaGlkZGVuID0gb3AubWF5YmVIaWRkZW5NYXJrZXJzLCB1bmhpZGRlbiA9IG9wLm1heWJl
VW5oaWRkZW5NYXJrZXJzOwogICAgIGlmIChoaWRkZW4pIGZvciAodmFyIGkgPSAwOyBpIDwgaGlk
ZGVuLmxlbmd0aDsgKytpKQogICAgICAgaWYgKCFoaWRkZW5baV0ubGluZXMubGVuZ3RoKSBzaWdu
YWwoaGlkZGVuW2ldLCAiaGlkZSIpOwpAQCAtMTQxNCw0NyArMTk1NCwyNDIgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBkZWxheWVkID0gZGVsYXllZENhbGxiYWNr
czsKICAgICAgIGRlbGF5ZWRDYWxsYmFja3MgPSBudWxsOwogICAgIH0KLSAgICBpZiAob3AudGV4
dENoYW5nZWQpCi0gICAgICBzaWduYWwoY20sICJjaGFuZ2UiLCBjbSwgb3AudGV4dENoYW5nZWQp
OwotICAgIGlmIChvcC5jdXJzb3JBY3Rpdml0eSkgc2lnbmFsKGNtLCAiY3Vyc29yQWN0aXZpdHki
LCBjbSk7CisgICAgLy8gRmlyZSBjaGFuZ2UgZXZlbnRzLCBhbmQgZGVsYXllZCBldmVudCBoYW5k
bGVycworICAgIGlmIChvcC5jaGFuZ2VPYmpzKSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG9wLmNoYW5nZU9ianMubGVuZ3RoOyBpKyspCisgICAgICAgIHNpZ25hbChjbSwgImNoYW5nZSIs
IGNtLCBvcC5jaGFuZ2VPYmpzW2ldKTsKKyAgICAgIHNpZ25hbChjbSwgImNoYW5nZXMiLCBjbSwg
b3AuY2hhbmdlT2Jqcyk7CisgICAgfQorICAgIGlmIChvcC5jdXJzb3JBY3Rpdml0eSkgc2lnbmFs
KGNtLCAiY3Vyc29yQWN0aXZpdHkiLCBjbSwgb3Aub3JpZ2luKTsKICAgICBpZiAoZGVsYXllZCkg
Zm9yICh2YXIgaSA9IDA7IGkgPCBkZWxheWVkLmxlbmd0aDsgKytpKSBkZWxheWVkW2ldKCk7CiAg
IH0KIAorICAvLyBSdW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGluIGFuIG9wZXJhdGlvbgorICBmdW5j
dGlvbiBydW5Jbk9wKGNtLCBmKSB7CisgICAgaWYgKGNtLmN1ck9wKSByZXR1cm4gZigpOworICAg
IHN0YXJ0T3BlcmF0aW9uKGNtKTsKKyAgICB0cnkgeyByZXR1cm4gZigpOyB9CisgICAgZmluYWxs
eSB7IGVuZE9wZXJhdGlvbihjbSk7IH0KKyAgfQogICAvLyBXcmFwcyBhIGZ1bmN0aW9uIGluIGFu
IG9wZXJhdGlvbi4gUmV0dXJucyB0aGUgd3JhcHBlZCBmdW5jdGlvbi4KLSAgZnVuY3Rpb24gb3Bl
cmF0aW9uKGNtMSwgZikgeworICBmdW5jdGlvbiBvcGVyYXRpb24oY20sIGYpIHsKICAgICByZXR1
cm4gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgY20gPSBjbTEgfHwgdGhpcywgd2l0aE9wID0gIWNt
LmN1ck9wOwotICAgICAgaWYgKHdpdGhPcCkgc3RhcnRPcGVyYXRpb24oY20pOwotICAgICAgdHJ5
IHsgdmFyIHJlc3VsdCA9IGYuYXBwbHkoY20sIGFyZ3VtZW50cyk7IH0KLSAgICAgIGZpbmFsbHkg
eyBpZiAod2l0aE9wKSBlbmRPcGVyYXRpb24oY20pOyB9Ci0gICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgaWYgKGNtLmN1ck9wKSByZXR1cm4gZi5hcHBseShjbSwgYXJndW1lbnRzKTsKKyAgICAg
IHN0YXJ0T3BlcmF0aW9uKGNtKTsKKyAgICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KGNtLCBhcmd1
bWVudHMpOyB9CisgICAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfQogICAgIH07CiAg
IH0KLSAgZnVuY3Rpb24gZG9jT3BlcmF0aW9uKGYpIHsKKyAgLy8gVXNlZCB0byBhZGQgbWV0aG9k
cyB0byBlZGl0b3IgYW5kIGRvYyBpbnN0YW5jZXMsIHdyYXBwaW5nIHRoZW0gaW4KKyAgLy8gb3Bl
cmF0aW9ucy4KKyAgZnVuY3Rpb24gbWV0aG9kT3AoZikgewogICAgIHJldHVybiBmdW5jdGlvbigp
IHsKLSAgICAgIHZhciB3aXRoT3AgPSB0aGlzLmNtICYmICF0aGlzLmNtLmN1ck9wLCByZXN1bHQ7
Ci0gICAgICBpZiAod2l0aE9wKSBzdGFydE9wZXJhdGlvbih0aGlzLmNtKTsKLSAgICAgIHRyeSB7
IHJlc3VsdCA9IGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQotICAgICAgZmluYWxseSB7IGlm
ICh3aXRoT3ApIGVuZE9wZXJhdGlvbih0aGlzLmNtKTsgfQotICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgIGlmICh0aGlzLmN1ck9wKSByZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwor
ICAgICAgc3RhcnRPcGVyYXRpb24odGhpcyk7CisgICAgICB0cnkgeyByZXR1cm4gZi5hcHBseSh0
aGlzLCBhcmd1bWVudHMpOyB9CisgICAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKHRoaXMpOyB9
CiAgICAgfTsKICAgfQotICBmdW5jdGlvbiBydW5Jbk9wKGNtLCBmKSB7Ci0gICAgdmFyIHdpdGhP
cCA9ICFjbS5jdXJPcCwgcmVzdWx0OwotICAgIGlmICh3aXRoT3ApIHN0YXJ0T3BlcmF0aW9uKGNt
KTsKLSAgICB0cnkgeyByZXN1bHQgPSBmKCk7IH0KLSAgICBmaW5hbGx5IHsgaWYgKHdpdGhPcCkg
ZW5kT3BlcmF0aW9uKGNtKTsgfQotICAgIHJldHVybiByZXN1bHQ7CisgIGZ1bmN0aW9uIGRvY01l
dGhvZE9wKGYpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgY20gPSB0aGlz
LmNtOworICAgICAgaWYgKCFjbSB8fCBjbS5jdXJPcCkgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgICAgIHN0YXJ0T3BlcmF0aW9uKGNtKTsKKyAgICAgIHRyeSB7IHJldHVybiBm
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KKyAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24o
Y20pOyB9CisgICAgfTsKKyAgfQorCisgIC8vIFZJRVcgVFJBQ0tJTkcKKworICAvLyBUaGVzZSBv
YmplY3RzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgdmlzaWJsZSAoY3VycmVudGx5IGRyYXdu
KQorICAvLyBwYXJ0IG9mIHRoZSBkb2N1bWVudC4gQSBMaW5lVmlldyBtYXkgY29ycmVzcG9uZCB0
byBtdWx0aXBsZQorICAvLyBsb2dpY2FsIGxpbmVzLCBpZiB0aG9zZSBhcmUgY29ubmVjdGVkIGJ5
IGNvbGxhcHNlZCByYW5nZXMuCisgIGZ1bmN0aW9uIExpbmVWaWV3KGRvYywgbGluZSwgbGluZU4p
IHsKKyAgICAvLyBUaGUgc3RhcnRpbmcgbGluZQorICAgIHRoaXMubGluZSA9IGxpbmU7CisgICAg
Ly8gQ29udGludWluZyBsaW5lcywgaWYgYW55CisgICAgdGhpcy5yZXN0ID0gdmlzdWFsTGluZUNv
bnRpbnVlZChsaW5lKTsKKyAgICAvLyBOdW1iZXIgb2YgbG9naWNhbCBsaW5lcyBpbiB0aGlzIHZp
c3VhbCBsaW5lCisgICAgdGhpcy5zaXplID0gdGhpcy5yZXN0ID8gbGluZU5vKGxzdCh0aGlzLnJl
c3QpKSAtIGxpbmVOICsgMSA6IDE7CisgICAgdGhpcy5ub2RlID0gdGhpcy50ZXh0ID0gbnVsbDsK
KyAgICB0aGlzLmhpZGRlbiA9IGxpbmVJc0hpZGRlbihkb2MsIGxpbmUpOworICB9CisKKyAgLy8g
Q3JlYXRlIGEgcmFuZ2Ugb2YgTGluZVZpZXcgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIGxpbmVzLgor
ICBmdW5jdGlvbiBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgdG8pIHsKKyAgICB2YXIgYXJyYXkg
PSBbXSwgbmV4dFBvczsKKyAgICBmb3IgKHZhciBwb3MgPSBmcm9tOyBwb3MgPCB0bzsgcG9zID0g
bmV4dFBvcykgeworICAgICAgdmFyIHZpZXcgPSBuZXcgTGluZVZpZXcoY20uZG9jLCBnZXRMaW5l
KGNtLmRvYywgcG9zKSwgcG9zKTsKKyAgICAgIG5leHRQb3MgPSBwb3MgKyB2aWV3LnNpemU7Cisg
ICAgICBhcnJheS5wdXNoKHZpZXcpOworICAgIH0KKyAgICByZXR1cm4gYXJyYXk7CiAgIH0KIAor
ICAvLyBVcGRhdGVzIHRoZSBkaXNwbGF5LnZpZXcgZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4g
Y2hhbmdlIHRvIHRoZQorICAvLyBkb2N1bWVudC4gRnJvbSBhbmQgdG8gYXJlIGluIHByZS1jaGFu
Z2UgY29vcmRpbmF0ZXMuIExlbmRpZmYgaXMKKyAgLy8gdGhlIGFtb3VudCBvZiBsaW5lcyBhZGRl
ZCBvciBzdWJ0cmFjdGVkIGJ5IHRoZSBjaGFuZ2UuIFRoaXMgaXMKKyAgLy8gdXNlZCBmb3IgY2hh
bmdlcyB0aGF0IHNwYW4gbXVsdGlwbGUgbGluZXMsIG9yIGNoYW5nZSB0aGUgd2F5CisgIC8vIGxp
bmVzIGFyZSBkaXZpZGVkIGludG8gdmlzdWFsIGxpbmVzLiByZWdMaW5lQ2hhbmdlIChiZWxvdykK
KyAgLy8gcmVnaXN0ZXJzIHNpbmdsZS1saW5lIGNoYW5nZXMuCiAgIGZ1bmN0aW9uIHJlZ0NoYW5n
ZShjbSwgZnJvbSwgdG8sIGxlbmRpZmYpIHsKICAgICBpZiAoZnJvbSA9PSBudWxsKSBmcm9tID0g
Y20uZG9jLmZpcnN0OwogICAgIGlmICh0byA9PSBudWxsKSB0byA9IGNtLmRvYy5maXJzdCArIGNt
LmRvYy5zaXplOwotICAgIGNtLmN1ck9wLmNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbSwgdG86IHRv
LCBkaWZmOiBsZW5kaWZmfSk7CisgICAgaWYgKCFsZW5kaWZmKSBsZW5kaWZmID0gMDsKKworICAg
IHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICBpZiAobGVuZGlmZiAmJiB0byA8IGRpc3Bs
YXkudmlld1RvICYmCisgICAgICAgIChkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwg
fHwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA+IGZyb20pKQorICAgICAgZGlzcGxheS51cGRh
dGVMaW5lTnVtYmVycyA9IGZyb207CisKKyAgICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7
CisKKyAgICBpZiAoZnJvbSA+PSBkaXNwbGF5LnZpZXdUbykgeyAvLyBDaGFuZ2UgYWZ0ZXIKKyAg
ICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucyAmJiB2aXN1YWxMaW5lTm8oY20uZG9jLCBmcm9tKSA8
IGRpc3BsYXkudmlld1RvKQorICAgICAgICByZXNldFZpZXcoY20pOworICAgIH0gZWxzZSBpZiAo
dG8gPD0gZGlzcGxheS52aWV3RnJvbSkgeyAvLyBDaGFuZ2UgYmVmb3JlCisgICAgICBpZiAoc2F3
Q29sbGFwc2VkU3BhbnMgJiYgdmlzdWFsTGluZUVuZE5vKGNtLmRvYywgdG8gKyBsZW5kaWZmKSA+
IGRpc3BsYXkudmlld0Zyb20pIHsKKyAgICAgICAgcmVzZXRWaWV3KGNtKTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIGRpc3BsYXkudmlld0Zyb20gKz0gbGVuZGlmZjsKKyAgICAgICAgZGlzcGxh
eS52aWV3VG8gKz0gbGVuZGlmZjsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGZyb20gPD0gZGlz
cGxheS52aWV3RnJvbSAmJiB0byA+PSBkaXNwbGF5LnZpZXdUbykgeyAvLyBGdWxsIG92ZXJsYXAK
KyAgICAgIHJlc2V0VmlldyhjbSk7CisgICAgfSBlbHNlIGlmIChmcm9tIDw9IGRpc3BsYXkudmll
d0Zyb20pIHsgLy8gVG9wIG92ZXJsYXAKKyAgICAgIHZhciBjdXQgPSB2aWV3Q3V0dGluZ1BvaW50
KGNtLCB0bywgdG8gKyBsZW5kaWZmLCAxKTsKKyAgICAgIGlmIChjdXQpIHsKKyAgICAgICAgZGlz
cGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKGN1dC5pbmRleCk7CisgICAgICAgIGRpc3Bs
YXkudmlld0Zyb20gPSBjdXQubGluZU47CisgICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRp
ZmY7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXNldFZpZXcoY20pOworICAgICAgfQorICAg
IH0gZWxzZSBpZiAodG8gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8gQm90dG9tIG92ZXJsYXAKKyAg
ICAgIHZhciBjdXQgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9tLCBmcm9tLCAtMSk7CisgICAg
ICBpZiAoY3V0KSB7CisgICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZSgw
LCBjdXQuaW5kZXgpOworICAgICAgICBkaXNwbGF5LnZpZXdUbyA9IGN1dC5saW5lTjsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIHJlc2V0VmlldyhjbSk7CisgICAgICB9CisgICAgfSBlbHNlIHsg
Ly8gR2FwIGluIHRoZSBtaWRkbGUKKyAgICAgIHZhciBjdXRUb3AgPSB2aWV3Q3V0dGluZ1BvaW50
KGNtLCBmcm9tLCBmcm9tLCAtMSk7CisgICAgICB2YXIgY3V0Qm90ID0gdmlld0N1dHRpbmdQb2lu
dChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7CisgICAgICBpZiAoY3V0VG9wICYmIGN1dEJvdCkg
eworICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgY3V0VG9wLmlu
ZGV4KQorICAgICAgICAgIC5jb25jYXQoYnVpbGRWaWV3QXJyYXkoY20sIGN1dFRvcC5saW5lTiwg
Y3V0Qm90LmxpbmVOKSkKKyAgICAgICAgICAuY29uY2F0KGRpc3BsYXkudmlldy5zbGljZShjdXRC
b3QuaW5kZXgpKTsKKyAgICAgICAgZGlzcGxheS52aWV3VG8gKz0gbGVuZGlmZjsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIHJlc2V0VmlldyhjbSk7CisgICAgICB9CisgICAgfQorCisgICAgdmFy
IGV4dCA9IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDsKKyAgICBpZiAoZXh0KSB7CisgICAgICBp
ZiAodG8gPCBleHQubGluZU4pCisgICAgICAgIGV4dC5saW5lTiArPSBsZW5kaWZmOworICAgICAg
ZWxzZSBpZiAoZnJvbSA8IGV4dC5saW5lTiArIGV4dC5zaXplKQorICAgICAgICBkaXNwbGF5LmV4
dGVybmFsTWVhc3VyZWQgPSBudWxsOworICAgIH0KKyAgfQorCisgIC8vIFJlZ2lzdGVyIGEgY2hh
bmdlIHRvIGEgc2luZ2xlIGxpbmUuIFR5cGUgbXVzdCBiZSBvbmUgb2YgInRleHQiLAorICAvLyAi
Z3V0dGVyIiwgImNsYXNzIiwgIndpZGdldCIKKyAgZnVuY3Rpb24gcmVnTGluZUNoYW5nZShjbSwg
bGluZSwgdHlwZSkgeworICAgIGNtLmN1ck9wLnZpZXdDaGFuZ2VkID0gdHJ1ZTsKKyAgICB2YXIg
ZGlzcGxheSA9IGNtLmRpc3BsYXksIGV4dCA9IGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDsK
KyAgICBpZiAoZXh0ICYmIGxpbmUgPj0gZXh0LmxpbmVOICYmIGxpbmUgPCBleHQubGluZU4gKyBl
eHQuc2l6ZSkKKyAgICAgIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7CisKKyAgICBp
ZiAobGluZSA8IGRpc3BsYXkudmlld0Zyb20gfHwgbGluZSA+PSBkaXNwbGF5LnZpZXdUbykgcmV0
dXJuOworICAgIHZhciBsaW5lVmlldyA9IGRpc3BsYXkudmlld1tmaW5kVmlld0luZGV4KGNtLCBs
aW5lKV07CisgICAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBh
cnIgPSBsaW5lVmlldy5jaGFuZ2VzIHx8IChsaW5lVmlldy5jaGFuZ2VzID0gW10pOworICAgIGlm
IChpbmRleE9mKGFyciwgdHlwZSkgPT0gLTEpIGFyci5wdXNoKHR5cGUpOworICB9CisKKyAgLy8g
Q2xlYXIgdGhlIHZpZXcuCisgIGZ1bmN0aW9uIHJlc2V0VmlldyhjbSkgeworICAgIGNtLmRpc3Bs
YXkudmlld0Zyb20gPSBjbS5kaXNwbGF5LnZpZXdUbyA9IGNtLmRvYy5maXJzdDsKKyAgICBjbS5k
aXNwbGF5LnZpZXcgPSBbXTsKKyAgICBjbS5kaXNwbGF5LnZpZXdPZmZzZXQgPSAwOworICB9CisK
KyAgLy8gRmluZCB0aGUgdmlldyBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBsaW5l
LiBSZXR1cm4gbnVsbAorICAvLyB3aGVuIHRoZSBsaW5lIGlzbid0IHZpc2libGUuCisgIGZ1bmN0
aW9uIGZpbmRWaWV3SW5kZXgoY20sIG4pIHsKKyAgICBpZiAobiA+PSBjbS5kaXNwbGF5LnZpZXdU
bykgcmV0dXJuIG51bGw7CisgICAgbiAtPSBjbS5kaXNwbGF5LnZpZXdGcm9tOworICAgIGlmIChu
IDwgMCkgcmV0dXJuIG51bGw7CisgICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXc7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7CisgICAgICBuIC09IHZpZXdb
aV0uc2l6ZTsKKyAgICAgIGlmIChuIDwgMCkgcmV0dXJuIGk7CisgICAgfQorICB9CisKKyAgZnVu
Y3Rpb24gdmlld0N1dHRpbmdQb2ludChjbSwgb2xkTiwgbmV3TiwgZGlyKSB7CisgICAgdmFyIGlu
ZGV4ID0gZmluZFZpZXdJbmRleChjbSwgb2xkTiksIGRpZmYsIHZpZXcgPSBjbS5kaXNwbGF5LnZp
ZXc7CisgICAgaWYgKCFzYXdDb2xsYXBzZWRTcGFucykgcmV0dXJuIHtpbmRleDogaW5kZXgsIGxp
bmVOOiBuZXdOfTsKKyAgICBmb3IgKHZhciBpID0gMCwgbiA9IGNtLmRpc3BsYXkudmlld0Zyb207
IGkgPCBpbmRleDsgaSsrKQorICAgICAgbiArPSB2aWV3W2ldLnNpemU7CisgICAgaWYgKG4gIT0g
b2xkTikgeworICAgICAgaWYgKGRpciA+IDApIHsKKyAgICAgICAgaWYgKGluZGV4ID09IHZpZXcu
bGVuZ3RoIC0gMSkgcmV0dXJuIG51bGw7CisgICAgICAgIGRpZmYgPSAobiArIHZpZXdbaW5kZXhd
LnNpemUpIC0gb2xkTjsKKyAgICAgICAgaW5kZXgrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IGRpZmYgPSBuIC0gb2xkTjsKKyAgICAgIH0KKyAgICAgIG9sZE4gKz0gZGlmZjsgbmV3TiArPSBk
aWZmOworICAgIH0KKyAgICB3aGlsZSAodmlzdWFsTGluZU5vKGNtLmRvYywgbmV3TikgIT0gbmV3
TikgeworICAgICAgaWYgKGluZGV4ID09IChkaXIgPCAwID8gMCA6IHZpZXcubGVuZ3RoIC0gMSkp
IHJldHVybiBudWxsOworICAgICAgbmV3TiArPSBkaXIgKiB2aWV3W2luZGV4IC0gKGRpciA8IDAg
PyAxIDogMCldLnNpemU7CisgICAgICBpbmRleCArPSBkaXI7CisgICAgfQorICAgIHJldHVybiB7
aW5kZXg6IGluZGV4LCBsaW5lTjogbmV3Tn07CisgIH0KKworICAvLyBGb3JjZSB0aGUgdmlldyB0
byBjb3ZlciBhIGdpdmVuIHJhbmdlLCBhZGRpbmcgZW1wdHkgdmlldyBlbGVtZW50CisgIC8vIG9y
IGNsaXBwaW5nIG9mZiBleGlzdGluZyBvbmVzIGFzIG5lZWRlZC4KKyAgZnVuY3Rpb24gYWRqdXN0
VmlldyhjbSwgZnJvbSwgdG8pIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHZpZXcg
PSBkaXNwbGF5LnZpZXc7CisgICAgaWYgKHZpZXcubGVuZ3RoID09IDAgfHwgZnJvbSA+PSBkaXNw
bGF5LnZpZXdUbyB8fCB0byA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7CisgICAgICBkaXNwbGF5LnZp
ZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgdG8pOworICAgICAgZGlzcGxheS52aWV3RnJv
bSA9IGZyb207CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChkaXNwbGF5LnZpZXdGcm9tID4gZnJv
bSkKKyAgICAgICAgZGlzcGxheS52aWV3ID0gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIGRpc3Bs
YXkudmlld0Zyb20pLmNvbmNhdChkaXNwbGF5LnZpZXcpOworICAgICAgZWxzZSBpZiAoZGlzcGxh
eS52aWV3RnJvbSA8IGZyb20pCisgICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5z
bGljZShmaW5kVmlld0luZGV4KGNtLCBmcm9tKSk7CisgICAgICBkaXNwbGF5LnZpZXdGcm9tID0g
ZnJvbTsKKyAgICAgIGlmIChkaXNwbGF5LnZpZXdUbyA8IHRvKQorICAgICAgICBkaXNwbGF5LnZp
ZXcgPSBkaXNwbGF5LnZpZXcuY29uY2F0KGJ1aWxkVmlld0FycmF5KGNtLCBkaXNwbGF5LnZpZXdU
bywgdG8pKTsKKyAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld1RvID4gdG8pCisgICAgICAgIGRp
c3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZSgwLCBmaW5kVmlld0luZGV4KGNtLCB0bykp
OworICAgIH0KKyAgICBkaXNwbGF5LnZpZXdUbyA9IHRvOworICB9CisKKyAgLy8gQ291bnQgdGhl
IG51bWJlciBvZiBsaW5lcyBpbiB0aGUgdmlldyB3aG9zZSBET00gcmVwcmVzZW50YXRpb24gaXMK
KyAgLy8gb3V0IG9mIGRhdGUgKG9yIG5vbmV4aXN0ZW50KS4KKyAgZnVuY3Rpb24gY291bnREaXJ0
eVZpZXcoY20pIHsKKyAgICB2YXIgdmlldyA9IGNtLmRpc3BsYXkudmlldywgZGlydHkgPSAwOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIGxp
bmVWaWV3ID0gdmlld1tpXTsKKyAgICAgIGlmICghbGluZVZpZXcuaGlkZGVuICYmICghbGluZVZp
ZXcubm9kZSB8fCBsaW5lVmlldy5jaGFuZ2VzKSkgKytkaXJ0eTsKKyAgICB9CisgICAgcmV0dXJu
IGRpcnR5OwogICB9CiAKICAgLy8gSU5QVVQgSEFORExJTkcKIAorICAvLyBQb2xsIGZvciBpbnB1
dCBjaGFuZ2VzLCB1c2luZyB0aGUgbm9ybWFsIHJhdGUgb2YgcG9sbGluZy4gVGhpcworICAvLyBy
dW5zIGFzIGxvbmcgYXMgdGhlIGVkaXRvciBpcyBmb2N1c2VkLgogICBmdW5jdGlvbiBzbG93UG9s
bChjbSkgewogICAgIGlmIChjbS5kaXNwbGF5LnBvbGxpbmdGYXN0KSByZXR1cm47CiAgICAgY20u
ZGlzcGxheS5wb2xsLnNldChjbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgZnVuY3Rpb24oKSB7CkBA
IC0xNDYzLDYgKzIxOTgsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICB9KTsKICAgfQogCisgIC8vIFdoZW4gYW4gZXZlbnQgaGFzIGp1c3QgY29tZSBpbiB0aGF0IGlz
IGxpa2VseSB0byBhZGQgb3IgY2hhbmdlCisgIC8vIHNvbWV0aGluZyBpbiB0aGUgaW5wdXQgdGV4
dGFyZWEsIHdlIHBvbGwgZmFzdGVyLCB0byBlbnN1cmUgdGhhdAorICAvLyB0aGUgY2hhbmdlIGFw
cGVhcnMgb24gdGhlIHNjcmVlbiBxdWlja2x5LgogICBmdW5jdGlvbiBmYXN0UG9sbChjbSkgewog
ICAgIHZhciBtaXNzZWQgPSBmYWxzZTsKICAgICBjbS5kaXNwbGF5LnBvbGxpbmdGYXN0ID0gdHJ1
ZTsKQEAgLTE0NzQsMTAwICsyMjEyLDE0NyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBjbS5kaXNwbGF5LnBvbGwuc2V0KDIwLCBwKTsKICAgfQogCi0gIC8vIHByZXZJ
bnB1dCBpcyBhIGhhY2sgdG8gd29yayB3aXRoIElNRS4gSWYgd2UgcmVzZXQgdGhlIHRleHRhcmVh
Ci0gIC8vIG9uIGV2ZXJ5IGNoYW5nZSwgdGhhdCBicmVha3MgSU1FLiBTbyB3ZSBsb29rIGZvciBj
aGFuZ2VzCi0gIC8vIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBjb250ZW50IGluc3RlYWQuIChN
b2Rlcm4gYnJvd3NlcnMgaGF2ZQotICAvLyBldmVudHMgdGhhdCBpbmRpY2F0ZSBJTUUgdGFraW5n
IHBsYWNlLCBidXQgdGhlc2UgYXJlIG5vdCB3aWRlbHkKLSAgLy8gc3VwcG9ydGVkIG9yIGNvbXBh
dGlibGUgZW5vdWdoIHlldCB0byByZWx5IG9uLikKKyAgLy8gUmVhZCBpbnB1dCBmcm9tIHRoZSB0
ZXh0YXJlYSwgYW5kIHVwZGF0ZSB0aGUgZG9jdW1lbnQgdG8gbWF0Y2guCisgIC8vIFdoZW4gc29t
ZXRoaW5nIGlzIHNlbGVjdGVkLCBpdCBpcyBwcmVzZW50IGluIHRoZSB0ZXh0YXJlYSwgYW5kCisg
IC8vIHNlbGVjdGVkICh1bmxlc3MgaXQgaXMgaHVnZSwgaW4gd2hpY2ggY2FzZSBhIHBsYWNlaG9s
ZGVyIGlzCisgIC8vIHVzZWQpLiBXaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIHRoZSBjdXJzb3Ig
c2l0cyBhZnRlciBwcmV2aW91c2x5CisgIC8vIHNlZW4gdGV4dCAoY2FuIGJlIGVtcHR5KSwgd2hp
Y2ggaXMgc3RvcmVkIGluIHByZXZJbnB1dCAod2UgbXVzdAorICAvLyBub3QgcmVzZXQgdGhlIHRl
eHRhcmVhIHdoZW4gdHlwaW5nLCBiZWNhdXNlIHRoYXQgYnJlYWtzIElNRSkuCiAgIGZ1bmN0aW9u
IHJlYWRJbnB1dChjbSkgewotICAgIHZhciBpbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQsIHByZXZJ
bnB1dCA9IGNtLmRpc3BsYXkucHJldklucHV0LCBkb2MgPSBjbS5kb2MsIHNlbCA9IGRvYy5zZWw7
Ci0gICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkIHx8IGhhc1NlbGVjdGlvbihpbnB1dCkgfHwgaXNS
ZWFkT25seShjbSkgfHwgY20uc3RhdGUuZGlzYWJsZUlucHV0KSByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgJiYgY20uc3RhdGUuZmFrZWRMYXN0Q2hhcikgewot
ICAgICAgaW5wdXQudmFsdWUgPSBpbnB1dC52YWx1ZS5zdWJzdHJpbmcoMCwgaW5wdXQudmFsdWUu
bGVuZ3RoIC0gMSk7Ci0gICAgICBjbS5zdGF0ZS5mYWtlZExhc3RDaGFyID0gZmFsc2U7Ci0gICAg
fQorICAgIHZhciBpbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQsIHByZXZJbnB1dCA9IGNtLmRpc3Bs
YXkucHJldklucHV0LCBkb2MgPSBjbS5kb2M7CisgICAgLy8gU2luY2UgdGhpcyBpcyBjYWxsZWQg
YSAqbG90KiwgdHJ5IHRvIGJhaWwgb3V0IGFzIGNoZWFwbHkgYXMKKyAgICAvLyBwb3NzaWJsZSB3
aGVuIGl0IGlzIGNsZWFyIHRoYXQgbm90aGluZyBoYXBwZW5lZC4gaGFzU2VsZWN0aW9uCisgICAg
Ly8gd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGEgbG90IG9mIHRleHQgaW4gdGhlIHRl
eHRhcmVhLAorICAgIC8vIGluIHdoaWNoIGNhc2UgcmVhZGluZyBpdHMgdmFsdWUgd291bGQgYmUg
ZXhwZW5zaXZlLgorICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCB8fCBoYXNTZWxlY3Rpb24oaW5w
dXQpIHx8IGlzUmVhZE9ubHkoY20pIHx8IGNtLm9wdGlvbnMuZGlzYWJsZUlucHV0KSByZXR1cm4g
ZmFsc2U7CiAgICAgdmFyIHRleHQgPSBpbnB1dC52YWx1ZTsKLSAgICBpZiAodGV4dCA9PSBwcmV2
SW5wdXQgJiYgcG9zRXEoc2VsLmZyb20sIHNlbC50bykpIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
aWUgJiYgIWllX2x0OSAmJiBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID09PSB0ZXh0KSB7
Ci0gICAgICByZXNldElucHV0KGNtLCB0cnVlKTsKKyAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQs
IGJhaWwuCisgICAgaWYgKHRleHQgPT0gcHJldklucHV0ICYmICFjbS5zb21ldGhpbmdTZWxlY3Rl
ZCgpKSByZXR1cm4gZmFsc2U7CisgICAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2ljYWwgc2VsZWN0
aW9uIHJlc2V0dGluZyBpbiBJRTkvMTAKKyAgICBpZiAoaWUgJiYgIWllX3VwdG84ICYmIGNtLmRp
c3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPT09IHRleHQpIHsKKyAgICAgIHJlc2V0SW5wdXQoY20p
OwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHZhciB3aXRoT3AgPSAhY20uY3Vy
T3A7CiAgICAgaWYgKHdpdGhPcCkgc3RhcnRPcGVyYXRpb24oY20pOwotICAgIHNlbC5zaGlmdCA9
IGZhbHNlOworICAgIGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZTsKKworICAgIC8vIEZpbmQgdGhl
IHBhcnQgb2YgdGhlIGlucHV0IHRoYXQgaXMgYWN0dWFsbHkgbmV3CiAgICAgdmFyIHNhbWUgPSAw
LCBsID0gTWF0aC5taW4ocHJldklucHV0Lmxlbmd0aCwgdGV4dC5sZW5ndGgpOwogICAgIHdoaWxl
IChzYW1lIDwgbCAmJiBwcmV2SW5wdXQuY2hhckNvZGVBdChzYW1lKSA9PSB0ZXh0LmNoYXJDb2Rl
QXQoc2FtZSkpICsrc2FtZTsKLSAgICB2YXIgZnJvbSA9IHNlbC5mcm9tLCB0byA9IHNlbC50bzsK
LSAgICBpZiAoc2FtZSA8IHByZXZJbnB1dC5sZW5ndGgpCi0gICAgICBmcm9tID0gUG9zKGZyb20u
bGluZSwgZnJvbS5jaCAtIChwcmV2SW5wdXQubGVuZ3RoIC0gc2FtZSkpOwotICAgIGVsc2UgaWYg
KGNtLnN0YXRlLm92ZXJ3cml0ZSAmJiBwb3NFcShmcm9tLCB0bykgJiYgIWNtLnN0YXRlLnBhc3Rl
SW5jb21pbmcpCi0gICAgICB0byA9IFBvcyh0by5saW5lLCBNYXRoLm1pbihnZXRMaW5lKGRvYywg
dG8ubGluZSkudGV4dC5sZW5ndGgsIHRvLmNoICsgKHRleHQubGVuZ3RoIC0gc2FtZSkpKTsKLQot
ICAgIHZhciB1cGRhdGVJbnB1dCA9IGNtLmN1ck9wLnVwZGF0ZUlucHV0OwotICAgIHZhciBjaGFu
Z2VFdmVudCA9IHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IHNwbGl0TGluZXModGV4dC5zbGlj
ZShzYW1lKSksCi0gICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogY20uc3RhdGUucGFzdGVJ
bmNvbWluZyA/ICJwYXN0ZSIgOiAiK2lucHV0In07Ci0gICAgbWFrZUNoYW5nZShjbS5kb2MsIGNo
YW5nZUV2ZW50LCAiZW5kIik7CisgICAgdmFyIGluc2VydGVkID0gdGV4dC5zbGljZShzYW1lKSwg
dGV4dExpbmVzID0gc3BsaXRMaW5lcyhpbnNlcnRlZCk7CisKKyAgICAvLyBXaGVuIHBhc2luZyBO
IGxpbmVzIGludG8gTiBzZWxlY3Rpb25zLCBpbnNlcnQgb25lIGxpbmUgcGVyIHNlbGVjdGlvbgor
ICAgIHZhciBtdWx0aVBhc3RlID0gY20uc3RhdGUucGFzdGVJbmNvbWluZyAmJiB0ZXh0TGluZXMu
bGVuZ3RoID4gMSAmJiBkb2Muc2VsLnJhbmdlcy5sZW5ndGggPT0gdGV4dExpbmVzLmxlbmd0aDsK
KworICAgIC8vIE5vcm1hbCBiZWhhdmlvciBpcyB0byBpbnNlcnQgdGhlIG5ldyB0ZXh0IGludG8g
ZXZlcnkgc2VsZWN0aW9uCisgICAgZm9yICh2YXIgaSA9IGRvYy5zZWwucmFuZ2VzLmxlbmd0aCAt
IDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTsK
KyAgICAgIHZhciBmcm9tID0gcmFuZ2UuZnJvbSgpLCB0byA9IHJhbmdlLnRvKCk7CisgICAgICAv
LyBIYW5kbGUgZGVsZXRpb24KKyAgICAgIGlmIChzYW1lIDwgcHJldklucHV0Lmxlbmd0aCkKKyAg
ICAgICAgZnJvbSA9IFBvcyhmcm9tLmxpbmUsIGZyb20uY2ggLSAocHJldklucHV0Lmxlbmd0aCAt
IHNhbWUpKTsKKyAgICAgIC8vIEhhbmRsZSBvdmVyd3JpdGUKKyAgICAgIGVsc2UgaWYgKGNtLnN0
YXRlLm92ZXJ3cml0ZSAmJiByYW5nZS5lbXB0eSgpICYmICFjbS5zdGF0ZS5wYXN0ZUluY29taW5n
KQorICAgICAgICB0byA9IFBvcyh0by5saW5lLCBNYXRoLm1pbihnZXRMaW5lKGRvYywgdG8ubGlu
ZSkudGV4dC5sZW5ndGgsIHRvLmNoICsgbHN0KHRleHRMaW5lcykubGVuZ3RoKSk7CisgICAgICB2
YXIgdXBkYXRlSW5wdXQgPSBjbS5jdXJPcC51cGRhdGVJbnB1dDsKKyAgICAgIHZhciBjaGFuZ2VF
dmVudCA9IHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IG11bHRpUGFzdGUgPyBbdGV4dExpbmVz
W2ldXSA6IHRleHRMaW5lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IGNtLnN0
YXRlLnBhc3RlSW5jb21pbmcgPyAicGFzdGUiIDogY20uc3RhdGUuY3V0SW5jb21pbmcgPyAiY3V0
IiA6ICIraW5wdXQifTsKKyAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2VFdmVudCk7Cisg
ICAgICBzaWduYWxMYXRlcihjbSwgImlucHV0UmVhZCIsIGNtLCBjaGFuZ2VFdmVudCk7CisgICAg
ICAvLyBXaGVuIGFuICdlbGVjdHJpYycgY2hhcmFjdGVyIGlzIGluc2VydGVkLCBpbW1lZGlhdGVs
eSB0cmlnZ2VyIGEgcmVpbmRlbnQKKyAgICAgIGlmIChpbnNlcnRlZCAmJiAhY20uc3RhdGUucGFz
dGVJbmNvbWluZyAmJiBjbS5vcHRpb25zLmVsZWN0cmljQ2hhcnMgJiYKKyAgICAgICAgICBjbS5v
cHRpb25zLnNtYXJ0SW5kZW50ICYmIHJhbmdlLmhlYWQuY2ggPCAxMDAgJiYKKyAgICAgICAgICAo
IWkgfHwgZG9jLnNlbC5yYW5nZXNbaSAtIDFdLmhlYWQubGluZSAhPSByYW5nZS5oZWFkLmxpbmUp
KSB7CisgICAgICAgIHZhciBtb2RlID0gY20uZ2V0TW9kZUF0KHJhbmdlLmhlYWQpOworICAgICAg
ICBpZiAobW9kZS5lbGVjdHJpY0NoYXJzKSB7CisgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBtb2RlLmVsZWN0cmljQ2hhcnMubGVuZ3RoOyBqKyspCisgICAgICAgICAgICBpZiAoaW5zZXJ0
ZWQuaW5kZXhPZihtb2RlLmVsZWN0cmljQ2hhcnMuY2hhckF0KGopKSA+IC0xKSB7CisgICAgICAg
ICAgICAgIGluZGVudExpbmUoY20sIHJhbmdlLmhlYWQubGluZSwgInNtYXJ0Iik7CisgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1vZGUuZWxl
Y3RyaWNJbnB1dCkgeworICAgICAgICAgIHZhciBlbmQgPSBjaGFuZ2VFbmQoY2hhbmdlRXZlbnQp
OworICAgICAgICAgIGlmIChtb2RlLmVsZWN0cmljSW5wdXQudGVzdChnZXRMaW5lKGRvYywgZW5k
LmxpbmUpLnRleHQuc2xpY2UoMCwgZW5kLmNoKSkpCisgICAgICAgICAgICBpbmRlbnRMaW5lKGNt
LCByYW5nZS5oZWFkLmxpbmUsICJzbWFydCIpOworICAgICAgICB9CisgICAgICB9CisgICAgfQor
ICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pOwogICAgIGNtLmN1ck9wLnVwZGF0ZUlucHV0ID0g
dXBkYXRlSW5wdXQ7Ci0gICAgc2lnbmFsTGF0ZXIoY20sICJpbnB1dFJlYWQiLCBjbSwgY2hhbmdl
RXZlbnQpOworICAgIGNtLmN1ck9wLnR5cGluZyA9IHRydWU7CiAKKyAgICAvLyBEb24ndCBsZWF2
ZSBsb25nIHRleHQgaW4gdGhlIHRleHRhcmVhLCBzaW5jZSBpdCBtYWtlcyBmdXJ0aGVyIHBvbGxp
bmcgc2xvdwogICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDEwMDAgfHwgdGV4dC5pbmRleE9mKCJcbiIp
ID4gLTEpIGlucHV0LnZhbHVlID0gY20uZGlzcGxheS5wcmV2SW5wdXQgPSAiIjsKICAgICBlbHNl
IGNtLmRpc3BsYXkucHJldklucHV0ID0gdGV4dDsKICAgICBpZiAod2l0aE9wKSBlbmRPcGVyYXRp
b24oY20pOwotICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSBmYWxzZTsKKyAgICBjbS5zdGF0
ZS5wYXN0ZUluY29taW5nID0gY20uc3RhdGUuY3V0SW5jb21pbmcgPSBmYWxzZTsKICAgICByZXR1
cm4gdHJ1ZTsKICAgfQogCi0gIGZ1bmN0aW9uIHJlc2V0SW5wdXQoY20sIHVzZXIpIHsKKyAgLy8g
UmVzZXQgdGhlIGlucHV0IHRvIGNvcnJlc3BvbmQgdG8gdGhlIHNlbGVjdGlvbiAob3IgdG8gYmUg
ZW1wdHksCisgIC8vIHdoZW4gbm90IHR5cGluZyBhbmQgbm90aGluZyBpcyBzZWxlY3RlZCkKKyAg
ZnVuY3Rpb24gcmVzZXRJbnB1dChjbSwgdHlwaW5nKSB7CiAgICAgdmFyIG1pbmltYWwsIHNlbGVj
dGVkLCBkb2MgPSBjbS5kb2M7Ci0gICAgaWYgKCFwb3NFcShkb2Muc2VsLmZyb20sIGRvYy5zZWwu
dG8pKSB7CisgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsKICAgICAgIGNtLmRpc3Bs
YXkucHJldklucHV0ID0gIiI7CisgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTsK
ICAgICAgIG1pbmltYWwgPSBoYXNDb3B5RXZlbnQgJiYKLSAgICAgICAgKGRvYy5zZWwudG8ubGlu
ZSAtIGRvYy5zZWwuZnJvbS5saW5lID4gMTAwIHx8IChzZWxlY3RlZCA9IGNtLmdldFNlbGVjdGlv
bigpKS5sZW5ndGggPiAxMDAwKTsKKyAgICAgICAgKHJhbmdlLnRvKCkubGluZSAtIHJhbmdlLmZy
b20oKS5saW5lID4gMTAwIHx8IChzZWxlY3RlZCA9IGNtLmdldFNlbGVjdGlvbigpKS5sZW5ndGgg
PiAxMDAwKTsKICAgICAgIHZhciBjb250ZW50ID0gbWluaW1hbCA/ICItIiA6IHNlbGVjdGVkIHx8
IGNtLmdldFNlbGVjdGlvbigpOwogICAgICAgY20uZGlzcGxheS5pbnB1dC52YWx1ZSA9IGNvbnRl
bnQ7CiAgICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgc2VsZWN0SW5wdXQoY20uZGlzcGxheS5p
bnB1dCk7Ci0gICAgICBpZiAoaWUgJiYgIWllX2x0OSkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVj
dGlvbiA9IGNvbnRlbnQ7Ci0gICAgfSBlbHNlIGlmICh1c2VyKSB7CisgICAgICBpZiAoaWUgJiYg
IWllX3VwdG84KSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gY29udGVudDsKKyAgICB9
IGVsc2UgaWYgKCF0eXBpbmcpIHsKICAgICAgIGNtLmRpc3BsYXkucHJldklucHV0ID0gY20uZGlz
cGxheS5pbnB1dC52YWx1ZSA9ICIiOwotICAgICAgaWYgKGllICYmICFpZV9sdDkpIGNtLmRpc3Bs
YXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOworICAgICAgaWYgKGllICYmICFpZV91cHRvOCkg
Y20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IG51bGw7CiAgICAgfQogICAgIGNtLmRpc3Bs
YXkuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IG1pbmltYWw7CiAgIH0KIAogICBmdW5jdGlvbiBmb2N1
c0lucHV0KGNtKSB7Ci0gICAgaWYgKGNtLm9wdGlvbnMucmVhZE9ubHkgIT0gIm5vY3Vyc29yIiAm
JiAoIW1vYmlsZSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9IGNtLmRpc3BsYXkuaW5wdXQp
KQorICAgIGlmIChjbS5vcHRpb25zLnJlYWRPbmx5ICE9ICJub2N1cnNvciIgJiYgKCFtb2JpbGUg
fHwgYWN0aXZlRWx0KCkgIT0gY20uZGlzcGxheS5pbnB1dCkpCiAgICAgICBjbS5kaXNwbGF5Lmlu
cHV0LmZvY3VzKCk7CiAgIH0KIAorICBmdW5jdGlvbiBlbnN1cmVGb2N1cyhjbSkgeworICAgIGlm
ICghY20uc3RhdGUuZm9jdXNlZCkgeyBmb2N1c0lucHV0KGNtKTsgb25Gb2N1cyhjbSk7IH0KKyAg
fQorCiAgIGZ1bmN0aW9uIGlzUmVhZE9ubHkoY20pIHsKICAgICByZXR1cm4gY20ub3B0aW9ucy5y
ZWFkT25seSB8fCBjbS5kb2MuY2FudEVkaXQ7CiAgIH0KIAogICAvLyBFVkVOVCBIQU5ETEVSUwog
CisgIC8vIEF0dGFjaCB0aGUgbmVjZXNzYXJ5IGV2ZW50IGhhbmRsZXJzIHdoZW4gaW5pdGlhbGl6
aW5nIHRoZSBlZGl0b3IKICAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudEhhbmRsZXJzKGNtKSB7CiAg
ICAgdmFyIGQgPSBjbS5kaXNwbGF5OwogICAgIG9uKGQuc2Nyb2xsZXIsICJtb3VzZWRvd24iLCBv
cGVyYXRpb24oY20sIG9uTW91c2VEb3duKSk7Ci0gICAgaWYgKGllKQorICAgIC8vIE9sZGVyIElF
J3Mgd2lsbCBub3QgZmlyZSBhIHNlY29uZCBtb3VzZWRvd24gZm9yIGEgZG91YmxlIGNsaWNrCisg
ICAgaWYgKGllX3VwdG8xMCkKICAgICAgIG9uKGQuc2Nyb2xsZXIsICJkYmxjbGljayIsIG9wZXJh
dGlvbihjbSwgZnVuY3Rpb24oZSkgewogICAgICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUp
KSByZXR1cm47CiAgICAgICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUpOwogICAgICAg
ICBpZiAoIXBvcyB8fCBjbGlja0luR3V0dGVyKGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRp
c3BsYXksIGUpKSByZXR1cm47CiAgICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICAg
IHZhciB3b3JkID0gZmluZFdvcmRBdChnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpLnRleHQsIHBv
cyk7Ci0gICAgICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHdvcmQuZnJvbSwgd29yZC50byk7
CisgICAgICAgIHZhciB3b3JkID0gZmluZFdvcmRBdChjbS5kb2MsIHBvcyk7CisgICAgICAgIGV4
dGVuZFNlbGVjdGlvbihjbS5kb2MsIHdvcmQuYW5jaG9yLCB3b3JkLmhlYWQpOwogICAgICAgfSkp
OwogICAgIGVsc2UKICAgICAgIG9uKGQuc2Nyb2xsZXIsICJkYmxjbGljayIsIGZ1bmN0aW9uKGUp
IHsgc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGVfcHJldmVudERlZmF1bHQoZSk7IH0pOworICAg
IC8vIFByZXZlbnQgbm9ybWFsIHNlbGVjdGlvbiBpbiB0aGUgZWRpdG9yICh3ZSBoYW5kbGUgb3Vy
IG93bikKICAgICBvbihkLmxpbmVTcGFjZSwgInNlbGVjdHN0YXJ0IiwgZnVuY3Rpb24oZSkgewog
ICAgICAgaWYgKCFldmVudEluV2lkZ2V0KGQsIGUpKSBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAg
IH0pOwotICAgIC8vIEdlY2tvIGJyb3dzZXJzIGZpcmUgY29udGV4dG1lbnUgKmFmdGVyKiBvcGVu
aW5nIHRoZSBtZW51LCBhdAorICAgIC8vIFNvbWUgYnJvd3NlcnMgZmlyZSBjb250ZXh0bWVudSAq
YWZ0ZXIqIG9wZW5pbmcgdGhlIG1lbnUsIGF0CiAgICAgLy8gd2hpY2ggcG9pbnQgd2UgY2FuJ3Qg
bWVzcyB3aXRoIGl0IGFueW1vcmUuIENvbnRleHQgbWVudSBpcwotICAgIC8vIGhhbmRsZWQgaW4g
b25Nb3VzZURvd24gZm9yIEdlY2tvLgotICAgIGlmICghY2FwdHVyZU1pZGRsZUNsaWNrKSBvbihk
LnNjcm9sbGVyLCAiY29udGV4dG1lbnUiLCBmdW5jdGlvbihlKSB7b25Db250ZXh0TWVudShjbSwg
ZSk7fSk7CisgICAgLy8gaGFuZGxlZCBpbiBvbk1vdXNlRG93biBmb3IgdGhlc2UgYnJvd3NlcnMu
CisgICAgaWYgKCFjYXB0dXJlUmlnaHRDbGljaykgb24oZC5zY3JvbGxlciwgImNvbnRleHRtZW51
IiwgZnVuY3Rpb24oZSkge29uQ29udGV4dE1lbnUoY20sIGUpO30pOwogCisgICAgLy8gU3luYyBz
Y3JvbGxpbmcgYmV0d2VlbiBmYWtlIHNjcm9sbGJhcnMgYW5kIHJlYWwgc2Nyb2xsYWJsZQorICAg
IC8vIGFyZWEsIGVuc3VyZSB2aWV3cG9ydCBpcyB1cGRhdGVkIHdoZW4gc2Nyb2xsaW5nLgogICAg
IG9uKGQuc2Nyb2xsZXIsICJzY3JvbGwiLCBmdW5jdGlvbigpIHsKICAgICAgIGlmIChkLnNjcm9s
bGVyLmNsaWVudEhlaWdodCkgewogICAgICAgICBzZXRTY3JvbGxUb3AoY20sIGQuc2Nyb2xsZXIu
c2Nyb2xsVG9wKTsKQEAgLTE1ODIsNDIgKzIzNjcsNDAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHNldFNjcm9s
bExlZnQoY20sIGQuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KTsKICAgICB9KTsKIAorICAgIC8vIExp
c3RlbiB0byB3aGVlbCBldmVudHMgaW4gb3JkZXIgdG8gdHJ5IGFuZCB1cGRhdGUgdGhlIHZpZXdw
b3J0IG9uIHRpbWUuCiAgICAgb24oZC5zY3JvbGxlciwgIm1vdXNld2hlZWwiLCBmdW5jdGlvbihl
KXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKICAgICBvbihkLnNjcm9sbGVyLCAiRE9NTW91c2VT
Y3JvbGwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKIAorICAgIC8vIFBy
ZXZlbnQgY2xpY2tzIGluIHRoZSBzY3JvbGxiYXJzIGZyb20ga2lsbGluZyBmb2N1cwogICAgIGZ1
bmN0aW9uIHJlRm9jdXMoKSB7IGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBzZXRUaW1lb3V0KGJpbmQo
Zm9jdXNJbnB1dCwgY20pLCAwKTsgfQogICAgIG9uKGQuc2Nyb2xsYmFySCwgIm1vdXNlZG93biIs
IHJlRm9jdXMpOwogICAgIG9uKGQuc2Nyb2xsYmFyViwgIm1vdXNlZG93biIsIHJlRm9jdXMpOwog
ICAgIC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2ZXIgc2Nyb2xsaW5nCiAgICAgb24oZC53cmFw
cGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7IGQud3JhcHBlci5zY3JvbGxUb3AgPSBkLndyYXBw
ZXIuc2Nyb2xsTGVmdCA9IDA7IH0pOwogCisgICAgLy8gV2hlbiB0aGUgd2luZG93IHJlc2l6ZXMs
IHdlIG5lZWQgdG8gcmVmcmVzaCBhY3RpdmUgZWRpdG9ycy4KICAgICB2YXIgcmVzaXplVGltZXI7
CiAgICAgZnVuY3Rpb24gb25SZXNpemUoKSB7CiAgICAgICBpZiAocmVzaXplVGltZXIgPT0gbnVs
bCkgcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICByZXNpemVU
aW1lciA9IG51bGw7CiAgICAgICAgIC8vIE1pZ2h0IGJlIGEgdGV4dCBzY2FsaW5nIG9wZXJhdGlv
biwgY2xlYXIgc2l6ZSBjYWNoZXMuCi0gICAgICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNo
ZWRUZXh0SGVpZ2h0ID0ga25vd25TY3JvbGxiYXJXaWR0aCA9IG51bGw7Ci0gICAgICAgIGNsZWFy
Q2FjaGVzKGNtKTsKLSAgICAgICAgcnVuSW5PcChjbSwgYmluZChyZWdDaGFuZ2UsIGNtKSk7Cisg
ICAgICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5jYWNoZWRQ
YWRkaW5nSCA9IGtub3duU2Nyb2xsYmFyV2lkdGggPSBudWxsOworICAgICAgICBjbS5zZXRTaXpl
KCk7CiAgICAgICB9LCAxMDApOwogICAgIH0KICAgICBvbih3aW5kb3csICJyZXNpemUiLCBvblJl
c2l6ZSk7Ci0gICAgLy8gQWJvdmUgaGFuZGxlciBob2xkcyBvbiB0byB0aGUgZWRpdG9yIGFuZCBp
dHMgZGF0YSBzdHJ1Y3R1cmVzLgotICAgIC8vIEhlcmUgd2UgcG9sbCB0byB1bnJlZ2lzdGVyIGl0
IHdoZW4gdGhlIGVkaXRvciBpcyBubyBsb25nZXIgaW4KLSAgICAvLyB0aGUgZG9jdW1lbnQsIHNv
IHRoYXQgaXQgY2FuIGJlIGdhcmJhZ2UtY29sbGVjdGVkLgorICAgIC8vIFRoZSBhYm92ZSBoYW5k
bGVyIGhvbGRzIG9uIHRvIHRoZSBlZGl0b3IgYW5kIGl0cyBkYXRhCisgICAgLy8gc3RydWN0dXJl
cy4gSGVyZSB3ZSBwb2xsIHRvIHVucmVnaXN0ZXIgaXQgd2hlbiB0aGUgZWRpdG9yIGlzIG5vCisg
ICAgLy8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCwgc28gdGhhdCBpdCBjYW4gYmUgZ2FyYmFnZS1j
b2xsZWN0ZWQuCiAgICAgZnVuY3Rpb24gdW5yZWdpc3RlcigpIHsKLSAgICAgIGZvciAodmFyIHAg
PSBkLndyYXBwZXIucGFyZW50Tm9kZTsgcCAmJiBwICE9IGRvY3VtZW50LmJvZHk7IHAgPSBwLnBh
cmVudE5vZGUpIHt9Ci0gICAgICBpZiAocCkgc2V0VGltZW91dCh1bnJlZ2lzdGVyLCA1MDAwKTsK
KyAgICAgIGlmIChjb250YWlucyhkb2N1bWVudC5ib2R5LCBkLndyYXBwZXIpKSBzZXRUaW1lb3V0
KHVucmVnaXN0ZXIsIDUwMDApOwogICAgICAgZWxzZSBvZmYod2luZG93LCAicmVzaXplIiwgb25S
ZXNpemUpOwogICAgIH0KICAgICBzZXRUaW1lb3V0KHVucmVnaXN0ZXIsIDUwMDApOwogCi0gICAg
b24oZC5pbnB1dCwgImtleXVwIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7Ci0gICAgICBp
ZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGNtLm9wdGlvbnMub25LZXlFdmVudCAmJiBjbS5v
cHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47Ci0gICAgICBpZiAoZS5r
ZXlDb2RlID09IDE2KSBjbS5kb2Muc2VsLnNoaWZ0ID0gZmFsc2U7Ci0gICAgfSkpOworICAgIG9u
KGQuaW5wdXQsICJrZXl1cCIsIG9wZXJhdGlvbihjbSwgb25LZXlVcCkpOwogICAgIG9uKGQuaW5w
dXQsICJpbnB1dCIsIGZ1bmN0aW9uKCkgewotICAgICAgaWYgKGllICYmICFpZV9sdDkgJiYgY20u
ZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbikgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9
IG51bGw7CisgICAgICBpZiAoaWUgJiYgIWllX3VwdG84ICYmIGNtLmRpc3BsYXkuaW5wdXRIYXNT
ZWxlY3Rpb24pIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOwogICAgICAgZmFz
dFBvbGwoY20pOwogICAgIH0pOwogICAgIG9uKGQuaW5wdXQsICJrZXlkb3duIiwgb3BlcmF0aW9u
KGNtLCBvbktleURvd24pKTsKQEAgLTE2MjYsOCArMjQwOSw3IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgIG9uKGQuaW5wdXQsICJibHVyIiwgYmluZChvbkJsdXIsIGNt
KSk7CiAKICAgICBmdW5jdGlvbiBkcmFnXyhlKSB7Ci0gICAgICBpZiAoc2lnbmFsRE9NRXZlbnQo
Y20sIGUpIHx8IGNtLm9wdGlvbnMub25EcmFnRXZlbnQgJiYgY20ub3B0aW9ucy5vbkRyYWdFdmVu
dChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKLSAgICAgIGVfc3RvcChlKTsKKyAgICAgIGlmICgh
c2lnbmFsRE9NRXZlbnQoY20sIGUpKSBlX3N0b3AoZSk7CiAgICAgfQogICAgIGlmIChjbS5vcHRp
b25zLmRyYWdEcm9wKSB7CiAgICAgICBvbihkLnNjcm9sbGVyLCAiZHJhZ3N0YXJ0IiwgZnVuY3Rp
b24oZSl7b25EcmFnU3RhcnQoY20sIGUpO30pOwpAQCAtMTYzNyw3MCArMjQxOSw5OCBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgICAgb24oZC5zY3JvbGxlciwg
InBhc3RlIiwgZnVuY3Rpb24oZSkgewogICAgICAgaWYgKGV2ZW50SW5XaWRnZXQoZCwgZSkpIHJl
dHVybjsKKyAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOwogICAgICAgZm9jdXNJ
bnB1dChjbSk7CiAgICAgICBmYXN0UG9sbChjbSk7CiAgICAgfSk7CiAgICAgb24oZC5pbnB1dCwg
InBhc3RlIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAvLyBXb3JrYXJvdW5kIGZvciB3ZWJraXQgYnVn
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDIwNgotICAgICAgLy8g
QWRkIGEgY2hhciB0byB0aGUgZW5kIG9mIHRleHRhcmVhIGJlZm9yZSBwYXN0ZSBvY2N1ciBzbyB0
aGF0Ci0gICAgICAvLyBzZWxlY3Rpb24gZG9lc24ndCBzcGFuIHRvIHRoZSBlbmQgb2YgdGV4dGFy
ZWEuCi0gICAgICBpZiAod2Via2l0ICYmICFjbS5zdGF0ZS5mYWtlZExhc3RDaGFyICYmICEobmV3
IERhdGUgLSBjbS5zdGF0ZS5sYXN0TWlkZGxlRG93biA8IDIwMCkpIHsKLSAgICAgICAgdmFyIHN0
YXJ0ID0gZC5pbnB1dC5zZWxlY3Rpb25TdGFydCwgZW5kID0gZC5pbnB1dC5zZWxlY3Rpb25FbmQ7
Ci0gICAgICAgIGQuaW5wdXQudmFsdWUgKz0gIiQiOwotICAgICAgICBkLmlucHV0LnNlbGVjdGlv
blN0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIGQuaW5wdXQuc2VsZWN0aW9uRW5kID0gZW5kOwotICAg
ICAgICBjbS5zdGF0ZS5mYWtlZExhc3RDaGFyID0gdHJ1ZTsKLSAgICAgIH0KICAgICAgIGNtLnN0
YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOwogICAgICAgZmFzdFBvbGwoY20pOwogICAgIH0pOwog
Ci0gICAgZnVuY3Rpb24gcHJlcGFyZUNvcHkoKSB7Ci0gICAgICBpZiAoZC5pbmFjY3VyYXRlU2Vs
ZWN0aW9uKSB7Ci0gICAgICAgIGQucHJldklucHV0ID0gIiI7Ci0gICAgICAgIGQuaW5hY2N1cmF0
ZVNlbGVjdGlvbiA9IGZhbHNlOwotICAgICAgICBkLmlucHV0LnZhbHVlID0gY20uZ2V0U2VsZWN0
aW9uKCk7Ci0gICAgICAgIHNlbGVjdElucHV0KGQuaW5wdXQpOworICAgIGZ1bmN0aW9uIHByZXBh
cmVDb3B5Q3V0KGUpIHsKKyAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7CisgICAg
ICAgIGlmIChkLmluYWNjdXJhdGVTZWxlY3Rpb24pIHsKKyAgICAgICAgICBkLnByZXZJbnB1dCA9
ICIiOworICAgICAgICAgIGQuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IGZhbHNlOworICAgICAgICAg
IGQuaW5wdXQudmFsdWUgPSBjbS5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICBzZWxlY3RJbnB1
dChkLmlucHV0KTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHRleHQg
PSAiIiwgcmFuZ2VzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZG9jLnNl
bC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICB2YXIgbGluZSA9IGNtLmRvYy5zZWwu
cmFuZ2VzW2ldLmhlYWQubGluZTsKKyAgICAgICAgICB2YXIgbGluZVJhbmdlID0ge2FuY2hvcjog
UG9zKGxpbmUsIDApLCBoZWFkOiBQb3MobGluZSArIDEsIDApfTsKKyAgICAgICAgICByYW5nZXMu
cHVzaChsaW5lUmFuZ2UpOworICAgICAgICAgIHRleHQgKz0gY20uZ2V0UmFuZ2UobGluZVJhbmdl
LmFuY2hvciwgbGluZVJhbmdlLmhlYWQpOworICAgICAgICB9CisgICAgICAgIGlmIChlLnR5cGUg
PT0gImN1dCIpIHsKKyAgICAgICAgICBjbS5zZXRTZWxlY3Rpb25zKHJhbmdlcywgbnVsbCwgc2Vs
X2RvbnRTY3JvbGwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGQucHJldklucHV0ID0g
IiI7CisgICAgICAgICAgZC5pbnB1dC52YWx1ZSA9IHRleHQ7CisgICAgICAgICAgc2VsZWN0SW5w
dXQoZC5pbnB1dCk7CisgICAgICAgIH0KICAgICAgIH0KKyAgICAgIGlmIChlLnR5cGUgPT0gImN1
dCIpIGNtLnN0YXRlLmN1dEluY29taW5nID0gdHJ1ZTsKICAgICB9Ci0gICAgb24oZC5pbnB1dCwg
ImN1dCIsIHByZXBhcmVDb3B5KTsKLSAgICBvbihkLmlucHV0LCAiY29weSIsIHByZXBhcmVDb3B5
KTsKKyAgICBvbihkLmlucHV0LCAiY3V0IiwgcHJlcGFyZUNvcHlDdXQpOworICAgIG9uKGQuaW5w
dXQsICJjb3B5IiwgcHJlcGFyZUNvcHlDdXQpOwogCiAgICAgLy8gTmVlZGVkIHRvIGhhbmRsZSBU
YWIga2V5IGluIEtIVE1MCiAgICAgaWYgKGtodG1sKSBvbihkLnNpemVyLCAibW91c2V1cCIsIGZ1
bmN0aW9uKCkgewotICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBkLmlucHV0
KSBkLmlucHV0LmJsdXIoKTsKLSAgICAgICAgZm9jdXNJbnB1dChjbSk7CisgICAgICBpZiAoYWN0
aXZlRWx0KCkgPT0gZC5pbnB1dCkgZC5pbnB1dC5ibHVyKCk7CisgICAgICBmb2N1c0lucHV0KGNt
KTsKICAgICB9KTsKICAgfQogCisgIC8vIE1PVVNFIEVWRU5UUworCisgIC8vIFJldHVybiB0cnVl
IHdoZW4gdGhlIGdpdmVuIG1vdXNlIGV2ZW50IGhhcHBlbmVkIGluIGEgd2lkZ2V0CiAgIGZ1bmN0
aW9uIGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkgewogICAgIGZvciAodmFyIG4gPSBlX3Rhcmdl
dChlKTsgbiAhPSBkaXNwbGF5LndyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpIHsKICAgICAgIGlm
ICghbiB8fCBuLmlnbm9yZUV2ZW50cyB8fCBuLnBhcmVudE5vZGUgPT0gZGlzcGxheS5zaXplciAm
JiBuICE9IGRpc3BsYXkubW92ZXIpIHJldHVybiB0cnVlOwogICAgIH0KICAgfQogCi0gIGZ1bmN0
aW9uIHBvc0Zyb21Nb3VzZShjbSwgZSwgbGliZXJhbCkgeworICAvLyBHaXZlbiBhIG1vdXNlIGV2
ZW50LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aW9uLiBJZiBsaWJlcmFsCisgIC8vIGlz
IGZhbHNlLCBpdCBjaGVja3Mgd2hldGhlciBhIGd1dHRlciBvciBzY3JvbGxiYXIgd2FzIGNsaWNr
ZWQsCisgIC8vIGFuZCByZXR1cm5zIG51bGwgaWYgaXQgd2FzLiBmb3JSZWN0IGlzIHVzZWQgYnkg
cmVjdGFuZ3VsYXIKKyAgLy8gc2VsZWN0aW9ucywgYW5kIHRyaWVzIHRvIGVzdGltYXRlIGEgY2hh
cmFjdGVyIHBvc2l0aW9uIGV2ZW4gZm9yCisgIC8vIGNvb3JkaW5hdGVzIGJleW9uZCB0aGUgcmln
aHQgb2YgdGhlIHRleHQuCisgIGZ1bmN0aW9uIHBvc0Zyb21Nb3VzZShjbSwgZSwgbGliZXJhbCwg
Zm9yUmVjdCkgewogICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKICAgICBpZiAoIWxpYmVy
YWwpIHsKICAgICAgIHZhciB0YXJnZXQgPSBlX3RhcmdldChlKTsKLSAgICAgIGlmICh0YXJnZXQg
PT0gZGlzcGxheS5zY3JvbGxiYXJIIHx8IHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckguZmly
c3RDaGlsZCB8fAotICAgICAgICAgIHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhclYgfHwgdGFy
Z2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFyVi5maXJzdENoaWxkIHx8CisgICAgICBpZiAodGFyZ2V0
ID09IGRpc3BsYXkuc2Nyb2xsYmFySCB8fCB0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJWIHx8
CiAgICAgICAgICAgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyIHx8IHRhcmdldCA9
PSBkaXNwbGF5Lmd1dHRlckZpbGxlcikgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIHZhciB4LCB5
LCBzcGFjZSA9IGdldFJlY3QoZGlzcGxheS5saW5lU3BhY2UpOworICAgIHZhciB4LCB5LCBzcGFj
ZSA9IGRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgIC8vIEZh
aWxzIHVucHJlZGljdGFibHkgb24gSUVbNjddIHdoZW4gbW91c2UgaXMgZHJhZ2dlZCBhcm91bmQg
cXVpY2tseS4KLSAgICB0cnkgeyB4ID0gZS5jbGllbnRYOyB5ID0gZS5jbGllbnRZOyB9IGNhdGNo
IChlKSB7IHJldHVybiBudWxsOyB9Ci0gICAgcmV0dXJuIGNvb3Jkc0NoYXIoY20sIHggLSBzcGFj
ZS5sZWZ0LCB5IC0gc3BhY2UudG9wKTsKKyAgICB0cnkgeyB4ID0gZS5jbGllbnRYIC0gc3BhY2Uu
bGVmdDsgeSA9IGUuY2xpZW50WSAtIHNwYWNlLnRvcDsgfQorICAgIGNhdGNoIChlKSB7IHJldHVy
biBudWxsOyB9CisgICAgdmFyIGNvb3JkcyA9IGNvb3Jkc0NoYXIoY20sIHgsIHkpLCBsaW5lOwor
ICAgIGlmIChmb3JSZWN0ICYmIGNvb3Jkcy54UmVsID09IDEgJiYgKGxpbmUgPSBnZXRMaW5lKGNt
LmRvYywgY29vcmRzLmxpbmUpLnRleHQpLmxlbmd0aCA9PSBjb29yZHMuY2gpIHsKKyAgICAgIHZh
ciBjb2xEaWZmID0gY291bnRDb2x1bW4obGluZSwgbGluZS5sZW5ndGgsIGNtLm9wdGlvbnMudGFi
U2l6ZSkgLSBsaW5lLmxlbmd0aDsKKyAgICAgIGNvb3JkcyA9IFBvcyhjb29yZHMubGluZSwgTWF0
aC5yb3VuZCgoeCAtIHBhZGRpbmdIKGNtLmRpc3BsYXkpLmxlZnQpIC8gY2hhcldpZHRoKGNtLmRp
c3BsYXkpKSAtIGNvbERpZmYpOworICAgIH0KKyAgICByZXR1cm4gY29vcmRzOwogICB9CiAKLSAg
dmFyIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrOworICAvLyBBIG1vdXNlIGRvd24gY2FuIGJl
IGEgc2luZ2xlIGNsaWNrLCBkb3VibGUgY2xpY2ssIHRyaXBsZSBjbGljaywKKyAgLy8gc3RhcnQg
b2Ygc2VsZWN0aW9uIGRyYWcsIHN0YXJ0IG9mIHRleHQgZHJhZywgbmV3IGN1cnNvcgorICAvLyAo
Y3RybC1jbGljayksIHJlY3RhbmdsZSBkcmFnIChhbHQtZHJhZyksIG9yIHh3aW4KKyAgLy8gbWlk
ZGxlLWNsaWNrLXBhc3RlLiBPciBpdCBtaWdodCBiZSBhIGNsaWNrIG9uIHNvbWV0aGluZyB3ZSBz
aG91bGQKKyAgLy8gbm90IGludGVyZmVyZSB3aXRoLCBzdWNoIGFzIGEgc2Nyb2xsYmFyIG9yIHdp
ZGdldC4KICAgZnVuY3Rpb24gb25Nb3VzZURvd24oZSkgewogICAgIGlmIChzaWduYWxET01FdmVu
dCh0aGlzLCBlKSkgcmV0dXJuOwotICAgIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNw
bGF5LCBkb2MgPSBjbS5kb2MsIHNlbCA9IGRvYy5zZWw7Ci0gICAgc2VsLnNoaWZ0ID0gZS5zaGlm
dEtleTsKKyAgICB2YXIgY20gPSB0aGlzLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICBkaXNw
bGF5LnNoaWZ0ID0gZS5zaGlmdEtleTsKIAogICAgIGlmIChldmVudEluV2lkZ2V0KGRpc3BsYXks
IGUpKSB7CiAgICAgICBpZiAoIXdlYmtpdCkgeworICAgICAgICAvLyBCcmllZmx5IHR1cm4gb2Zm
IGRyYWdnYWJpbGl0eSwgdG8gYWxsb3cgd2lkZ2V0cyB0byBkbworICAgICAgICAvLyBub3JtYWwg
ZHJhZ2dpbmcgdGhpbmdzLgogICAgICAgICBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IGZh
bHNlOwogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZGlzcGxheS5zY3JvbGxlci5kcmFn
Z2FibGUgPSB0cnVlO30sIDEwMCk7CiAgICAgICB9CkBAIC0xNzA4LDg5ICsyNTE4LDE2OCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgICAgaWYgKGNsaWNrSW5H
dXR0ZXIoY20sIGUpKSByZXR1cm47CiAgICAgdmFyIHN0YXJ0ID0gcG9zRnJvbU1vdXNlKGNtLCBl
KTsKKyAgICB3aW5kb3cuZm9jdXMoKTsKIAogICAgIHN3aXRjaCAoZV9idXR0b24oZSkpIHsKLSAg
ICBjYXNlIDM6Ci0gICAgICBpZiAoY2FwdHVyZU1pZGRsZUNsaWNrKSBvbkNvbnRleHRNZW51LmNh
bGwoY20sIGNtLCBlKTsKLSAgICAgIHJldHVybjsKKyAgICBjYXNlIDE6CisgICAgICBpZiAoc3Rh
cnQpCisgICAgICAgIGxlZnRCdXR0b25Eb3duKGNtLCBlLCBzdGFydCk7CisgICAgICBlbHNlIGlm
IChlX3RhcmdldChlKSA9PSBkaXNwbGF5LnNjcm9sbGVyKQorICAgICAgICBlX3ByZXZlbnREZWZh
dWx0KGUpOworICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgogICAgICAgaWYgKHdlYmtpdCkgY20u
c3RhdGUubGFzdE1pZGRsZURvd24gPSArbmV3IERhdGU7CiAgICAgICBpZiAoc3RhcnQpIGV4dGVu
ZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0KTsKICAgICAgIHNldFRpbWVvdXQoYmluZChmb2N1c0lu
cHV0LCBjbSksIDIwKTsKICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICByZXR1cm47
CisgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2sp
IG9uQ29udGV4dE1lbnUoY20sIGUpOworICAgICAgYnJlYWs7CiAgICAgfQotICAgIC8vIEZvciBi
dXR0b24gMSwgaWYgaXQgd2FzIGNsaWNrZWQgaW5zaWRlIHRoZSBlZGl0b3IKLSAgICAvLyAocG9z
RnJvbU1vdXNlIHJldHVybmluZyBub24tbnVsbCksIHdlIGhhdmUgdG8gYWRqdXN0IHRoZQotICAg
IC8vIHNlbGVjdGlvbi4KLSAgICBpZiAoIXN0YXJ0KSB7aWYgKGVfdGFyZ2V0KGUpID09IGRpc3Bs
YXkuc2Nyb2xsZXIpIGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9CisgIH0KIAotICAgIGlm
ICghY20uc3RhdGUuZm9jdXNlZCkgb25Gb2N1cyhjbSk7CisgIHZhciBsYXN0Q2xpY2ssIGxhc3RE
b3VibGVDbGljazsKKyAgZnVuY3Rpb24gbGVmdEJ1dHRvbkRvd24oY20sIGUsIHN0YXJ0KSB7Cisg
ICAgc2V0VGltZW91dChiaW5kKGVuc3VyZUZvY3VzLCBjbSksIDApOwogCi0gICAgdmFyIG5vdyA9
ICtuZXcgRGF0ZSwgdHlwZSA9ICJzaW5nbGUiOwotICAgIGlmIChsYXN0RG91YmxlQ2xpY2sgJiYg
bGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEobGFzdERvdWJsZUNsaWNr
LnBvcywgc3RhcnQpKSB7CisgICAgdmFyIG5vdyA9ICtuZXcgRGF0ZSwgdHlwZTsKKyAgICBpZiAo
bGFzdERvdWJsZUNsaWNrICYmIGxhc3REb3VibGVDbGljay50aW1lID4gbm93IC0gNDAwICYmIGNt
cChsYXN0RG91YmxlQ2xpY2sucG9zLCBzdGFydCkgPT0gMCkgewogICAgICAgdHlwZSA9ICJ0cmlw
bGUiOwotICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAgIHNldFRpbWVvdXQoYmluZChm
b2N1c0lucHV0LCBjbSksIDIwKTsKLSAgICAgIHNlbGVjdExpbmUoY20sIHN0YXJ0LmxpbmUpOwot
ICAgIH0gZWxzZSBpZiAobGFzdENsaWNrICYmIGxhc3RDbGljay50aW1lID4gbm93IC0gNDAwICYm
IHBvc0VxKGxhc3RDbGljay5wb3MsIHN0YXJ0KSkgeworICAgIH0gZWxzZSBpZiAobGFzdENsaWNr
ICYmIGxhc3RDbGljay50aW1lID4gbm93IC0gNDAwICYmIGNtcChsYXN0Q2xpY2sucG9zLCBzdGFy
dCkgPT0gMCkgewogICAgICAgdHlwZSA9ICJkb3VibGUiOwogICAgICAgbGFzdERvdWJsZUNsaWNr
ID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07Ci0gICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwot
ICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGdldExpbmUoZG9jLCBzdGFydC5saW5lKS50ZXh0
LCBzdGFydCk7Ci0gICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmZyb20sIHdvcmQu
dG8pOwotICAgIH0gZWxzZSB7IGxhc3RDbGljayA9IHt0aW1lOiBub3csIHBvczogc3RhcnR9OyB9
Ci0KLSAgICB2YXIgbGFzdCA9IHN0YXJ0OwotICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wICYm
IGRyYWdBbmREcm9wICYmICFpc1JlYWRPbmx5KGNtKSAmJiAhcG9zRXEoc2VsLmZyb20sIHNlbC50
bykgJiYKLSAgICAgICAgIXBvc0xlc3Moc3RhcnQsIHNlbC5mcm9tKSAmJiAhcG9zTGVzcyhzZWwu
dG8sIHN0YXJ0KSAmJiB0eXBlID09ICJzaW5nbGUiKSB7Ci0gICAgICB2YXIgZHJhZ0VuZCA9IG9w
ZXJhdGlvbihjbSwgZnVuY3Rpb24oZTIpIHsKLSAgICAgICAgaWYgKHdlYmtpdCkgZGlzcGxheS5z
Y3JvbGxlci5kcmFnZ2FibGUgPSBmYWxzZTsKLSAgICAgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0
ID0gZmFsc2U7Ci0gICAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNldXAiLCBkcmFnRW5kKTsKLSAg
ICAgICAgb2ZmKGRpc3BsYXkuc2Nyb2xsZXIsICJkcm9wIiwgZHJhZ0VuZCk7Ci0gICAgICAgIGlm
IChNYXRoLmFicyhlLmNsaWVudFggLSBlMi5jbGllbnRYKSArIE1hdGguYWJzKGUuY2xpZW50WSAt
IGUyLmNsaWVudFkpIDwgMTApIHsKLSAgICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUyKTsKLSAg
ICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydCk7Ci0gICAgICAgICAgZm9jdXNJ
bnB1dChjbSk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgLy8gTGV0IHRoZSBkcmFnIGhh
bmRsZXIgaGFuZGxlIHRoaXMuCi0gICAgICBpZiAod2Via2l0KSBkaXNwbGF5LnNjcm9sbGVyLmRy
YWdnYWJsZSA9IHRydWU7Ci0gICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgPSBkcmFnRW5kOwot
ICAgICAgLy8gSUUncyBhcHByb2FjaCB0byBkcmFnZ2FibGUKLSAgICAgIGlmIChkaXNwbGF5LnNj
cm9sbGVyLmRyYWdEcm9wKSBkaXNwbGF5LnNjcm9sbGVyLmRyYWdEcm9wKCk7Ci0gICAgICBvbihk
b2N1bWVudCwgIm1vdXNldXAiLCBkcmFnRW5kKTsKLSAgICAgIG9uKGRpc3BsYXkuc2Nyb2xsZXIs
ICJkcm9wIiwgZHJhZ0VuZCk7Ci0gICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgIHR5
cGUgPSAic2luZ2xlIjsKKyAgICAgIGxhc3RDbGljayA9IHt0aW1lOiBub3csIHBvczogc3RhcnR9
OwogICAgIH0KLSAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgIGlmICh0eXBlID09ICJzaW5n
bGUiKSBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBjbGlwUG9zKGRvYywgc3RhcnQpKTsKIAotICAg
IHZhciBzdGFydHN0YXJ0ID0gc2VsLmZyb20sIHN0YXJ0ZW5kID0gc2VsLnRvLCBsYXN0UG9zID0g
c3RhcnQ7Ci0KLSAgICBmdW5jdGlvbiBkb1NlbGVjdChjdXIpIHsKLSAgICAgIGlmIChwb3NFcShs
YXN0UG9zLCBjdXIpKSByZXR1cm47Ci0gICAgICBsYXN0UG9zID0gY3VyOworICAgIHZhciBzZWwg
PSBjbS5kb2Muc2VsLCBhZGROZXcgPSBtYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXk7CisgICAg
aWYgKGNtLm9wdGlvbnMuZHJhZ0Ryb3AgJiYgZHJhZ0FuZERyb3AgJiYgIWFkZE5ldyAmJiAhaXNS
ZWFkT25seShjbSkgJiYKKyAgICAgICAgdHlwZSA9PSAic2luZ2xlIiAmJiBzZWwuY29udGFpbnMo
c3RhcnQpID4gLTEgJiYgc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCkpCisgICAgICBsZWZ0QnV0dG9u
U3RhcnREcmFnKGNtLCBlLCBzdGFydCk7CisgICAgZWxzZQorICAgICAgbGVmdEJ1dHRvblNlbGVj
dChjbSwgZSwgc3RhcnQsIHR5cGUsIGFkZE5ldyk7CisgIH0KIAotICAgICAgaWYgKHR5cGUgPT0g
InNpbmdsZSIpIHsKLSAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgY2xpcFBvcyhkb2Ms
IHN0YXJ0KSwgY3VyKTsKLSAgICAgICAgcmV0dXJuOworICAvLyBTdGFydCBhIHRleHQgZHJhZy4g
V2hlbiBpdCBlbmRzLCBzZWUgaWYgYW55IGRyYWdnaW5nIGFjdHVhbGx5CisgIC8vIGhhcHBlbiwg
YW5kIHRyZWF0IGFzIGEgY2xpY2sgaWYgaXQgZGlkbid0LgorICBmdW5jdGlvbiBsZWZ0QnV0dG9u
U3RhcnREcmFnKGNtLCBlLCBzdGFydCkgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsK
KyAgICB2YXIgZHJhZ0VuZCA9IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oZTIpIHsKKyAgICAgIGlm
ICh3ZWJraXQpIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7CisgICAgICBjbS5z
dGF0ZS5kcmFnZ2luZ1RleHQgPSBmYWxzZTsKKyAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNldXAi
LCBkcmFnRW5kKTsKKyAgICAgIG9mZihkaXNwbGF5LnNjcm9sbGVyLCAiZHJvcCIsIGRyYWdFbmQp
OworICAgICAgaWYgKE1hdGguYWJzKGUuY2xpZW50WCAtIGUyLmNsaWVudFgpICsgTWF0aC5hYnMo
ZS5jbGllbnRZIC0gZTIuY2xpZW50WSkgPCAxMCkgeworICAgICAgICBlX3ByZXZlbnREZWZhdWx0
KGUyKTsKKyAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3RhcnQpOworICAgICAgICBm
b2N1c0lucHV0KGNtKTsKKyAgICAgICAgLy8gV29yayBhcm91bmQgdW5leHBsYWluYWJsZSBmb2N1
cyBwcm9ibGVtIGluIElFOSAoIzIxMjcpCisgICAgICAgIGlmIChpZV91cHRvMTAgJiYgIWllX3Vw
dG84KQorICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ZG9jdW1lbnQuYm9keS5mb2N1
cygpOyBmb2N1c0lucHV0KGNtKTt9LCAyMCk7CiAgICAgICB9CisgICAgfSk7CisgICAgLy8gTGV0
IHRoZSBkcmFnIGhhbmRsZXIgaGFuZGxlIHRoaXMuCisgICAgaWYgKHdlYmtpdCkgZGlzcGxheS5z
Y3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOworICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dCA9IGRy
YWdFbmQ7CisgICAgLy8gSUUncyBhcHByb2FjaCB0byBkcmFnZ2FibGUKKyAgICBpZiAoZGlzcGxh
eS5zY3JvbGxlci5kcmFnRHJvcCkgZGlzcGxheS5zY3JvbGxlci5kcmFnRHJvcCgpOworICAgIG9u
KGRvY3VtZW50LCAibW91c2V1cCIsIGRyYWdFbmQpOworICAgIG9uKGRpc3BsYXkuc2Nyb2xsZXIs
ICJkcm9wIiwgZHJhZ0VuZCk7CisgIH0KKworICAvLyBOb3JtYWwgc2VsZWN0aW9uLCBhcyBvcHBv
c2VkIHRvIHRleHQgZHJhZ2dpbmcuCisgIGZ1bmN0aW9uIGxlZnRCdXR0b25TZWxlY3QoY20sIGUs
IHN0YXJ0LCB0eXBlLCBhZGROZXcpIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRv
YyA9IGNtLmRvYzsKKyAgICBlX3ByZXZlbnREZWZhdWx0KGUpOworCisgICAgdmFyIG91clJhbmdl
LCBvdXJJbmRleCwgc3RhcnRTZWwgPSBkb2Muc2VsOworICAgIGlmIChhZGROZXcpIHsKKyAgICAg
IG91ckluZGV4ID0gZG9jLnNlbC5jb250YWlucyhzdGFydCk7CisgICAgICBpZiAob3VySW5kZXgg
PiAtMSkKKyAgICAgICAgb3VyUmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tvdXJJbmRleF07CisgICAg
ICBlbHNlCisgICAgICAgIG91clJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBzdGFydCk7CisgICAg
fSBlbHNlIHsKKyAgICAgIG91clJhbmdlID0gZG9jLnNlbC5wcmltYXJ5KCk7CisgICAgfQorCisg
ICAgaWYgKGUuYWx0S2V5KSB7CisgICAgICB0eXBlID0gInJlY3QiOworICAgICAgaWYgKCFhZGRO
ZXcpIG91clJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBzdGFydCk7CisgICAgICBzdGFydCA9IHBv
c0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICBvdXJJbmRleCA9IC0xOworICAg
IH0gZWxzZSBpZiAodHlwZSA9PSAiZG91YmxlIikgeworICAgICAgdmFyIHdvcmQgPSBmaW5kV29y
ZEF0KGRvYywgc3RhcnQpOworICAgICAgaWYgKGNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVu
ZCkKKyAgICAgICAgb3VyUmFuZ2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCB3b3JkLmFu
Y2hvciwgd29yZC5oZWFkKTsKKyAgICAgIGVsc2UKKyAgICAgICAgb3VyUmFuZ2UgPSB3b3JkOwor
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSAidHJpcGxlIikgeworICAgICAgdmFyIGxpbmUgPSBuZXcg
UmFuZ2UoUG9zKHN0YXJ0LmxpbmUsIDApLCBjbGlwUG9zKGRvYywgUG9zKHN0YXJ0LmxpbmUgKyAx
LCAwKSkpOworICAgICAgaWYgKGNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCkKKyAgICAg
ICAgb3VyUmFuZ2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCBsaW5lLmFuY2hvciwgbGlu
ZS5oZWFkKTsKKyAgICAgIGVsc2UKKyAgICAgICAgb3VyUmFuZ2UgPSBsaW5lOworICAgIH0gZWxz
ZSB7CisgICAgICBvdXJSYW5nZSA9IGV4dGVuZFJhbmdlKGRvYywgb3VyUmFuZ2UsIHN0YXJ0KTsK
KyAgICB9CiAKLSAgICAgIHN0YXJ0c3RhcnQgPSBjbGlwUG9zKGRvYywgc3RhcnRzdGFydCk7Ci0g
ICAgICBzdGFydGVuZCA9IGNsaXBQb3MoZG9jLCBzdGFydGVuZCk7Ci0gICAgICBpZiAodHlwZSA9
PSAiZG91YmxlIikgewotICAgICAgICB2YXIgd29yZCA9IGZpbmRXb3JkQXQoZ2V0TGluZShkb2Ms
IGN1ci5saW5lKS50ZXh0LCBjdXIpOwotICAgICAgICBpZiAocG9zTGVzcyhjdXIsIHN0YXJ0c3Rh
cnQpKSBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmZyb20sIHN0YXJ0ZW5kKTsKLSAgICAg
ICAgZWxzZSBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydHN0YXJ0LCB3b3JkLnRvKTsKLSAg
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSAidHJpcGxlIikgewotICAgICAgICBpZiAocG9zTGVzcyhj
dXIsIHN0YXJ0c3RhcnQpKSBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydGVuZCwgY2xpcFBv
cyhkb2MsIFBvcyhjdXIubGluZSwgMCkpKTsKLSAgICAgICAgZWxzZSBleHRlbmRTZWxlY3Rpb24o
Y20uZG9jLCBzdGFydHN0YXJ0LCBjbGlwUG9zKGRvYywgUG9zKGN1ci5saW5lICsgMSwgMCkpKTsK
KyAgICBpZiAoIWFkZE5ldykgeworICAgICAgb3VySW5kZXggPSAwOworICAgICAgc2V0U2VsZWN0
aW9uKGRvYywgbmV3IFNlbGVjdGlvbihbb3VyUmFuZ2VdLCAwKSwgc2VsX21vdXNlKTsKKyAgICB9
IGVsc2UgaWYgKG91ckluZGV4ID4gLTEpIHsKKyAgICAgIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9j
LCBvdXJJbmRleCwgb3VyUmFuZ2UsIHNlbF9tb3VzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIG91
ckluZGV4ID0gZG9jLnNlbC5yYW5nZXMubGVuZ3RoOworICAgICAgc2V0U2VsZWN0aW9uKGRvYywg
bm9ybWFsaXplU2VsZWN0aW9uKGRvYy5zZWwucmFuZ2VzLmNvbmNhdChbb3VyUmFuZ2VdKSwgb3Vy
SW5kZXgpLAorICAgICAgICAgICAgICAgICAgIHtzY3JvbGw6IGZhbHNlLCBvcmlnaW46ICIqbW91
c2UifSk7CisgICAgfQorCisgICAgdmFyIGxhc3RQb3MgPSBzdGFydDsKKyAgICBmdW5jdGlvbiBl
eHRlbmRUbyhwb3MpIHsKKyAgICAgIGlmIChjbXAobGFzdFBvcywgcG9zKSA9PSAwKSByZXR1cm47
CisgICAgICBsYXN0UG9zID0gcG9zOworCisgICAgICBpZiAodHlwZSA9PSAicmVjdCIpIHsKKyAg
ICAgICAgdmFyIHJhbmdlcyA9IFtdLCB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplOworICAg
ICAgICB2YXIgc3RhcnRDb2wgPSBjb3VudENvbHVtbihnZXRMaW5lKGRvYywgc3RhcnQubGluZSku
dGV4dCwgc3RhcnQuY2gsIHRhYlNpemUpOworICAgICAgICB2YXIgcG9zQ29sID0gY291bnRDb2x1
bW4oZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0LCBwb3MuY2gsIHRhYlNpemUpOworICAgICAg
ICB2YXIgbGVmdCA9IE1hdGgubWluKHN0YXJ0Q29sLCBwb3NDb2wpLCByaWdodCA9IE1hdGgubWF4
KHN0YXJ0Q29sLCBwb3NDb2wpOworICAgICAgICBmb3IgKHZhciBsaW5lID0gTWF0aC5taW4oc3Rh
cnQubGluZSwgcG9zLmxpbmUpLCBlbmQgPSBNYXRoLm1pbihjbS5sYXN0TGluZSgpLCBNYXRoLm1h
eChzdGFydC5saW5lLCBwb3MubGluZSkpOworICAgICAgICAgICAgIGxpbmUgPD0gZW5kOyBsaW5l
KyspIHsKKyAgICAgICAgICB2YXIgdGV4dCA9IGdldExpbmUoZG9jLCBsaW5lKS50ZXh0LCBsZWZ0
UG9zID0gZmluZENvbHVtbih0ZXh0LCBsZWZ0LCB0YWJTaXplKTsKKyAgICAgICAgICBpZiAobGVm
dCA9PSByaWdodCkKKyAgICAgICAgICAgIHJhbmdlcy5wdXNoKG5ldyBSYW5nZShQb3MobGluZSwg
bGVmdFBvcyksIFBvcyhsaW5lLCBsZWZ0UG9zKSkpOworICAgICAgICAgIGVsc2UgaWYgKHRleHQu
bGVuZ3RoID4gbGVmdFBvcykKKyAgICAgICAgICAgIHJhbmdlcy5wdXNoKG5ldyBSYW5nZShQb3Mo
bGluZSwgbGVmdFBvcyksIFBvcyhsaW5lLCBmaW5kQ29sdW1uKHRleHQsIHJpZ2h0LCB0YWJTaXpl
KSkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpIHJhbmdlcy5wdXNo
KG5ldyBSYW5nZShzdGFydCwgc3RhcnQpKTsKKyAgICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9y
bWFsaXplU2VsZWN0aW9uKHN0YXJ0U2VsLnJhbmdlcy5zbGljZSgwLCBvdXJJbmRleCkuY29uY2F0
KHJhbmdlcyksIG91ckluZGV4KSwgc2VsX21vdXNlKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IHZhciBvbGRSYW5nZSA9IG91clJhbmdlOworICAgICAgICB2YXIgYW5jaG9yID0gb2xkUmFuZ2Uu
YW5jaG9yLCBoZWFkID0gcG9zOworICAgICAgICBpZiAodHlwZSAhPSAic2luZ2xlIikgeworICAg
ICAgICAgIGlmICh0eXBlID09ICJkb3VibGUiKQorICAgICAgICAgICAgdmFyIHJhbmdlID0gZmlu
ZFdvcmRBdChkb2MsIHBvcyk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFyIHJhbmdl
ID0gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgMCksIGNsaXBQb3MoZG9jLCBQb3MocG9zLmxpbmUg
KyAxLCAwKSkpOworICAgICAgICAgIGlmIChjbXAocmFuZ2UuYW5jaG9yLCBhbmNob3IpID4gMCkg
eworICAgICAgICAgICAgaGVhZCA9IHJhbmdlLmhlYWQ7CisgICAgICAgICAgICBhbmNob3IgPSBt
aW5Qb3Mob2xkUmFuZ2UuZnJvbSgpLCByYW5nZS5hbmNob3IpOworICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBoZWFkID0gcmFuZ2UuYW5jaG9yOworICAgICAgICAgICAgYW5jaG9yID0g
bWF4UG9zKG9sZFJhbmdlLnRvKCksIHJhbmdlLmhlYWQpOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB2YXIgcmFuZ2VzID0gc3RhcnRTZWwucmFuZ2VzLnNsaWNlKDApOworICAgICAg
ICByYW5nZXNbb3VySW5kZXhdID0gbmV3IFJhbmdlKGNsaXBQb3MoZG9jLCBhbmNob3IpLCBoZWFk
KTsKKyAgICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKHJhbmdlcywg
b3VySW5kZXgpLCBzZWxfbW91c2UpOwogICAgICAgfQogICAgIH0KIAotICAgIHZhciBlZGl0b3JT
aXplID0gZ2V0UmVjdChkaXNwbGF5LndyYXBwZXIpOworICAgIHZhciBlZGl0b3JTaXplID0gZGlz
cGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgIC8vIFVzZWQgdG8gZW5z
dXJlIHRpbWVvdXQgcmUtdHJpZXMgZG9uJ3QgZmlyZSB3aGVuIGFub3RoZXIgZXh0ZW5kCiAgICAg
Ly8gaGFwcGVuZWQgaW4gdGhlIG1lYW50aW1lIChjbGVhclRpbWVvdXQgaXNuJ3QgcmVsaWFibGUg
LS0gYXQKICAgICAvLyBsZWFzdCBvbiBDaHJvbWUsIHRoZSB0aW1lb3V0cyBzdGlsbCBoYXBwZW4g
ZXZlbiB3aGVuIGNsZWFyZWQsCkBAIC0xNzk5LDEyICsyNjg4LDExIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogCiAgICAgZnVuY3Rpb24gZXh0ZW5kKGUpIHsKICAgICAgIHZh
ciBjdXJDb3VudCA9ICsrY291bnRlcjsKLSAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20s
IGUsIHRydWUpOworICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSwgdHlw
ZSA9PSAicmVjdCIpOwogICAgICAgaWYgKCFjdXIpIHJldHVybjsKLSAgICAgIGlmICghcG9zRXEo
Y3VyLCBsYXN0KSkgewotICAgICAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIG9uRm9jdXMoY20p
OwotICAgICAgICBsYXN0ID0gY3VyOwotICAgICAgICBkb1NlbGVjdChjdXIpOworICAgICAgaWYg
KGNtcChjdXIsIGxhc3RQb3MpICE9IDApIHsKKyAgICAgICAgZW5zdXJlRm9jdXMoY20pOworICAg
ICAgICBleHRlbmRUbyhjdXIpOwogICAgICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcyhk
aXNwbGF5LCBkb2MpOwogICAgICAgICBpZiAoY3VyLmxpbmUgPj0gdmlzaWJsZS50byB8fCBjdXIu
bGluZSA8IHZpc2libGUuZnJvbSkKICAgICAgICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwg
ZnVuY3Rpb24oKXtpZiAoY291bnRlciA9PSBjdXJDb3VudCkgZXh0ZW5kKGUpO30pLCAxNTApOwpA
QCAtMTgyNCwxMCArMjcxMiwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICAgIGZvY3VzSW5wdXQoY20pOwogICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwg
bW92ZSk7CiAgICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZXVwIiwgdXApOworICAgICAgZG9jLmhp
c3RvcnkubGFzdFNlbE9yaWdpbiA9IG51bGw7CiAgICAgfQogCiAgICAgdmFyIG1vdmUgPSBvcGVy
YXRpb24oY20sIGZ1bmN0aW9uKGUpIHsKLSAgICAgIGlmICghaWUgJiYgIWVfYnV0dG9uKGUpKSBk
b25lKGUpOworICAgICAgaWYgKChpZSAmJiAhaWVfdXB0bzkpID8gICFlLmJ1dHRvbnMgOiAhZV9i
dXR0b24oZSkpIGRvbmUoZSk7CiAgICAgICBlbHNlIGV4dGVuZChlKTsKICAgICB9KTsKICAgICB2
YXIgdXAgPSBvcGVyYXRpb24oY20sIGRvbmUpOwpAQCAtMTgzNSwyMSArMjcyNCwyMyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBvbihkb2N1bWVudCwgIm1vdXNldXAi
LCB1cCk7CiAgIH0KIAorICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gZXZlbnQgaGFwcGVuZWQg
aW4gdGhlIGd1dHRlciwgYW5kIGZpcmVzIHRoZQorICAvLyBoYW5kbGVycyBmb3IgdGhlIGNvcnJl
c3BvbmRpbmcgZXZlbnQuCiAgIGZ1bmN0aW9uIGd1dHRlckV2ZW50KGNtLCBlLCB0eXBlLCBwcmV2
ZW50LCBzaWduYWxmbikgewogICAgIHRyeSB7IHZhciBtWCA9IGUuY2xpZW50WCwgbVkgPSBlLmNs
aWVudFk7IH0KICAgICBjYXRjaChlKSB7IHJldHVybiBmYWxzZTsgfQotICAgIGlmIChtWCA+PSBN
YXRoLmZsb29yKGdldFJlY3QoY20uZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobVggPj0gTWF0aC5mbG9vcihjbS5kaXNwbGF5Lmd1dHRlcnMuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCkucmlnaHQpKSByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHByZXZlbnQpIGVf
cHJldmVudERlZmF1bHQoZSk7CiAKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0gICAg
dmFyIGxpbmVCb3ggPSBnZXRSZWN0KGRpc3BsYXkubGluZURpdik7CisgICAgdmFyIGxpbmVCb3gg
PSBkaXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAKICAgICBpZiAobVkg
PiBsaW5lQm94LmJvdHRvbSB8fCAhaGFzSGFuZGxlcihjbSwgdHlwZSkpIHJldHVybiBlX2RlZmF1
bHRQcmV2ZW50ZWQoZSk7CiAgICAgbVkgLT0gbGluZUJveC50b3AgLSBkaXNwbGF5LnZpZXdPZmZz
ZXQ7CiAKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7
ICsraSkgewogICAgICAgdmFyIGcgPSBkaXNwbGF5Lmd1dHRlcnMuY2hpbGROb2Rlc1tpXTsKLSAg
ICAgIGlmIChnICYmIGdldFJlY3QoZykucmlnaHQgPj0gbVgpIHsKKyAgICAgIGlmIChnICYmIGcu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgPj0gbVgpIHsKICAgICAgICAgdmFyIGxpbmUg
PSBsaW5lQXRIZWlnaHQoY20uZG9jLCBtWSk7CiAgICAgICAgIHZhciBndXR0ZXIgPSBjbS5vcHRp
b25zLmd1dHRlcnNbaV07CiAgICAgICAgIHNpZ25hbGZuKGNtLCB0eXBlLCBjbSwgbGluZSwgZ3V0
dGVyLCBlKTsKQEAgLTE4NTgsMTEgKzI3NDksNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICB9CiAgIH0KIAotICBmdW5jdGlvbiBjb250ZXh0TWVudUluR3V0dGVyKGNt
LCBlKSB7Ci0gICAgaWYgKCFoYXNIYW5kbGVyKGNtLCAiZ3V0dGVyQ29udGV4dE1lbnUiKSkgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBndXR0ZXJFdmVudChjbSwgZSwgImd1dHRlckNvbnRleHRN
ZW51IiwgZmFsc2UsIHNpZ25hbCk7Ci0gIH0KLQogICBmdW5jdGlvbiBjbGlja0luR3V0dGVyKGNt
LCBlKSB7CiAgICAgcmV0dXJuIGd1dHRlckV2ZW50KGNtLCBlLCAiZ3V0dGVyQ2xpY2siLCB0cnVl
LCBzaWduYWxMYXRlcik7CiAgIH0KQEAgLTE4NzMsMjkgKzI3NTksMzMgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gb25Ecm9wKGUpIHsKICAgICB2YXIg
Y20gPSB0aGlzOwotICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgZXZlbnRJbldpZGdl
dChjbS5kaXNwbGF5LCBlKSB8fCAoY20ub3B0aW9ucy5vbkRyYWdFdmVudCAmJiBjbS5vcHRpb25z
Lm9uRHJhZ0V2ZW50KGNtLCBhZGRTdG9wKGUpKSkpCisgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNt
LCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKQogICAgICAgcmV0dXJuOwogICAg
IGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgaWYgKGllKSBsYXN0RHJvcCA9ICtuZXcgRGF0ZTsK
KyAgICBpZiAoaWVfdXB0bzEwKSBsYXN0RHJvcCA9ICtuZXcgRGF0ZTsKICAgICB2YXIgcG9zID0g
cG9zRnJvbU1vdXNlKGNtLCBlLCB0cnVlKSwgZmlsZXMgPSBlLmRhdGFUcmFuc2Zlci5maWxlczsK
ICAgICBpZiAoIXBvcyB8fCBpc1JlYWRPbmx5KGNtKSkgcmV0dXJuOworICAgIC8vIE1pZ2h0IGJl
IGEgZmlsZSBkcm9wLCBpbiB3aGljaCBjYXNlIHdlIHNpbXBseSBleHRyYWN0IHRoZSB0ZXh0Cisg
ICAgLy8gYW5kIGluc2VydCBpdC4KICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoICYmIHdp
bmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlKSB7CiAgICAgICB2YXIgbiA9IGZpbGVzLmxl
bmd0aCwgdGV4dCA9IEFycmF5KG4pLCByZWFkID0gMDsKICAgICAgIHZhciBsb2FkRmlsZSA9IGZ1
bmN0aW9uKGZpbGUsIGkpIHsKICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyOwot
ICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJlYWRlci5vbmxv
YWQgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCkgewogICAgICAgICAgIHRleHRbaV0gPSByZWFk
ZXIucmVzdWx0OwogICAgICAgICAgIGlmICgrK3JlYWQgPT0gbikgewogICAgICAgICAgICAgcG9z
ID0gY2xpcFBvcyhjbS5kb2MsIHBvcyk7Ci0gICAgICAgICAgICBtYWtlQ2hhbmdlKGNtLmRvYywg
e2Zyb206IHBvcywgdG86IHBvcywgdGV4dDogc3BsaXRMaW5lcyh0ZXh0LmpvaW4oIlxuIikpLCBv
cmlnaW46ICJwYXN0ZSJ9LCAiYXJvdW5kIik7CisgICAgICAgICAgICB2YXIgY2hhbmdlID0ge2Zy
b206IHBvcywgdG86IHBvcywgdGV4dDogc3BsaXRMaW5lcyh0ZXh0LmpvaW4oIlxuIikpLCBvcmln
aW46ICJwYXN0ZSJ9OworICAgICAgICAgICAgbWFrZUNoYW5nZShjbS5kb2MsIGNoYW5nZSk7Cisg
ICAgICAgICAgICBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeShjbS5kb2MsIHNpbXBsZVNlbGVj
dGlvbihwb3MsIGNoYW5nZUVuZChjaGFuZ2UpKSk7CiAgICAgICAgICAgfQotICAgICAgICB9Owor
ICAgICAgICB9KTsKICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7CiAgICAgICB9Owog
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIGxvYWRGaWxlKGZpbGVzW2ldLCBpKTsK
LSAgICB9IGVsc2UgeworICAgIH0gZWxzZSB7IC8vIE5vcm1hbCBkcm9wCiAgICAgICAvLyBEb24n
dCBkbyBhIHJlcGxhY2UgaWYgdGhlIGRyb3AgaGFwcGVuZWQgaW5zaWRlIG9mIHRoZSBzZWxlY3Rl
ZCB0ZXh0LgotICAgICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiAhKHBvc0xlc3MocG9z
LCBjbS5kb2Muc2VsLmZyb20pIHx8IHBvc0xlc3MoY20uZG9jLnNlbC50bywgcG9zKSkpIHsKKyAg
ICAgIGlmIChjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgY20uZG9jLnNlbC5jb250YWlucyhwb3Mp
ID4gLTEpIHsKICAgICAgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0KGUpOwogICAgICAgICAvLyBF
bnN1cmUgdGhlIGVkaXRvciBpcyByZS1mb2N1c2VkCiAgICAgICAgIHNldFRpbWVvdXQoYmluZChm
b2N1c0lucHV0LCBjbSksIDIwKTsKQEAgLTE5MDQsMTAgKzI3OTQsMTEgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB0cnkgewogICAgICAgICB2YXIgdGV4dCA9IGUu
ZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTsKICAgICAgICAgaWYgKHRleHQpIHsKLSAgICAg
ICAgICB2YXIgY3VyRnJvbSA9IGNtLmRvYy5zZWwuZnJvbSwgY3VyVG8gPSBjbS5kb2Muc2VsLnRv
OwotICAgICAgICAgIHNldFNlbGVjdGlvbihjbS5kb2MsIHBvcywgcG9zKTsKLSAgICAgICAgICBp
ZiAoY20uc3RhdGUuZHJhZ2dpbmdUZXh0KSByZXBsYWNlUmFuZ2UoY20uZG9jLCAiIiwgY3VyRnJv
bSwgY3VyVG8sICJwYXN0ZSIpOwotICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24odGV4dCwg
bnVsbCwgInBhc3RlIik7CisgICAgICAgICAgdmFyIHNlbGVjdGVkID0gY20uc3RhdGUuZHJhZ2dp
bmdUZXh0ICYmIGNtLmxpc3RTZWxlY3Rpb25zKCk7CisgICAgICAgICAgc2V0U2VsZWN0aW9uTm9V
bmRvKGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKHBvcywgcG9zKSk7CisgICAgICAgICAgaWYgKHNl
bGVjdGVkKSBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdGVkLmxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgcmVwbGFjZVJhbmdlKGNtLmRvYywgIiIsIHNlbGVjdGVkW2ldLmFuY2hvciwgc2VsZWN0
ZWRbaV0uaGVhZCwgImRyYWciKTsKKyAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHRleHQs
ICJhcm91bmQiLCAicGFzdGUiKTsKICAgICAgICAgICBmb2N1c0lucHV0KGNtKTsKICAgICAgICAg
fQogICAgICAgfQpAQCAtMTkxNiwzNyArMjgwNyw0MiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgfQogCiAgIGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGNtLCBlKSB7Ci0gICAg
aWYgKGllICYmICghY20uc3RhdGUuZHJhZ2dpbmdUZXh0IHx8ICtuZXcgRGF0ZSAtIGxhc3REcm9w
IDwgMTAwKSkgeyBlX3N0b3AoZSk7IHJldHVybjsgfQorICAgIGlmIChpZV91cHRvMTAgJiYgKCFj
bS5zdGF0ZS5kcmFnZ2luZ1RleHQgfHwgK25ldyBEYXRlIC0gbGFzdERyb3AgPCAxMDApKSB7IGVf
c3RvcChlKTsgcmV0dXJuOyB9CiAgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVu
dEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSByZXR1cm47CiAKLSAgICB2YXIgdHh0ID0gY20uZ2V0
U2VsZWN0aW9uKCk7Ci0gICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsIHR4dCk7Cisg
ICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsIGNtLmdldFNlbGVjdGlvbigpKTsKIAog
ICAgIC8vIFVzZSBkdW1teSBpbWFnZSBpbnN0ZWFkIG9mIGRlZmF1bHQgYnJvd3NlcnMgaW1hZ2Uu
CiAgICAgLy8gUmVjZW50IFNhZmFyaSAofjYuMC4yKSBoYXZlIGEgdGVuZGVuY3kgdG8gc2VnZmF1
bHQgd2hlbiB0aGlzIGhhcHBlbnMsIHNvIHdlIGRvbid0IGRvIGl0IHRoZXJlLgogICAgIGlmIChl
LmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UgJiYgIXNhZmFyaSkgewogICAgICAgdmFyIGltZyA9
IGVsdCgiaW1nIiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAw
OyIpOwogICAgICAgaW1nLnNyYyA9ICJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFC
QUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSI7Ci0gICAgICBpZiAob3Bl
cmEpIHsKKyAgICAgIGlmIChwcmVzdG8pIHsKICAgICAgICAgaW1nLndpZHRoID0gaW1nLmhlaWdo
dCA9IDE7CiAgICAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChpbWcpOwogICAg
ICAgICAvLyBGb3JjZSBhIHJlbGF5b3V0LCBvciBPcGVyYSB3b24ndCB1c2Ugb3VyIGltYWdlIGZv
ciBzb21lIG9ic2N1cmUgcmVhc29uCiAgICAgICAgIGltZy5fdG9wID0gaW1nLm9mZnNldFRvcDsK
ICAgICAgIH0KICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShpbWcsIDAsIDApOwot
ICAgICAgaWYgKG9wZXJhKSBpbWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbWcpOworICAgICAg
aWYgKHByZXN0bykgaW1nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaW1nKTsKICAgICB9CiAgIH0K
IAorICAvLyBTQ1JPTEwgRVZFTlRTCisKKyAgLy8gU3luYyB0aGUgc2Nyb2xsYWJsZSBhcmVhIGFu
ZCBzY3JvbGxiYXJzLCBlbnN1cmUgdGhlIHZpZXdwb3J0CisgIC8vIGNvdmVycyB0aGUgdmlzaWJs
ZSBhcmVhLgogICBmdW5jdGlvbiBzZXRTY3JvbGxUb3AoY20sIHZhbCkgewogICAgIGlmIChNYXRo
LmFicyhjbS5kb2Muc2Nyb2xsVG9wIC0gdmFsKSA8IDIpIHJldHVybjsKICAgICBjbS5kb2Muc2Ny
b2xsVG9wID0gdmFsOwotICAgIGlmICghZ2Vja28pIHVwZGF0ZURpc3BsYXkoY20sIFtdLCB2YWwp
OworICAgIGlmICghZ2Vja28pIHVwZGF0ZURpc3BsYXkoY20sIHt0b3A6IHZhbH0pOwogICAgIGlm
IChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xs
ZXIuc2Nyb2xsVG9wID0gdmFsOwogICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xs
VG9wICE9IHZhbCkgY20uZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9IHZhbDsKLSAgICBp
ZiAoZ2Vja28pIHVwZGF0ZURpc3BsYXkoY20sIFtdKTsKKyAgICBpZiAoZ2Vja28pIHVwZGF0ZURp
c3BsYXkoY20pOwogICAgIHN0YXJ0V29ya2VyKGNtLCAxMDApOwogICB9CisgIC8vIFN5bmMgc2Ny
b2xsZXIgYW5kIHNjcm9sbGJhciwgZW5zdXJlIHRoZSBndXR0ZXIgZWxlbWVudHMgYXJlCisgIC8v
IGFsaWduZWQuCiAgIGZ1bmN0aW9uIHNldFNjcm9sbExlZnQoY20sIHZhbCwgaXNTY3JvbGxlcikg
ewogICAgIGlmIChpc1Njcm9sbGVyID8gdmFsID09IGNtLmRvYy5zY3JvbGxMZWZ0IDogTWF0aC5h
YnMoY20uZG9jLnNjcm9sbExlZnQgLSB2YWwpIDwgMikgcmV0dXJuOwogICAgIHZhbCA9IE1hdGgu
bWluKHZhbCwgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGNtLmRpc3BsYXkuc2Ny
b2xsZXIuY2xpZW50V2lkdGgpOwpAQCAtMTk5MywxMCArMjg4OSwxMiBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICAvLyBUaGlzIGhhY2sgKHNlZSByZWxhdGVkIGNvZGUg
aW4gcGF0Y2hEaXNwbGF5KSBtYWtlcyBzdXJlIHRoZQogICAgIC8vIGVsZW1lbnQgaXMga2VwdCBh
cm91bmQuCiAgICAgaWYgKGR5ICYmIG1hYyAmJiB3ZWJraXQpIHsKLSAgICAgIGZvciAodmFyIGN1
ciA9IGUudGFyZ2V0OyBjdXIgIT0gc2Nyb2xsOyBjdXIgPSBjdXIucGFyZW50Tm9kZSkgewotICAg
ICAgICBpZiAoY3VyLmxpbmVPYmopIHsKLSAgICAgICAgICBjbS5kaXNwbGF5LmN1cnJlbnRXaGVl
bFRhcmdldCA9IGN1cjsKLSAgICAgICAgICBicmVhazsKKyAgICAgIG91dGVyOiBmb3IgKHZhciBj
dXIgPSBlLnRhcmdldCwgdmlldyA9IGRpc3BsYXkudmlldzsgY3VyICE9IHNjcm9sbDsgY3VyID0g
Y3VyLnBhcmVudE5vZGUpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgaWYgKHZpZXdbaV0ubm9kZSA9PSBjdXIpIHsKKyAgICAgICAg
ICAgIGNtLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID0gY3VyOworICAgICAgICAgICAgYnJl
YWsgb3V0ZXI7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMjAw
Nyw3ICsyOTA1LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8g
ZXN0aW1hdGVkIHBpeGVscy9kZWx0YSB2YWx1ZSwgd2UganVzdCBoYW5kbGUgaG9yaXpvbnRhbAog
ICAgIC8vIHNjcm9sbGluZyBlbnRpcmVseSBoZXJlLiBJdCdsbCBiZSBzbGlnaHRseSBvZmYgZnJv
bSBuYXRpdmUsIGJ1dAogICAgIC8vIGJldHRlciB0aGFuIGdsaXRjaGluZyBvdXQuCi0gICAgaWYg
KGR4ICYmICFnZWNrbyAmJiAhb3BlcmEgJiYgd2hlZWxQaXhlbHNQZXJVbml0ICE9IG51bGwpIHsK
KyAgICBpZiAoZHggJiYgIWdlY2tvICYmICFwcmVzdG8gJiYgd2hlZWxQaXhlbHNQZXJVbml0ICE9
IG51bGwpIHsKICAgICAgIGlmIChkeSkKICAgICAgICAgc2V0U2Nyb2xsVG9wKGNtLCBNYXRoLm1h
eCgwLCBNYXRoLm1pbihzY3JvbGwuc2Nyb2xsVG9wICsgZHkgKiB3aGVlbFBpeGVsc1BlclVuaXQs
IHNjcm9sbC5zY3JvbGxIZWlnaHQgLSBzY3JvbGwuY2xpZW50SGVpZ2h0KSkpOwogICAgICAgc2V0
U2Nyb2xsTGVmdChjbSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsLnNjcm9sbExlZnQgKyBk
eCAqIHdoZWVsUGl4ZWxzUGVyVW5pdCwgc2Nyb2xsLnNjcm9sbFdpZHRoIC0gc2Nyb2xsLmNsaWVu
dFdpZHRoKSkpOwpAQCAtMjAxNiwxMiArMjkxNCwxNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvLyAnUHJvamVjdCcgdGhl
IHZpc2libGUgdmlld3BvcnQgdG8gY292ZXIgdGhlIGFyZWEgdGhhdCBpcyBiZWluZworICAgIC8v
IHNjcm9sbGVkIGludG8gdmlldyAoaWYgd2Uga25vdyBlbm91Z2ggdG8gZXN0aW1hdGUgaXQpLgog
ICAgIGlmIChkeSAmJiB3aGVlbFBpeGVsc1BlclVuaXQgIT0gbnVsbCkgewogICAgICAgdmFyIHBp
eGVscyA9IGR5ICogd2hlZWxQaXhlbHNQZXJVbml0OwogICAgICAgdmFyIHRvcCA9IGNtLmRvYy5z
Y3JvbGxUb3AsIGJvdCA9IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAg
ICBpZiAocGl4ZWxzIDwgMCkgdG9wID0gTWF0aC5tYXgoMCwgdG9wICsgcGl4ZWxzIC0gNTApOwog
ICAgICAgZWxzZSBib3QgPSBNYXRoLm1pbihjbS5kb2MuaGVpZ2h0LCBib3QgKyBwaXhlbHMgKyA1
MCk7Ci0gICAgICB1cGRhdGVEaXNwbGF5KGNtLCBbXSwge3RvcDogdG9wLCBib3R0b206IGJvdH0p
OworICAgICAgdXBkYXRlRGlzcGxheShjbSwge3RvcDogdG9wLCBib3R0b206IGJvdH0pOwogICAg
IH0KIAogICAgIGlmICh3aGVlbFNhbXBsZXMgPCAyMCkgewpAQCAtMjA0NSw2ICsyOTQ1LDkgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CiAKKyAgLy8gS0VZ
IEVWRU5UUworCisgIC8vIFJ1biBhIGhhbmRsZXIgdGhhdCB3YXMgYm91bmQgdG8gYSBrZXkuCiAg
IGZ1bmN0aW9uIGRvSGFuZGxlQmluZGluZyhjbSwgYm91bmQsIGRyb3BTaGlmdCkgewogICAgIGlm
ICh0eXBlb2YgYm91bmQgPT0gInN0cmluZyIpIHsKICAgICAgIGJvdW5kID0gY29tbWFuZHNbYm91
bmRdOwpAQCAtMjA1MywxOCArMjk1NiwxOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICAvLyBFbnN1cmUgcHJldmlvdXMgaW5wdXQgaGFzIGJlZW4gcmVhZCwgc28gdGhh
dCB0aGUgaGFuZGxlciBzZWVzIGEKICAgICAvLyBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGRvY3Vt
ZW50CiAgICAgaWYgKGNtLmRpc3BsYXkucG9sbGluZ0Zhc3QgJiYgcmVhZElucHV0KGNtKSkgY20u
ZGlzcGxheS5wb2xsaW5nRmFzdCA9IGZhbHNlOwotICAgIHZhciBkb2MgPSBjbS5kb2MsIHByZXZT
aGlmdCA9IGRvYy5zZWwuc2hpZnQsIGRvbmUgPSBmYWxzZTsKKyAgICB2YXIgcHJldlNoaWZ0ID0g
Y20uZGlzcGxheS5zaGlmdCwgZG9uZSA9IGZhbHNlOwogICAgIHRyeSB7CiAgICAgICBpZiAoaXNS
ZWFkT25seShjbSkpIGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSB0cnVlOwotICAgICAgaWYgKGRy
b3BTaGlmdCkgZG9jLnNlbC5zaGlmdCA9IGZhbHNlOworICAgICAgaWYgKGRyb3BTaGlmdCkgY20u
ZGlzcGxheS5zaGlmdCA9IGZhbHNlOwogICAgICAgZG9uZSA9IGJvdW5kKGNtKSAhPSBQYXNzOwog
ICAgIH0gZmluYWxseSB7Ci0gICAgICBkb2Muc2VsLnNoaWZ0ID0gcHJldlNoaWZ0OworICAgICAg
Y20uZGlzcGxheS5zaGlmdCA9IHByZXZTaGlmdDsKICAgICAgIGNtLnN0YXRlLnN1cHByZXNzRWRp
dHMgPSBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIGRvbmU7CiAgIH0KIAorICAvLyBDb2xsZWN0
IHRoZSBjdXJyZW50bHkgYWN0aXZlIGtleW1hcHMuCiAgIGZ1bmN0aW9uIGFsbEtleU1hcHMoY20p
IHsKICAgICB2YXIgbWFwcyA9IGNtLnN0YXRlLmtleU1hcHMuc2xpY2UoMCk7CiAgICAgaWYgKGNt
Lm9wdGlvbnMuZXh0cmFLZXlzKSBtYXBzLnB1c2goY20ub3B0aW9ucy5leHRyYUtleXMpOwpAQCAt
MjA3Myw4ICsyOTc3LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0K
IAogICB2YXIgbWF5YmVUcmFuc2l0aW9uOworICAvLyBIYW5kbGUgYSBrZXkgZnJvbSB0aGUga2V5
ZG93biBldmVudC4KICAgZnVuY3Rpb24gaGFuZGxlS2V5QmluZGluZyhjbSwgZSkgewotICAgIC8v
IEhhbmRsZSBhdXRvIGtleW1hcCB0cmFuc2l0aW9ucworICAgIC8vIEhhbmRsZSBhdXRvbWF0aWMg
a2V5bWFwIHRyYW5zaXRpb25zCiAgICAgdmFyIHN0YXJ0TWFwID0gZ2V0S2V5TWFwKGNtLm9wdGlv
bnMua2V5TWFwKSwgbmV4dCA9IHN0YXJ0TWFwLmF1dG87CiAgICAgY2xlYXJUaW1lb3V0KG1heWJl
VHJhbnNpdGlvbik7CiAgICAgaWYgKG5leHQgJiYgIWlzTW9kaWZpZXJLZXkoZSkpIG1heWJlVHJh
bnNpdGlvbiA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CkBAIC0yMTA0LDEyICszMDA5LDEyIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChoYW5kbGVkKSB7CiAg
ICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgcmVzdGFydEJsaW5rKGNtKTsKLSAgICAg
IGlmIChpZV9sdDkpIHsgZS5vbGRLZXlDb2RlID0gZS5rZXlDb2RlOyBlLmtleUNvZGUgPSAwOyB9
CiAgICAgICBzaWduYWxMYXRlcihjbSwgImtleUhhbmRsZWQiLCBjbSwgbmFtZSwgZSk7CiAgICAg
fQogICAgIHJldHVybiBoYW5kbGVkOwogICB9CiAKKyAgLy8gSGFuZGxlIGEga2V5IGZyb20gdGhl
IGtleXByZXNzIGV2ZW50CiAgIGZ1bmN0aW9uIGhhbmRsZUNoYXJCaW5kaW5nKGNtLCBlLCBjaCkg
ewogICAgIHZhciBoYW5kbGVkID0gbG9va3VwS2V5KCInIiArIGNoICsgIiciLCBhbGxLZXlNYXBz
KGNtKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihiKSB7IHJldHVybiBk
b0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpOyB9KTsKQEAgLTIxMjQsNDcgKzMwMjksNjcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIHZhciBsYXN0U3RvcHBlZEtleSA9
IG51bGw7CiAgIGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7CiAgICAgdmFyIGNtID0gdGhpczsKLSAg
ICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIG9uRm9jdXMoY20pOwotICAgIGlmIChzaWduYWxET01F
dmVudChjbSwgZSkgfHwgY20ub3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlF
dmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKLSAgICBpZiAoaWUgJiYgZS5rZXlDb2RlID09
IDI3KSBlLnJldHVyblZhbHVlID0gZmFsc2U7Ci0gICAgdmFyIGNvZGUgPSBlLmtleUNvZGU7Cisg
ICAgZW5zdXJlRm9jdXMoY20pOworICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHJldHVy
bjsKICAgICAvLyBJRSBkb2VzIHN0cmFuZ2UgdGhpbmdzIHdpdGggZXNjYXBlLgotICAgIGNtLmRv
Yy5zZWwuc2hpZnQgPSBjb2RlID09IDE2IHx8IGUuc2hpZnRLZXk7Ci0gICAgLy8gRmlyc3QgZ2l2
ZSBvbktleUV2ZW50IG9wdGlvbiBhIGNoYW5jZSB0byBoYW5kbGUgdGhpcy4KKyAgICBpZiAoaWVf
dXB0bzEwICYmIGUua2V5Q29kZSA9PSAyNykgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgIHZh
ciBjb2RlID0gZS5rZXlDb2RlOworICAgIGNtLmRpc3BsYXkuc2hpZnQgPSBjb2RlID09IDE2IHx8
IGUuc2hpZnRLZXk7CiAgICAgdmFyIGhhbmRsZWQgPSBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKTsK
LSAgICBpZiAob3BlcmEpIHsKKyAgICBpZiAocHJlc3RvKSB7CiAgICAgICBsYXN0U3RvcHBlZEtl
eSA9IGhhbmRsZWQgPyBjb2RlIDogbnVsbDsKICAgICAgIC8vIE9wZXJhIGhhcyBubyBjdXQgZXZl
bnQuLi4gd2UgdHJ5IHRvIGF0IGxlYXN0IGNhdGNoIHRoZSBrZXkgY29tYm8KICAgICAgIGlmICgh
aGFuZGxlZCAmJiBjb2RlID09IDg4ICYmICFoYXNDb3B5RXZlbnQgJiYgKG1hYyA/IGUubWV0YUtl
eSA6IGUuY3RybEtleSkpCi0gICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oIiIpOworICAgICAg
ICBjbS5yZXBsYWNlU2VsZWN0aW9uKCIiLCBudWxsLCAiY3V0Iik7CisgICAgfQorCisgICAgLy8g
VHVybiBtb3VzZSBpbnRvIGNyb3NzaGFpciB3aGVuIEFsdCBpcyBoZWxkIG9uIE1hYy4KKyAgICBp
ZiAoY29kZSA9PSAxOCAmJiAhL1xiQ29kZU1pcnJvci1jcm9zc2hhaXJcYi8udGVzdChjbS5kaXNw
bGF5LmxpbmVEaXYuY2xhc3NOYW1lKSkKKyAgICAgIHNob3dDcm9zc0hhaXIoY20pOworICB9CisK
KyAgZnVuY3Rpb24gc2hvd0Nyb3NzSGFpcihjbSkgeworICAgIHZhciBsaW5lRGl2ID0gY20uZGlz
cGxheS5saW5lRGl2OworICAgIGFkZENsYXNzKGxpbmVEaXYsICJDb2RlTWlycm9yLWNyb3NzaGFp
ciIpOworCisgICAgZnVuY3Rpb24gdXAoZSkgeworICAgICAgaWYgKGUua2V5Q29kZSA9PSAxOCB8
fCAhZS5hbHRLZXkpIHsKKyAgICAgICAgcm1DbGFzcyhsaW5lRGl2LCAiQ29kZU1pcnJvci1jcm9z
c2hhaXIiKTsKKyAgICAgICAgb2ZmKGRvY3VtZW50LCAia2V5dXAiLCB1cCk7CisgICAgICAgIG9m
Zihkb2N1bWVudCwgIm1vdXNlb3ZlciIsIHVwKTsKKyAgICAgIH0KICAgICB9CisgICAgb24oZG9j
dW1lbnQsICJrZXl1cCIsIHVwKTsKKyAgICBvbihkb2N1bWVudCwgIm1vdXNlb3ZlciIsIHVwKTsK
KyAgfQorCisgIGZ1bmN0aW9uIG9uS2V5VXAoZSkgeworICAgIGlmIChzaWduYWxET01FdmVudCh0
aGlzLCBlKSkgcmV0dXJuOworICAgIGlmIChlLmtleUNvZGUgPT0gMTYpIHRoaXMuZG9jLnNlbC5z
aGlmdCA9IGZhbHNlOwogICB9CiAKICAgZnVuY3Rpb24gb25LZXlQcmVzcyhlKSB7CiAgICAgdmFy
IGNtID0gdGhpczsKLSAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGNtLm9wdGlvbnMu
b25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1
cm47CisgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgcmV0dXJuOwogICAgIHZhciBrZXlD
b2RlID0gZS5rZXlDb2RlLCBjaGFyQ29kZSA9IGUuY2hhckNvZGU7Ci0gICAgaWYgKG9wZXJhICYm
IGtleUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkpIHtsYXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJl
dmVudERlZmF1bHQoZSk7IHJldHVybjt9Ci0gICAgaWYgKCgob3BlcmEgJiYgKCFlLndoaWNoIHx8
IGUud2hpY2ggPCAxMCkpIHx8IGtodG1sKSAmJiBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKSkgcmV0
dXJuOworICAgIGlmIChwcmVzdG8gJiYga2V5Q29kZSA9PSBsYXN0U3RvcHBlZEtleSkge2xhc3RT
dG9wcGVkS2V5ID0gbnVsbDsgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJuO30KKyAgICBpZiAo
KChwcmVzdG8gJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAxMCkpIHx8IGtodG1sKSAmJiBoYW5k
bGVLZXlCaW5kaW5nKGNtLCBlKSkgcmV0dXJuOwogICAgIHZhciBjaCA9IFN0cmluZy5mcm9tQ2hh
ckNvZGUoY2hhckNvZGUgPT0gbnVsbCA/IGtleUNvZGUgOiBjaGFyQ29kZSk7Ci0gICAgaWYgKHRo
aXMub3B0aW9ucy5lbGVjdHJpY0NoYXJzICYmIHRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycyAm
JgotICAgICAgICB0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQgJiYgIWlzUmVhZE9ubHkodGhpcykg
JiYKLSAgICAgICAgdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzLmluZGV4T2YoY2gpID4gLTEp
Ci0gICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oKSB7aW5kZW50TGluZShj
bSwgY20uZG9jLnNlbC50by5saW5lLCAic21hcnQiKTt9KSwgNzUpOwogICAgIGlmIChoYW5kbGVD
aGFyQmluZGluZyhjbSwgZSwgY2gpKSByZXR1cm47Ci0gICAgaWYgKGllICYmICFpZV9sdDkpIGNt
LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOworICAgIGlmIChpZSAmJiAhaWVfdXB0
bzgpIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOwogICAgIGZhc3RQb2xsKGNt
KTsKICAgfQogCisgIC8vIEZPQ1VTL0JMVVIgRVZFTlRTCisKICAgZnVuY3Rpb24gb25Gb2N1cyhj
bSkgewogICAgIGlmIChjbS5vcHRpb25zLnJlYWRPbmx5ID09ICJub2N1cnNvciIpIHJldHVybjsK
ICAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsKICAgICAgIHNpZ25hbChjbSwgImZvY3VzIiwg
Y20pOwogICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IHRydWU7Ci0gICAgICBpZiAoY20uZGlzcGxh
eS53cmFwcGVyLmNsYXNzTmFtZS5zZWFyY2goL1xiQ29kZU1pcnJvci1mb2N1c2VkXGIvKSA9PSAt
MSkKLSAgICAgICAgY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3It
Zm9jdXNlZCI7CisgICAgICBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2RlTWlycm9y
LWZvY3VzZWQiKTsKICAgICAgIGlmICghY20uY3VyT3ApIHsKLSAgICAgICAgcmVzZXRJbnB1dChj
bSwgdHJ1ZSk7CisgICAgICAgIHJlc2V0SW5wdXQoY20pOwogICAgICAgICBpZiAod2Via2l0KSBz
ZXRUaW1lb3V0KGJpbmQocmVzZXRJbnB1dCwgY20sIHRydWUpLCAwKTsgLy8gSXNzdWUgIzE3MzAK
ICAgICAgIH0KICAgICB9CkBAIC0yMTc1LDQwICszMTAwLDQ5IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSB7CiAgICAgICBzaWdu
YWwoY20sICJibHVyIiwgY20pOwogICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IGZhbHNlOwotICAg
ICAgY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSA9IGNtLmRpc3BsYXkud3JhcHBlci5jbGFz
c05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3ItZm9jdXNlZCIsICIiKTsKKyAgICAgIHJtQ2xhc3Mo
Y20uZGlzcGxheS53cmFwcGVyLCAiQ29kZU1pcnJvci1mb2N1c2VkIik7CiAgICAgfQogICAgIGNs
ZWFySW50ZXJ2YWwoY20uZGlzcGxheS5ibGlua2VyKTsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkge2lmICghY20uc3RhdGUuZm9jdXNlZCkgY20uZG9jLnNlbC5zaGlmdCA9IGZhbHNlO30sIDE1
MCk7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIGNt
LmRpc3BsYXkuc2hpZnQgPSBmYWxzZTt9LCAxNTApOwogICB9CiAKKyAgLy8gQ09OVEVYVCBNRU5V
IEhBTkRMSU5HCisKICAgdmFyIGRldGVjdGluZ1NlbGVjdEFsbDsKKyAgLy8gVG8gbWFrZSB0aGUg
Y29udGV4dCBtZW51IHdvcmssIHdlIG5lZWQgdG8gYnJpZWZseSB1bmhpZGUgdGhlCisgIC8vIHRl
eHRhcmVhIChtYWtpbmcgaXQgYXMgdW5vYnRydXNpdmUgYXMgcG9zc2libGUpIHRvIGxldCB0aGUK
KyAgLy8gcmlnaHQtY2xpY2sgdGFrZSBlZmZlY3Qgb24gaXQuCiAgIGZ1bmN0aW9uIG9uQ29udGV4
dE1lbnUoY20sIGUpIHsKICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUsICJjb250ZXh0bWVu
dSIpKSByZXR1cm47Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzZWwgPSBjbS5kb2Mu
c2VsOworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKICAgICBpZiAoZXZlbnRJbldpZGdl
dChkaXNwbGF5LCBlKSB8fCBjb250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSkgcmV0dXJuOwogCiAg
ICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSksIHNjcm9sbFBvcyA9IGRpc3BsYXkuc2Ny
b2xsZXIuc2Nyb2xsVG9wOwotICAgIGlmICghcG9zIHx8IG9wZXJhKSByZXR1cm47IC8vIE9wZXJh
IGlzIGRpZmZpY3VsdC4KKyAgICBpZiAoIXBvcyB8fCBwcmVzdG8pIHJldHVybjsgLy8gT3BlcmEg
aXMgZGlmZmljdWx0LgogCiAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgdGV4dCBzZWxlY3Rpb24g
b25seSBpZiB0aGUgY2xpY2sgaXMgZG9uZSBvdXRzaWRlIG9mIHRoZSBzZWxlY3Rpb24KICAgICAv
LyBhbmQgJ3Jlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudScgb3B0aW9uIGlzIHRydWUuCiAgICAg
dmFyIHJlc2V0ID0gY20ub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnU7Ci0gICAg
aWYgKHJlc2V0ICYmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSB8fCBwb3NMZXNzKHBvcywgc2Vs
LmZyb20pIHx8ICFwb3NMZXNzKHBvcywgc2VsLnRvKSkpCi0gICAgICBvcGVyYXRpb24oY20sIHNl
dFNlbGVjdGlvbikoY20uZG9jLCBwb3MsIHBvcyk7CisgICAgaWYgKHJlc2V0ICYmIGNtLmRvYy5z
ZWwuY29udGFpbnMocG9zKSA9PSAtMSkKKyAgICAgIG9wZXJhdGlvbihjbSwgc2V0U2VsZWN0aW9u
KShjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MpLCBzZWxfZG9udFNjcm9sbCk7CiAKICAgICB2
YXIgb2xkQ1NTID0gZGlzcGxheS5pbnB1dC5zdHlsZS5jc3NUZXh0OwogICAgIGRpc3BsYXkuaW5w
dXREaXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgIGRpc3BsYXkuaW5wdXQuc3R5
bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7
IHRvcDogIiArIChlLmNsaWVudFkgLSA1KSArCi0gICAgICAicHg7IGxlZnQ6ICIgKyAoZS5jbGll
bnRYIC0gNSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6IHdoaXRlOyBvdXRsaW5l
OiBub25lOyIgKwotICAgICAgImJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZs
b3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyAtbXMtb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhh
KG9wYWNpdHk9NSk7IjsKKyAgICAgICJweDsgbGVmdDogIiArIChlLmNsaWVudFggLSA1KSArICJw
eDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogIiArCisgICAgICAoaWUgPyAicmdiYSgyNTUs
IDI1NSwgMjU1LCAuMDUpIiA6ICJ0cmFuc3BhcmVudCIpICsKKyAgICAgICI7IG91dGxpbmU6IG5v
bmU7IGJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3Bh
Y2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7IjsKICAgICBmb2N1c0lucHV0KGNt
KTsKLSAgICByZXNldElucHV0KGNtLCB0cnVlKTsKKyAgICByZXNldElucHV0KGNtKTsKICAgICAv
LyBBZGRzICJTZWxlY3QgYWxsIiB0byBjb250ZXh0IG1lbnUgaW4gRkYKLSAgICBpZiAocG9zRXEo
c2VsLmZyb20sIHNlbC50bykpIGRpc3BsYXkuaW5wdXQudmFsdWUgPSBkaXNwbGF5LnByZXZJbnB1
dCA9ICIgIjsKKyAgICBpZiAoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIGRpc3BsYXkuaW5wdXQu
dmFsdWUgPSBkaXNwbGF5LnByZXZJbnB1dCA9ICIgIjsKIAorICAgIC8vIFNlbGVjdC1hbGwgd2ls
bCBiZSBncmV5ZWQgb3V0IGlmIHRoZXJlJ3Mgbm90aGluZyB0byBzZWxlY3QsIHNvCisgICAgLy8g
dGhpcyBhZGRzIGEgemVyby13aWR0aCBzcGFjZSBzbyB0aGF0IHdlIGNhbiBsYXRlciBjaGVjayB3
aGV0aGVyCisgICAgLy8gaXQgZ290IHNlbGVjdGVkLgogICAgIGZ1bmN0aW9uIHByZXBhcmVTZWxl
Y3RBbGxIYWNrKCkgewogICAgICAgaWYgKGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgIT0g
bnVsbCkgewotICAgICAgICB2YXIgZXh0dmFsID0gZGlzcGxheS5pbnB1dC52YWx1ZSA9ICJcdTIw
MGIiICsgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pID8gIiIgOiBkaXNwbGF5LmlucHV0LnZhbHVl
KTsKKyAgICAgICAgdmFyIGV4dHZhbCA9IGRpc3BsYXkuaW5wdXQudmFsdWUgPSAiXHUyMDBiIiAr
IChjbS5zb21ldGhpbmdTZWxlY3RlZCgpID8gZGlzcGxheS5pbnB1dC52YWx1ZSA6ICIiKTsKICAg
ICAgICAgZGlzcGxheS5wcmV2SW5wdXQgPSAiXHUyMDBiIjsKICAgICAgICAgZGlzcGxheS5pbnB1
dC5zZWxlY3Rpb25TdGFydCA9IDE7IGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uRW5kID0gZXh0dmFs
Lmxlbmd0aDsKICAgICAgIH0KQEAgLTIyMTYsMTUgKzMxNTAsMTUgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZnVuY3Rpb24gcmVoaWRlKCkgewogICAgICAgZGlzcGxh
eS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CiAgICAgICBkaXNwbGF5Lmlu
cHV0LnN0eWxlLmNzc1RleHQgPSBvbGRDU1M7Ci0gICAgICBpZiAoaWVfbHQ5KSBkaXNwbGF5LnNj
cm9sbGJhclYuc2Nyb2xsVG9wID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBzY3JvbGxQ
b3M7CisgICAgICBpZiAoaWVfdXB0bzgpIGRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSBk
aXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHNjcm9sbFBvczsKICAgICAgIHNsb3dQb2xsKGNt
KTsKIAogICAgICAgLy8gVHJ5IHRvIGRldGVjdCB0aGUgdXNlciBjaG9vc2luZyBzZWxlY3QtYWxs
CiAgICAgICBpZiAoZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7Ci0gICAg
ICAgIGlmICghaWUgfHwgaWVfbHQ5KSBwcmVwYXJlU2VsZWN0QWxsSGFjaygpOworICAgICAgICBp
ZiAoIWllIHx8IGllX3VwdG84KSBwcmVwYXJlU2VsZWN0QWxsSGFjaygpOwogICAgICAgICBjbGVh
clRpbWVvdXQoZGV0ZWN0aW5nU2VsZWN0QWxsKTsKICAgICAgICAgdmFyIGkgPSAwLCBwb2xsID0g
ZnVuY3Rpb24oKXsKLSAgICAgICAgICBpZiAoZGlzcGxheS5wcmV2SW5wdXQgPT0gIiAiICYmIGRp
c3BsYXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgPT0gMCkKKyAgICAgICAgICBpZiAoZGlzcGxheS5w
cmV2SW5wdXQgPT0gIlx1MjAwYiIgJiYgZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFydCA9PSAw
KQogICAgICAgICAgICAgb3BlcmF0aW9uKGNtLCBjb21tYW5kcy5zZWxlY3RBbGwpKGNtKTsKICAg
ICAgICAgICBlbHNlIGlmIChpKysgPCAxMCkgZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91
dChwb2xsLCA1MDApOwogICAgICAgICAgIGVsc2UgcmVzZXRJbnB1dChjbSk7CkBAIC0yMjMzLDgg
KzMxNjcsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAoaWUgJiYgIWllX2x0OSkgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsKLSAg
ICBpZiAoY2FwdHVyZU1pZGRsZUNsaWNrKSB7CisgICAgaWYgKGllICYmICFpZV91cHRvOCkgcHJl
cGFyZVNlbGVjdEFsbEhhY2soKTsKKyAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIHsKICAgICAg
IGVfc3RvcChlKTsKICAgICAgIHZhciBtb3VzZXVwID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIG9m
Zih3aW5kb3csICJtb3VzZXVwIiwgbW91c2V1cCk7CkBAIC0yMjQ2LDU0ICszMTgwLDcxIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAgfQogCisgIGZ1bmN0aW9u
IGNvbnRleHRNZW51SW5HdXR0ZXIoY20sIGUpIHsKKyAgICBpZiAoIWhhc0hhbmRsZXIoY20sICJn
dXR0ZXJDb250ZXh0TWVudSIpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGd1dHRlckV2ZW50
KGNtLCBlLCAiZ3V0dGVyQ29udGV4dE1lbnUiLCBmYWxzZSwgc2lnbmFsKTsKKyAgfQorCiAgIC8v
IFVQREFUSU5HCiAKKyAgLy8gQ29tcHV0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGVuZCBvZiBhIGNo
YW5nZSAoaXRzICd0bycgcHJvcGVydHkKKyAgLy8gcmVmZXJzIHRvIHRoZSBwcmUtY2hhbmdlIGVu
ZCkuCiAgIHZhciBjaGFuZ2VFbmQgPSBDb2RlTWlycm9yLmNoYW5nZUVuZCA9IGZ1bmN0aW9uKGNo
YW5nZSkgewogICAgIGlmICghY2hhbmdlLnRleHQpIHJldHVybiBjaGFuZ2UudG87CiAgICAgcmV0
dXJuIFBvcyhjaGFuZ2UuZnJvbS5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoIC0gMSwKICAgICAg
ICAgICAgICAgIGxzdChjaGFuZ2UudGV4dCkubGVuZ3RoICsgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9
PSAxID8gY2hhbmdlLmZyb20uY2ggOiAwKSk7CiAgIH07CiAKLSAgLy8gTWFrZSBzdXJlIGEgcG9z
aXRpb24gd2lsbCBiZSB2YWxpZCBhZnRlciB0aGUgZ2l2ZW4gY2hhbmdlLgotICBmdW5jdGlvbiBj
bGlwUG9zdENoYW5nZShkb2MsIGNoYW5nZSwgcG9zKSB7Ci0gICAgaWYgKCFwb3NMZXNzKGNoYW5n
ZS5mcm9tLCBwb3MpKSByZXR1cm4gY2xpcFBvcyhkb2MsIHBvcyk7Ci0gICAgdmFyIGRpZmYgPSAo
Y2hhbmdlLnRleHQubGVuZ3RoIC0gMSkgLSAoY2hhbmdlLnRvLmxpbmUgLSBjaGFuZ2UuZnJvbS5s
aW5lKTsKLSAgICBpZiAocG9zLmxpbmUgPiBjaGFuZ2UudG8ubGluZSArIGRpZmYpIHsKLSAgICAg
IHZhciBwcmVMaW5lID0gcG9zLmxpbmUgLSBkaWZmLCBsYXN0TGluZSA9IGRvYy5maXJzdCArIGRv
Yy5zaXplIC0gMTsKLSAgICAgIGlmIChwcmVMaW5lID4gbGFzdExpbmUpIHJldHVybiBQb3MobGFz
dExpbmUsIGdldExpbmUoZG9jLCBsYXN0TGluZSkudGV4dC5sZW5ndGgpOwotICAgICAgcmV0dXJu
IGNsaXBUb0xlbihwb3MsIGdldExpbmUoZG9jLCBwcmVMaW5lKS50ZXh0Lmxlbmd0aCk7Ci0gICAg
fQotICAgIGlmIChwb3MubGluZSA9PSBjaGFuZ2UudG8ubGluZSArIGRpZmYpCi0gICAgICByZXR1
cm4gY2xpcFRvTGVuKHBvcywgbHN0KGNoYW5nZS50ZXh0KS5sZW5ndGggKyAoY2hhbmdlLnRleHQu
bGVuZ3RoID09IDEgPyBjaGFuZ2UuZnJvbS5jaCA6IDApICsKLSAgICAgICAgICAgICAgICAgICAg
ICAgZ2V0TGluZShkb2MsIGNoYW5nZS50by5saW5lKS50ZXh0Lmxlbmd0aCAtIGNoYW5nZS50by5j
aCk7Ci0gICAgdmFyIGluc2lkZSA9IHBvcy5saW5lIC0gY2hhbmdlLmZyb20ubGluZTsKLSAgICBy
ZXR1cm4gY2xpcFRvTGVuKHBvcywgY2hhbmdlLnRleHRbaW5zaWRlXS5sZW5ndGggKyAoaW5zaWRl
ID8gMCA6IGNoYW5nZS5mcm9tLmNoKSk7Ci0gIH0KLQotICAvLyBIaW50IGNhbiBiZSBudWxsfCJl
bmQifCJzdGFydCJ8ImFyb3VuZCJ8e2FuY2hvcixoZWFkfQotICBmdW5jdGlvbiBjb21wdXRlU2Vs
QWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIGhpbnQpIHsKLSAgICBpZiAoaGludCAmJiB0eXBlb2Yg
aGludCA9PSAib2JqZWN0IikgLy8gQXNzdW1lZCB0byBiZSB7YW5jaG9yLCBoZWFkfSBvYmplY3QK
LSAgICAgIHJldHVybiB7YW5jaG9yOiBjbGlwUG9zdENoYW5nZShkb2MsIGNoYW5nZSwgaGludC5h
bmNob3IpLAotICAgICAgICAgICAgICBoZWFkOiBjbGlwUG9zdENoYW5nZShkb2MsIGNoYW5nZSwg
aGludC5oZWFkKX07Ci0KLSAgICBpZiAoaGludCA9PSAic3RhcnQiKSByZXR1cm4ge2FuY2hvcjog
Y2hhbmdlLmZyb20sIGhlYWQ6IGNoYW5nZS5mcm9tfTsKLQotICAgIHZhciBlbmQgPSBjaGFuZ2VF
bmQoY2hhbmdlKTsKLSAgICBpZiAoaGludCA9PSAiYXJvdW5kIikgcmV0dXJuIHthbmNob3I6IGNo
YW5nZS5mcm9tLCBoZWFkOiBlbmR9OwotICAgIGlmIChoaW50ID09ICJlbmQiKSByZXR1cm4ge2Fu
Y2hvcjogZW5kLCBoZWFkOiBlbmR9OwotCi0gICAgLy8gaGludCBpcyBudWxsLCBsZWF2ZSB0aGUg
c2VsZWN0aW9uIGFsb25lIGFzIG11Y2ggYXMgcG9zc2libGUKLSAgICB2YXIgYWRqdXN0UG9zID0g
ZnVuY3Rpb24ocG9zKSB7Ci0gICAgICBpZiAocG9zTGVzcyhwb3MsIGNoYW5nZS5mcm9tKSkgcmV0
dXJuIHBvczsKLSAgICAgIGlmICghcG9zTGVzcyhjaGFuZ2UudG8sIHBvcykpIHJldHVybiBlbmQ7
Ci0KLSAgICAgIHZhciBsaW5lID0gcG9zLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGggLSAoY2hh
bmdlLnRvLmxpbmUgLSBjaGFuZ2UuZnJvbS5saW5lKSAtIDEsIGNoID0gcG9zLmNoOwotICAgICAg
aWYgKHBvcy5saW5lID09IGNoYW5nZS50by5saW5lKSBjaCArPSBlbmQuY2ggLSBjaGFuZ2UudG8u
Y2g7Ci0gICAgICByZXR1cm4gUG9zKGxpbmUsIGNoKTsKLSAgICB9OwotICAgIHJldHVybiB7YW5j
aG9yOiBhZGp1c3RQb3MoZG9jLnNlbC5hbmNob3IpLCBoZWFkOiBhZGp1c3RQb3MoZG9jLnNlbC5o
ZWFkKX07CisgIC8vIEFkanVzdCBhIHBvc2l0aW9uIHRvIHJlZmVyIHRvIHRoZSBwb3N0LWNoYW5n
ZSBwb3NpdGlvbiBvZiB0aGUKKyAgLy8gc2FtZSB0ZXh0LCBvciB0aGUgZW5kIG9mIHRoZSBjaGFu
Z2UgaWYgdGhlIGNoYW5nZSBjb3ZlcnMgaXQuCisgIGZ1bmN0aW9uIGFkanVzdEZvckNoYW5nZShw
b3MsIGNoYW5nZSkgeworICAgIGlmIChjbXAocG9zLCBjaGFuZ2UuZnJvbSkgPCAwKSByZXR1cm4g
cG9zOworICAgIGlmIChjbXAocG9zLCBjaGFuZ2UudG8pIDw9IDApIHJldHVybiBjaGFuZ2VFbmQo
Y2hhbmdlKTsKKworICAgIHZhciBsaW5lID0gcG9zLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGgg
LSAoY2hhbmdlLnRvLmxpbmUgLSBjaGFuZ2UuZnJvbS5saW5lKSAtIDEsIGNoID0gcG9zLmNoOwor
ICAgIGlmIChwb3MubGluZSA9PSBjaGFuZ2UudG8ubGluZSkgY2ggKz0gY2hhbmdlRW5kKGNoYW5n
ZSkuY2ggLSBjaGFuZ2UudG8uY2g7CisgICAgcmV0dXJuIFBvcyhsaW5lLCBjaCk7CiAgIH0KIAor
ICBmdW5jdGlvbiBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIHsKKyAgICB2YXIg
b3V0ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7
IGkrKykgeworICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV07CisgICAgICBvdXQu
cHVzaChuZXcgUmFuZ2UoYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmFuY2hvciwgY2hhbmdlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RGb3JDaGFuZ2UocmFuZ2UuaGVhZCwgY2hhbmdl
KSkpOworICAgIH0KKyAgICByZXR1cm4gbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgZG9jLnNlbC5w
cmltSW5kZXgpOworICB9CisKKyAgZnVuY3Rpb24gb2Zmc2V0UG9zKHBvcywgb2xkLCBudykgewor
ICAgIGlmIChwb3MubGluZSA9PSBvbGQubGluZSkKKyAgICAgIHJldHVybiBQb3MobncubGluZSwg
cG9zLmNoIC0gb2xkLmNoICsgbncuY2gpOworICAgIGVsc2UKKyAgICAgIHJldHVybiBQb3Mobncu
bGluZSArIChwb3MubGluZSAtIG9sZC5saW5lKSwgcG9zLmNoKTsKKyAgfQorCisgIC8vIFVzZWQg
YnkgcmVwbGFjZVNlbGVjdGlvbnMgdG8gYWxsb3cgbW92aW5nIHRoZSBzZWxlY3Rpb24gdG8gdGhl
CisgIC8vIHN0YXJ0IG9yIGFyb3VuZCB0aGUgcmVwbGFjZWQgdGVzdC4gSGludCBtYXkgYmUgInN0
YXJ0IiBvciAiYXJvdW5kIi4KKyAgZnVuY3Rpb24gY29tcHV0ZVJlcGxhY2VkU2VsKGRvYywgY2hh
bmdlcywgaGludCkgeworICAgIHZhciBvdXQgPSBbXTsKKyAgICB2YXIgb2xkUHJldiA9IFBvcyhk
b2MuZmlyc3QsIDApLCBuZXdQcmV2ID0gb2xkUHJldjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNoYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ldOwor
ICAgICAgdmFyIGZyb20gPSBvZmZzZXRQb3MoY2hhbmdlLmZyb20sIG9sZFByZXYsIG5ld1ByZXYp
OworICAgICAgdmFyIHRvID0gb2Zmc2V0UG9zKGNoYW5nZUVuZChjaGFuZ2UpLCBvbGRQcmV2LCBu
ZXdQcmV2KTsKKyAgICAgIG9sZFByZXYgPSBjaGFuZ2UudG87CisgICAgICBuZXdQcmV2ID0gdG87
CisgICAgICBpZiAoaGludCA9PSAiYXJvdW5kIikgeworICAgICAgICB2YXIgcmFuZ2UgPSBkb2Mu
c2VsLnJhbmdlc1tpXSwgaW52ID0gY21wKHJhbmdlLmhlYWQsIHJhbmdlLmFuY2hvcikgPCAwOwor
ICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2UoaW52ID8gdG8gOiBmcm9tLCBpbnYgPyBmcm9tIDog
dG8pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGZyb20sIGZy
b20pOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihvdXQsIGRvYy5z
ZWwucHJpbUluZGV4KTsKKyAgfQorCisgIC8vIEFsbG93ICJiZWZvcmVDaGFuZ2UiIGV2ZW50IGhh
bmRsZXJzIHRvIGluZmx1ZW5jZSBhIGNoYW5nZQogICBmdW5jdGlvbiBmaWx0ZXJDaGFuZ2UoZG9j
LCBjaGFuZ2UsIHVwZGF0ZSkgewogICAgIHZhciBvYmogPSB7CiAgICAgICBjYW5jZWxlZDogZmFs
c2UsCkBAIC0yMzE2LDExICszMjY3LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIHJldHVybiB7ZnJvbTogb2JqLmZyb20sIHRvOiBvYmoudG8sIHRleHQ6IG9iai50
ZXh0LCBvcmlnaW46IG9iai5vcmlnaW59OwogICB9CiAKLSAgLy8gUmVwbGFjZSB0aGUgcmFuZ2Ug
ZnJvbSBmcm9tIHRvIHRvIGJ5IHRoZSBzdHJpbmdzIGluIHJlcGxhY2VtZW50LgotICAvLyBjaGFu
Z2UgaXMgYSB7ZnJvbSwgdG8sIHRleHQgWywgb3JpZ2luXX0gb2JqZWN0Ci0gIGZ1bmN0aW9uIG1h
a2VDaGFuZ2UoZG9jLCBjaGFuZ2UsIHNlbFVwZGF0ZSwgaWdub3JlUmVhZE9ubHkpIHsKKyAgLy8g
QXBwbHkgYSBjaGFuZ2UgdG8gYSBkb2N1bWVudCwgYW5kIGFkZCBpdCB0byB0aGUgZG9jdW1lbnQn
cworICAvLyBoaXN0b3J5LCBhbmQgcHJvcGFnYXRpbmcgaXQgdG8gYWxsIGxpbmtlZCBkb2N1bWVu
dHMuCisgIGZ1bmN0aW9uIG1ha2VDaGFuZ2UoZG9jLCBjaGFuZ2UsIGlnbm9yZVJlYWRPbmx5KSB7
CiAgICAgaWYgKGRvYy5jbSkgewotICAgICAgaWYgKCFkb2MuY20uY3VyT3ApIHJldHVybiBvcGVy
YXRpb24oZG9jLmNtLCBtYWtlQ2hhbmdlKShkb2MsIGNoYW5nZSwgc2VsVXBkYXRlLCBpZ25vcmVS
ZWFkT25seSk7CisgICAgICBpZiAoIWRvYy5jbS5jdXJPcCkgcmV0dXJuIG9wZXJhdGlvbihkb2Mu
Y20sIG1ha2VDaGFuZ2UpKGRvYywgY2hhbmdlLCBpZ25vcmVSZWFkT25seSk7CiAgICAgICBpZiAo
ZG9jLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpIHJldHVybjsKICAgICB9CiAKQEAgLTIzMzMsMTkg
KzMyODQsMTcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gb2Yg
cmVhZC1vbmx5IHNwYW5zIGluIGl0cyByYW5nZS4KICAgICB2YXIgc3BsaXQgPSBzYXdSZWFkT25s
eVNwYW5zICYmICFpZ25vcmVSZWFkT25seSAmJiByZW1vdmVSZWFkT25seVJhbmdlcyhkb2MsIGNo
YW5nZS5mcm9tLCBjaGFuZ2UudG8pOwogICAgIGlmIChzcGxpdCkgewotICAgICAgZm9yICh2YXIg
aSA9IHNwbGl0Lmxlbmd0aCAtIDE7IGkgPj0gMTsgLS1pKQotICAgICAgICBtYWtlQ2hhbmdlTm9S
ZWFkb25seShkb2MsIHtmcm9tOiBzcGxpdFtpXS5mcm9tLCB0bzogc3BsaXRbaV0udG8sIHRleHQ6
IFsiIl19KTsKLSAgICAgIGlmIChzcGxpdC5sZW5ndGgpCi0gICAgICAgIG1ha2VDaGFuZ2VOb1Jl
YWRvbmx5KGRvYywge2Zyb206IHNwbGl0WzBdLmZyb20sIHRvOiBzcGxpdFswXS50bywgdGV4dDog
Y2hhbmdlLnRleHR9LCBzZWxVcGRhdGUpOworICAgICAgZm9yICh2YXIgaSA9IHNwbGl0Lmxlbmd0
aCAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICBtYWtlQ2hhbmdlSW5uZXIoZG9jLCB7ZnJvbTog
c3BsaXRbaV0uZnJvbSwgdG86IHNwbGl0W2ldLnRvLCB0ZXh0OiBpID8gWyIiXSA6IGNoYW5nZS50
ZXh0fSk7CiAgICAgfSBlbHNlIHsKLSAgICAgIG1ha2VDaGFuZ2VOb1JlYWRvbmx5KGRvYywgY2hh
bmdlLCBzZWxVcGRhdGUpOworICAgICAgbWFrZUNoYW5nZUlubmVyKGRvYywgY2hhbmdlKTsKICAg
ICB9CiAgIH0KIAotICBmdW5jdGlvbiBtYWtlQ2hhbmdlTm9SZWFkb25seShkb2MsIGNoYW5nZSwg
c2VsVXBkYXRlKSB7Ci0gICAgaWYgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxICYmIGNoYW5nZS50
ZXh0WzBdID09ICIiICYmIHBvc0VxKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pKSByZXR1cm47Ci0g
ICAgdmFyIHNlbEFmdGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCBzZWxV
cGRhdGUpOwotICAgIGFkZFRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIGRvYy5jbSA/
IGRvYy5jbS5jdXJPcC5pZCA6IE5hTik7CisgIGZ1bmN0aW9uIG1ha2VDaGFuZ2VJbm5lcihkb2Ms
IGNoYW5nZSkgeworICAgIGlmIChjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSAmJiBjaGFuZ2UudGV4
dFswXSA9PSAiIiAmJiBjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMCkgcmV0dXJuOwor
ICAgIHZhciBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSk7Cisg
ICAgYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRlciwgZG9jLmNtID8gZG9j
LmNtLmN1ck9wLmlkIDogTmFOKTsKIAogICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFu
Z2UsIHNlbEFmdGVyLCBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSk7CiAgICAg
dmFyIHJlYmFzZWQgPSBbXTsKQEAgLTIzNTksMTcgKzMzMDgsNDEgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfSk7CiAgIH0KIAotICBmdW5jdGlvbiBtYWtlQ2hhbmdl
RnJvbUhpc3RvcnkoZG9jLCB0eXBlKSB7CisgIC8vIFJldmVydCBhIGNoYW5nZSBzdG9yZWQgaW4g
YSBkb2N1bWVudCdzIGhpc3RvcnkuCisgIGZ1bmN0aW9uIG1ha2VDaGFuZ2VGcm9tSGlzdG9yeShk
b2MsIHR5cGUsIGFsbG93U2VsZWN0aW9uT25seSkgewogICAgIGlmIChkb2MuY20gJiYgZG9jLmNt
LnN0YXRlLnN1cHByZXNzRWRpdHMpIHJldHVybjsKIAotICAgIHZhciBoaXN0ID0gZG9jLmhpc3Rv
cnk7Ci0gICAgdmFyIGV2ZW50ID0gKHR5cGUgPT0gInVuZG8iID8gaGlzdC5kb25lIDogaGlzdC51
bmRvbmUpLnBvcCgpOwotICAgIGlmICghZXZlbnQpIHJldHVybjsKKyAgICB2YXIgaGlzdCA9IGRv
Yy5oaXN0b3J5LCBldmVudCwgc2VsQWZ0ZXIgPSBkb2Muc2VsOworICAgIHZhciBzb3VyY2UgPSB0
eXBlID09ICJ1bmRvIiA/IGhpc3QuZG9uZSA6IGhpc3QudW5kb25lLCBkZXN0ID0gdHlwZSA9PSAi
dW5kbyIgPyBoaXN0LnVuZG9uZSA6IGhpc3QuZG9uZTsKKworICAgIC8vIFZlcmlmeSB0aGF0IHRo
ZXJlIGlzIGEgdXNlYWJsZSBldmVudCAoc28gdGhhdCBjdHJsLXogd29uJ3QKKyAgICAvLyBuZWVk
bGVzc2x5IGNsZWFyIHNlbGVjdGlvbiBldmVudHMpCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
b3VyY2UubGVuZ3RoOyBpKyspIHsKKyAgICAgIGV2ZW50ID0gc291cmNlW2ldOworICAgICAgaWYg
KGFsbG93U2VsZWN0aW9uT25seSA/IGV2ZW50LnJhbmdlcyAmJiAhZXZlbnQuZXF1YWxzKGRvYy5z
ZWwpIDogIWV2ZW50LnJhbmdlcykKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChpID09
IHNvdXJjZS5sZW5ndGgpIHJldHVybjsKKyAgICBoaXN0Lmxhc3RPcmlnaW4gPSBoaXN0Lmxhc3RT
ZWxPcmlnaW4gPSBudWxsOworCisgICAgZm9yICg7OykgeworICAgICAgZXZlbnQgPSBzb3VyY2Uu
cG9wKCk7CisgICAgICBpZiAoZXZlbnQucmFuZ2VzKSB7CisgICAgICAgIHB1c2hTZWxlY3Rpb25U
b0hpc3RvcnkoZXZlbnQsIGRlc3QpOworICAgICAgICBpZiAoYWxsb3dTZWxlY3Rpb25Pbmx5ICYm
ICFldmVudC5lcXVhbHMoZG9jLnNlbCkpIHsKKyAgICAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBl
dmVudCwge2NsZWFyUmVkbzogZmFsc2V9KTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgc2VsQWZ0ZXIgPSBldmVudDsKKyAgICAgIH0KKyAgICAgIGVsc2UgYnJlYWs7Cisg
ICAgfQogCi0gICAgdmFyIGFudGkgPSB7Y2hhbmdlczogW10sIGFuY2hvckJlZm9yZTogZXZlbnQu
YW5jaG9yQWZ0ZXIsIGhlYWRCZWZvcmU6IGV2ZW50LmhlYWRBZnRlciwKLSAgICAgICAgICAgICAg
ICBhbmNob3JBZnRlcjogZXZlbnQuYW5jaG9yQmVmb3JlLCBoZWFkQWZ0ZXI6IGV2ZW50LmhlYWRC
ZWZvcmUsCi0gICAgICAgICAgICAgICAgZ2VuZXJhdGlvbjogaGlzdC5nZW5lcmF0aW9ufTsKLSAg
ICAodHlwZSA9PSAidW5kbyIgPyBoaXN0LnVuZG9uZSA6IGhpc3QuZG9uZSkucHVzaChhbnRpKTsK
KyAgICAvLyBCdWlsZCB1cCBhIHJldmVyc2UgY2hhbmdlIG9iamVjdCB0byBhZGQgdG8gdGhlIG9w
cG9zaXRlIGhpc3RvcnkKKyAgICAvLyBzdGFjayAocmVkbyB3aGVuIHVuZG9pbmcsIGFuZCB2aWNl
IHZlcnNhKS4KKyAgICB2YXIgYW50aUNoYW5nZXMgPSBbXTsKKyAgICBwdXNoU2VsZWN0aW9uVG9I
aXN0b3J5KHNlbEFmdGVyLCBkZXN0KTsKKyAgICBkZXN0LnB1c2goe2NoYW5nZXM6IGFudGlDaGFu
Z2VzLCBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRpb259KTsKICAgICBoaXN0LmdlbmVyYXRpb24g
PSBldmVudC5nZW5lcmF0aW9uIHx8ICsraGlzdC5tYXhHZW5lcmF0aW9uOwogCiAgICAgdmFyIGZp
bHRlciA9IGhhc0hhbmRsZXIoZG9jLCAiYmVmb3JlQ2hhbmdlIikgfHwgZG9jLmNtICYmIGhhc0hh
bmRsZXIoZG9jLmNtLCAiYmVmb3JlQ2hhbmdlIik7CkBAIC0yMzc4LDE3ICszMzUxLDE4IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIGNoYW5nZSA9IGV2ZW50
LmNoYW5nZXNbaV07CiAgICAgICBjaGFuZ2Uub3JpZ2luID0gdHlwZTsKICAgICAgIGlmIChmaWx0
ZXIgJiYgIWZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgZmFsc2UpKSB7Ci0gICAgICAgICh0eXBl
ID09ICJ1bmRvIiA/IGhpc3QuZG9uZSA6IGhpc3QudW5kb25lKS5sZW5ndGggPSAwOworICAgICAg
ICBzb3VyY2UubGVuZ3RoID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgICAgfQogCi0gICAgICBh
bnRpLmNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSkpOwor
ICAgICAgYW50aUNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5n
ZSkpOwogCi0gICAgICB2YXIgYWZ0ZXIgPSBpID8gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywg
Y2hhbmdlLCBudWxsKQotICAgICAgICAgICAgICAgICAgICA6IHthbmNob3I6IGV2ZW50LmFuY2hv
ckJlZm9yZSwgaGVhZDogZXZlbnQuaGVhZEJlZm9yZX07CisgICAgICB2YXIgYWZ0ZXIgPSBpID8g
Y29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCBudWxsKSA6IGxzdChzb3VyY2UpOwog
ICAgICAgbWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgYWZ0ZXIsIG1lcmdlT2xkU3Bh
bnMoZG9jLCBjaGFuZ2UpKTsKKyAgICAgIGlmIChkb2MuY20pIGVuc3VyZUN1cnNvclZpc2libGUo
ZG9jLmNtKTsKICAgICAgIHZhciByZWJhc2VkID0gW107CiAKKyAgICAgIC8vIFByb3BhZ2F0ZSB0
byB0aGUgbGlua2VkIGRvY3VtZW50cwogICAgICAgbGlua2VkRG9jcyhkb2MsIGZ1bmN0aW9uKGRv
Yywgc2hhcmVkSGlzdCkgewogICAgICAgICBpZiAoIXNoYXJlZEhpc3QgJiYgaW5kZXhPZihyZWJh
c2VkLCBkb2MuaGlzdG9yeSkgPT0gLTEpIHsKICAgICAgICAgICByZWJhc2VIaXN0KGRvYy5oaXN0
b3J5LCBjaGFuZ2UpOwpAQCAtMjM5OSwxNCArMzM3MywxOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICB9CiAgIH0KIAorICAvLyBTdWItdmlld3MgbmVlZCB0aGVpciBs
aW5lIG51bWJlcnMgc2hpZnRlZCB3aGVuIHRleHQgaXMgYWRkZWQKKyAgLy8gYWJvdmUgb3IgYmVs
b3cgdGhlbSBpbiB0aGUgcGFyZW50IGRvY3VtZW50LgogICBmdW5jdGlvbiBzaGlmdERvYyhkb2Ms
IGRpc3RhbmNlKSB7Ci0gICAgZnVuY3Rpb24gc2hpZnRQb3MocG9zKSB7cmV0dXJuIFBvcyhwb3Mu
bGluZSArIGRpc3RhbmNlLCBwb3MuY2gpO30KICAgICBkb2MuZmlyc3QgKz0gZGlzdGFuY2U7Ci0g
ICAgaWYgKGRvYy5jbSkgcmVnQ2hhbmdlKGRvYy5jbSwgZG9jLmZpcnN0LCBkb2MuZmlyc3QsIGRp
c3RhbmNlKTsKLSAgICBkb2Muc2VsLmhlYWQgPSBzaGlmdFBvcyhkb2Muc2VsLmhlYWQpOyBkb2Mu
c2VsLmFuY2hvciA9IHNoaWZ0UG9zKGRvYy5zZWwuYW5jaG9yKTsKLSAgICBkb2Muc2VsLmZyb20g
PSBzaGlmdFBvcyhkb2Muc2VsLmZyb20pOyBkb2Muc2VsLnRvID0gc2hpZnRQb3MoZG9jLnNlbC50
byk7CisgICAgZG9jLnNlbCA9IG5ldyBTZWxlY3Rpb24obWFwKGRvYy5zZWwucmFuZ2VzLCBmdW5j
dGlvbihyYW5nZSkgeworICAgICAgcmV0dXJuIG5ldyBSYW5nZShQb3MocmFuZ2UuYW5jaG9yLmxp
bmUgKyBkaXN0YW5jZSwgcmFuZ2UuYW5jaG9yLmNoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
UG9zKHJhbmdlLmhlYWQubGluZSArIGRpc3RhbmNlLCByYW5nZS5oZWFkLmNoKSk7CisgICAgfSks
IGRvYy5zZWwucHJpbUluZGV4KTsKKyAgICBpZiAoZG9jLmNtKSByZWdDaGFuZ2UoZG9jLmNtLCBk
b2MuZmlyc3QsIGRvYy5maXJzdCAtIGRpc3RhbmNlLCBkaXN0YW5jZSk7CiAgIH0KIAorICAvLyBN
b3JlIGxvd2VyLWxldmVsIGNoYW5nZSBmdW5jdGlvbiwgaGFuZGxpbmcgb25seSBhIHNpbmdsZSBk
b2N1bWVudAorICAvLyAobm90IGxpbmtlZCBvbmVzKS4KICAgZnVuY3Rpb24gbWFrZUNoYW5nZVNp
bmdsZURvYyhkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHNwYW5zKSB7CiAgICAgaWYgKGRvYy5jbSAm
JiAhZG9jLmNtLmN1ck9wKQogICAgICAgcmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1ha2VDaGFu
Z2VTaW5nbGVEb2MpKGRvYywgY2hhbmdlLCBzZWxBZnRlciwgc3BhbnMpOwpAQCAtMjQzMywxNiAr
MzQxMiwxOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBjaGFuZ2Uu
cmVtb3ZlZCA9IGdldEJldHdlZW4oZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKTsKIAogICAg
IGlmICghc2VsQWZ0ZXIpIHNlbEFmdGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hh
bmdlLCBudWxsKTsKLSAgICBpZiAoZG9jLmNtKSBtYWtlQ2hhbmdlU2luZ2xlRG9jSW5FZGl0b3Io
ZG9jLmNtLCBjaGFuZ2UsIHNwYW5zLCBzZWxBZnRlcik7Ci0gICAgZWxzZSB1cGRhdGVEb2MoZG9j
LCBjaGFuZ2UsIHNwYW5zLCBzZWxBZnRlcik7CisgICAgaWYgKGRvYy5jbSkgbWFrZUNoYW5nZVNp
bmdsZURvY0luRWRpdG9yKGRvYy5jbSwgY2hhbmdlLCBzcGFucyk7CisgICAgZWxzZSB1cGRhdGVE
b2MoZG9jLCBjaGFuZ2UsIHNwYW5zKTsKKyAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWxB
ZnRlciwgc2VsX2RvbnRTY3JvbGwpOwogICB9CiAKLSAgZnVuY3Rpb24gbWFrZUNoYW5nZVNpbmds
ZURvY0luRWRpdG9yKGNtLCBjaGFuZ2UsIHNwYW5zLCBzZWxBZnRlcikgeworICAvLyBIYW5kbGUg
dGhlIGludGVyYWN0aW9uIG9mIGEgY2hhbmdlIHRvIGEgZG9jdW1lbnQgd2l0aCB0aGUgZWRpdG9y
CisgIC8vIHRoYXQgdGhpcyBkb2N1bWVudCBpcyBwYXJ0IG9mLgorICBmdW5jdGlvbiBtYWtlQ2hh
bmdlU2luZ2xlRG9jSW5FZGl0b3IoY20sIGNoYW5nZSwgc3BhbnMpIHsKICAgICB2YXIgZG9jID0g
Y20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgZnJvbSA9IGNoYW5nZS5mcm9tLCB0byA9IGNo
YW5nZS50bzsKIAogICAgIHZhciByZWNvbXB1dGVNYXhMZW5ndGggPSBmYWxzZSwgY2hlY2tXaWR0
aFN0YXJ0ID0gZnJvbS5saW5lOwogICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsK
LSAgICAgIGNoZWNrV2lkdGhTdGFydCA9IGxpbmVObyh2aXN1YWxMaW5lKGRvYywgZ2V0TGluZShk
b2MsIGZyb20ubGluZSkpKTsKKyAgICAgIGNoZWNrV2lkdGhTdGFydCA9IGxpbmVObyh2aXN1YWxM
aW5lKGdldExpbmUoZG9jLCBmcm9tLmxpbmUpKSk7CiAgICAgICBkb2MuaXRlcihjaGVja1dpZHRo
U3RhcnQsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgIGlmIChsaW5lID09
IGRpc3BsYXkubWF4TGluZSkgewogICAgICAgICAgIHJlY29tcHV0ZU1heExlbmd0aCA9IHRydWU7
CkBAIC0yNDUxLDE0ICszNDMzLDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgfSk7CiAgICAgfQogCi0gICAgaWYgKCFwb3NMZXNzKGRvYy5zZWwuaGVhZCwgY2hh
bmdlLmZyb20pICYmICFwb3NMZXNzKGNoYW5nZS50bywgZG9jLnNlbC5oZWFkKSkKKyAgICBpZiAo
ZG9jLnNlbC5jb250YWlucyhjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSA+IC0xKQogICAgICAgY20u
Y3VyT3AuY3Vyc29yQWN0aXZpdHkgPSB0cnVlOwogCi0gICAgdXBkYXRlRG9jKGRvYywgY2hhbmdl
LCBzcGFucywgc2VsQWZ0ZXIsIGVzdGltYXRlSGVpZ2h0KGNtKSk7CisgICAgdXBkYXRlRG9jKGRv
YywgY2hhbmdlLCBzcGFucywgZXN0aW1hdGVIZWlnaHQoY20pKTsKIAogICAgIGlmICghY20ub3B0
aW9ucy5saW5lV3JhcHBpbmcpIHsKICAgICAgIGRvYy5pdGVyKGNoZWNrV2lkdGhTdGFydCwgZnJv
bS5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZh
ciBsZW4gPSBsaW5lTGVuZ3RoKGRvYywgbGluZSk7CisgICAgICAgIHZhciBsZW4gPSBsaW5lTGVu
Z3RoKGxpbmUpOwogICAgICAgICBpZiAobGVuID4gZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7CiAg
ICAgICAgICAgZGlzcGxheS5tYXhMaW5lID0gbGluZTsKICAgICAgICAgICBkaXNwbGF5Lm1heExp
bmVMZW5ndGggPSBsZW47CkBAIC0yNDc1LDE5MiArMzQ1Nyw0OSBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKIAogICAgIHZhciBsZW5kaWZmID0gY2hhbmdlLnRleHQubGVuZ3Ro
IC0gKHRvLmxpbmUgLSBmcm9tLmxpbmUpIC0gMTsKICAgICAvLyBSZW1lbWJlciB0aGF0IHRoZXNl
IGxpbmVzIGNoYW5nZWQsIGZvciB1cGRhdGluZyB0aGUgZGlzcGxheQotICAgIHJlZ0NoYW5nZShj
bSwgZnJvbS5saW5lLCB0by5saW5lICsgMSwgbGVuZGlmZik7Ci0KLSAgICBpZiAoaGFzSGFuZGxl
cihjbSwgImNoYW5nZSIpKSB7Ci0gICAgICB2YXIgY2hhbmdlT2JqID0ge2Zyb206IGZyb20sIHRv
OiB0bywKLSAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogY2hhbmdlLnRleHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgIHJlbW92ZWQ6IGNoYW5nZS5yZW1vdmVkLAotICAgICAgICAgICAgICAg
ICAgICAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW59OwotICAgICAgaWYgKGNtLmN1ck9wLnRleHRD
aGFuZ2VkKSB7Ci0gICAgICAgIGZvciAodmFyIGN1ciA9IGNtLmN1ck9wLnRleHRDaGFuZ2VkOyBj
dXIubmV4dDsgY3VyID0gY3VyLm5leHQpIHt9Ci0gICAgICAgIGN1ci5uZXh0ID0gY2hhbmdlT2Jq
OwotICAgICAgfSBlbHNlIGNtLmN1ck9wLnRleHRDaGFuZ2VkID0gY2hhbmdlT2JqOwotICAgIH0K
KyAgICBpZiAoZnJvbS5saW5lID09IHRvLmxpbmUgJiYgY2hhbmdlLnRleHQubGVuZ3RoID09IDEg
JiYgIWlzV2hvbGVMaW5lVXBkYXRlKGNtLmRvYywgY2hhbmdlKSkKKyAgICAgIHJlZ0xpbmVDaGFu
Z2UoY20sIGZyb20ubGluZSwgInRleHQiKTsKKyAgICBlbHNlCisgICAgICByZWdDaGFuZ2UoY20s
IGZyb20ubGluZSwgdG8ubGluZSArIDEsIGxlbmRpZmYpOworCisgICAgaWYgKGhhc0hhbmRsZXIo
Y20sICJjaGFuZ2UiKSB8fCBoYXNIYW5kbGVyKGNtLCAiY2hhbmdlcyIpKQorICAgICAgKGNtLmN1
ck9wLmNoYW5nZU9ianMgfHwgKGNtLmN1ck9wLmNoYW5nZU9ianMgPSBbXSkpLnB1c2goeworICAg
ICAgICBmcm9tOiBmcm9tLCB0bzogdG8sCisgICAgICAgIHRleHQ6IGNoYW5nZS50ZXh0LAorICAg
ICAgICByZW1vdmVkOiBjaGFuZ2UucmVtb3ZlZCwKKyAgICAgICAgb3JpZ2luOiBjaGFuZ2Uub3Jp
Z2luCisgICAgICB9KTsKICAgfQogCiAgIGZ1bmN0aW9uIHJlcGxhY2VSYW5nZShkb2MsIGNvZGUs
IGZyb20sIHRvLCBvcmlnaW4pIHsKICAgICBpZiAoIXRvKSB0byA9IGZyb207Ci0gICAgaWYgKHBv
c0xlc3ModG8sIGZyb20pKSB7IHZhciB0bXAgPSB0bzsgdG8gPSBmcm9tOyBmcm9tID0gdG1wOyB9
CisgICAgaWYgKGNtcCh0bywgZnJvbSkgPCAwKSB7IHZhciB0bXAgPSB0bzsgdG8gPSBmcm9tOyBm
cm9tID0gdG1wOyB9CiAgICAgaWYgKHR5cGVvZiBjb2RlID09ICJzdHJpbmciKSBjb2RlID0gc3Bs
aXRMaW5lcyhjb2RlKTsKLSAgICBtYWtlQ2hhbmdlKGRvYywge2Zyb206IGZyb20sIHRvOiB0bywg
dGV4dDogY29kZSwgb3JpZ2luOiBvcmlnaW59LCBudWxsKTsKLSAgfQotCi0gIC8vIFBPU0lUSU9O
IE9CSkVDVAotCi0gIGZ1bmN0aW9uIFBvcyhsaW5lLCBjaCkgewotICAgIGlmICghKHRoaXMgaW5z
dGFuY2VvZiBQb3MpKSByZXR1cm4gbmV3IFBvcyhsaW5lLCBjaCk7Ci0gICAgdGhpcy5saW5lID0g
bGluZTsgdGhpcy5jaCA9IGNoOwotICB9Ci0gIENvZGVNaXJyb3IuUG9zID0gUG9zOwotCi0gIGZ1
bmN0aW9uIHBvc0VxKGEsIGIpIHtyZXR1cm4gYS5saW5lID09IGIubGluZSAmJiBhLmNoID09IGIu
Y2g7fQotICBmdW5jdGlvbiBwb3NMZXNzKGEsIGIpIHtyZXR1cm4gYS5saW5lIDwgYi5saW5lIHx8
IChhLmxpbmUgPT0gYi5saW5lICYmIGEuY2ggPCBiLmNoKTt9Ci0gIGZ1bmN0aW9uIGNvcHlQb3Mo
eCkge3JldHVybiBQb3MoeC5saW5lLCB4LmNoKTt9Ci0KLSAgLy8gU0VMRUNUSU9OCi0KLSAgZnVu
Y3Rpb24gY2xpcExpbmUoZG9jLCBuKSB7cmV0dXJuIE1hdGgubWF4KGRvYy5maXJzdCwgTWF0aC5t
aW4obiwgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSk7fQotICBmdW5jdGlvbiBjbGlwUG9zKGRv
YywgcG9zKSB7Ci0gICAgaWYgKHBvcy5saW5lIDwgZG9jLmZpcnN0KSByZXR1cm4gUG9zKGRvYy5m
aXJzdCwgMCk7Ci0gICAgdmFyIGxhc3QgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE7Ci0gICAg
aWYgKHBvcy5saW5lID4gbGFzdCkgcmV0dXJuIFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCku
dGV4dC5sZW5ndGgpOwotICAgIHJldHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywgcG9z
LmxpbmUpLnRleHQubGVuZ3RoKTsKLSAgfQotICBmdW5jdGlvbiBjbGlwVG9MZW4ocG9zLCBsaW5l
bGVuKSB7Ci0gICAgdmFyIGNoID0gcG9zLmNoOwotICAgIGlmIChjaCA9PSBudWxsIHx8IGNoID4g
bGluZWxlbikgcmV0dXJuIFBvcyhwb3MubGluZSwgbGluZWxlbik7Ci0gICAgZWxzZSBpZiAoY2gg
PCAwKSByZXR1cm4gUG9zKHBvcy5saW5lLCAwKTsKLSAgICBlbHNlIHJldHVybiBwb3M7Ci0gIH0K
LSAgZnVuY3Rpb24gaXNMaW5lKGRvYywgbCkge3JldHVybiBsID49IGRvYy5maXJzdCAmJiBsIDwg
ZG9jLmZpcnN0ICsgZG9jLnNpemU7fQotCi0gIC8vIElmIHNoaWZ0IGlzIGhlbGQsIHRoaXMgd2ls
bCBtb3ZlIHRoZSBzZWxlY3Rpb24gYW5jaG9yLiBPdGhlcndpc2UsCi0gIC8vIGl0J2xsIHNldCB0
aGUgd2hvbGUgc2VsZWN0aW9uLgotICBmdW5jdGlvbiBleHRlbmRTZWxlY3Rpb24oZG9jLCBwb3Ms
IG90aGVyLCBiaWFzKSB7Ci0gICAgaWYgKGRvYy5zZWwuc2hpZnQgfHwgZG9jLnNlbC5leHRlbmQp
IHsKLSAgICAgIHZhciBhbmNob3IgPSBkb2Muc2VsLmFuY2hvcjsKLSAgICAgIGlmIChvdGhlcikg
ewotICAgICAgICB2YXIgcG9zQmVmb3JlID0gcG9zTGVzcyhwb3MsIGFuY2hvcik7Ci0gICAgICAg
IGlmIChwb3NCZWZvcmUgIT0gcG9zTGVzcyhvdGhlciwgYW5jaG9yKSkgewotICAgICAgICAgIGFu
Y2hvciA9IHBvczsKLSAgICAgICAgICBwb3MgPSBvdGhlcjsKLSAgICAgICAgfSBlbHNlIGlmIChw
b3NCZWZvcmUgIT0gcG9zTGVzcyhwb3MsIG90aGVyKSkgewotICAgICAgICAgIHBvcyA9IG90aGVy
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBhbmNob3IsIHBv
cywgYmlhcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNldFNlbGVjdGlvbihkb2MsIHBvcywgb3Ro
ZXIgfHwgcG9zLCBiaWFzKTsKLSAgICB9Ci0gICAgaWYgKGRvYy5jbSkgZG9jLmNtLmN1ck9wLnVz
ZXJTZWxDaGFuZ2UgPSB0cnVlOwotICB9Ci0KLSAgZnVuY3Rpb24gZmlsdGVyU2VsZWN0aW9uQ2hh
bmdlKGRvYywgYW5jaG9yLCBoZWFkKSB7Ci0gICAgdmFyIG9iaiA9IHthbmNob3I6IGFuY2hvciwg
aGVhZDogaGVhZH07Ci0gICAgc2lnbmFsKGRvYywgImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsIGRv
Yywgb2JqKTsKLSAgICBpZiAoZG9jLmNtKSBzaWduYWwoZG9jLmNtLCAiYmVmb3JlU2VsZWN0aW9u
Q2hhbmdlIiwgZG9jLmNtLCBvYmopOwotICAgIG9iai5hbmNob3IgPSBjbGlwUG9zKGRvYywgb2Jq
LmFuY2hvcik7IG9iai5oZWFkID0gY2xpcFBvcyhkb2MsIG9iai5oZWFkKTsKLSAgICByZXR1cm4g
b2JqOwotICB9Ci0KLSAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24uIExhc3QgdHdvIGFyZ3MgYXJl
IG9ubHkgdXNlZCBieQotICAvLyB1cGRhdGVEb2MsIHNpbmNlIHRoZXkgaGF2ZSB0byBiZSBleHBy
ZXNzZWQgaW4gdGhlIGxpbmUKLSAgLy8gbnVtYmVycyBiZWZvcmUgdGhlIHVwZGF0ZS4KLSAgZnVu
Y3Rpb24gc2V0U2VsZWN0aW9uKGRvYywgYW5jaG9yLCBoZWFkLCBiaWFzLCBjaGVja0F0b21pYykg
ewotICAgIGlmICghY2hlY2tBdG9taWMgJiYgaGFzSGFuZGxlcihkb2MsICJiZWZvcmVTZWxlY3Rp
b25DaGFuZ2UiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sICJiZWZvcmVTZWxlY3Rp
b25DaGFuZ2UiKSkgewotICAgICAgdmFyIGZpbHRlcmVkID0gZmlsdGVyU2VsZWN0aW9uQ2hhbmdl
KGRvYywgYW5jaG9yLCBoZWFkKTsKLSAgICAgIGhlYWQgPSBmaWx0ZXJlZC5oZWFkOwotICAgICAg
YW5jaG9yID0gZmlsdGVyZWQuYW5jaG9yOwotICAgIH0KLQotICAgIHZhciBzZWwgPSBkb2Muc2Vs
OwotICAgIHNlbC5nb2FsQ29sdW1uID0gbnVsbDsKLSAgICBpZiAoYmlhcyA9PSBudWxsKSBiaWFz
ID0gcG9zTGVzcyhoZWFkLCBzZWwuaGVhZCkgPyAtMSA6IDE7Ci0gICAgLy8gU2tpcCBvdmVyIGF0
b21pYyBzcGFucy4KLSAgICBpZiAoY2hlY2tBdG9taWMgfHwgIXBvc0VxKGFuY2hvciwgc2VsLmFu
Y2hvcikpCi0gICAgICBhbmNob3IgPSBza2lwQXRvbWljKGRvYywgYW5jaG9yLCBiaWFzLCBjaGVj
a0F0b21pYyAhPSAicHVzaCIpOwotICAgIGlmIChjaGVja0F0b21pYyB8fCAhcG9zRXEoaGVhZCwg
c2VsLmhlYWQpKQotICAgICAgaGVhZCA9IHNraXBBdG9taWMoZG9jLCBoZWFkLCBiaWFzLCBjaGVj
a0F0b21pYyAhPSAicHVzaCIpOwotCi0gICAgaWYgKHBvc0VxKHNlbC5hbmNob3IsIGFuY2hvcikg
JiYgcG9zRXEoc2VsLmhlYWQsIGhlYWQpKSByZXR1cm47Ci0KLSAgICBzZWwuYW5jaG9yID0gYW5j
aG9yOyBzZWwuaGVhZCA9IGhlYWQ7Ci0gICAgdmFyIGludiA9IHBvc0xlc3MoaGVhZCwgYW5jaG9y
KTsKLSAgICBzZWwuZnJvbSA9IGludiA/IGhlYWQgOiBhbmNob3I7Ci0gICAgc2VsLnRvID0gaW52
ID8gYW5jaG9yIDogaGVhZDsKLQotICAgIGlmIChkb2MuY20pCi0gICAgICBkb2MuY20uY3VyT3Au
dXBkYXRlSW5wdXQgPSBkb2MuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9Ci0gICAgICAgIGRv
Yy5jbS5jdXJPcC5jdXJzb3JBY3Rpdml0eSA9IHRydWU7Ci0KLSAgICBzaWduYWxMYXRlcihkb2Ms
ICJjdXJzb3JBY3Rpdml0eSIsIGRvYyk7Ci0gIH0KLQotICBmdW5jdGlvbiByZUNoZWNrU2VsZWN0
aW9uKGNtKSB7Ci0gICAgc2V0U2VsZWN0aW9uKGNtLmRvYywgY20uZG9jLnNlbC5mcm9tLCBjbS5k
b2Muc2VsLnRvLCBudWxsLCAicHVzaCIpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2tpcEF0b21pYyhk
b2MsIHBvcywgYmlhcywgbWF5Q2xlYXIpIHsKLSAgICB2YXIgZmxpcHBlZCA9IGZhbHNlLCBjdXJQ
b3MgPSBwb3M7Ci0gICAgdmFyIGRpciA9IGJpYXMgfHwgMTsKLSAgICBkb2MuY2FudEVkaXQgPSBm
YWxzZTsKLSAgICBzZWFyY2g6IGZvciAoOzspIHsKLSAgICAgIHZhciBsaW5lID0gZ2V0TGluZShk
b2MsIGN1clBvcy5saW5lKTsKLSAgICAgIGlmIChsaW5lLm1hcmtlZFNwYW5zKSB7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS5tYXJrZWRTcGFucy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgIHZhciBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV0sIG0gPSBzcC5tYXJrZXI7Ci0gICAg
ICAgICAgaWYgKChzcC5mcm9tID09IG51bGwgfHwgKG0uaW5jbHVzaXZlTGVmdCA/IHNwLmZyb20g
PD0gY3VyUG9zLmNoIDogc3AuZnJvbSA8IGN1clBvcy5jaCkpICYmCi0gICAgICAgICAgICAgIChz
cC50byA9PSBudWxsIHx8IChtLmluY2x1c2l2ZVJpZ2h0ID8gc3AudG8gPj0gY3VyUG9zLmNoIDog
c3AudG8gPiBjdXJQb3MuY2gpKSkgewotICAgICAgICAgICAgaWYgKG1heUNsZWFyKSB7Ci0gICAg
ICAgICAgICAgIHNpZ25hbChtLCAiYmVmb3JlQ3Vyc29yRW50ZXIiKTsKLSAgICAgICAgICAgICAg
aWYgKG0uZXhwbGljaXRseUNsZWFyZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWxpbmUubWFy
a2VkU3BhbnMpIGJyZWFrOwotICAgICAgICAgICAgICAgIGVsc2Ugey0taTsgY29udGludWU7fQot
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW0uYXRvbWlj
KSBjb250aW51ZTsKLSAgICAgICAgICAgIHZhciBuZXdQb3MgPSBtLmZpbmQoKVtkaXIgPCAwID8g
ImZyb20iIDogInRvIl07Ci0gICAgICAgICAgICBpZiAocG9zRXEobmV3UG9zLCBjdXJQb3MpKSB7
Ci0gICAgICAgICAgICAgIG5ld1Bvcy5jaCArPSBkaXI7Ci0gICAgICAgICAgICAgIGlmIChuZXdQ
b3MuY2ggPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5saW5lID4gZG9jLmZpcnN0
KSBuZXdQb3MgPSBjbGlwUG9zKGRvYywgUG9zKG5ld1Bvcy5saW5lIC0gMSkpOwotICAgICAgICAg
ICAgICAgIGVsc2UgbmV3UG9zID0gbnVsbDsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdQ
b3MuY2ggPiBsaW5lLnRleHQubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5s
aW5lIDwgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSBuZXdQb3MgPSBQb3MobmV3UG9zLmxpbmUg
KyAxLCAwKTsKLSAgICAgICAgICAgICAgICBlbHNlIG5ld1BvcyA9IG51bGw7Ci0gICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgaWYgKCFuZXdQb3MpIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZmxpcHBlZCkgewotICAgICAgICAgICAgICAgICAgLy8gRHJpdmVuIGluIGEgY29ybmVyIC0tIG5v
IHZhbGlkIGN1cnNvciBwb3NpdGlvbiBmb3VuZCBhdCBhbGwKLSAgICAgICAgICAgICAgICAgIC8v
IC0tIHRyeSBhZ2FpbiAqd2l0aCogY2xlYXJpbmcsIGlmIHdlIGRpZG4ndCBhbHJlYWR5Ci0gICAg
ICAgICAgICAgICAgICBpZiAoIW1heUNsZWFyKSByZXR1cm4gc2tpcEF0b21pYyhkb2MsIHBvcywg
YmlhcywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHR1cm4gb2ZmIGVk
aXRpbmcgdW50aWwgZnVydGhlciBub3RpY2UsIGFuZCByZXR1cm4gdGhlIHN0YXJ0IG9mIHRoZSBk
b2MKLSAgICAgICAgICAgICAgICAgIGRvYy5jYW50RWRpdCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICByZXR1cm4gUG9zKGRvYy5maXJzdCwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGZsaXBwZWQgPSB0cnVlOyBuZXdQb3MgPSBwb3M7IGRpciA9IC1kaXI7Ci0gICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1clBvcyA9IG5ld1BvczsK
LSAgICAgICAgICAgIGNvbnRpbnVlIHNlYXJjaDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICAgIHJldHVybiBjdXJQb3M7Ci0gICAgfQorICAgIG1ha2VDaGFuZ2UoZG9jLCB7
ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBjb2RlLCBvcmlnaW46IG9yaWdpbn0pOwogICB9CiAK
LSAgLy8gU0NST0xMSU5HCisgIC8vIFNDUk9MTElORyBUSElOR1MgSU5UTyBWSUVXCiAKLSAgZnVu
Y3Rpb24gc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoY20pIHsKLSAgICB2YXIgY29vcmRzID0gc2Nyb2xs
UG9zSW50b1ZpZXcoY20sIGNtLmRvYy5zZWwuaGVhZCwgbnVsbCwgY20ub3B0aW9ucy5jdXJzb3JT
Y3JvbGxNYXJnaW4pOwotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgcmV0dXJuOwotICAgIHZh
ciBkaXNwbGF5ID0gY20uZGlzcGxheSwgYm94ID0gZ2V0UmVjdChkaXNwbGF5LnNpemVyKSwgZG9T
Y3JvbGwgPSBudWxsOworICAvLyBJZiBhbiBlZGl0b3Igc2l0cyBvbiB0aGUgdG9wIG9yIGJvdHRv
bSBvZiB0aGUgd2luZG93LCBwYXJ0aWFsbHkKKyAgLy8gc2Nyb2xsZWQgb3V0IG9mIHZpZXcsIHRo
aXMgZW5zdXJlcyB0aGF0IHRoZSBjdXJzb3IgaXMgdmlzaWJsZS4KKyAgZnVuY3Rpb24gbWF5YmVT
Y3JvbGxXaW5kb3coY20sIGNvb3JkcykgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwg
Ym94ID0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZG9TY3JvbGwgPSBu
dWxsOwogICAgIGlmIChjb29yZHMudG9wICsgYm94LnRvcCA8IDApIGRvU2Nyb2xsID0gdHJ1ZTsK
ICAgICBlbHNlIGlmIChjb29yZHMuYm90dG9tICsgYm94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWln
aHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIGRvU2Nyb2xsID0g
ZmFsc2U7CiAgICAgaWYgKGRvU2Nyb2xsICE9IG51bGwgJiYgIXBoYW50b20pIHsKLSAgICAgIHZh
ciBoaWRkZW4gPSBkaXNwbGF5LmN1cnNvci5zdHlsZS5kaXNwbGF5ID09ICJub25lIjsKLSAgICAg
IGlmIChoaWRkZW4pIHsKLSAgICAgICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICIi
OwotICAgICAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS5sZWZ0ID0gY29vcmRzLmxlZnQgKyAicHgi
OwotICAgICAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS50b3AgPSAoY29vcmRzLnRvcCAtIGRpc3Bs
YXkudmlld09mZnNldCkgKyAicHgiOwotICAgICAgfQotICAgICAgZGlzcGxheS5jdXJzb3Iuc2Ny
b2xsSW50b1ZpZXcoZG9TY3JvbGwpOwotICAgICAgaWYgKGhpZGRlbikgZGlzcGxheS5jdXJzb3Iu
c3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgIHZhciBzY3JvbGxOb2RlID0gZWx0KCJkaXYi
LCAiXHUyMDBiIiwgbnVsbCwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAiICsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb29yZHMudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0IC0gcGFk
ZGluZ1RvcChjbS5kaXNwbGF5KSkgKyAicHg7IGhlaWdodDogIiArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY29vcmRzLmJvdHRvbSAtIGNvb3Jkcy50b3AgKyBzY3JvbGxlckN1dE9mZikg
KyAicHg7IGxlZnQ6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzLmxlZnQg
KyAicHg7IHdpZHRoOiAycHg7Iik7CisgICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5hcHBlbmRD
aGlsZChzY3JvbGxOb2RlKTsKKyAgICAgIHNjcm9sbE5vZGUuc2Nyb2xsSW50b1ZpZXcoZG9TY3Jv
bGwpOworICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoc2Nyb2xsTm9kZSk7
CiAgICAgfQogICB9CiAKKyAgLy8gU2Nyb2xsIGEgZ2l2ZW4gcG9zaXRpb24gaW50byB2aWV3IChp
bW1lZGlhdGVseSksIHZlcmlmeWluZyB0aGF0CisgIC8vIGl0IGFjdHVhbGx5IGJlY2FtZSB2aXNp
YmxlIChhcyBsaW5lIGhlaWdodHMgYXJlIGFjY3VyYXRlbHkKKyAgLy8gbWVhc3VyZWQsIHRoZSBw
b3NpdGlvbiBvZiBzb21ldGhpbmcgbWF5ICdkcmlmdCcgZHVyaW5nIGRyYXdpbmcpLgogICBmdW5j
dGlvbiBzY3JvbGxQb3NJbnRvVmlldyhjbSwgcG9zLCBlbmQsIG1hcmdpbikgewogICAgIGlmICht
YXJnaW4gPT0gbnVsbCkgbWFyZ2luID0gMDsKICAgICBmb3IgKDs7KSB7CkBAIC0yNjgzLDE2ICsz
NTIyLDIyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAgfQog
CisgIC8vIFNjcm9sbCBhIGdpdmVuIHNldCBvZiBjb29yZGluYXRlcyBpbnRvIHZpZXcgKGltbWVk
aWF0ZWx5KS4KICAgZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcoY20sIHgxLCB5MSwgeDIsIHkyKSB7
CiAgICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgeDEsIHkxLCB4Miwg
eTIpOwogICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHNldFNjcm9sbFRvcChj
bSwgc2Nyb2xsUG9zLnNjcm9sbFRvcCk7CiAgICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxMZWZ0ICE9
IG51bGwpIHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxMZWZ0KTsKICAgfQogCisg
IC8vIENhbGN1bGF0ZSBhIG5ldyBzY3JvbGwgcG9zaXRpb24gbmVlZGVkIHRvIHNjcm9sbCB0aGUg
Z2l2ZW4KKyAgLy8gcmVjdGFuZ2xlIGludG8gdmlldy4gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBz
Y3JvbGxUb3AgYW5kCisgIC8vIHNjcm9sbExlZnQgcHJvcGVydGllcy4gV2hlbiB0aGVzZSBhcmUg
dW5kZWZpbmVkLCB0aGUKKyAgLy8gdmVydGljYWwvaG9yaXpvbnRhbCBwb3NpdGlvbiBkb2VzIG5v
dCBuZWVkIHRvIGJlIGFkanVzdGVkLgogICBmdW5jdGlvbiBjYWxjdWxhdGVTY3JvbGxQb3MoY20s
IHgxLCB5MSwgeDIsIHkyKSB7CiAgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzbmFwTWFy
Z2luID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KTsKICAgICBpZiAoeTEgPCAwKSB5MSA9IDA7Ci0g
ICAgdmFyIHNjcmVlbiA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJD
dXRPZmYsIHNjcmVlbnRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wLCByZXN1bHQgPSB7
fTsKKyAgICB2YXIgc2NyZWVudG9wID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsVG9wICE9
IG51bGwgPyBjbS5jdXJPcC5zY3JvbGxUb3AgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDsK
KyAgICB2YXIgc2NyZWVuID0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQgLSBzY3JvbGxl
ckN1dE9mZiwgcmVzdWx0ID0ge307CiAgICAgdmFyIGRvY0JvdHRvbSA9IGNtLmRvYy5oZWlnaHQg
KyBwYWRkaW5nVmVydChkaXNwbGF5KTsKICAgICB2YXIgYXRUb3AgPSB5MSA8IHNuYXBNYXJnaW4s
IGF0Qm90dG9tID0geTIgPiBkb2NCb3R0b20gLSBzbmFwTWFyZ2luOwogICAgIGlmICh5MSA8IHNj
cmVlbnRvcCkgewpAQCAtMjcwMiw3ICszNTQ3LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgICBpZiAobmV3VG9wICE9IHNjcmVlbnRvcCkgcmVzdWx0LnNjcm9sbFRv
cCA9IG5ld1RvcDsKICAgICB9CiAKLSAgICB2YXIgc2NyZWVudyA9IGRpc3BsYXkuc2Nyb2xsZXIu
Y2xpZW50V2lkdGggLSBzY3JvbGxlckN1dE9mZiwgc2NyZWVubGVmdCA9IGRpc3BsYXkuc2Nyb2xs
ZXIuc2Nyb2xsTGVmdDsKKyAgICB2YXIgc2NyZWVubGVmdCA9IGNtLmN1ck9wICYmIGNtLmN1ck9w
LnNjcm9sbExlZnQgIT0gbnVsbCA/IGNtLmN1ck9wLnNjcm9sbExlZnQgOiBkaXNwbGF5LnNjcm9s
bGVyLnNjcm9sbExlZnQ7CisgICAgdmFyIHNjcmVlbncgPSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVu
dFdpZHRoIC0gc2Nyb2xsZXJDdXRPZmY7CiAgICAgeDEgKz0gZGlzcGxheS5ndXR0ZXJzLm9mZnNl
dFdpZHRoOyB4MiArPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7CiAgICAgdmFyIGd1dHRl
cncgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7CiAgICAgdmFyIGF0TGVmdCA9IHgxIDwg
Z3V0dGVydyArIDEwOwpAQCAtMjcxNSwzMiArMzU2MSw3MCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKLSAgZnVuY3Rpb24gdXBk
YXRlU2Nyb2xsUG9zKGNtLCBsZWZ0LCB0b3ApIHsKLSAgICBjbS5jdXJPcC51cGRhdGVTY3JvbGxQ
b3MgPSB7c2Nyb2xsTGVmdDogbGVmdCA9PSBudWxsID8gY20uZG9jLnNjcm9sbExlZnQgOiBsZWZ0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6IHRvcCA9PSBudWxs
ID8gY20uZG9jLnNjcm9sbFRvcCA6IHRvcH07CisgIC8vIFN0b3JlIGEgcmVsYXRpdmUgYWRqdXN0
bWVudCB0byB0aGUgc2Nyb2xsIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50CisgIC8vIG9wZXJhdGlv
biAodG8gYmUgYXBwbGllZCB3aGVuIHRoZSBvcGVyYXRpb24gZmluaXNoZXMpLgorICBmdW5jdGlv
biBhZGRUb1Njcm9sbFBvcyhjbSwgbGVmdCwgdG9wKSB7CisgICAgaWYgKGxlZnQgIT0gbnVsbCB8
fCB0b3AgIT0gbnVsbCkgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTsKKyAgICBpZiAobGVmdCAhPSBu
dWxsKQorICAgICAgY20uY3VyT3Auc2Nyb2xsTGVmdCA9IChjbS5jdXJPcC5zY3JvbGxMZWZ0ID09
IG51bGwgPyBjbS5kb2Muc2Nyb2xsTGVmdCA6IGNtLmN1ck9wLnNjcm9sbExlZnQpICsgbGVmdDsK
KyAgICBpZiAodG9wICE9IG51bGwpCisgICAgICBjbS5jdXJPcC5zY3JvbGxUb3AgPSAoY20uY3Vy
T3Auc2Nyb2xsVG9wID09IG51bGwgPyBjbS5kb2Muc2Nyb2xsVG9wIDogY20uY3VyT3Auc2Nyb2xs
VG9wKSArIHRvcDsKKyAgfQorCisgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0IHRoZSBlbmQgb2YgdGhl
IG9wZXJhdGlvbiB0aGUgY3VycmVudCBjdXJzb3IgaXMKKyAgLy8gc2hvd24uCisgIGZ1bmN0aW9u
IGVuc3VyZUN1cnNvclZpc2libGUoY20pIHsKKyAgICByZXNvbHZlU2Nyb2xsVG9Qb3MoY20pOwor
ICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgZnJvbSA9IGN1ciwgdG8gPSBjdXI7CisgICAg
aWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgeworICAgICAgZnJvbSA9IGN1ci5jaCA/IFBv
cyhjdXIubGluZSwgY3VyLmNoIC0gMSkgOiBjdXI7CisgICAgICB0byA9IFBvcyhjdXIubGluZSwg
Y3VyLmNoICsgMSk7CisgICAgfQorICAgIGNtLmN1ck9wLnNjcm9sbFRvUG9zID0ge2Zyb206IGZy
b20sIHRvOiB0bywgbWFyZ2luOiBjbS5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbiwgaXNDdXJz
b3I6IHRydWV9OwogICB9CiAKLSAgZnVuY3Rpb24gYWRkVG9TY3JvbGxQb3MoY20sIGxlZnQsIHRv
cCkgewotICAgIHZhciBwb3MgPSBjbS5jdXJPcC51cGRhdGVTY3JvbGxQb3MgfHwgKGNtLmN1ck9w
LnVwZGF0ZVNjcm9sbFBvcyA9IHtzY3JvbGxMZWZ0OiBjbS5kb2Muc2Nyb2xsTGVmdCwgc2Nyb2xs
VG9wOiBjbS5kb2Muc2Nyb2xsVG9wfSk7Ci0gICAgdmFyIHNjcm9sbCA9IGNtLmRpc3BsYXkuc2Ny
b2xsZXI7Ci0gICAgcG9zLnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbC5z
Y3JvbGxIZWlnaHQgLSBzY3JvbGwuY2xpZW50SGVpZ2h0LCBwb3Muc2Nyb2xsVG9wICsgdG9wKSk7
Ci0gICAgcG9zLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGwuc2Nyb2xs
V2lkdGggLSBzY3JvbGwuY2xpZW50V2lkdGgsIHBvcy5zY3JvbGxMZWZ0ICsgbGVmdCkpOworICAv
LyBXaGVuIGFuIG9wZXJhdGlvbiBoYXMgaXRzIHNjcm9sbFRvUG9zIHByb3BlcnR5IHNldCwgYW5k
IGFub3RoZXIKKyAgLy8gc2Nyb2xsIGFjdGlvbiBpcyBhcHBsaWVkIGJlZm9yZSB0aGUgZW5kIG9m
IHRoZSBvcGVyYXRpb24sIHRoaXMKKyAgLy8gJ3NpbXVsYXRlcycgc2Nyb2xsaW5nIHRoYXQgcG9z
aXRpb24gaW50byB2aWV3IGluIGEgY2hlYXAgd2F5LCBzbworICAvLyB0aGF0IHRoZSBlZmZlY3Qg
b2YgaW50ZXJtZWRpYXRlIHNjcm9sbCBjb21tYW5kcyBpcyBub3QgaWdub3JlZC4KKyAgZnVuY3Rp
b24gcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKSB7CisgICAgdmFyIHJhbmdlID0gY20uY3VyT3Auc2Ny
b2xsVG9Qb3M7CisgICAgaWYgKHJhbmdlKSB7CisgICAgICBjbS5jdXJPcC5zY3JvbGxUb1BvcyA9
IG51bGw7CisgICAgICB2YXIgZnJvbSA9IGVzdGltYXRlQ29vcmRzKGNtLCByYW5nZS5mcm9tKSwg
dG8gPSBlc3RpbWF0ZUNvb3JkcyhjbSwgcmFuZ2UudG8pOworICAgICAgdmFyIHNQb3MgPSBjYWxj
dWxhdGVTY3JvbGxQb3MoY20sIE1hdGgubWluKGZyb20ubGVmdCwgdG8ubGVmdCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihmcm9tLnRvcCwgdG8udG9wKSAt
IHJhbmdlLm1hcmdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgu
bWF4KGZyb20ucmlnaHQsIHRvLnJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1hdGgubWF4KGZyb20uYm90dG9tLCB0by5ib3R0b20pICsgcmFuZ2UubWFyZ2luKTsK
KyAgICAgIGNtLnNjcm9sbFRvKHNQb3Muc2Nyb2xsTGVmdCwgc1Bvcy5zY3JvbGxUb3ApOworICAg
IH0KICAgfQogCiAgIC8vIEFQSSBVVElMSVRJRVMKIAorICAvLyBJbmRlbnQgdGhlIGdpdmVuIGxp
bmUuIFRoZSBob3cgcGFyYW1ldGVyIGNhbiBiZSAic21hcnQiLAorICAvLyAiYWRkIi9udWxsLCAi
c3VidHJhY3QiLCBvciAicHJldiIuIFdoZW4gYWdncmVzc2l2ZSBpcyBmYWxzZQorICAvLyAodHlw
aWNhbGx5IHNldCB0byB0cnVlIGZvciBmb3JjZWQgc2luZ2xlLWxpbmUgaW5kZW50cyksIGVtcHR5
CisgIC8vIGxpbmVzIGFyZSBub3QgaW5kZW50ZWQsIGFuZCBwbGFjZXMgd2hlcmUgdGhlIG1vZGUg
cmV0dXJucyBQYXNzCisgIC8vIGFyZSBsZWZ0IGFsb25lLgogICBmdW5jdGlvbiBpbmRlbnRMaW5l
KGNtLCBuLCBob3csIGFnZ3Jlc3NpdmUpIHsKLSAgICB2YXIgZG9jID0gY20uZG9jOworICAgIHZh
ciBkb2MgPSBjbS5kb2MsIHN0YXRlOwogICAgIGlmIChob3cgPT0gbnVsbCkgaG93ID0gImFkZCI7
CiAgICAgaWYgKGhvdyA9PSAic21hcnQiKSB7CisgICAgICAvLyBGYWxsIGJhY2sgdG8gInByZXYi
IHdoZW4gdGhlIG1vZGUgZG9lc24ndCBoYXZlIGFuIGluZGVudGF0aW9uCisgICAgICAvLyBtZXRo
b2QuCiAgICAgICBpZiAoIWNtLmRvYy5tb2RlLmluZGVudCkgaG93ID0gInByZXYiOwotICAgICAg
ZWxzZSB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZShjbSwgbik7CisgICAgICBlbHNlIHN0YXRl
ID0gZ2V0U3RhdGVCZWZvcmUoY20sIG4pOwogICAgIH0KIAogICAgIHZhciB0YWJTaXplID0gY20u
b3B0aW9ucy50YWJTaXplOwogICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIG4pLCBjdXJTcGFj
ZSA9IGNvdW50Q29sdW1uKGxpbmUudGV4dCwgbnVsbCwgdGFiU2l6ZSk7CisgICAgaWYgKGxpbmUu
c3RhdGVBZnRlcikgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsKICAgICB2YXIgY3VyU3BhY2VTdHJp
bmcgPSBsaW5lLnRleHQubWF0Y2goL15ccyovKVswXSwgaW5kZW50YXRpb247Ci0gICAgaWYgKGhv
dyA9PSAic21hcnQiKSB7CisgICAgaWYgKCFhZ2dyZXNzaXZlICYmICEvXFMvLnRlc3QobGluZS50
ZXh0KSkgeworICAgICAgaW5kZW50YXRpb24gPSAwOworICAgICAgaG93ID0gIm5vdCI7CisgICAg
fSBlbHNlIGlmIChob3cgPT0gInNtYXJ0IikgewogICAgICAgaW5kZW50YXRpb24gPSBjbS5kb2Mu
bW9kZS5pbmRlbnQoc3RhdGUsIGxpbmUudGV4dC5zbGljZShjdXJTcGFjZVN0cmluZy5sZW5ndGgp
LCBsaW5lLnRleHQpOwogICAgICAgaWYgKGluZGVudGF0aW9uID09IFBhc3MpIHsKICAgICAgICAg
aWYgKCFhZ2dyZXNzaXZlKSByZXR1cm47CkBAIC0yNzY0LDIzICszNjQ4LDY5IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZm9yICh2YXIgaSA9IE1hdGguZmxvb3Io
aW5kZW50YXRpb24gLyB0YWJTaXplKTsgaTsgLS1pKSB7cG9zICs9IHRhYlNpemU7IGluZGVudFN0
cmluZyArPSAiXHQiO30KICAgICBpZiAocG9zIDwgaW5kZW50YXRpb24pIGluZGVudFN0cmluZyAr
PSBzcGFjZVN0cihpbmRlbnRhdGlvbiAtIHBvcyk7CiAKLSAgICBpZiAoaW5kZW50U3RyaW5nICE9
IGN1clNwYWNlU3RyaW5nKQorICAgIGlmIChpbmRlbnRTdHJpbmcgIT0gY3VyU3BhY2VTdHJpbmcp
IHsKICAgICAgIHJlcGxhY2VSYW5nZShjbS5kb2MsIGluZGVudFN0cmluZywgUG9zKG4sIDApLCBQ
b3MobiwgY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgIitpbnB1dCIpOwotICAgIGVsc2UgaWYgKGRv
Yy5zZWwuaGVhZC5saW5lID09IG4gJiYgZG9jLnNlbC5oZWFkLmNoIDwgY3VyU3BhY2VTdHJpbmcu
bGVuZ3RoKQotICAgICAgc2V0U2VsZWN0aW9uKGRvYywgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxl
bmd0aCksIFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCAxKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgLy8gRW5zdXJlIHRoYXQsIGlmIHRoZSBjdXJzb3Igd2FzIGluIHRoZSB3aGl0ZXNwYWNl
IGF0IHRoZSBzdGFydAorICAgICAgLy8gb2YgdGhlIGxpbmUsIGl0IGlzIG1vdmVkIHRvIHRoZSBl
bmQgb2YgdGhhdCBzcGFjZS4KKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5n
ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV07
CisgICAgICAgIGlmIChyYW5nZS5oZWFkLmxpbmUgPT0gbiAmJiByYW5nZS5oZWFkLmNoIDwgY3Vy
U3BhY2VTdHJpbmcubGVuZ3RoKSB7CisgICAgICAgICAgdmFyIHBvcyA9IFBvcyhuLCBjdXJTcGFj
ZVN0cmluZy5sZW5ndGgpOworICAgICAgICAgIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpLCBu
ZXcgUmFuZ2UocG9zLCBwb3MpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
fQorICAgIH0KICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOwogICB9CiAKLSAgZnVuY3Rpb24g
Y2hhbmdlTGluZShjbSwgaGFuZGxlLCBvcCkgeworICAvLyBVdGlsaXR5IGZvciBhcHBseWluZyBh
IGNoYW5nZSB0byBhIGxpbmUgYnkgaGFuZGxlIG9yIG51bWJlciwKKyAgLy8gcmV0dXJuaW5nIHRo
ZSBudW1iZXIgYW5kIG9wdGlvbmFsbHkgcmVnaXN0ZXJpbmcgdGhlIGxpbmUgYXMKKyAgLy8gY2hh
bmdlZC4KKyAgZnVuY3Rpb24gY2hhbmdlTGluZShjbSwgaGFuZGxlLCBjaGFuZ2VUeXBlLCBvcCkg
ewogICAgIHZhciBubyA9IGhhbmRsZSwgbGluZSA9IGhhbmRsZSwgZG9jID0gY20uZG9jOwogICAg
IGlmICh0eXBlb2YgaGFuZGxlID09ICJudW1iZXIiKSBsaW5lID0gZ2V0TGluZShkb2MsIGNsaXBM
aW5lKGRvYywgaGFuZGxlKSk7CiAgICAgZWxzZSBubyA9IGxpbmVObyhoYW5kbGUpOwogICAgIGlm
IChubyA9PSBudWxsKSByZXR1cm4gbnVsbDsKLSAgICBpZiAob3AobGluZSwgbm8pKSByZWdDaGFu
Z2UoY20sIG5vLCBubyArIDEpOwotICAgIGVsc2UgcmV0dXJuIG51bGw7CisgICAgaWYgKG9wKGxp
bmUsIG5vKSkgcmVnTGluZUNoYW5nZShjbSwgbm8sIGNoYW5nZVR5cGUpOwogICAgIHJldHVybiBs
aW5lOwogICB9CiAKKyAgLy8gSGVscGVyIGZvciBkZWxldGluZyB0ZXh0IG5lYXIgdGhlIHNlbGVj
dGlvbihzKSwgdXNlZCB0byBpbXBsZW1lbnQKKyAgLy8gYmFja3NwYWNlLCBkZWxldGUsIGFuZCBz
aW1pbGFyIGZ1bmN0aW9uYWxpdHkuCisgIGZ1bmN0aW9uIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20s
IGNvbXB1dGUpIHsKKyAgICB2YXIgcmFuZ2VzID0gY20uZG9jLnNlbC5yYW5nZXMsIGtpbGwgPSBb
XTsKKyAgICAvLyBCdWlsZCB1cCBhIHNldCBvZiByYW5nZXMgdG8ga2lsbCBmaXJzdCwgbWVyZ2lu
ZyBvdmVybGFwcGluZworICAgIC8vIHJhbmdlcy4KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJh
bmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIHRvS2lsbCA9IGNvbXB1dGUocmFuZ2VzW2ld
KTsKKyAgICAgIHdoaWxlIChraWxsLmxlbmd0aCAmJiBjbXAodG9LaWxsLmZyb20sIGxzdChraWxs
KS50bykgPD0gMCkgeworICAgICAgICB2YXIgcmVwbGFjZWQgPSBraWxsLnBvcCgpOworICAgICAg
ICBpZiAoY21wKHJlcGxhY2VkLmZyb20sIHRvS2lsbC5mcm9tKSA8IDApIHsKKyAgICAgICAgICB0
b0tpbGwuZnJvbSA9IHJlcGxhY2VkLmZyb207CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICAgIGtpbGwucHVzaCh0b0tpbGwpOworICAgIH0KKyAgICAvLyBOZXh0LCBy
ZW1vdmUgdGhvc2UgYWN0dWFsIHJhbmdlcy4KKyAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsK
KyAgICAgIGZvciAodmFyIGkgPSBraWxsLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQorICAgICAg
ICByZXBsYWNlUmFuZ2UoY20uZG9jLCAiIiwga2lsbFtpXS5mcm9tLCBraWxsW2ldLnRvLCAiK2Rl
bGV0ZSIpOworICAgICAgZW5zdXJlQ3Vyc29yVmlzaWJsZShjbSk7CisgICAgfSk7CisgIH0KKwor
ICAvLyBVc2VkIGZvciBob3Jpem9udGFsIHJlbGF0aXZlIG1vdGlvbi4gRGlyIGlzIC0xIG9yIDEg
KGxlZnQgb3IKKyAgLy8gcmlnaHQpLCB1bml0IGNhbiBiZSAiY2hhciIsICJjb2x1bW4iIChsaWtl
IGNoYXIsIGJ1dCBkb2Vzbid0CisgIC8vIGNyb3NzIGxpbmUgYm91bmRhcmllcyksICJ3b3JkIiAo
YWNyb3NzIG5leHQgd29yZCksIG9yICJncm91cCIgKHRvCisgIC8vIHRoZSBzdGFydCBvZiBuZXh0
IGdyb3VwIG9mIHdvcmQgb3Igbm9uLXdvcmQtbm9uLXdoaXRlc3BhY2UKKyAgLy8gY2hhcnMpLiBU
aGUgdmlzdWFsbHkgcGFyYW0gY29udHJvbHMgd2hldGhlciwgaW4gcmlnaHQtdG8tbGVmdAorICAv
LyB0ZXh0LCBkaXJlY3Rpb24gMSBtZWFucyB0byBtb3ZlIHRvd2FyZHMgdGhlIG5leHQgaW5kZXgg
aW4gdGhlCisgIC8vIHN0cmluZywgb3IgdG93YXJkcyB0aGUgY2hhcmFjdGVyIHRvIHRoZSByaWdo
dCBvZiB0aGUgY3VycmVudAorICAvLyBwb3NpdGlvbi4gVGhlIHJlc3VsdGluZyBwb3NpdGlvbiB3
aWxsIGhhdmUgYSBoaXRTaWRlPXRydWUKKyAgLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUg
ZW5kIG9mIHRoZSBkb2N1bWVudC4KICAgZnVuY3Rpb24gZmluZFBvc0goZG9jLCBwb3MsIGRpciwg
dW5pdCwgdmlzdWFsbHkpIHsKICAgICB2YXIgbGluZSA9IHBvcy5saW5lLCBjaCA9IHBvcy5jaCwg
b3JpZ0RpciA9IGRpcjsKICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTsKQEAg
LTI4MTAsMTMgKzM3NDAsMTUgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICAgIGlmIChkaXIgPCAwICYmICFtb3ZlT25jZSghZmlyc3QpKSBicmVhazsKICAgICAgICAg
dmFyIGN1ciA9IGxpbmVPYmoudGV4dC5jaGFyQXQoY2gpIHx8ICJcbiI7CiAgICAgICAgIHZhciB0
eXBlID0gaXNXb3JkQ2hhcihjdXIpID8gInciCi0gICAgICAgICAgOiAhZ3JvdXAgPyBudWxsCi0g
ICAgICAgICAgOiAvXHMvLnRlc3QoY3VyKSA/IG51bGwKKyAgICAgICAgICA6IGdyb3VwICYmIGN1
ciA9PSAiXG4iID8gIm4iCisgICAgICAgICAgOiAhZ3JvdXAgfHwgL1xzLy50ZXN0KGN1cikgPyBu
dWxsCiAgICAgICAgICAgOiAicCI7CisgICAgICAgIGlmIChncm91cCAmJiAhZmlyc3QgJiYgIXR5
cGUpIHR5cGUgPSAicyI7CiAgICAgICAgIGlmIChzYXdUeXBlICYmIHNhd1R5cGUgIT0gdHlwZSkg
ewogICAgICAgICAgIGlmIChkaXIgPCAwKSB7ZGlyID0gMTsgbW92ZU9uY2UoKTt9CiAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KKwogICAgICAgICBpZiAodHlwZSkgc2F3VHlwZSA9IHR5cGU7
CiAgICAgICAgIGlmIChkaXIgPiAwICYmICFtb3ZlT25jZSghZmlyc3QpKSBicmVhazsKICAgICAg
IH0KQEAgLTI4MjYsNiArMzc1OCw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAorICAvLyBGb3IgcmVsYXRpdmUgdmVydGljYWwg
bW92ZW1lbnQuIERpciBtYXkgYmUgLTEgb3IgMS4gVW5pdCBjYW4gYmUKKyAgLy8gInBhZ2UiIG9y
ICJsaW5lIi4gVGhlIHJlc3VsdGluZyBwb3NpdGlvbiB3aWxsIGhhdmUgYSBoaXRTaWRlPXRydWUK
KyAgLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KICAg
ZnVuY3Rpb24gZmluZFBvc1YoY20sIHBvcywgZGlyLCB1bml0KSB7CiAgICAgdmFyIGRvYyA9IGNt
LmRvYywgeCA9IHBvcy5sZWZ0LCB5OwogICAgIGlmICh1bml0ID09ICJwYWdlIikgewpAQCAtMjg0
Myw3ICszNzc4LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0
dXJuIHRhcmdldDsKICAgfQogCi0gIGZ1bmN0aW9uIGZpbmRXb3JkQXQobGluZSwgcG9zKSB7Cisg
IC8vIEZpbmQgdGhlIHdvcmQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIChhcyByZXR1cm5lZCBieSBj
b29yZHNDaGFyKS4KKyAgZnVuY3Rpb24gZmluZFdvcmRBdChkb2MsIHBvcykgeworICAgIHZhciBs
aW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0OwogICAgIHZhciBzdGFydCA9IHBvcy5j
aCwgZW5kID0gcG9zLmNoOwogICAgIGlmIChsaW5lKSB7CiAgICAgICBpZiAoKHBvcy54UmVsIDwg
MCB8fCBlbmQgPT0gbGluZS5sZW5ndGgpICYmIHN0YXJ0KSAtLXN0YXJ0OyBlbHNlICsrZW5kOwpA
QCAtMjg1NCwxNyArMzc5MSwxOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgY2hlY2sobGluZS5jaGFyQXQoc3RhcnQgLSAxKSkp
IC0tc3RhcnQ7CiAgICAgICB3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgY2hlY2sobGluZS5j
aGFyQXQoZW5kKSkpICsrZW5kOwogICAgIH0KLSAgICByZXR1cm4ge2Zyb206IFBvcyhwb3MubGlu
ZSwgc3RhcnQpLCB0bzogUG9zKHBvcy5saW5lLCBlbmQpfTsKKyAgICByZXR1cm4gbmV3IFJhbmdl
KFBvcyhwb3MubGluZSwgc3RhcnQpLCBQb3MocG9zLmxpbmUsIGVuZCkpOwogICB9CiAKLSAgZnVu
Y3Rpb24gc2VsZWN0TGluZShjbSwgbGluZSkgewotICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2Ms
IFBvcyhsaW5lLCAwKSwgY2xpcFBvcyhjbS5kb2MsIFBvcyhsaW5lICsgMSwgMCkpKTsKLSAgfQor
ICAvLyBFRElUT1IgTUVUSE9EUwogCi0gIC8vIFBST1RPVFlQRQorICAvLyBUaGUgcHVibGljbHkg
dmlzaWJsZSBBUEkuIE5vdGUgdGhhdCBtZXRob2RPcChmKSBtZWFucworICAvLyAnd3JhcCBmIGlu
IGFuIG9wZXJhdGlvbiwgcGVyZm9ybWVkIG9uIGl0cyBgdGhpc2AgcGFyYW1ldGVyJy4KIAotICAv
LyBUaGUgcHVibGljbHkgdmlzaWJsZSBBUEkuIE5vdGUgdGhhdCBvcGVyYXRpb24obnVsbCwgZikg
bWVhbnMKLSAgLy8gJ3dyYXAgZiBpbiBhbiBvcGVyYXRpb24sIHBlcmZvcm1lZCBvbiBpdHMgYHRo
aXNgIHBhcmFtZXRlcicKKyAgLy8gVGhpcyBpcyBub3QgdGhlIGNvbXBsZXRlIHNldCBvZiBlZGl0
b3IgbWV0aG9kcy4gTW9zdCBvZiB0aGUKKyAgLy8gbWV0aG9kcyBkZWZpbmVkIG9uIHRoZSBEb2Mg
dHlwZSBhcmUgYWxzbyBpbmplY3RlZCBpbnRvCisgIC8vIENvZGVNaXJyb3IucHJvdG90eXBlLCBm
b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kCisgIC8vIGNvbnZlbmllbmNlLgogCiAgIENv
ZGVNaXJyb3IucHJvdG90eXBlID0gewogICAgIGNvbnN0cnVjdG9yOiBDb2RlTWlycm9yLApAQCAt
Mjg5MywxNCArMzgzMSwxNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgICAgfQogICAgIH0sCiAKLSAgICBhZGRPdmVybGF5OiBvcGVyYXRpb24obnVsbCwgZnVuY3Rp
b24oc3BlYywgb3B0aW9ucykgeworICAgIGFkZE92ZXJsYXk6IG1ldGhvZE9wKGZ1bmN0aW9uKHNw
ZWMsIG9wdGlvbnMpIHsKICAgICAgIHZhciBtb2RlID0gc3BlYy50b2tlbiA/IHNwZWMgOiBDb2Rl
TWlycm9yLmdldE1vZGUodGhpcy5vcHRpb25zLCBzcGVjKTsKICAgICAgIGlmIChtb2RlLnN0YXJ0
U3RhdGUpIHRocm93IG5ldyBFcnJvcigiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKTsK
ICAgICAgIHRoaXMuc3RhdGUub3ZlcmxheXMucHVzaCh7bW9kZTogbW9kZSwgbW9kZVNwZWM6IHNw
ZWMsIG9wYXF1ZTogb3B0aW9ucyAmJiBvcHRpb25zLm9wYXF1ZX0pOwogICAgICAgdGhpcy5zdGF0
ZS5tb2RlR2VuKys7CiAgICAgICByZWdDaGFuZ2UodGhpcyk7CiAgICAgfSksCi0gICAgcmVtb3Zl
T3ZlcmxheTogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHNwZWMpIHsKKyAgICByZW1vdmVPdmVy
bGF5OiBtZXRob2RPcChmdW5jdGlvbihzcGVjKSB7CiAgICAgICB2YXIgb3ZlcmxheXMgPSB0aGlz
LnN0YXRlLm92ZXJsYXlzOwogICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdmVybGF5cy5sZW5n
dGg7ICsraSkgewogICAgICAgICB2YXIgY3VyID0gb3ZlcmxheXNbaV0ubW9kZVNwZWM7CkBAIC0y
OTEzLDE4ICszODUxLDI5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgfQogICAgIH0pLAogCi0gICAgaW5kZW50TGluZTogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9u
KG4sIGRpciwgYWdncmVzc2l2ZSkgeworICAgIGluZGVudExpbmU6IG1ldGhvZE9wKGZ1bmN0aW9u
KG4sIGRpciwgYWdncmVzc2l2ZSkgewogICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gInN0cmluZyIg
JiYgdHlwZW9mIGRpciAhPSAibnVtYmVyIikgewogICAgICAgICBpZiAoZGlyID09IG51bGwpIGRp
ciA9IHRoaXMub3B0aW9ucy5zbWFydEluZGVudCA/ICJzbWFydCIgOiAicHJldiI7CiAgICAgICAg
IGVsc2UgZGlyID0gZGlyID8gImFkZCIgOiAic3VidHJhY3QiOwogICAgICAgfQogICAgICAgaWYg
KGlzTGluZSh0aGlzLmRvYywgbikpIGluZGVudExpbmUodGhpcywgbiwgZGlyLCBhZ2dyZXNzaXZl
KTsKICAgICB9KSwKLSAgICBpbmRlbnRTZWxlY3Rpb246IG9wZXJhdGlvbihudWxsLCBmdW5jdGlv
bihob3cpIHsKLSAgICAgIHZhciBzZWwgPSB0aGlzLmRvYy5zZWw7Ci0gICAgICBpZiAocG9zRXEo
c2VsLmZyb20sIHNlbC50bykpIHJldHVybiBpbmRlbnRMaW5lKHRoaXMsIHNlbC5mcm9tLmxpbmUs
IGhvdyk7Ci0gICAgICB2YXIgZSA9IHNlbC50by5saW5lIC0gKHNlbC50by5jaCA/IDAgOiAxKTsK
LSAgICAgIGZvciAodmFyIGkgPSBzZWwuZnJvbS5saW5lOyBpIDw9IGU7ICsraSkgaW5kZW50TGlu
ZSh0aGlzLCBpLCBob3cpOworICAgIGluZGVudFNlbGVjdGlvbjogbWV0aG9kT3AoZnVuY3Rpb24o
aG93KSB7CisgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5kb2Muc2VsLnJhbmdlcywgZW5kID0gLTE7
CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAg
ICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07CisgICAgICAgIGlmICghcmFuZ2UuZW1wdHkoKSkgewor
ICAgICAgICAgIHZhciBzdGFydCA9IE1hdGgubWF4KGVuZCwgcmFuZ2UuZnJvbSgpLmxpbmUpOwor
ICAgICAgICAgIHZhciB0byA9IHJhbmdlLnRvKCk7CisgICAgICAgICAgZW5kID0gTWF0aC5taW4o
dGhpcy5sYXN0TGluZSgpLCB0by5saW5lIC0gKHRvLmNoID8gMCA6IDEpKSArIDE7CisgICAgICAg
ICAgZm9yICh2YXIgaiA9IHN0YXJ0OyBqIDwgZW5kOyArK2opCisgICAgICAgICAgICBpbmRlbnRM
aW5lKHRoaXMsIGosIGhvdyk7CisgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaGVhZC5saW5lID4g
ZW5kKSB7CisgICAgICAgICAgaW5kZW50TGluZSh0aGlzLCByYW5nZS5oZWFkLmxpbmUsIGhvdywg
dHJ1ZSk7CisgICAgICAgICAgZW5kID0gcmFuZ2UuaGVhZC5saW5lOworICAgICAgICAgIGlmIChp
ID09IHRoaXMuZG9jLnNlbC5wcmltSW5kZXgpIGVuc3VyZUN1cnNvclZpc2libGUodGhpcyk7Cisg
ICAgICAgIH0KKyAgICAgIH0KICAgICB9KSwKIAogICAgIC8vIEZldGNoIHRoZSBwYXJzZXIgdG9r
ZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzCkBAIC0yOTM3LDEyICsz
ODg2LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIHN0
cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0obGluZS50ZXh0LCB0aGlzLm9wdGlvbnMudGFiU2l6ZSk7
CiAgICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IHBvcy5jaCAmJiAhc3RyZWFtLmVvbCgpKSB7CiAg
ICAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7Ci0gICAgICAgIHZhciBzdHlsZSA9IG1v
ZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CisgICAgICAgIHZhciBzdHlsZSA9IHJlYWRUb2tlbiht
b2RlLCBzdHJlYW0sIHN0YXRlKTsKICAgICAgIH0KICAgICAgIHJldHVybiB7c3RhcnQ6IHN0cmVh
bS5zdGFydCwKICAgICAgICAgICAgICAgZW5kOiBzdHJlYW0ucG9zLAogICAgICAgICAgICAgICBz
dHJpbmc6IHN0cmVhbS5jdXJyZW50KCksCi0gICAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGUg
fHwgbnVsbCwgLy8gRGVwcmVjYXRlZCwgdXNlICd0eXBlJyBpbnN0ZWFkCiAgICAgICAgICAgICAg
IHR5cGU6IHN0eWxlIHx8IG51bGwsCiAgICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZX07CiAgICAg
fSwKQEAgLTI5NjcsMTEgKzM5MTUsMzEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgfSwKIAogICAgIGdldEhlbHBlcjogZnVuY3Rpb24ocG9zLCB0eXBlKSB7Ci0gICAg
ICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybjsKKyAgICAgIHJldHVy
biB0aGlzLmdldEhlbHBlcnMocG9zLCB0eXBlKVswXTsKKyAgICB9LAorCisgICAgZ2V0SGVscGVy
czogZnVuY3Rpb24ocG9zLCB0eXBlKSB7CisgICAgICB2YXIgZm91bmQgPSBbXTsKKyAgICAgIGlm
ICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuIGhlbHBlcnM7CiAgICAgICB2
YXIgaGVscCA9IGhlbHBlcnNbdHlwZV0sIG1vZGUgPSB0aGlzLmdldE1vZGVBdChwb3MpOwotICAg
ICAgcmV0dXJuIG1vZGVbdHlwZV0gJiYgaGVscFttb2RlW3R5cGVdXSB8fAotICAgICAgICBtb2Rl
LmhlbHBlclR5cGUgJiYgaGVscFttb2RlLmhlbHBlclR5cGVdIHx8Ci0gICAgICAgIGhlbHBbbW9k
ZS5uYW1lXTsKKyAgICAgIGlmICh0eXBlb2YgbW9kZVt0eXBlXSA9PSAic3RyaW5nIikgeworICAg
ICAgICBpZiAoaGVscFttb2RlW3R5cGVdXSkgZm91bmQucHVzaChoZWxwW21vZGVbdHlwZV1dKTsK
KyAgICAgIH0gZWxzZSBpZiAobW9kZVt0eXBlXSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG1vZGVbdHlwZV0ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICB2YXIgdmFsID0gaGVscFtt
b2RlW3R5cGVdW2ldXTsKKyAgICAgICAgICBpZiAodmFsKSBmb3VuZC5wdXNoKHZhbCk7CisgICAg
ICAgIH0KKyAgICAgIH0gZWxzZSBpZiAobW9kZS5oZWxwZXJUeXBlICYmIGhlbHBbbW9kZS5oZWxw
ZXJUeXBlXSkgeworICAgICAgICBmb3VuZC5wdXNoKGhlbHBbbW9kZS5oZWxwZXJUeXBlXSk7Cisg
ICAgICB9IGVsc2UgaWYgKGhlbHBbbW9kZS5uYW1lXSkgeworICAgICAgICBmb3VuZC5wdXNoKGhl
bHBbbW9kZS5uYW1lXSk7CisgICAgICB9CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlbHAu
X2dsb2JhbC5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgY3VyID0gaGVscC5fZ2xvYmFsW2ld
OworICAgICAgICBpZiAoY3VyLnByZWQobW9kZSwgdGhpcykgJiYgaW5kZXhPZihmb3VuZCwgY3Vy
LnZhbCkgPT0gLTEpCisgICAgICAgICAgZm91bmQucHVzaChjdXIudmFsKTsKKyAgICAgIH0KKyAg
ICAgIHJldHVybiBmb3VuZDsKICAgICB9LAogCiAgICAgZ2V0U3RhdGVBZnRlcjogZnVuY3Rpb24o
bGluZSwgcHJlY2lzZSkgewpAQCAtMjk4MSwxMCArMzk0OSwxMCBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICB9LAogCiAgICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlvbihz
dGFydCwgbW9kZSkgewotICAgICAgdmFyIHBvcywgc2VsID0gdGhpcy5kb2Muc2VsOwotICAgICAg
aWYgKHN0YXJ0ID09IG51bGwpIHBvcyA9IHNlbC5oZWFkOworICAgICAgdmFyIHBvcywgcmFuZ2Ug
PSB0aGlzLmRvYy5zZWwucHJpbWFyeSgpOworICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHBvcyA9
IHJhbmdlLmhlYWQ7CiAgICAgICBlbHNlIGlmICh0eXBlb2Ygc3RhcnQgPT0gIm9iamVjdCIpIHBv
cyA9IGNsaXBQb3ModGhpcy5kb2MsIHN0YXJ0KTsKLSAgICAgIGVsc2UgcG9zID0gc3RhcnQgPyBz
ZWwuZnJvbSA6IHNlbC50bzsKKyAgICAgIGVsc2UgcG9zID0gc3RhcnQgPyByYW5nZS5mcm9tKCkg
OiByYW5nZS50bygpOwogICAgICAgcmV0dXJuIGN1cnNvckNvb3Jkcyh0aGlzLCBwb3MsIG1vZGUg
fHwgInBhZ2UiKTsKICAgICB9LAogCkBAIC0zMDA2LDE1ICszOTc0LDE1IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKGxpbmUgPCB0aGlzLmRvYy5maXJzdCkg
bGluZSA9IHRoaXMuZG9jLmZpcnN0OwogICAgICAgZWxzZSBpZiAobGluZSA+IGxhc3QpIHsgbGlu
ZSA9IGxhc3Q7IGVuZCA9IHRydWU7IH0KICAgICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZSh0aGlz
LmRvYywgbGluZSk7Ci0gICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMsIGdldExpbmUo
dGhpcy5kb2MsIGxpbmUpLCB7dG9wOiAwLCBsZWZ0OiAwfSwgbW9kZSB8fCAicGFnZSIpLnRvcCAr
Ci0gICAgICAgIChlbmQgPyBsaW5lT2JqLmhlaWdodCA6IDApOworICAgICAgcmV0dXJuIGludG9D
b29yZFN5c3RlbSh0aGlzLCBsaW5lT2JqLCB7dG9wOiAwLCBsZWZ0OiAwfSwgbW9kZSB8fCAicGFn
ZSIpLnRvcCArCisgICAgICAgIChlbmQgPyB0aGlzLmRvYy5oZWlnaHQgLSBoZWlnaHRBdExpbmUo
bGluZU9iaikgOiAwKTsKICAgICB9LAogCiAgICAgZGVmYXVsdFRleHRIZWlnaHQ6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gdGV4dEhlaWdodCh0aGlzLmRpc3BsYXkpOyB9LAogICAgIGRlZmF1bHRDaGFy
V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhcldpZHRoKHRoaXMuZGlzcGxheSk7IH0sCiAK
LSAgICBzZXRHdXR0ZXJNYXJrZXI6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihsaW5lLCBndXR0
ZXJJRCwgdmFsdWUpIHsKLSAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGxpbmUsIGZ1bmN0
aW9uKGxpbmUpIHsKKyAgICBzZXRHdXR0ZXJNYXJrZXI6IG1ldGhvZE9wKGZ1bmN0aW9uKGxpbmUs
IGd1dHRlcklELCB2YWx1ZSkgeworICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgbGluZSwg
Imd1dHRlciIsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgdmFyIG1hcmtlcnMgPSBsaW5lLmd1
dHRlck1hcmtlcnMgfHwgKGxpbmUuZ3V0dGVyTWFya2VycyA9IHt9KTsKICAgICAgICAgbWFya2Vy
c1tndXR0ZXJJRF0gPSB2YWx1ZTsKICAgICAgICAgaWYgKCF2YWx1ZSAmJiBpc0VtcHR5KG1hcmtl
cnMpKSBsaW5lLmd1dHRlck1hcmtlcnMgPSBudWxsOwpAQCAtMzAyMiwyMCArMzk5MCwyMCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIH0pOwogICAgIH0pLAogCi0g
ICAgY2xlYXJHdXR0ZXI6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihndXR0ZXJJRCkgeworICAg
IGNsZWFyR3V0dGVyOiBtZXRob2RPcChmdW5jdGlvbihndXR0ZXJJRCkgewogICAgICAgdmFyIGNt
ID0gdGhpcywgZG9jID0gY20uZG9jLCBpID0gZG9jLmZpcnN0OwogICAgICAgZG9jLml0ZXIoZnVu
Y3Rpb24obGluZSkgewogICAgICAgICBpZiAobGluZS5ndXR0ZXJNYXJrZXJzICYmIGxpbmUuZ3V0
dGVyTWFya2Vyc1tndXR0ZXJJRF0pIHsKICAgICAgICAgICBsaW5lLmd1dHRlck1hcmtlcnNbZ3V0
dGVySURdID0gbnVsbDsKLSAgICAgICAgICByZWdDaGFuZ2UoY20sIGksIGkgKyAxKTsKKyAgICAg
ICAgICByZWdMaW5lQ2hhbmdlKGNtLCBpLCAiZ3V0dGVyIik7CiAgICAgICAgICAgaWYgKGlzRW1w
dHkobGluZS5ndXR0ZXJNYXJrZXJzKSkgbGluZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsKICAgICAg
ICAgfQogICAgICAgICArK2k7CiAgICAgICB9KTsKICAgICB9KSwKIAotICAgIGFkZExpbmVDbGFz
czogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykgewotICAgICAg
cmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCBmdW5jdGlvbihsaW5lKSB7CisgICAgYWRk
TGluZUNsYXNzOiBtZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIHdoZXJlLCBjbHMpIHsKKyAgICAg
IHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgImNsYXNzIiwgZnVuY3Rpb24obGluZSkg
ewogICAgICAgICB2YXIgcHJvcCA9IHdoZXJlID09ICJ0ZXh0IiA/ICJ0ZXh0Q2xhc3MiIDogd2hl
cmUgPT0gImJhY2tncm91bmQiID8gImJnQ2xhc3MiIDogIndyYXBDbGFzcyI7CiAgICAgICAgIGlm
ICghbGluZVtwcm9wXSkgbGluZVtwcm9wXSA9IGNsczsKICAgICAgICAgZWxzZSBpZiAobmV3IFJl
Z0V4cCgiKD86XnxcXHMpIiArIGNscyArICIoPzokfFxccykiKS50ZXN0KGxpbmVbcHJvcF0pKSBy
ZXR1cm4gZmFsc2U7CkBAIC0zMDQ0LDggKzQwMTIsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIH0pOwogICAgIH0pLAogCi0gICAgcmVtb3ZlTGluZUNsYXNzOiBv
cGVyYXRpb24obnVsbCwgZnVuY3Rpb24oaGFuZGxlLCB3aGVyZSwgY2xzKSB7Ci0gICAgICByZXR1
cm4gY2hhbmdlTGluZSh0aGlzLCBoYW5kbGUsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICByZW1vdmVM
aW5lQ2xhc3M6IG1ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykgeworICAgICAg
cmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCAiY2xhc3MiLCBmdW5jdGlvbihsaW5lKSB7
CiAgICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gInRleHQiID8gInRleHRDbGFzcyIgOiB3aGVy
ZSA9PSAiYmFja2dyb3VuZCIgPyAiYmdDbGFzcyIgOiAid3JhcENsYXNzIjsKICAgICAgICAgdmFy
IGN1ciA9IGxpbmVbcHJvcF07CiAgICAgICAgIGlmICghY3VyKSByZXR1cm4gZmFsc2U7CkBAIC0z
MDYwLDcgKzQwMjgsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IH0pOwogICAgIH0pLAogCi0gICAgYWRkTGluZVdpZGdldDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0
aW9uKGhhbmRsZSwgbm9kZSwgb3B0aW9ucykgeworICAgIGFkZExpbmVXaWRnZXQ6IG1ldGhvZE9w
KGZ1bmN0aW9uKGhhbmRsZSwgbm9kZSwgb3B0aW9ucykgewogICAgICAgcmV0dXJuIGFkZExpbmVX
aWRnZXQodGhpcywgaGFuZGxlLCBub2RlLCBvcHRpb25zKTsKICAgICB9KSwKIApAQCAtMzA4MSw3
ICs0MDQ5LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgIHdpZGdldHM6IGxpbmUud2lkZ2V0c307CiAgICAgfSwKIAotICAgIGdldFZpZXdwb3J0OiBm
dW5jdGlvbigpIHsgcmV0dXJuIHtmcm9tOiB0aGlzLmRpc3BsYXkuc2hvd2luZ0Zyb20sIHRvOiB0
aGlzLmRpc3BsYXkuc2hvd2luZ1RvfTt9LAorICAgIGdldFZpZXdwb3J0OiBmdW5jdGlvbigpIHsg
cmV0dXJuIHtmcm9tOiB0aGlzLmRpc3BsYXkudmlld0Zyb20sIHRvOiB0aGlzLmRpc3BsYXkudmll
d1RvfTt9LAogCiAgICAgYWRkV2lkZ2V0OiBmdW5jdGlvbihwb3MsIG5vZGUsIHNjcm9sbCwgdmVy
dCwgaG9yaXopIHsKICAgICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5OwpAQCAtMzExNiw5
ICs0MDg0LDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBz
Y3JvbGxJbnRvVmlldyh0aGlzLCBsZWZ0LCB0b3AsIGxlZnQgKyBub2RlLm9mZnNldFdpZHRoLCB0
b3AgKyBub2RlLm9mZnNldEhlaWdodCk7CiAgICAgfSwKIAotICAgIHRyaWdnZXJPbktleURvd246
IG9wZXJhdGlvbihudWxsLCBvbktleURvd24pLAorICAgIHRyaWdnZXJPbktleURvd246IG1ldGhv
ZE9wKG9uS2V5RG93biksCisgICAgdHJpZ2dlck9uS2V5UHJlc3M6IG1ldGhvZE9wKG9uS2V5UHJl
c3MpLAorICAgIHRyaWdnZXJPbktleVVwOiBtZXRob2RPcChvbktleVVwKSwKIAotICAgIGV4ZWND
b21tYW5kOiBmdW5jdGlvbihjbWQpIHtyZXR1cm4gY29tbWFuZHNbY21kXSh0aGlzKTt9LAorICAg
IGV4ZWNDb21tYW5kOiBmdW5jdGlvbihjbWQpIHsKKyAgICAgIGlmIChjb21tYW5kcy5oYXNPd25Q
cm9wZXJ0eShjbWQpKQorICAgICAgICByZXR1cm4gY29tbWFuZHNbY21kXSh0aGlzKTsKKyAgICB9
LAogCiAgICAgZmluZFBvc0g6IGZ1bmN0aW9uKGZyb20sIGFtb3VudCwgdW5pdCwgdmlzdWFsbHkp
IHsKICAgICAgIHZhciBkaXIgPSAxOwpAQCAtMzEzMCwyMCArNDEwMywyNSBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiBjdXI7CiAgICAgfSwKIAotICAg
IG1vdmVIOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oZGlyLCB1bml0KSB7Ci0gICAgICB2YXIg
c2VsID0gdGhpcy5kb2Muc2VsLCBwb3M7Ci0gICAgICBpZiAoc2VsLnNoaWZ0IHx8IHNlbC5leHRl
bmQgfHwgcG9zRXEoc2VsLmZyb20sIHNlbC50bykpCi0gICAgICAgIHBvcyA9IGZpbmRQb3NIKHRo
aXMuZG9jLCBzZWwuaGVhZCwgZGlyLCB1bml0LCB0aGlzLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5
KTsKLSAgICAgIGVsc2UKLSAgICAgICAgcG9zID0gZGlyIDwgMCA/IHNlbC5mcm9tIDogc2VsLnRv
OwotICAgICAgZXh0ZW5kU2VsZWN0aW9uKHRoaXMuZG9jLCBwb3MsIHBvcywgZGlyKTsKKyAgICBt
b3ZlSDogbWV0aG9kT3AoZnVuY3Rpb24oZGlyLCB1bml0KSB7CisgICAgICB2YXIgY20gPSB0aGlz
OworICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAg
IGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGNtLmRvYy5leHRlbmQgfHwgcmFuZ2UuZW1wdHkoKSkK
KyAgICAgICAgICByZXR1cm4gZmluZFBvc0goY20uZG9jLCByYW5nZS5oZWFkLCBkaXIsIHVuaXQs
IGNtLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJl
dHVybiBkaXIgPCAwID8gcmFuZ2UuZnJvbSgpIDogcmFuZ2UudG8oKTsKKyAgICAgIH0sIHNlbF9t
b3ZlKTsKICAgICB9KSwKIAotICAgIGRlbGV0ZUg6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihk
aXIsIHVuaXQpIHsKLSAgICAgIHZhciBzZWwgPSB0aGlzLmRvYy5zZWw7Ci0gICAgICBpZiAoIXBv
c0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXBsYWNlUmFuZ2UodGhpcy5kb2MsICIiLCBzZWwuZnJv
bSwgc2VsLnRvLCAiK2RlbGV0ZSIpOwotICAgICAgZWxzZSByZXBsYWNlUmFuZ2UodGhpcy5kb2Ms
ICIiLCBzZWwuZnJvbSwgZmluZFBvc0godGhpcy5kb2MsIHNlbC5oZWFkLCBkaXIsIHVuaXQsIGZh
bHNlKSwgIitkZWxldGUiKTsKLSAgICAgIHRoaXMuY3VyT3AudXNlclNlbENoYW5nZSA9IHRydWU7
CisgICAgZGVsZXRlSDogbWV0aG9kT3AoZnVuY3Rpb24oZGlyLCB1bml0KSB7CisgICAgICB2YXIg
c2VsID0gdGhpcy5kb2Muc2VsLCBkb2MgPSB0aGlzLmRvYzsKKyAgICAgIGlmIChzZWwuc29tZXRo
aW5nU2VsZWN0ZWQoKSkKKyAgICAgICAgZG9jLnJlcGxhY2VTZWxlY3Rpb24oIiIsIG51bGwsICIr
ZGVsZXRlIik7CisgICAgICBlbHNlCisgICAgICAgIGRlbGV0ZU5lYXJTZWxlY3Rpb24odGhpcywg
ZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgICB2YXIgb3RoZXIgPSBmaW5kUG9zSChkb2MsIHJh
bmdlLmhlYWQsIGRpciwgdW5pdCwgZmFsc2UpOworICAgICAgICAgIHJldHVybiBkaXIgPCAwID8g
e2Zyb206IG90aGVyLCB0bzogcmFuZ2UuaGVhZH0gOiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IG90
aGVyfTsKKyAgICAgICAgfSk7CiAgICAgfSksCiAKICAgICBmaW5kUG9zVjogZnVuY3Rpb24oZnJv
bSwgYW1vdW50LCB1bml0LCBnb2FsQ29sdW1uKSB7CkBAIC0zMTU5LDI4ICs0MTM3LDM5IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIGN1cjsKICAgICB9
LAogCi0gICAgbW92ZVY6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihkaXIsIHVuaXQpIHsKLSAg
ICAgIHZhciBzZWwgPSB0aGlzLmRvYy5zZWw7Ci0gICAgICB2YXIgcG9zID0gY3Vyc29yQ29vcmRz
KHRoaXMsIHNlbC5oZWFkLCAiZGl2Iik7Ci0gICAgICBpZiAoc2VsLmdvYWxDb2x1bW4gIT0gbnVs
bCkgcG9zLmxlZnQgPSBzZWwuZ29hbENvbHVtbjsKLSAgICAgIHZhciB0YXJnZXQgPSBmaW5kUG9z
Vih0aGlzLCBwb3MsIGRpciwgdW5pdCk7Ci0KLSAgICAgIGlmICh1bml0ID09ICJwYWdlIikgYWRk
VG9TY3JvbGxQb3ModGhpcywgMCwgY2hhckNvb3Jkcyh0aGlzLCB0YXJnZXQsICJkaXYiKS50b3Ag
LSBwb3MudG9wKTsKLSAgICAgIGV4dGVuZFNlbGVjdGlvbih0aGlzLmRvYywgdGFyZ2V0LCB0YXJn
ZXQsIGRpcik7Ci0gICAgICBzZWwuZ29hbENvbHVtbiA9IHBvcy5sZWZ0OworICAgIG1vdmVWOiBt
ZXRob2RPcChmdW5jdGlvbihkaXIsIHVuaXQpIHsKKyAgICAgIHZhciBjbSA9IHRoaXMsIGRvYyA9
IHRoaXMuZG9jLCBnb2FscyA9IFtdOworICAgICAgdmFyIGNvbGxhcHNlID0gIWNtLmRpc3BsYXku
c2hpZnQgJiYgIWRvYy5leHRlbmQgJiYgZG9jLnNlbC5zb21ldGhpbmdTZWxlY3RlZCgpOworICAg
ICAgZG9jLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgeworICAgICAgICBpZiAo
Y29sbGFwc2UpCisgICAgICAgICAgcmV0dXJuIGRpciA8IDAgPyByYW5nZS5mcm9tKCkgOiByYW5n
ZS50bygpOworICAgICAgICB2YXIgaGVhZFBvcyA9IGN1cnNvckNvb3JkcyhjbSwgcmFuZ2UuaGVh
ZCwgImRpdiIpOworICAgICAgICBpZiAocmFuZ2UuZ29hbENvbHVtbiAhPSBudWxsKSBoZWFkUG9z
LmxlZnQgPSByYW5nZS5nb2FsQ29sdW1uOworICAgICAgICBnb2Fscy5wdXNoKGhlYWRQb3MubGVm
dCk7CisgICAgICAgIHZhciBwb3MgPSBmaW5kUG9zVihjbSwgaGVhZFBvcywgZGlyLCB1bml0KTsK
KyAgICAgICAgaWYgKHVuaXQgPT0gInBhZ2UiICYmIHJhbmdlID09IGRvYy5zZWwucHJpbWFyeSgp
KQorICAgICAgICAgIGFkZFRvU2Nyb2xsUG9zKGNtLCBudWxsLCBjaGFyQ29vcmRzKGNtLCBwb3Ms
ICJkaXYiKS50b3AgLSBoZWFkUG9zLnRvcCk7CisgICAgICAgIHJldHVybiBwb3M7CisgICAgICB9
LCBzZWxfbW92ZSk7CisgICAgICBpZiAoZ29hbHMubGVuZ3RoKSBmb3IgKHZhciBpID0gMDsgaSA8
IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKQorICAgICAgICBkb2Muc2VsLnJhbmdlc1tpXS5n
b2FsQ29sdW1uID0gZ29hbHNbaV07CiAgICAgfSksCiAKICAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1
bmN0aW9uKHZhbHVlKSB7CiAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA9PSB0aGlz
LnN0YXRlLm92ZXJ3cml0ZSkgcmV0dXJuOwogICAgICAgaWYgKHRoaXMuc3RhdGUub3ZlcndyaXRl
ID0gIXRoaXMuc3RhdGUub3ZlcndyaXRlKQotICAgICAgICB0aGlzLmRpc3BsYXkuY3Vyc29yLmNs
YXNzTmFtZSArPSAiIENvZGVNaXJyb3Itb3ZlcndyaXRlIjsKKyAgICAgICAgYWRkQ2xhc3ModGhp
cy5kaXNwbGF5LmN1cnNvckRpdiwgIkNvZGVNaXJyb3Itb3ZlcndyaXRlIik7CiAgICAgICBlbHNl
Ci0gICAgICAgIHRoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lID0gdGhpcy5kaXNwbGF5LmN1
cnNvci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itb3ZlcndyaXRlIiwgIiIpOworICAg
ICAgICBybUNsYXNzKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsICJDb2RlTWlycm9yLW92ZXJ3cml0
ZSIpOworCisgICAgICBzaWduYWwodGhpcywgIm92ZXJ3cml0ZVRvZ2dsZSIsIHRoaXMsIHRoaXMu
c3RhdGUub3ZlcndyaXRlKTsKICAgICB9LAotICAgIGhhc0ZvY3VzOiBmdW5jdGlvbigpIHsgcmV0
dXJuIHRoaXMuc3RhdGUuZm9jdXNlZDsgfSwKKyAgICBoYXNGb2N1czogZnVuY3Rpb24oKSB7IHJl
dHVybiBhY3RpdmVFbHQoKSA9PSB0aGlzLmRpc3BsYXkuaW5wdXQ7IH0sCiAKLSAgICBzY3JvbGxU
bzogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHgsIHkpIHsKLSAgICAgIHVwZGF0ZVNjcm9sbFBv
cyh0aGlzLCB4LCB5KTsKKyAgICBzY3JvbGxUbzogbWV0aG9kT3AoZnVuY3Rpb24oeCwgeSkgewor
ICAgICAgaWYgKHggIT0gbnVsbCB8fCB5ICE9IG51bGwpIHJlc29sdmVTY3JvbGxUb1Bvcyh0aGlz
KTsKKyAgICAgIGlmICh4ICE9IG51bGwpIHRoaXMuY3VyT3Auc2Nyb2xsTGVmdCA9IHg7CisgICAg
ICBpZiAoeSAhPSBudWxsKSB0aGlzLmN1ck9wLnNjcm9sbFRvcCA9IHk7CiAgICAgfSksCiAgICAg
Z2V0U2Nyb2xsSW5mbzogZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgc2Nyb2xsZXIgPSB0aGlzLmRp
c3BsYXkuc2Nyb2xsZXIsIGNvID0gc2Nyb2xsZXJDdXRPZmY7CkBAIC0zMTg5LDU0ICs0MTc4LDYy
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICBjbGll
bnRIZWlnaHQ6IHNjcm9sbGVyLmNsaWVudEhlaWdodCAtIGNvLCBjbGllbnRXaWR0aDogc2Nyb2xs
ZXIuY2xpZW50V2lkdGggLSBjb307CiAgICAgfSwKIAotICAgIHNjcm9sbEludG9WaWV3OiBvcGVy
YXRpb24obnVsbCwgZnVuY3Rpb24ocmFuZ2UsIG1hcmdpbikgewotICAgICAgaWYgKHJhbmdlID09
IG51bGwpIHJhbmdlID0ge2Zyb206IHRoaXMuZG9jLnNlbC5oZWFkLCB0bzogbnVsbH07Ci0gICAg
ICBlbHNlIGlmICh0eXBlb2YgcmFuZ2UgPT0gIm51bWJlciIpIHJhbmdlID0ge2Zyb206IFBvcyhy
YW5nZSwgMCksIHRvOiBudWxsfTsKLSAgICAgIGVsc2UgaWYgKHJhbmdlLmZyb20gPT0gbnVsbCkg
cmFuZ2UgPSB7ZnJvbTogcmFuZ2UsIHRvOiBudWxsfTsKKyAgICBzY3JvbGxJbnRvVmlldzogbWV0
aG9kT3AoZnVuY3Rpb24ocmFuZ2UsIG1hcmdpbikgeworICAgICAgaWYgKHJhbmdlID09IG51bGwp
IHsKKyAgICAgICAgcmFuZ2UgPSB7ZnJvbTogdGhpcy5kb2Muc2VsLnByaW1hcnkoKS5oZWFkLCB0
bzogbnVsbH07CisgICAgICAgIGlmIChtYXJnaW4gPT0gbnVsbCkgbWFyZ2luID0gdGhpcy5vcHRp
b25zLmN1cnNvclNjcm9sbE1hcmdpbjsKKyAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJhbmdlID09
ICJudW1iZXIiKSB7CisgICAgICAgIHJhbmdlID0ge2Zyb206IFBvcyhyYW5nZSwgMCksIHRvOiBu
dWxsfTsKKyAgICAgIH0gZWxzZSBpZiAocmFuZ2UuZnJvbSA9PSBudWxsKSB7CisgICAgICAgIHJh
bmdlID0ge2Zyb206IHJhbmdlLCB0bzogbnVsbH07CisgICAgICB9CiAgICAgICBpZiAoIXJhbmdl
LnRvKSByYW5nZS50byA9IHJhbmdlLmZyb207Ci0gICAgICBpZiAoIW1hcmdpbikgbWFyZ2luID0g
MDsKKyAgICAgIHJhbmdlLm1hcmdpbiA9IG1hcmdpbiB8fCAwOwogCi0gICAgICB2YXIgY29vcmRz
ID0gcmFuZ2U7CiAgICAgICBpZiAocmFuZ2UuZnJvbS5saW5lICE9IG51bGwpIHsKLSAgICAgICAg
dGhpcy5jdXJPcC5zY3JvbGxUb1BvcyA9IHtmcm9tOiByYW5nZS5mcm9tLCB0bzogcmFuZ2UudG8s
IG1hcmdpbjogbWFyZ2lufTsKLSAgICAgICAgY29vcmRzID0ge2Zyb206IGN1cnNvckNvb3Jkcyh0
aGlzLCByYW5nZS5mcm9tKSwKLSAgICAgICAgICAgICAgICAgIHRvOiBjdXJzb3JDb29yZHModGhp
cywgcmFuZ2UudG8pfTsKLSAgICAgIH0KLSAgICAgIHZhciBzUG9zID0gY2FsY3VsYXRlU2Nyb2xs
UG9zKHRoaXMsIE1hdGgubWluKGNvb3Jkcy5mcm9tLmxlZnQsIGNvb3Jkcy50by5sZWZ0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKGNvb3Jkcy5mcm9tLnRv
cCwgY29vcmRzLnRvLnRvcCkgLSBtYXJnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNYXRoLm1heChjb29yZHMuZnJvbS5yaWdodCwgY29vcmRzLnRvLnJpZ2h0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGNvb3Jkcy5mcm9tLmJv
dHRvbSwgY29vcmRzLnRvLmJvdHRvbSkgKyBtYXJnaW4pOwotICAgICAgdXBkYXRlU2Nyb2xsUG9z
KHRoaXMsIHNQb3Muc2Nyb2xsTGVmdCwgc1Bvcy5zY3JvbGxUb3ApOworICAgICAgICByZXNvbHZl
U2Nyb2xsVG9Qb3ModGhpcyk7CisgICAgICAgIHRoaXMuY3VyT3Auc2Nyb2xsVG9Qb3MgPSByYW5n
ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBzUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9z
KHRoaXMsIE1hdGgubWluKHJhbmdlLmZyb20ubGVmdCwgcmFuZ2UudG8ubGVmdCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKHJhbmdlLmZyb20udG9wLCBy
YW5nZS50by50b3ApIC0gcmFuZ2UubWFyZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNYXRoLm1heChyYW5nZS5mcm9tLnJpZ2h0LCByYW5nZS50by5yaWdodCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHJhbmdlLmZyb20u
Ym90dG9tLCByYW5nZS50by5ib3R0b20pICsgcmFuZ2UubWFyZ2luKTsKKyAgICAgICAgdGhpcy5z
Y3JvbGxUbyhzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTsKKyAgICAgIH0KICAgICB9
KSwKIAotICAgIHNldFNpemU6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0
KSB7CisgICAgc2V0U2l6ZTogbWV0aG9kT3AoZnVuY3Rpb24od2lkdGgsIGhlaWdodCkgewogICAg
ICAgZnVuY3Rpb24gaW50ZXJwcmV0KHZhbCkgewogICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9
PSAibnVtYmVyIiB8fCAvXlxkKyQvLnRlc3QoU3RyaW5nKHZhbCkpID8gdmFsICsgInB4IiA6IHZh
bDsKICAgICAgIH0KICAgICAgIGlmICh3aWR0aCAhPSBudWxsKSB0aGlzLmRpc3BsYXkud3JhcHBl
ci5zdHlsZS53aWR0aCA9IGludGVycHJldCh3aWR0aCk7CiAgICAgICBpZiAoaGVpZ2h0ICE9IG51
bGwpIHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLmhlaWdodCA9IGludGVycHJldChoZWlnaHQp
OwotICAgICAgaWYgKHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcpCi0gICAgICAgIHRoaXMuZGlz
cGxheS5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aCA9IHRoaXMuZGlzcGxheS5tZWFzdXJlTGluZUNh
Y2hlUG9zID0gMDsKKyAgICAgIGlmICh0aGlzLm9wdGlvbnMubGluZVdyYXBwaW5nKSBjbGVhckxp
bmVNZWFzdXJlbWVudENhY2hlKHRoaXMpOwogICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9
IHRydWU7CisgICAgICBzaWduYWwodGhpcywgInJlZnJlc2giLCB0aGlzKTsKICAgICB9KSwKIAog
ICAgIG9wZXJhdGlvbjogZnVuY3Rpb24oZil7cmV0dXJuIHJ1bkluT3AodGhpcywgZik7fSwKIAot
ICAgIHJlZnJlc2g6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBiYWRI
ZWlnaHQgPSB0aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9PSBudWxsOwotICAgICAgY2xl
YXJDYWNoZXModGhpcyk7Ci0gICAgICB1cGRhdGVTY3JvbGxQb3ModGhpcywgdGhpcy5kb2Muc2Ny
b2xsTGVmdCwgdGhpcy5kb2Muc2Nyb2xsVG9wKTsKKyAgICByZWZyZXNoOiBtZXRob2RPcChmdW5j
dGlvbigpIHsKKyAgICAgIHZhciBvbGRIZWlnaHQgPSB0aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhl
aWdodDsKICAgICAgIHJlZ0NoYW5nZSh0aGlzKTsKLSAgICAgIGlmIChiYWRIZWlnaHQpIGVzdGlt
YXRlTGluZUhlaWdodHModGhpcyk7CisgICAgICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1
ZTsKKyAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpOworICAgICAgdGhpcy5zY3JvbGxUbyh0aGlzLmRv
Yy5zY3JvbGxMZWZ0LCB0aGlzLmRvYy5zY3JvbGxUb3ApOworICAgICAgdXBkYXRlR3V0dGVyU3Bh
Y2UodGhpcyk7CisgICAgICBpZiAob2xkSGVpZ2h0ID09IG51bGwgfHwgTWF0aC5hYnMob2xkSGVp
Z2h0IC0gdGV4dEhlaWdodCh0aGlzLmRpc3BsYXkpKSA+IC41KQorICAgICAgICBlc3RpbWF0ZUxp
bmVIZWlnaHRzKHRoaXMpOworICAgICAgc2lnbmFsKHRoaXMsICJyZWZyZXNoIiwgdGhpcyk7CiAg
ICAgfSksCiAKLSAgICBzd2FwRG9jOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oZG9jKSB7Cisg
ICAgc3dhcERvYzogbWV0aG9kT3AoZnVuY3Rpb24oZG9jKSB7CiAgICAgICB2YXIgb2xkID0gdGhp
cy5kb2M7CiAgICAgICBvbGQuY20gPSBudWxsOwogICAgICAgYXR0YWNoRG9jKHRoaXMsIGRvYyk7
CiAgICAgICBjbGVhckNhY2hlcyh0aGlzKTsKLSAgICAgIHJlc2V0SW5wdXQodGhpcywgdHJ1ZSk7
Ci0gICAgICB1cGRhdGVTY3JvbGxQb3ModGhpcywgZG9jLnNjcm9sbExlZnQsIGRvYy5zY3JvbGxU
b3ApOworICAgICAgcmVzZXRJbnB1dCh0aGlzKTsKKyAgICAgIHRoaXMuc2Nyb2xsVG8oZG9jLnNj
cm9sbExlZnQsIGRvYy5zY3JvbGxUb3ApOwogICAgICAgc2lnbmFsTGF0ZXIodGhpcywgInN3YXBE
b2MiLCB0aGlzLCBvbGQpOwogICAgICAgcmV0dXJuIG9sZDsKICAgICB9KSwKQEAgLTMyNTAsMTAg
KzQyNDcsMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gT1BU
SU9OIERFRkFVTFRTCiAKLSAgdmFyIG9wdGlvbkhhbmRsZXJzID0gQ29kZU1pcnJvci5vcHRpb25I
YW5kbGVycyA9IHt9OwotCiAgIC8vIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4K
ICAgdmFyIGRlZmF1bHRzID0gQ29kZU1pcnJvci5kZWZhdWx0cyA9IHt9OworICAvLyBGdW5jdGlv
bnMgdG8gcnVuIHdoZW4gb3B0aW9ucyBhcmUgY2hhbmdlZC4KKyAgdmFyIG9wdGlvbkhhbmRsZXJz
ID0gQ29kZU1pcnJvci5vcHRpb25IYW5kbGVycyA9IHt9OwogCiAgIGZ1bmN0aW9uIG9wdGlvbihu
YW1lLCBkZWZsdCwgaGFuZGxlLCBub3RPbkluaXQpIHsKICAgICBDb2RlTWlycm9yLmRlZmF1bHRz
W25hbWVdID0gZGVmbHQ7CkBAIC0zMjYxLDYgKzQyNTgsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIG5vdE9uSW5pdCA/IGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkg
e2lmIChvbGQgIT0gSW5pdCkgaGFuZGxlKGNtLCB2YWwsIG9sZCk7fSA6IGhhbmRsZTsKICAgfQog
CisgIC8vIFBhc3NlZCB0byBvcHRpb24gaGFuZGxlcnMgd2hlbiB0aGVyZSBpcyBubyBvbGQgdmFs
dWUuCiAgIHZhciBJbml0ID0gQ29kZU1pcnJvci5Jbml0ID0ge3RvU3RyaW5nOiBmdW5jdGlvbigp
e3JldHVybiAiQ29kZU1pcnJvci5Jbml0Ijt9fTsKIAogICAvLyBUaGVzZSB0d28gYXJlLCBvbiBp
bml0LCBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IgYmVjYXVzZSB0aGV5CkBAIC0zMjc3LDcg
KzQyNzUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgb3B0aW9uKCJp
bmRlbnRXaXRoVGFicyIsIGZhbHNlKTsKICAgb3B0aW9uKCJzbWFydEluZGVudCIsIHRydWUpOwog
ICBvcHRpb24oInRhYlNpemUiLCA0LCBmdW5jdGlvbihjbSkgewotICAgIGxvYWRNb2RlKGNtKTsK
KyAgICByZXNldE1vZGVTdGF0ZShjbSk7CiAgICAgY2xlYXJDYWNoZXMoY20pOwogICAgIHJlZ0No
YW5nZShjbSk7CiAgIH0sIHRydWUpOwpAQCAtMzI5Nyw5ICs0Mjk1LDYgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIG9wdGlvbigia2V5TWFwIiwgImRlZmF1bHQiLCBrZXlN
YXBDaGFuZ2VkKTsKICAgb3B0aW9uKCJleHRyYUtleXMiLCBudWxsKTsKIAotICBvcHRpb24oIm9u
S2V5RXZlbnQiLCBudWxsKTsKLSAgb3B0aW9uKCJvbkRyYWdFdmVudCIsIG51bGwpOwotCiAgIG9w
dGlvbigibGluZVdyYXBwaW5nIiwgZmFsc2UsIHdyYXBwaW5nQ2hhbmdlZCwgdHJ1ZSk7CiAgIG9w
dGlvbigiZ3V0dGVycyIsIFtdLCBmdW5jdGlvbihjbSkgewogICAgIHNldEd1dHRlcnNGb3JMaW5l
TnVtYmVycyhjbS5vcHRpb25zKTsKQEAgLTMzMjcsOSArNDMyMiwxMCBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGNtLmRpc3BsYXkuZGlzYWJsZWQgPSB0cnVlOwog
ICAgIH0gZWxzZSB7CiAgICAgICBjbS5kaXNwbGF5LmRpc2FibGVkID0gZmFsc2U7Ci0gICAgICBp
ZiAoIXZhbCkgcmVzZXRJbnB1dChjbSwgdHJ1ZSk7CisgICAgICBpZiAoIXZhbCkgcmVzZXRJbnB1
dChjbSk7CiAgICAgfQogICB9KTsKKyAgb3B0aW9uKCJkaXNhYmxlSW5wdXQiLCBmYWxzZSwgZnVu
Y3Rpb24oY20sIHZhbCkge2lmICghdmFsKSByZXNldElucHV0KGNtKTt9LCB0cnVlKTsKICAgb3B0
aW9uKCJkcmFnRHJvcCIsIHRydWUpOwogCiAgIG9wdGlvbigiY3Vyc29yQmxpbmtSYXRlIiwgNTMw
KTsKQEAgLTMzMzcsMTMgKzQzMzMsMTMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgIG9wdGlvbigiY3Vyc29ySGVpZ2h0IiwgMSk7CiAgIG9wdGlvbigid29ya1RpbWUiLCAx
MDApOwogICBvcHRpb24oIndvcmtEZWxheSIsIDEwMCk7Ci0gIG9wdGlvbigiZmxhdHRlblNwYW5z
IiwgdHJ1ZSk7CisgIG9wdGlvbigiZmxhdHRlblNwYW5zIiwgdHJ1ZSwgcmVzZXRNb2RlU3RhdGUs
IHRydWUpOworICBvcHRpb24oImFkZE1vZGVDbGFzcyIsIGZhbHNlLCByZXNldE1vZGVTdGF0ZSwg
dHJ1ZSk7CiAgIG9wdGlvbigicG9sbEludGVydmFsIiwgMTAwKTsKLSAgb3B0aW9uKCJ1bmRvRGVw
dGgiLCA0MCwgZnVuY3Rpb24oY20sIHZhbCl7Y20uZG9jLmhpc3RvcnkudW5kb0RlcHRoID0gdmFs
O30pOwotICBvcHRpb24oImhpc3RvcnlFdmVudERlbGF5IiwgNTAwKTsKKyAgb3B0aW9uKCJ1bmRv
RGVwdGgiLCAyMDAsIGZ1bmN0aW9uKGNtLCB2YWwpe2NtLmRvYy5oaXN0b3J5LnVuZG9EZXB0aCA9
IHZhbDt9KTsKKyAgb3B0aW9uKCJoaXN0b3J5RXZlbnREZWxheSIsIDEyNTApOwogICBvcHRpb24o
InZpZXdwb3J0TWFyZ2luIiwgMTAsIGZ1bmN0aW9uKGNtKXtjbS5yZWZyZXNoKCk7fSwgdHJ1ZSk7
Ci0gIG9wdGlvbigibWF4SGlnaGxpZ2h0TGVuZ3RoIiwgMTAwMDAsIGZ1bmN0aW9uKGNtKXtsb2Fk
TW9kZShjbSk7IGNtLnJlZnJlc2goKTt9LCB0cnVlKTsKLSAgb3B0aW9uKCJjcnVkZU1lYXN1cmlu
Z0Zyb20iLCAxMDAwMCk7CisgIG9wdGlvbigibWF4SGlnaGxpZ2h0TGVuZ3RoIiwgMTAwMDAsIHJl
c2V0TW9kZVN0YXRlLCB0cnVlKTsKICAgb3B0aW9uKCJtb3ZlSW5wdXRXaXRoQ3Vyc29yIiwgdHJ1
ZSwgZnVuY3Rpb24oY20sIHZhbCkgewogICAgIGlmICghdmFsKSBjbS5kaXNwbGF5LmlucHV0RGl2
LnN0eWxlLnRvcCA9IGNtLmRpc3BsYXkuaW5wdXREaXYuc3R5bGUubGVmdCA9IDA7CiAgIH0pOwpA
QCAtMzM1OCw2ICs0MzU0LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
IC8vIEtub3duIG1vZGVzLCBieSBuYW1lIGFuZCBieSBNSU1FCiAgIHZhciBtb2RlcyA9IENvZGVN
aXJyb3IubW9kZXMgPSB7fSwgbWltZU1vZGVzID0gQ29kZU1pcnJvci5taW1lTW9kZXMgPSB7fTsK
IAorICAvLyBFeHRyYSBhcmd1bWVudHMgYXJlIHN0b3JlZCBhcyB0aGUgbW9kZSdzIGRlcGVuZGVu
Y2llcywgd2hpY2ggaXMKKyAgLy8gdXNlZCBieSAobGVnYWN5KSBtZWNoYW5pc21zIGxpa2UgbG9h
ZG1vZGUuanMgdG8gYXV0b21hdGljYWxseQorICAvLyBsb2FkIGEgbW9kZS4gKFByZWZlcnJlZCBt
ZWNoYW5pc20gaXMgdGhlIHJlcXVpcmUvZGVmaW5lIGNhbGxzLikKICAgQ29kZU1pcnJvci5kZWZp
bmVNb2RlID0gZnVuY3Rpb24obmFtZSwgbW9kZSkgewogICAgIGlmICghQ29kZU1pcnJvci5kZWZh
dWx0cy5tb2RlICYmIG5hbWUgIT0gIm51bGwiKSBDb2RlTWlycm9yLmRlZmF1bHRzLm1vZGUgPSBu
YW1lOwogICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikgewpAQCAtMzM3MSwxMSArNDM3MCwx
NCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBtaW1lTW9kZXNbbWlt
ZV0gPSBzcGVjOwogICB9OwogCisgIC8vIEdpdmVuIGEgTUlNRSB0eXBlLCBhIHtuYW1lLCAuLi5v
cHRpb25zfSBjb25maWcgb2JqZWN0LCBvciBhIG5hbWUKKyAgLy8gc3RyaW5nLCByZXR1cm4gYSBt
b2RlIGNvbmZpZyBvYmplY3QuCiAgIENvZGVNaXJyb3IucmVzb2x2ZU1vZGUgPSBmdW5jdGlvbihz
cGVjKSB7CiAgICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNP
d25Qcm9wZXJ0eShzcGVjKSkgewogICAgICAgc3BlYyA9IG1pbWVNb2Rlc1tzcGVjXTsKICAgICB9
IGVsc2UgaWYgKHNwZWMgJiYgdHlwZW9mIHNwZWMubmFtZSA9PSAic3RyaW5nIiAmJiBtaW1lTW9k
ZXMuaGFzT3duUHJvcGVydHkoc3BlYy5uYW1lKSkgewogICAgICAgdmFyIGZvdW5kID0gbWltZU1v
ZGVzW3NwZWMubmFtZV07CisgICAgICBpZiAodHlwZW9mIGZvdW5kID09ICJzdHJpbmciKSBmb3Vu
ZCA9IHtuYW1lOiBmb3VuZH07CiAgICAgICBzcGVjID0gY3JlYXRlT2JqKGZvdW5kLCBzcGVjKTsK
ICAgICAgIHNwZWMubmFtZSA9IGZvdW5kLm5hbWU7CiAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3Bl
YyA9PSAic3RyaW5nIiAmJiAvXltcd1wtXStcL1tcd1wtXStcK3htbCQvLnRlc3Qoc3BlYykpIHsK
QEAgLTMzODUsNiArNDM4Nyw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIGVsc2UgcmV0dXJuIHNwZWMgfHwge25hbWU6ICJudWxsIn07CiAgIH07CiAKKyAgLy8gR2l2
ZW4gYSBtb2RlIHNwZWMgKGFueXRoaW5nIHRoYXQgcmVzb2x2ZU1vZGUgYWNjZXB0cyksIGZpbmQg
YW5kCisgIC8vIGluaXRpYWxpemUgYW4gYWN0dWFsIG1vZGUgb2JqZWN0LgogICBDb2RlTWlycm9y
LmdldE1vZGUgPSBmdW5jdGlvbihvcHRpb25zLCBzcGVjKSB7CiAgICAgdmFyIHNwZWMgPSBDb2Rl
TWlycm9yLnJlc29sdmVNb2RlKHNwZWMpOwogICAgIHZhciBtZmFjdG9yeSA9IG1vZGVzW3NwZWMu
bmFtZV07CkBAIC0zMzk5LDE1ICs0NDAzLDIxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgICAgfQogICAgIH0KICAgICBtb2RlT2JqLm5hbWUgPSBzcGVjLm5hbWU7Cisg
ICAgaWYgKHNwZWMuaGVscGVyVHlwZSkgbW9kZU9iai5oZWxwZXJUeXBlID0gc3BlYy5oZWxwZXJU
eXBlOworICAgIGlmIChzcGVjLm1vZGVQcm9wcykgZm9yICh2YXIgcHJvcCBpbiBzcGVjLm1vZGVQ
cm9wcykKKyAgICAgIG1vZGVPYmpbcHJvcF0gPSBzcGVjLm1vZGVQcm9wc1twcm9wXTsKIAogICAg
IHJldHVybiBtb2RlT2JqOwogICB9OwogCisgIC8vIE1pbmltYWwgZGVmYXVsdCBtb2RlLgogICBD
b2RlTWlycm9yLmRlZmluZU1vZGUoIm51bGwiLCBmdW5jdGlvbigpIHsKICAgICByZXR1cm4ge3Rv
a2VuOiBmdW5jdGlvbihzdHJlYW0pIHtzdHJlYW0uc2tpcFRvRW5kKCk7fX07CiAgIH0pOwogICBD
b2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvcGxhaW4iLCAibnVsbCIpOwogCisgIC8vIFRoaXMg
Y2FuIGJlIHVzZWQgdG8gYXR0YWNoIHByb3BlcnRpZXMgdG8gbW9kZSBvYmplY3RzIGZyb20KKyAg
Ly8gb3V0c2lkZSB0aGUgYWN0dWFsIG1vZGUgZGVmaW5pdGlvbi4KICAgdmFyIG1vZGVFeHRlbnNp
b25zID0gQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9ucyA9IHt9OwogICBDb2RlTWlycm9yLmV4dGVu
ZE1vZGUgPSBmdW5jdGlvbihtb2RlLCBwcm9wZXJ0aWVzKSB7CiAgICAgdmFyIGV4dHMgPSBtb2Rl
RXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShtb2RlKSA/IG1vZGVFeHRlbnNpb25zW21vZGVdIDog
KG1vZGVFeHRlbnNpb25zW21vZGVdID0ge30pOwpAQCAtMzQyOSwxOSArNDQzOSwyMCBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICB2YXIgaGVscGVycyA9IENvZGVNaXJy
b3IuaGVscGVycyA9IHt9OwogICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyID0gZnVuY3Rpb24o
dHlwZSwgbmFtZSwgdmFsdWUpIHsKLSAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlw
ZSkpIGhlbHBlcnNbdHlwZV0gPSBDb2RlTWlycm9yW3R5cGVdID0ge307CisgICAgaWYgKCFoZWxw
ZXJzLmhhc093blByb3BlcnR5KHR5cGUpKSBoZWxwZXJzW3R5cGVdID0gQ29kZU1pcnJvclt0eXBl
XSA9IHtfZ2xvYmFsOiBbXX07CiAgICAgaGVscGVyc1t0eXBlXVtuYW1lXSA9IHZhbHVlOwogICB9
OwotCi0gIC8vIFVUSUxJVElFUwotCi0gIENvZGVNaXJyb3IuaXNXb3JkQ2hhciA9IGlzV29yZENo
YXI7CisgIENvZGVNaXJyb3IucmVnaXN0ZXJHbG9iYWxIZWxwZXIgPSBmdW5jdGlvbih0eXBlLCBu
YW1lLCBwcmVkaWNhdGUsIHZhbHVlKSB7CisgICAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcih0
eXBlLCBuYW1lLCB2YWx1ZSk7CisgICAgaGVscGVyc1t0eXBlXS5fZ2xvYmFsLnB1c2goe3ByZWQ6
IHByZWRpY2F0ZSwgdmFsOiB2YWx1ZX0pOworICB9OwogCiAgIC8vIE1PREUgU1RBVEUgSEFORExJ
TkcKIAotICAvLyBVdGlsaXR5IGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHN0YXRlLiBFeHBv
cnRlZCBiZWNhdXNlIG1vZGVzCi0gIC8vIHNvbWV0aW1lcyBuZWVkIHRvIGRvIHRoaXMuCi0gIGZ1
bmN0aW9uIGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSkgeworICAvLyBVdGlsaXR5IGZ1bmN0aW9ucyBm
b3Igd29ya2luZyB3aXRoIHN0YXRlLiBFeHBvcnRlZCBiZWNhdXNlIG5lc3RlZAorICAvLyBtb2Rl
cyBuZWVkIHRvIGRvIHRoaXMgZm9yIHRoZWlyIGlubmVyIG1vZGVzLgorCisgIHZhciBjb3B5U3Rh
dGUgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZSA9IGZ1bmN0aW9uKG1vZGUsIHN0YXRlKSB7CiAgICAg
aWYgKHN0YXRlID09PSB0cnVlKSByZXR1cm4gc3RhdGU7CiAgICAgaWYgKG1vZGUuY29weVN0YXRl
KSByZXR1cm4gbW9kZS5jb3B5U3RhdGUoc3RhdGUpOwogICAgIHZhciBuc3RhdGUgPSB7fTsKQEAg
LTM0NTEsMTQgKzQ0NjIsMTQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICBuc3RhdGVbbl0gPSB2YWw7CiAgICAgfQogICAgIHJldHVybiBuc3RhdGU7Ci0gIH0KLSAg
Q29kZU1pcnJvci5jb3B5U3RhdGUgPSBjb3B5U3RhdGU7CisgIH07CiAKLSAgZnVuY3Rpb24gc3Rh
cnRTdGF0ZShtb2RlLCBhMSwgYTIpIHsKKyAgdmFyIHN0YXJ0U3RhdGUgPSBDb2RlTWlycm9yLnN0
YXJ0U3RhdGUgPSBmdW5jdGlvbihtb2RlLCBhMSwgYTIpIHsKICAgICByZXR1cm4gbW9kZS5zdGFy
dFN0YXRlID8gbW9kZS5zdGFydFN0YXRlKGExLCBhMikgOiB0cnVlOwotICB9Ci0gIENvZGVNaXJy
b3Iuc3RhcnRTdGF0ZSA9IHN0YXJ0U3RhdGU7CisgIH07CiAKKyAgLy8gR2l2ZW4gYSBtb2RlIGFu
ZCBhIHN0YXRlIChmb3IgdGhhdCBtb2RlKSwgZmluZCB0aGUgaW5uZXIgbW9kZSBhbmQKKyAgLy8g
c3RhdGUgYXQgdGhlIHBvc2l0aW9uIHRoYXQgdGhlIHN0YXRlIHJlZmVycyB0by4KICAgQ29kZU1p
cnJvci5pbm5lck1vZGUgPSBmdW5jdGlvbihtb2RlLCBzdGF0ZSkgewogICAgIHdoaWxlIChtb2Rl
LmlubmVyTW9kZSkgewogICAgICAgdmFyIGluZm8gPSBtb2RlLmlubmVyTW9kZShzdGF0ZSk7CkBA
IC0zNDcxLDQ5ICs0NDgyLDczIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
CiAgIC8vIFNUQU5EQVJEIENPTU1BTkRTCiAKKyAgLy8gQ29tbWFuZHMgYXJlIHBhcmFtZXRlci1s
ZXNzIGFjdGlvbnMgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIG9uIGFuCisgIC8vIGVkaXRvciwgbW9z
dGx5IHVzZWQgZm9yIGtleWJpbmRpbmdzLgogICB2YXIgY29tbWFuZHMgPSBDb2RlTWlycm9yLmNv
bW1hbmRzID0gewotICAgIHNlbGVjdEFsbDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24o
UG9zKGNtLmZpcnN0TGluZSgpLCAwKSwgUG9zKGNtLmxhc3RMaW5lKCkpKTt9LAorICAgIHNlbGVj
dEFsbDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24oUG9zKGNtLmZpcnN0TGluZSgpLCAw
KSwgUG9zKGNtLmxhc3RMaW5lKCkpLCBzZWxfZG9udFNjcm9sbCk7fSwKKyAgICBzaW5nbGVTZWxl
Y3Rpb246IGZ1bmN0aW9uKGNtKSB7CisgICAgICBjbS5zZXRTZWxlY3Rpb24oY20uZ2V0Q3Vyc29y
KCJhbmNob3IiKSwgY20uZ2V0Q3Vyc29yKCJoZWFkIiksIHNlbF9kb250U2Nyb2xsKTsKKyAgICB9
LAogICAgIGtpbGxMaW5lOiBmdW5jdGlvbihjbSkgewotICAgICAgdmFyIGZyb20gPSBjbS5nZXRD
dXJzb3IodHJ1ZSksIHRvID0gY20uZ2V0Q3Vyc29yKGZhbHNlKSwgc2VsID0gIXBvc0VxKGZyb20s
IHRvKTsKLSAgICAgIGlmICghc2VsICYmIGNtLmdldExpbmUoZnJvbS5saW5lKS5sZW5ndGggPT0g
ZnJvbS5jaCkKLSAgICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCBmcm9tLCBQb3MoZnJvbS5saW5l
ICsgMSwgMCksICIrZGVsZXRlIik7Ci0gICAgICBlbHNlIGNtLnJlcGxhY2VSYW5nZSgiIiwgZnJv
bSwgc2VsID8gdG8gOiBQb3MoZnJvbS5saW5lKSwgIitkZWxldGUiKTsKKyAgICAgIGRlbGV0ZU5l
YXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIGlmIChyYW5nZS5lbXB0
eSgpKSB7CisgICAgICAgICAgdmFyIGxlbiA9IGdldExpbmUoY20uZG9jLCByYW5nZS5oZWFkLmxp
bmUpLnRleHQubGVuZ3RoOworICAgICAgICAgIGlmIChyYW5nZS5oZWFkLmNoID09IGxlbiAmJiBy
YW5nZS5oZWFkLmxpbmUgPCBjbS5sYXN0TGluZSgpKQorICAgICAgICAgICAgcmV0dXJuIHtmcm9t
OiByYW5nZS5oZWFkLCB0bzogUG9zKHJhbmdlLmhlYWQubGluZSArIDEsIDApfTsKKyAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXR1cm4ge2Zyb206IHJhbmdlLmhlYWQsIHRvOiBQb3MocmFu
Z2UuaGVhZC5saW5lLCBsZW4pfTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4g
e2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCl9OworICAgICAgICB9CisgICAgICB9
KTsKICAgICB9LAogICAgIGRlbGV0ZUxpbmU6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICB2YXIgbCA9
IGNtLmdldEN1cnNvcigpLmxpbmU7Ci0gICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIsIFBvcyhsLCAw
KSwgUG9zKGwpLCAiK2RlbGV0ZSIpOworICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVu
Y3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgcmV0dXJuIHtmcm9tOiBQb3MocmFuZ2UuZnJvbSgpLmxp
bmUsIDApLAorICAgICAgICAgICAgICAgIHRvOiBjbGlwUG9zKGNtLmRvYywgUG9zKHJhbmdlLnRv
KCkubGluZSArIDEsIDApKX07CisgICAgICB9KTsKICAgICB9LAogICAgIGRlbExpbmVMZWZ0OiBm
dW5jdGlvbihjbSkgewotICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpOwotICAgICAgY20u
cmVwbGFjZVJhbmdlKCIiLCBQb3MoY3VyLmxpbmUsIDApLCBjdXIsICIrZGVsZXRlIik7CisgICAg
ICBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICByZXR1
cm4ge2Zyb206IFBvcyhyYW5nZS5mcm9tKCkubGluZSwgMCksIHRvOiByYW5nZS5mcm9tKCl9Owor
ICAgICAgfSk7CiAgICAgfSwKICAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9LAog
ICAgIHJlZG86IGZ1bmN0aW9uKGNtKSB7Y20ucmVkbygpO30sCisgICAgdW5kb1NlbGVjdGlvbjog
ZnVuY3Rpb24oY20pIHtjbS51bmRvU2VsZWN0aW9uKCk7fSwKKyAgICByZWRvU2VsZWN0aW9uOiBm
dW5jdGlvbihjbSkge2NtLnJlZG9TZWxlY3Rpb24oKTt9LAogICAgIGdvRG9jU3RhcnQ6IGZ1bmN0
aW9uKGNtKSB7Y20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCkpO30sCiAg
ICAgZ29Eb2NFbmQ6IGZ1bmN0aW9uKGNtKSB7Y20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhjbS5sYXN0
TGluZSgpKSk7fSwKICAgICBnb0xpbmVTdGFydDogZnVuY3Rpb24oY20pIHsKLSAgICAgIGNtLmV4
dGVuZFNlbGVjdGlvbihsaW5lU3RhcnQoY20sIGNtLmdldEN1cnNvcigpLmxpbmUpKTsKKyAgICAg
IGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgeyByZXR1cm4gbGluZVN0YXJ0
KGNtLCByYW5nZS5oZWFkLmxpbmUpOyB9LCBzZWxfbW92ZSk7CiAgICAgfSwKICAgICBnb0xpbmVT
dGFydFNtYXJ0OiBmdW5jdGlvbihjbSkgewotICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigp
LCBzdGFydCA9IGxpbmVTdGFydChjbSwgY3VyLmxpbmUpOwotICAgICAgdmFyIGxpbmUgPSBjbS5n
ZXRMaW5lSGFuZGxlKHN0YXJ0LmxpbmUpOwotICAgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGlu
ZSk7Ci0gICAgICBpZiAoIW9yZGVyIHx8IG9yZGVyWzBdLmxldmVsID09IDApIHsKLSAgICAgICAg
dmFyIGZpcnN0Tm9uV1MgPSBNYXRoLm1heCgwLCBsaW5lLnRleHQuc2VhcmNoKC9cUy8pKTsKLSAg
ICAgICAgdmFyIGluV1MgPSBjdXIubGluZSA9PSBzdGFydC5saW5lICYmIGN1ci5jaCA8PSBmaXJz
dE5vbldTICYmIGN1ci5jaDsKLSAgICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhzdGFydC5s
aW5lLCBpbldTID8gMCA6IGZpcnN0Tm9uV1MpKTsKLSAgICAgIH0gZWxzZSBjbS5leHRlbmRTZWxl
Y3Rpb24oc3RhcnQpOworICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdl
KSB7CisgICAgICAgIHZhciBzdGFydCA9IGxpbmVTdGFydChjbSwgcmFuZ2UuaGVhZC5saW5lKTsK
KyAgICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lSGFuZGxlKHN0YXJ0LmxpbmUpOworICAgICAg
ICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lKTsKKyAgICAgICAgaWYgKCFvcmRlciB8fCBvcmRl
clswXS5sZXZlbCA9PSAwKSB7CisgICAgICAgICAgdmFyIGZpcnN0Tm9uV1MgPSBNYXRoLm1heCgw
LCBsaW5lLnRleHQuc2VhcmNoKC9cUy8pKTsKKyAgICAgICAgICB2YXIgaW5XUyA9IHJhbmdlLmhl
YWQubGluZSA9PSBzdGFydC5saW5lICYmIHJhbmdlLmhlYWQuY2ggPD0gZmlyc3ROb25XUyAmJiBy
YW5nZS5oZWFkLmNoOworICAgICAgICAgIHJldHVybiBQb3Moc3RhcnQubGluZSwgaW5XUyA/IDAg
OiBmaXJzdE5vbldTKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhcnQ7CisgICAgICB9
LCBzZWxfbW92ZSk7CiAgICAgfSwKICAgICBnb0xpbmVFbmQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAg
ICBjbS5leHRlbmRTZWxlY3Rpb24obGluZUVuZChjbSwgY20uZ2V0Q3Vyc29yKCkubGluZSkpOwor
ICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7IHJldHVybiBsaW5l
RW5kKGNtLCByYW5nZS5oZWFkLmxpbmUpOyB9LCBzZWxfbW92ZSk7CiAgICAgfSwKICAgICBnb0xp
bmVSaWdodDogZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciB0b3AgPSBjbS5jaGFyQ29vcmRzKGNt
LmdldEN1cnNvcigpLCAiZGl2IikudG9wICsgNTsKLSAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbihj
bS5jb29yZHNDaGFyKHtsZWZ0OiBjbS5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGggKyAxMDAs
IHRvcDogdG9wfSwgImRpdiIpKTsKKyAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlv
bihyYW5nZSkgeworICAgICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCAi
ZGl2IikudG9wICsgNTsKKyAgICAgICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRp
c3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCAiZGl2Iik7CisgICAg
ICB9LCBzZWxfbW92ZSk7CiAgICAgfSwKICAgICBnb0xpbmVMZWZ0OiBmdW5jdGlvbihjbSkgewot
ICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMoY20uZ2V0Q3Vyc29yKCksICJkaXYiKS50b3Ag
KyA1OwotICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uKGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IDAsIHRv
cDogdG9wfSwgImRpdiIpKTsKKyAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihy
YW5nZSkgeworICAgICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCAiZGl2
IikudG9wICsgNTsKKyAgICAgICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IDAsIHRvcDog
dG9wfSwgImRpdiIpOworICAgICAgfSwgc2VsX21vdmUpOwogICAgIH0sCiAgICAgZ29MaW5lVXA6
IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYoLTEsICJsaW5lIik7fSwKICAgICBnb0xpbmVEb3duOiBm
dW5jdGlvbihjbSkge2NtLm1vdmVWKDEsICJsaW5lIik7fSwKQEAgLTM1MzYsMjIgKzQ1NzEsNDEg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaW5kZW50QXV0bzogZnVu
Y3Rpb24oY20pIHtjbS5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iik7fSwKICAgICBpbmRlbnRNb3Jl
OiBmdW5jdGlvbihjbSkge2NtLmluZGVudFNlbGVjdGlvbigiYWRkIik7fSwKICAgICBpbmRlbnRM
ZXNzOiBmdW5jdGlvbihjbSkge2NtLmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKTt9LAotICAg
IGluc2VydFRhYjogZnVuY3Rpb24oY20pIHtjbS5yZXBsYWNlU2VsZWN0aW9uKCJcdCIsICJlbmQi
LCAiK2lucHV0Iik7fSwKKyAgICBpbnNlcnRUYWI6IGZ1bmN0aW9uKGNtKSB7Y20ucmVwbGFjZVNl
bGVjdGlvbigiXHQiKTt9LAorICAgIGluc2VydFNvZnRUYWI6IGZ1bmN0aW9uKGNtKSB7CisgICAg
ICB2YXIgc3BhY2VzID0gW10sIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCksIHRhYlNpemUg
PSBjbS5vcHRpb25zLnRhYlNpemU7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5s
ZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgcG9zID0gcmFuZ2VzW2ldLmZyb20oKTsKKyAgICAg
ICAgdmFyIGNvbCA9IGNvdW50Q29sdW1uKGNtLmdldExpbmUocG9zLmxpbmUpLCBwb3MuY2gsIHRh
YlNpemUpOworICAgICAgICBzcGFjZXMucHVzaChuZXcgQXJyYXkodGFiU2l6ZSAtIGNvbCAlIHRh
YlNpemUgKyAxKS5qb2luKCIgIikpOworICAgICAgfQorICAgICAgY20ucmVwbGFjZVNlbGVjdGlv
bnMoc3BhY2VzKTsKKyAgICB9LAogICAgIGRlZmF1bHRUYWI6IGZ1bmN0aW9uKGNtKSB7CiAgICAg
ICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgY20uaW5kZW50U2VsZWN0aW9uKCJhZGQiKTsK
LSAgICAgIGVsc2UgY20ucmVwbGFjZVNlbGVjdGlvbigiXHQiLCAiZW5kIiwgIitpbnB1dCIpOwor
ICAgICAgZWxzZSBjbS5leGVjQ29tbWFuZCgiaW5zZXJ0VGFiIik7CiAgICAgfSwKICAgICB0cmFu
c3Bvc2VDaGFyczogZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3Io
KSwgbGluZSA9IGNtLmdldExpbmUoY3VyLmxpbmUpOwotICAgICAgaWYgKGN1ci5jaCA+IDAgJiYg
Y3VyLmNoIDwgbGluZS5sZW5ndGggLSAxKQotICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5j
aGFyQXQoY3VyLmNoKSArIGxpbmUuY2hhckF0KGN1ci5jaCAtIDEpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAxKSwgUG9zKGN1ci5saW5lLCBjdXIuY2gg
KyAxKSk7CisgICAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJhbmdl
cyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFu
Z2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgdmFyIGN1ciA9IHJhbmdlc1tpXS5oZWFkLCBs
aW5lID0gZ2V0TGluZShjbS5kb2MsIGN1ci5saW5lKS50ZXh0OworICAgICAgICAgIGlmIChjdXIu
Y2ggPiAwICYmIGN1ci5jaCA8IGxpbmUubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgIGNtLnJlcGxh
Y2VSYW5nZShsaW5lLmNoYXJBdChjdXIuY2gpICsgbGluZS5jaGFyQXQoY3VyLmNoIC0gMSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAxKSwgUG9z
KGN1ci5saW5lLCBjdXIuY2ggKyAxKSk7CisgICAgICAgIH0KKyAgICAgIH0pOwogICAgIH0sCiAg
ICAgbmV3bGluZUFuZEluZGVudDogZnVuY3Rpb24oY20pIHsKLSAgICAgIG9wZXJhdGlvbihjbSwg
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oIlxuIiwgImVuZCIsICIr
aW5wdXQiKTsKLSAgICAgICAgY20uaW5kZW50TGluZShjbS5nZXRDdXJzb3IoKS5saW5lLCBudWxs
LCB0cnVlKTsKLSAgICAgIH0pKCk7CisgICAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGxlbiA9IGNtLmxpc3RTZWxlY3Rpb25zKCkubGVuZ3RoOworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgdmFyIHJhbmdlID0gY20ubGlz
dFNlbGVjdGlvbnMoKVtpXTsKKyAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoIlxuIiwgcmFuZ2Uu
YW5jaG9yLCByYW5nZS5oZWFkLCAiK2lucHV0Iik7CisgICAgICAgICAgY20uaW5kZW50TGluZShy
YW5nZS5mcm9tKCkubGluZSArIDEsIG51bGwsIHRydWUpOworICAgICAgICAgIGVuc3VyZUN1cnNv
clZpc2libGUoY20pOworICAgICAgICB9CisgICAgICB9KTsKICAgICB9LAogICAgIHRvZ2dsZU92
ZXJ3cml0ZTogZnVuY3Rpb24oY20pIHtjbS50b2dnbGVPdmVyd3JpdGUoKTt9CiAgIH07CkBAIC0z
NTY0LDE3ICs0NjE4LDIwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICJFbmQiOiAiZ29MaW5lRW5kIiwgIkhvbWUiOiAiZ29MaW5lU3RhcnRTbWFydCIsICJQYWdlVXAi
OiAiZ29QYWdlVXAiLCAiUGFnZURvd24iOiAiZ29QYWdlRG93biIsCiAgICAgIkRlbGV0ZSI6ICJk
ZWxDaGFyQWZ0ZXIiLCAiQmFja3NwYWNlIjogImRlbENoYXJCZWZvcmUiLCAiU2hpZnQtQmFja3Nw
YWNlIjogImRlbENoYXJCZWZvcmUiLAogICAgICJUYWIiOiAiZGVmYXVsdFRhYiIsICJTaGlmdC1U
YWIiOiAiaW5kZW50QXV0byIsCi0gICAgIkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnQiLCAiSW5z
ZXJ0IjogInRvZ2dsZU92ZXJ3cml0ZSIKKyAgICAiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudCIs
ICJJbnNlcnQiOiAidG9nZ2xlT3ZlcndyaXRlIiwKKyAgICAiRXNjIjogInNpbmdsZVNlbGVjdGlv
biIKICAgfTsKICAgLy8gTm90ZSB0aGF0IHRoZSBzYXZlIGFuZCBmaW5kLXJlbGF0ZWQgY29tbWFu
ZHMgYXJlbid0IGRlZmluZWQgYnkKLSAgLy8gZGVmYXVsdC4gVW5rbm93biBjb21tYW5kcyBhcmUg
c2ltcGx5IGlnbm9yZWQuCisgIC8vIGRlZmF1bHQuIFVzZXIgY29kZSBvciBhZGRvbnMgY2FuIGRl
ZmluZSB0aGVtLiBVbmtub3duIGNvbW1hbmRzCisgIC8vIGFyZSBzaW1wbHkgaWdub3JlZC4KICAg
a2V5TWFwLnBjRGVmYXVsdCA9IHsKICAgICAiQ3RybC1BIjogInNlbGVjdEFsbCIsICJDdHJsLUQi
OiAiZGVsZXRlTGluZSIsICJDdHJsLVoiOiAidW5kbyIsICJTaGlmdC1DdHJsLVoiOiAicmVkbyIs
ICJDdHJsLVkiOiAicmVkbyIsCi0gICAgIkN0cmwtSG9tZSI6ICJnb0RvY1N0YXJ0IiwgIkFsdC1V
cCI6ICJnb0RvY1N0YXJ0IiwgIkN0cmwtRW5kIjogImdvRG9jRW5kIiwgIkN0cmwtRG93biI6ICJn
b0RvY0VuZCIsCisgICAgIkN0cmwtSG9tZSI6ICJnb0RvY1N0YXJ0IiwgIkN0cmwtVXAiOiAiZ29E
b2NTdGFydCIsICJDdHJsLUVuZCI6ICJnb0RvY0VuZCIsICJDdHJsLURvd24iOiAiZ29Eb2NFbmQi
LAogICAgICJDdHJsLUxlZnQiOiAiZ29Hcm91cExlZnQiLCAiQ3RybC1SaWdodCI6ICJnb0dyb3Vw
UmlnaHQiLCAiQWx0LUxlZnQiOiAiZ29MaW5lU3RhcnQiLCAiQWx0LVJpZ2h0IjogImdvTGluZUVu
ZCIsCiAgICAgIkN0cmwtQmFja3NwYWNlIjogImRlbEdyb3VwQmVmb3JlIiwgIkN0cmwtRGVsZXRl
IjogImRlbEdyb3VwQWZ0ZXIiLCAiQ3RybC1TIjogInNhdmUiLCAiQ3RybC1GIjogImZpbmQiLAog
ICAgICJDdHJsLUciOiAiZmluZE5leHQiLCAiU2hpZnQtQ3RybC1HIjogImZpbmRQcmV2IiwgIlNo
aWZ0LUN0cmwtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0LUN0cmwtUiI6ICJyZXBsYWNlQWxsIiwKICAg
ICAiQ3RybC1bIjogImluZGVudExlc3MiLCAiQ3RybC1dIjogImluZGVudE1vcmUiLAorICAgICJD
dHJsLVUiOiAidW5kb1NlbGVjdGlvbiIsICJTaGlmdC1DdHJsLVUiOiAicmVkb1NlbGVjdGlvbiIs
ICJBbHQtVSI6ICJyZWRvU2VsZWN0aW9uIiwKICAgICBmYWxsdGhyb3VnaDogImJhc2ljIgogICB9
OwogICBrZXlNYXAubWFjRGVmYXVsdCA9IHsKQEAgLTM1ODQsMTUgKzQ2NDEsMTcgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgIkN0cmwtQWx0LUJhY2tzcGFjZSI6ICJk
ZWxHcm91cEFmdGVyIiwgIkFsdC1EZWxldGUiOiAiZGVsR3JvdXBBZnRlciIsICJDbWQtUyI6ICJz
YXZlIiwgIkNtZC1GIjogImZpbmQiLAogICAgICJDbWQtRyI6ICJmaW5kTmV4dCIsICJTaGlmdC1D
bWQtRyI6ICJmaW5kUHJldiIsICJDbWQtQWx0LUYiOiAicmVwbGFjZSIsICJTaGlmdC1DbWQtQWx0
LUYiOiAicmVwbGFjZUFsbCIsCiAgICAgIkNtZC1bIjogImluZGVudExlc3MiLCAiQ21kLV0iOiAi
aW5kZW50TW9yZSIsICJDbWQtQmFja3NwYWNlIjogImRlbExpbmVMZWZ0IiwKKyAgICAiQ21kLVUi
OiAidW5kb1NlbGVjdGlvbiIsICJTaGlmdC1DbWQtVSI6ICJyZWRvU2VsZWN0aW9uIiwKICAgICBm
YWxsdGhyb3VnaDogWyJiYXNpYyIsICJlbWFjc3kiXQogICB9OwotICBrZXlNYXBbImRlZmF1bHQi
XSA9IG1hYyA/IGtleU1hcC5tYWNEZWZhdWx0IDoga2V5TWFwLnBjRGVmYXVsdDsKKyAgLy8gVmVy
eSBiYXNpYyByZWFkbGluZS9lbWFjcy1zdHlsZSBiaW5kaW5ncywgd2hpY2ggYXJlIHN0YW5kYXJk
IG9uIE1hYy4KICAga2V5TWFwLmVtYWNzeSA9IHsKICAgICAiQ3RybC1GIjogImdvQ2hhclJpZ2h0
IiwgIkN0cmwtQiI6ICJnb0NoYXJMZWZ0IiwgIkN0cmwtUCI6ICJnb0xpbmVVcCIsICJDdHJsLU4i
OiAiZ29MaW5lRG93biIsCiAgICAgIkFsdC1GIjogImdvV29yZFJpZ2h0IiwgIkFsdC1CIjogImdv
V29yZExlZnQiLCAiQ3RybC1BIjogImdvTGluZVN0YXJ0IiwgIkN0cmwtRSI6ICJnb0xpbmVFbmQi
LAogICAgICJDdHJsLVYiOiAiZ29QYWdlRG93biIsICJTaGlmdC1DdHJsLVYiOiAiZ29QYWdlVXAi
LCAiQ3RybC1EIjogImRlbENoYXJBZnRlciIsICJDdHJsLUgiOiAiZGVsQ2hhckJlZm9yZSIsCiAg
ICAgIkFsdC1EIjogImRlbFdvcmRBZnRlciIsICJBbHQtQmFja3NwYWNlIjogImRlbFdvcmRCZWZv
cmUiLCAiQ3RybC1LIjogImtpbGxMaW5lIiwgIkN0cmwtVCI6ICJ0cmFuc3Bvc2VDaGFycyIKICAg
fTsKKyAga2V5TWFwWyJkZWZhdWx0Il0gPSBtYWMgPyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1h
cC5wY0RlZmF1bHQ7CiAKICAgLy8gS0VZTUFQIERJU1BBVENICiAKQEAgLTM2MDEsNyArNDY2MCwx
MSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBlbHNlIHJldHVybiB2
YWw7CiAgIH0KIAotICBmdW5jdGlvbiBsb29rdXBLZXkobmFtZSwgbWFwcywgaGFuZGxlKSB7Cisg
IC8vIEdpdmVuIGFuIGFycmF5IG9mIGtleW1hcHMgYW5kIGEga2V5IG5hbWUsIGNhbGwgaGFuZGxl
IG9uIGFueQorICAvLyBiaW5kaW5ncyBmb3VuZCwgdW50aWwgdGhhdCByZXR1cm5zIGEgdHJ1dGh5
IHZhbHVlLCBhdCB3aGljaCBwb2ludAorICAvLyB3ZSBjb25zaWRlciB0aGUga2V5IGhhbmRsZWQu
IEltcGxlbWVudHMgdGhpbmdzIGxpa2UgYmluZGluZyBhIGtleQorICAvLyB0byBmYWxzZSBzdG9w
cGluZyBmdXJ0aGVyIGhhbmRsaW5nIGFuZCBrZXltYXAgZmFsbHRocm91Z2guCisgIHZhciBsb29r
dXBLZXkgPSBDb2RlTWlycm9yLmxvb2t1cEtleSA9IGZ1bmN0aW9uKG5hbWUsIG1hcHMsIGhhbmRs
ZSkgewogICAgIGZ1bmN0aW9uIGxvb2t1cChtYXApIHsKICAgICAgIG1hcCA9IGdldEtleU1hcCht
YXApOwogICAgICAgdmFyIGZvdW5kID0gbWFwW25hbWVdOwpAQCAtMzYxMyw3ICs0Njc2LDcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBpZiAoZmFsbHRocm91Z2gg
PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJp
bmcuY2FsbChmYWxsdGhyb3VnaCkgIT0gIltvYmplY3QgQXJyYXldIikKICAgICAgICAgcmV0dXJu
IGxvb2t1cChmYWxsdGhyb3VnaCk7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGZhbGx0aHJv
dWdoLmxlbmd0aDsgaSA8IGU7ICsraSkgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWxs
dGhyb3VnaC5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgZG9uZSA9IGxvb2t1cChmYWxsdGhy
b3VnaFtpXSk7CiAgICAgICAgIGlmIChkb25lKSByZXR1cm4gZG9uZTsKICAgICAgIH0KQEAgLTM2
MjQsMTMgKzQ2ODcsMTggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICB2YXIgZG9uZSA9IGxvb2t1cChtYXBzW2ldKTsKICAgICAgIGlmIChkb25lKSByZXR1cm4gZG9u
ZSAhPSAic3RvcCI7CiAgICAgfQotICB9Ci0gIGZ1bmN0aW9uIGlzTW9kaWZpZXJLZXkoZXZlbnQp
IHsKKyAgfTsKKworICAvLyBNb2RpZmllciBrZXkgcHJlc3NlcyBkb24ndCBjb3VudCBhcyAncmVh
bCcga2V5IHByZXNzZXMgZm9yIHRoZQorICAvLyBwdXJwb3NlIG9mIGtleW1hcCBmYWxsdGhyb3Vn
aC4KKyAgdmFyIGlzTW9kaWZpZXJLZXkgPSBDb2RlTWlycm9yLmlzTW9kaWZpZXJLZXkgPSBmdW5j
dGlvbihldmVudCkgewogICAgIHZhciBuYW1lID0ga2V5TmFtZXNbZXZlbnQua2V5Q29kZV07CiAg
ICAgcmV0dXJuIG5hbWUgPT0gIkN0cmwiIHx8IG5hbWUgPT0gIkFsdCIgfHwgbmFtZSA9PSAiU2hp
ZnQiIHx8IG5hbWUgPT0gIk1vZCI7Ci0gIH0KLSAgZnVuY3Rpb24ga2V5TmFtZShldmVudCwgbm9T
aGlmdCkgewotICAgIGlmIChvcGVyYSAmJiBldmVudC5rZXlDb2RlID09IDM0ICYmIGV2ZW50WyJj
aGFyIl0pIHJldHVybiBmYWxzZTsKKyAgfTsKKworICAvLyBMb29rIHVwIHRoZSBuYW1lIG9mIGEg
a2V5IGFzIGluZGljYXRlZCBieSBhbiBldmVudCBvYmplY3QuCisgIHZhciBrZXlOYW1lID0gQ29k
ZU1pcnJvci5rZXlOYW1lID0gZnVuY3Rpb24oZXZlbnQsIG5vU2hpZnQpIHsKKyAgICBpZiAocHJl
c3RvICYmIGV2ZW50LmtleUNvZGUgPT0gMzQgJiYgZXZlbnRbImNoYXIiXSkgcmV0dXJuIGZhbHNl
OwogICAgIHZhciBuYW1lID0ga2V5TmFtZXNbZXZlbnQua2V5Q29kZV07CiAgICAgaWYgKG5hbWUg
PT0gbnVsbCB8fCBldmVudC5hbHRHcmFwaEtleSkgcmV0dXJuIGZhbHNlOwogICAgIGlmIChldmVu
dC5hbHRLZXkpIG5hbWUgPSAiQWx0LSIgKyBuYW1lOwpAQCAtMzYzOCwxMCArNDcwNiw3IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChmbGlwQ3RybENtZCA/IGV2
ZW50LmN0cmxLZXkgOiBldmVudC5tZXRhS2V5KSBuYW1lID0gIkNtZC0iICsgbmFtZTsKICAgICBp
ZiAoIW5vU2hpZnQgJiYgZXZlbnQuc2hpZnRLZXkpIG5hbWUgPSAiU2hpZnQtIiArIG5hbWU7CiAg
ICAgcmV0dXJuIG5hbWU7Ci0gIH0KLSAgQ29kZU1pcnJvci5sb29rdXBLZXkgPSBsb29rdXBLZXk7
Ci0gIENvZGVNaXJyb3IuaXNNb2RpZmllcktleSA9IGlzTW9kaWZpZXJLZXk7Ci0gIENvZGVNaXJy
b3Iua2V5TmFtZSA9IGtleU5hbWU7CisgIH07CiAKICAgLy8gRlJPTVRFWFRBUkVBCiAKQEAgLTM2
NTUsOSArNDcyMCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIC8v
IFNldCBhdXRvZm9jdXMgdG8gdHJ1ZSBpZiB0aGlzIHRleHRhcmVhIGlzIGZvY3VzZWQsIG9yIGlm
IGl0IGhhcwogICAgIC8vIGF1dG9mb2N1cyBhbmQgbm8gb3RoZXIgZWxlbWVudCBpcyBmb2N1c2Vk
LgogICAgIGlmIChvcHRpb25zLmF1dG9mb2N1cyA9PSBudWxsKSB7Ci0gICAgICB2YXIgaGFzRm9j
dXMgPSBkb2N1bWVudC5ib2R5OwotICAgICAgLy8gZG9jLmFjdGl2ZUVsZW1lbnQgb2NjYXNpb25h
bGx5IHRocm93cyBvbiBJRQotICAgICAgdHJ5IHsgaGFzRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVF
bGVtZW50OyB9IGNhdGNoKGUpIHt9CisgICAgICB2YXIgaGFzRm9jdXMgPSBhY3RpdmVFbHQoKTsK
ICAgICAgIG9wdGlvbnMuYXV0b2ZvY3VzID0gaGFzRm9jdXMgPT0gdGV4dGFyZWEgfHwKICAgICAg
ICAgdGV4dGFyZWEuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSAhPSBudWxsICYmIGhhc0ZvY3Vz
ID09IGRvY3VtZW50LmJvZHk7CiAgICAgfQpAQCAtMzcwMywxNyArNDc2NiwxNyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gRmVkIHRvIHRoZSBtb2RlIHBhcnNlcnMs
IHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gbWFrZQogICAvLyBwYXJzZXJzIG1vcmUgc3Vj
Y2luY3QuCiAKLSAgLy8gVGhlIGNoYXJhY3RlciBzdHJlYW0gdXNlZCBieSBhIG1vZGUncyBwYXJz
ZXIuCi0gIGZ1bmN0aW9uIFN0cmluZ1N0cmVhbShzdHJpbmcsIHRhYlNpemUpIHsKKyAgdmFyIFN0
cmluZ1N0cmVhbSA9IENvZGVNaXJyb3IuU3RyaW5nU3RyZWFtID0gZnVuY3Rpb24oc3RyaW5nLCB0
YWJTaXplKSB7CiAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0ID0gMDsKICAgICB0aGlzLnN0cmlu
ZyA9IHN0cmluZzsKICAgICB0aGlzLnRhYlNpemUgPSB0YWJTaXplIHx8IDg7CiAgICAgdGhpcy5s
YXN0Q29sdW1uUG9zID0gdGhpcy5sYXN0Q29sdW1uVmFsdWUgPSAwOwotICB9CisgICAgdGhpcy5s
aW5lU3RhcnQgPSAwOworICB9OwogCiAgIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUgPSB7CiAgICAg
ZW9sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3MgPj0gdGhpcy5zdHJpbmcubGVuZ3RoO30s
Ci0gICAgc29sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3MgPT0gMDt9LAorICAgIHNvbDog
ZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID09IHRoaXMubGluZVN0YXJ0O30sCiAgICAgcGVl
azogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykgfHwgdW5k
ZWZpbmVkO30sCiAgICAgbmV4dDogZnVuY3Rpb24oKSB7CiAgICAgICBpZiAodGhpcy5wb3MgPCB0
aGlzLnN0cmluZy5sZW5ndGgpCkBAIC0zNzQ2LDkgKzQ4MDksMTIgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHRoaXMubGFzdENvbHVtblZhbHVlID0gY291bnRD
b2x1bW4odGhpcy5zdHJpbmcsIHRoaXMuc3RhcnQsIHRoaXMudGFiU2l6ZSwgdGhpcy5sYXN0Q29s
dW1uUG9zLCB0aGlzLmxhc3RDb2x1bW5WYWx1ZSk7CiAgICAgICAgIHRoaXMubGFzdENvbHVtblBv
cyA9IHRoaXMuc3RhcnQ7CiAgICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy5sYXN0Q29sdW1uVmFs
dWU7CisgICAgICByZXR1cm4gdGhpcy5sYXN0Q29sdW1uVmFsdWUgLSAodGhpcy5saW5lU3RhcnQg
PyBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5saW5lU3RhcnQsIHRoaXMudGFiU2l6ZSkg
OiAwKTsKKyAgICB9LAorICAgIGluZGVudGF0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVy
biBjb3VudENvbHVtbih0aGlzLnN0cmluZywgbnVsbCwgdGhpcy50YWJTaXplKSAtCisgICAgICAg
ICh0aGlzLmxpbmVTdGFydCA/IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLmxpbmVTdGFy
dCwgdGhpcy50YWJTaXplKSA6IDApOwogICAgIH0sCi0gICAgaW5kZW50YXRpb246IGZ1bmN0aW9u
KCkge3JldHVybiBjb3VudENvbHVtbih0aGlzLnN0cmluZywgbnVsbCwgdGhpcy50YWJTaXplKTt9
LAogICAgIG1hdGNoOiBmdW5jdGlvbihwYXR0ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUp
IHsKICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgewogICAgICAgICB2YXIg
Y2FzZWQgPSBmdW5jdGlvbihzdHIpIHtyZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93
ZXJDYXNlKCkgOiBzdHI7fTsKQEAgLTM3NjQsMjAgKzQ4MzAsMzQgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICAgIH0KICAgICB9
LAotICAgIGN1cnJlbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMu
c3RhcnQsIHRoaXMucG9zKTt9CisgICAgY3VycmVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5z
dHJpbmcuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5wb3MpO30sCisgICAgaGlkZUZpcnN0Q2hhcnM6
IGZ1bmN0aW9uKG4sIGlubmVyKSB7CisgICAgICB0aGlzLmxpbmVTdGFydCArPSBuOworICAgICAg
dHJ5IHsgcmV0dXJuIGlubmVyKCk7IH0KKyAgICAgIGZpbmFsbHkgeyB0aGlzLmxpbmVTdGFydCAt
PSBuOyB9CisgICAgfQogICB9OwotICBDb2RlTWlycm9yLlN0cmluZ1N0cmVhbSA9IFN0cmluZ1N0
cmVhbTsKIAogICAvLyBURVhUTUFSS0VSUwogCi0gIGZ1bmN0aW9uIFRleHRNYXJrZXIoZG9jLCB0
eXBlKSB7CisgIC8vIENyZWF0ZWQgd2l0aCBtYXJrVGV4dCBhbmQgc2V0Qm9va21hcmsgbWV0aG9k
cy4gQSBUZXh0TWFya2VyIGlzIGEKKyAgLy8gaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xl
YXIgb3IgZmluZCBhIG1hcmtlZCBwb3NpdGlvbiBpbiB0aGUKKyAgLy8gZG9jdW1lbnQuIExpbmUg
b2JqZWN0cyBob2xkIGFycmF5cyAobWFya2VkU3BhbnMpIGNvbnRhaW5pbmcKKyAgLy8ge2Zyb20s
IHRvLCBtYXJrZXJ9IG9iamVjdCBwb2ludGluZyB0byBzdWNoIG1hcmtlciBvYmplY3RzLCBhbmQK
KyAgLy8gaW5kaWNhdGluZyB0aGF0IHN1Y2ggYSBtYXJrZXIgaXMgcHJlc2VudCBvbiB0aGF0IGxp
bmUuIE11bHRpcGxlCisgIC8vIGxpbmVzIG1heSBwb2ludCB0byB0aGUgc2FtZSBtYXJrZXIgd2hl
biBpdCBzcGFucyBhY3Jvc3MgbGluZXMuCisgIC8vIFRoZSBzcGFucyB3aWxsIGhhdmUgbnVsbCBm
b3IgdGhlaXIgZnJvbS90byBwcm9wZXJ0aWVzIHdoZW4gdGhlCisgIC8vIG1hcmtlciBjb250aW51
ZXMgYmV5b25kIHRoZSBzdGFydC9lbmQgb2YgdGhlIGxpbmUuIE1hcmtlcnMgaGF2ZQorICAvLyBs
aW5rcyBiYWNrIHRvIHRoZSBsaW5lcyB0aGV5IGN1cnJlbnRseSB0b3VjaC4KKworICB2YXIgVGV4
dE1hcmtlciA9IENvZGVNaXJyb3IuVGV4dE1hcmtlciA9IGZ1bmN0aW9uKGRvYywgdHlwZSkgewog
ICAgIHRoaXMubGluZXMgPSBbXTsKICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgIHRoaXMuZG9j
ID0gZG9jOwotICB9Ci0gIENvZGVNaXJyb3IuVGV4dE1hcmtlciA9IFRleHRNYXJrZXI7CisgIH07
CiAgIGV2ZW50TWl4aW4oVGV4dE1hcmtlcik7CiAKKyAgLy8gQ2xlYXIgdGhlIG1hcmtlci4KICAg
VGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKICAgICBpZiAodGhpcy5l
eHBsaWNpdGx5Q2xlYXJlZCkgcmV0dXJuOwogICAgIHZhciBjbSA9IHRoaXMuZG9jLmNtLCB3aXRo
T3AgPSBjbSAmJiAhY20uY3VyT3A7CkBAIC0zNzkwLDE1ICs0ODcwLDE3IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5l
cy5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldOwogICAgICAg
dmFyIHNwYW4gPSBnZXRNYXJrZWRTcGFuRm9yKGxpbmUubWFya2VkU3BhbnMsIHRoaXMpOwotICAg
ICAgaWYgKHNwYW4udG8gIT0gbnVsbCkgbWF4ID0gbGluZU5vKGxpbmUpOworICAgICAgaWYgKGNt
ICYmICF0aGlzLmNvbGxhcHNlZCkgcmVnTGluZUNoYW5nZShjbSwgbGluZU5vKGxpbmUpLCAidGV4
dCIpOworICAgICAgZWxzZSBpZiAoY20pIHsKKyAgICAgICAgaWYgKHNwYW4udG8gIT0gbnVsbCkg
bWF4ID0gbGluZU5vKGxpbmUpOworICAgICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpIG1pbiA9
IGxpbmVObyhsaW5lKTsKKyAgICAgIH0KICAgICAgIGxpbmUubWFya2VkU3BhbnMgPSByZW1vdmVN
YXJrZWRTcGFuKGxpbmUubWFya2VkU3BhbnMsIHNwYW4pOwotICAgICAgaWYgKHNwYW4uZnJvbSAh
PSBudWxsKQotICAgICAgICBtaW4gPSBsaW5lTm8obGluZSk7Ci0gICAgICBlbHNlIGlmICh0aGlz
LmNvbGxhcHNlZCAmJiAhbGluZUlzSGlkZGVuKHRoaXMuZG9jLCBsaW5lKSAmJiBjbSkKKyAgICAg
IGlmIChzcGFuLmZyb20gPT0gbnVsbCAmJiB0aGlzLmNvbGxhcHNlZCAmJiAhbGluZUlzSGlkZGVu
KHRoaXMuZG9jLCBsaW5lKSAmJiBjbSkKICAgICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCB0
ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpKTsKICAgICB9CiAgICAgaWYgKGNtICYmIHRoaXMuY29sbGFw
c2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
LmxpbmVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZShjbS5k
b2MsIHRoaXMubGluZXNbaV0pLCBsZW4gPSBsaW5lTGVuZ3RoKGNtLmRvYywgdmlzdWFsKTsKKyAg
ICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKHRoaXMubGluZXNbaV0pLCBsZW4gPSBsaW5lTGVu
Z3RoKHZpc3VhbCk7CiAgICAgICBpZiAobGVuID4gY20uZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7
CiAgICAgICAgIGNtLmRpc3BsYXkubWF4TGluZSA9IHZpc3VhbDsKICAgICAgICAgY20uZGlzcGxh
eS5tYXhMaW5lTGVuZ3RoID0gbGVuOwpAQCAtMzgwNiw0NiArNDg4OCw2MiBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobWluICE9
IG51bGwgJiYgY20pIHJlZ0NoYW5nZShjbSwgbWluLCBtYXggKyAxKTsKKyAgICBpZiAobWluICE9
IG51bGwgJiYgY20gJiYgdGhpcy5jb2xsYXBzZWQpIHJlZ0NoYW5nZShjbSwgbWluLCBtYXggKyAx
KTsKICAgICB0aGlzLmxpbmVzLmxlbmd0aCA9IDA7CiAgICAgdGhpcy5leHBsaWNpdGx5Q2xlYXJl
ZCA9IHRydWU7CiAgICAgaWYgKHRoaXMuYXRvbWljICYmIHRoaXMuZG9jLmNhbnRFZGl0KSB7CiAg
ICAgICB0aGlzLmRvYy5jYW50RWRpdCA9IGZhbHNlOwotICAgICAgaWYgKGNtKSByZUNoZWNrU2Vs
ZWN0aW9uKGNtKTsKKyAgICAgIGlmIChjbSkgcmVDaGVja1NlbGVjdGlvbihjbS5kb2MpOwogICAg
IH0KKyAgICBpZiAoY20pIHNpZ25hbExhdGVyKGNtLCAibWFya2VyQ2xlYXJlZCIsIGNtLCB0aGlz
KTsKICAgICBpZiAod2l0aE9wKSBlbmRPcGVyYXRpb24oY20pOworICAgIGlmICh0aGlzLnBhcmVu
dCkgdGhpcy5wYXJlbnQuY2xlYXIoKTsKICAgfTsKIAotICBUZXh0TWFya2VyLnByb3RvdHlwZS5m
aW5kID0gZnVuY3Rpb24oKSB7CisgIC8vIEZpbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYXJrZXIg
aW4gdGhlIGRvY3VtZW50LiBSZXR1cm5zIGEge2Zyb20sCisgIC8vIHRvfSBvYmplY3QgYnkgZGVm
YXVsdC4gU2lkZSBjYW4gYmUgcGFzc2VkIHRvIGdldCBhIHNwZWNpZmljIHNpZGUKKyAgLy8gLS0g
MCAoYm90aCksIC0xIChsZWZ0KSwgb3IgMSAocmlnaHQpLiBXaGVuIGxpbmVPYmogaXMgdHJ1ZSwg
dGhlCisgIC8vIFBvcyBvYmplY3RzIHJldHVybmVkIGNvbnRhaW4gYSBsaW5lIG9iamVjdCwgcmF0
aGVyIHRoYW4gYSBsaW5lCisgIC8vIG51bWJlciAodXNlZCB0byBwcmV2ZW50IGxvb2tpbmcgdXAg
dGhlIHNhbWUgbGluZSB0d2ljZSkuCisgIFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5j
dGlvbihzaWRlLCBsaW5lT2JqKSB7CisgICAgaWYgKHNpZGUgPT0gbnVsbCAmJiB0aGlzLnR5cGUg
PT0gImJvb2ttYXJrIikgc2lkZSA9IDE7CiAgICAgdmFyIGZyb20sIHRvOwogICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIGxpbmUgPSB0
aGlzLmxpbmVzW2ldOwogICAgICAgdmFyIHNwYW4gPSBnZXRNYXJrZWRTcGFuRm9yKGxpbmUubWFy
a2VkU3BhbnMsIHRoaXMpOwotICAgICAgaWYgKHNwYW4uZnJvbSAhPSBudWxsIHx8IHNwYW4udG8g
IT0gbnVsbCkgewotICAgICAgICB2YXIgZm91bmQgPSBsaW5lTm8obGluZSk7Ci0gICAgICAgIGlm
IChzcGFuLmZyb20gIT0gbnVsbCkgZnJvbSA9IFBvcyhmb3VuZCwgc3Bhbi5mcm9tKTsKLSAgICAg
ICAgaWYgKHNwYW4udG8gIT0gbnVsbCkgdG8gPSBQb3MoZm91bmQsIHNwYW4udG8pOworICAgICAg
aWYgKHNwYW4uZnJvbSAhPSBudWxsKSB7CisgICAgICAgIGZyb20gPSBQb3MobGluZU9iaiA/IGxp
bmUgOiBsaW5lTm8obGluZSksIHNwYW4uZnJvbSk7CisgICAgICAgIGlmIChzaWRlID09IC0xKSBy
ZXR1cm4gZnJvbTsKKyAgICAgIH0KKyAgICAgIGlmIChzcGFuLnRvICE9IG51bGwpIHsKKyAgICAg
ICAgdG8gPSBQb3MobGluZU9iaiA/IGxpbmUgOiBsaW5lTm8obGluZSksIHNwYW4udG8pOworICAg
ICAgICBpZiAoc2lkZSA9PSAxKSByZXR1cm4gdG87CiAgICAgICB9CiAgICAgfQotICAgIGlmICh0
aGlzLnR5cGUgPT0gImJvb2ttYXJrIikgcmV0dXJuIGZyb207CiAgICAgcmV0dXJuIGZyb20gJiYg
e2Zyb206IGZyb20sIHRvOiB0b307CiAgIH07CiAKKyAgLy8gU2lnbmFscyB0aGF0IHRoZSBtYXJr
ZXIncyB3aWRnZXQgY2hhbmdlZCwgYW5kIHN1cnJvdW5kaW5nIGxheW91dAorICAvLyBzaG91bGQg
YmUgcmVjb21wdXRlZC4KICAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2hhbmdlZCA9IGZ1bmN0aW9u
KCkgewotICAgIHZhciBwb3MgPSB0aGlzLmZpbmQoKSwgY20gPSB0aGlzLmRvYy5jbTsKKyAgICB2
YXIgcG9zID0gdGhpcy5maW5kKC0xLCB0cnVlKSwgd2lkZ2V0ID0gdGhpcywgY20gPSB0aGlzLmRv
Yy5jbTsKICAgICBpZiAoIXBvcyB8fCAhY20pIHJldHVybjsKLSAgICBpZiAodGhpcy50eXBlICE9
ICJib29rbWFyayIpIHBvcyA9IHBvcy5mcm9tOwotICAgIHZhciBsaW5lID0gZ2V0TGluZSh0aGlz
LmRvYywgcG9zLmxpbmUpOwotICAgIGNsZWFyQ2FjaGVkTWVhc3VyZW1lbnQoY20sIGxpbmUpOwot
ICAgIGlmIChwb3MubGluZSA+PSBjbS5kaXNwbGF5LnNob3dpbmdGcm9tICYmIHBvcy5saW5lIDwg
Y20uZGlzcGxheS5zaG93aW5nVG8pIHsKLSAgICAgIGZvciAodmFyIG5vZGUgPSBjbS5kaXNwbGF5
LmxpbmVEaXYuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIGlmIChu
b2RlLmxpbmVPYmogPT0gbGluZSkgewotICAgICAgICBpZiAobm9kZS5vZmZzZXRIZWlnaHQgIT0g
bGluZS5oZWlnaHQpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbm9kZS5vZmZzZXRIZWlnaHQpOwot
ICAgICAgICBicmVhazsKKyAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBs
aW5lID0gcG9zLmxpbmUsIGxpbmVOID0gbGluZU5vKHBvcy5saW5lKTsKKyAgICAgIHZhciB2aWV3
ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTik7CisgICAgICBpZiAodmlldykgeworICAgICAg
ICBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKHZpZXcpOworICAgICAgICBjbS5jdXJPcC5z
ZWxlY3Rpb25DaGFuZ2VkID0gY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwogICAgICAgfQot
ICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGNtLmN1ck9wLnNlbGVjdGlv
bkNoYW5nZWQgPSBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IGNtLmN1ck9wLnVwZGF0ZU1heExpbmUg
PSB0cnVlOwotICAgICAgfSk7Ci0gICAgfQorICAgICAgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9
IHRydWU7CisgICAgICBpZiAoIWxpbmVJc0hpZGRlbih3aWRnZXQuZG9jLCBsaW5lKSAmJiB3aWRn
ZXQuaGVpZ2h0ICE9IG51bGwpIHsKKyAgICAgICAgdmFyIG9sZEhlaWdodCA9IHdpZGdldC5oZWln
aHQ7CisgICAgICAgIHdpZGdldC5oZWlnaHQgPSBudWxsOworICAgICAgICB2YXIgZEhlaWdodCA9
IHdpZGdldEhlaWdodCh3aWRnZXQpIC0gb2xkSGVpZ2h0OworICAgICAgICBpZiAoZEhlaWdodCkK
KyAgICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgZEhlaWdodCk7
CisgICAgICB9CisgICAgfSk7CiAgIH07CiAKICAgVGV4dE1hcmtlci5wcm90b3R5cGUuYXR0YWNo
TGluZSA9IGZ1bmN0aW9uKGxpbmUpIHsKQEAgLTM4NjQsNDIgKzQ5NjIsNTMgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9OwogCisgIC8vIENvbGxhcHNlZCBt
YXJrZXJzIGhhdmUgdW5pcXVlIGlkcywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBvcmRlcgorICAv
LyB0aGVtLCB3aGljaCBpcyBuZWVkZWQgZm9yIHVuaXF1ZWx5IGRldGVybWluaW5nIGFuIG91dGVy
IG1hcmtlcgorICAvLyB3aGVuIHRoZXkgb3ZlcmxhcCAodGhleSBtYXkgbmVzdCwgYnV0IG5vdCBw
YXJ0aWFsbHkgb3ZlcmxhcCkuCisgIHZhciBuZXh0TWFya2VySWQgPSAwOworCisgIC8vIENyZWF0
ZSBhIG1hcmtlciwgd2lyZSBpdCB1cCB0byB0aGUgcmlnaHQgbGluZXMsIGFuZAogICBmdW5jdGlv
biBtYXJrVGV4dChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7CisgICAgLy8gU2hhcmVk
IG1hcmtlcnMgKGFjcm9zcyBsaW5rZWQgZG9jdW1lbnRzKSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5
CisgICAgLy8gKG1hcmtUZXh0U2hhcmVkIHdpbGwgY2FsbCBvdXQgdG8gdGhpcyBhZ2Fpbiwgb25j
ZSBwZXIKKyAgICAvLyBkb2N1bWVudCkuCiAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFy
ZWQpIHJldHVybiBtYXJrVGV4dFNoYXJlZChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKTsK
KyAgICAvLyBFbnN1cmUgd2UgYXJlIGluIGFuIG9wZXJhdGlvbi4KICAgICBpZiAoZG9jLmNtICYm
ICFkb2MuY20uY3VyT3ApIHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYXJrVGV4dCkoZG9jLCBm
cm9tLCB0bywgb3B0aW9ucywgdHlwZSk7CiAKLSAgICB2YXIgbWFya2VyID0gbmV3IFRleHRNYXJr
ZXIoZG9jLCB0eXBlKTsKLSAgICBpZiAocG9zTGVzcyh0bywgZnJvbSkgfHwgcG9zRXEoZnJvbSwg
dG8pICYmIHR5cGUgPT0gInJhbmdlIiAmJgotICAgICAgICAhKG9wdGlvbnMuaW5jbHVzaXZlTGVm
dCAmJiBvcHRpb25zLmluY2x1c2l2ZVJpZ2h0KSkKKyAgICB2YXIgbWFya2VyID0gbmV3IFRleHRN
YXJrZXIoZG9jLCB0eXBlKSwgZGlmZiA9IGNtcChmcm9tLCB0byk7CisgICAgaWYgKG9wdGlvbnMp
IGNvcHlPYmoob3B0aW9ucywgbWFya2VyLCBmYWxzZSk7CisgICAgLy8gRG9uJ3QgY29ubmVjdCBl
bXB0eSBtYXJrZXJzIHVubGVzcyBjbGVhcldoZW5FbXB0eSBpcyBmYWxzZQorICAgIGlmIChkaWZm
ID4gMCB8fCBkaWZmID09IDAgJiYgbWFya2VyLmNsZWFyV2hlbkVtcHR5ICE9PSBmYWxzZSkKICAg
ICAgIHJldHVybiBtYXJrZXI7Ci0gICAgaWYgKG9wdGlvbnMpIGNvcHlPYmoob3B0aW9ucywgbWFy
a2VyKTsKICAgICBpZiAobWFya2VyLnJlcGxhY2VkV2l0aCkgeworICAgICAgLy8gU2hvd2luZyB1
cCBhcyBhIHdpZGdldCBpbXBsaWVzIGNvbGxhcHNlZCAod2lkZ2V0IHJlcGxhY2VzIHRleHQpCiAg
ICAgICBtYXJrZXIuY29sbGFwc2VkID0gdHJ1ZTsKLSAgICAgIG1hcmtlci5yZXBsYWNlZFdpdGgg
PSBlbHQoInNwYW4iLCBbbWFya2VyLnJlcGxhY2VkV2l0aF0sICJDb2RlTWlycm9yLXdpZGdldCIp
OwotICAgICAgaWYgKCFvcHRpb25zLmhhbmRsZU1vdXNlRXZlbnRzKSBtYXJrZXIucmVwbGFjZWRX
aXRoLmlnbm9yZUV2ZW50cyA9IHRydWU7CisgICAgICBtYXJrZXIud2lkZ2V0Tm9kZSA9IGVsdCgi
c3BhbiIsIFttYXJrZXIucmVwbGFjZWRXaXRoXSwgIkNvZGVNaXJyb3Itd2lkZ2V0Iik7CisgICAg
ICBpZiAoIW9wdGlvbnMuaGFuZGxlTW91c2VFdmVudHMpIG1hcmtlci53aWRnZXROb2RlLmlnbm9y
ZUV2ZW50cyA9IHRydWU7CisgICAgICBpZiAob3B0aW9ucy5pbnNlcnRMZWZ0KSBtYXJrZXIud2lk
Z2V0Tm9kZS5pbnNlcnRMZWZ0ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKG1hcmtlci5jb2xsYXBz
ZWQpIHsKKyAgICAgIGlmIChjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgZnJvbS5saW5l
LCBmcm9tLCB0bywgbWFya2VyKSB8fAorICAgICAgICAgIGZyb20ubGluZSAhPSB0by5saW5lICYm
IGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCB0by5saW5lLCBmcm9tLCB0bywgbWFya2Vy
KSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnNlcnRpbmcgY29sbGFwc2VkIG1hcmtlciBw
YXJ0aWFsbHkgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7CisgICAgICBzYXdDb2xsYXBz
ZWRTcGFucyA9IHRydWU7CiAgICAgfQotICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKSBzYXdDb2xs
YXBzZWRTcGFucyA9IHRydWU7CiAKICAgICBpZiAobWFya2VyLmFkZFRvSGlzdG9yeSkKLSAgICAg
IGFkZFRvSGlzdG9yeShkb2MsIHtmcm9tOiBmcm9tLCB0bzogdG8sIG9yaWdpbjogIm1hcmtUZXh0
In0sCi0gICAgICAgICAgICAgICAgICAge2hlYWQ6IGRvYy5zZWwuaGVhZCwgYW5jaG9yOiBkb2Mu
c2VsLmFuY2hvcn0sIE5hTik7CisgICAgICBhZGRDaGFuZ2VUb0hpc3RvcnkoZG9jLCB7ZnJvbTog
ZnJvbSwgdG86IHRvLCBvcmlnaW46ICJtYXJrVGV4dCJ9LCBkb2Muc2VsLCBOYU4pOwogCi0gICAg
dmFyIGN1ckxpbmUgPSBmcm9tLmxpbmUsIHNpemUgPSAwLCBjb2xsYXBzZWRBdFN0YXJ0LCBjb2xs
YXBzZWRBdEVuZCwgY20gPSBkb2MuY20sIHVwZGF0ZU1heExpbmU7CisgICAgdmFyIGN1ckxpbmUg
PSBmcm9tLmxpbmUsIGNtID0gZG9jLmNtLCB1cGRhdGVNYXhMaW5lOwogICAgIGRvYy5pdGVyKGN1
ckxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAoY20gJiYgbWFy
a2VyLmNvbGxhcHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgdmlzdWFsTGluZShk
b2MsIGxpbmUpID09IGNtLmRpc3BsYXkubWF4TGluZSkKKyAgICAgIGlmIChjbSAmJiBtYXJrZXIu
Y29sbGFwc2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiB2aXN1YWxMaW5lKGxpbmUp
ID09IGNtLmRpc3BsYXkubWF4TGluZSkKICAgICAgICAgdXBkYXRlTWF4TGluZSA9IHRydWU7Ci0g
ICAgICB2YXIgc3BhbiA9IHtmcm9tOiBudWxsLCB0bzogbnVsbCwgbWFya2VyOiBtYXJrZXJ9Owot
ICAgICAgc2l6ZSArPSBsaW5lLnRleHQubGVuZ3RoOwotICAgICAgaWYgKGN1ckxpbmUgPT0gZnJv
bS5saW5lKSB7c3Bhbi5mcm9tID0gZnJvbS5jaDsgc2l6ZSAtPSBmcm9tLmNoO30KLSAgICAgIGlm
IChjdXJMaW5lID09IHRvLmxpbmUpIHtzcGFuLnRvID0gdG8uY2g7IHNpemUgLT0gbGluZS50ZXh0
Lmxlbmd0aCAtIHRvLmNoO30KLSAgICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKSB7Ci0gICAgICAg
IGlmIChjdXJMaW5lID09IHRvLmxpbmUpIGNvbGxhcHNlZEF0RW5kID0gY29sbGFwc2VkU3BhbkF0
KGxpbmUsIHRvLmNoKTsKLSAgICAgICAgaWYgKGN1ckxpbmUgPT0gZnJvbS5saW5lKSBjb2xsYXBz
ZWRBdFN0YXJ0ID0gY29sbGFwc2VkU3BhbkF0KGxpbmUsIGZyb20uY2gpOwotICAgICAgICBlbHNl
IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7Ci0gICAgICB9Ci0gICAgICBhZGRNYXJrZWRTcGFu
KGxpbmUsIHNwYW4pOworICAgICAgaWYgKG1hcmtlci5jb2xsYXBzZWQgJiYgY3VyTGluZSAhPSBm
cm9tLmxpbmUpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7CisgICAgICBhZGRNYXJrZWRTcGFu
KGxpbmUsIG5ldyBNYXJrZWRTcGFuKG1hcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3VyTGluZSA9PSBmcm9tLmxpbmUgPyBmcm9tLmNoIDogbnVsbCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGluZSA9PSB0by5saW5l
ID8gdG8uY2ggOiBudWxsKSk7CiAgICAgICArK2N1ckxpbmU7CiAgICAgfSk7CisgICAgLy8gbGlu
ZUlzSGlkZGVuIGRlcGVuZHMgb24gdGhlIHByZXNlbmNlIG9mIHRoZSBzcGFucywgc28gbmVlZHMg
YSBzZWNvbmQgcGFzcwogICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKSBkb2MuaXRlcihmcm9tLmxp
bmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICBpZiAobGluZUlzSGlkZGVu
KGRvYywgbGluZSkpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7CiAgICAgfSk7CkBAIC0zOTEy
LDMxICs1MDIxLDMzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAg
ICBkb2MuY2xlYXJIaXN0b3J5KCk7CiAgICAgfQogICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKSB7
Ci0gICAgICBpZiAoY29sbGFwc2VkQXRTdGFydCAhPSBjb2xsYXBzZWRBdEVuZCkKLSAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJJbnNlcnRpbmcgY29sbGFwc2VkIG1hcmtlciBvdmVybGFwcGluZyBh
biBleGlzdGluZyBvbmUiKTsKLSAgICAgIG1hcmtlci5zaXplID0gc2l6ZTsKKyAgICAgIG1hcmtl
ci5pZCA9ICsrbmV4dE1hcmtlcklkOwogICAgICAgbWFya2VyLmF0b21pYyA9IHRydWU7CiAgICAg
fQogICAgIGlmIChjbSkgeworICAgICAgLy8gU3luYyBlZGl0b3Igc3RhdGUKICAgICAgIGlmICh1
cGRhdGVNYXhMaW5lKSBjbS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTsKLSAgICAgIGlmICht
YXJrZXIuY2xhc3NOYW1lIHx8IG1hcmtlci50aXRsZSB8fCBtYXJrZXIuc3RhcnRTdHlsZSB8fCBt
YXJrZXIuZW5kU3R5bGUgfHwgbWFya2VyLmNvbGxhcHNlZCkKKyAgICAgIGlmIChtYXJrZXIuY29s
bGFwc2VkKQogICAgICAgICByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEpOwot
ICAgICAgaWYgKG1hcmtlci5hdG9taWMpIHJlQ2hlY2tTZWxlY3Rpb24oY20pOworICAgICAgZWxz
ZSBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBtYXJrZXIudGl0bGUgfHwgbWFya2VyLnN0YXJ0U3R5
bGUgfHwgbWFya2VyLmVuZFN0eWxlKQorICAgICAgICBmb3IgKHZhciBpID0gZnJvbS5saW5lOyBp
IDw9IHRvLmxpbmU7IGkrKykgcmVnTGluZUNoYW5nZShjbSwgaSwgInRleHQiKTsKKyAgICAgIGlm
IChtYXJrZXIuYXRvbWljKSByZUNoZWNrU2VsZWN0aW9uKGNtLmRvYyk7CisgICAgICBzaWduYWxM
YXRlcihjbSwgIm1hcmtlckFkZGVkIiwgY20sIG1hcmtlcik7CiAgICAgfQogICAgIHJldHVybiBt
YXJrZXI7CiAgIH0KIAogICAvLyBTSEFSRUQgVEVYVE1BUktFUlMKIAotICBmdW5jdGlvbiBTaGFy
ZWRUZXh0TWFya2VyKG1hcmtlcnMsIHByaW1hcnkpIHsKKyAgLy8gQSBzaGFyZWQgbWFya2VyIHNw
YW5zIG11bHRpcGxlIGxpbmtlZCBkb2N1bWVudHMuIEl0IGlzCisgIC8vIGltcGxlbWVudGVkIGFz
IGEgbWV0YS1tYXJrZXItb2JqZWN0IGNvbnRyb2xsaW5nIG11bHRpcGxlIG5vcm1hbAorICAvLyBt
YXJrZXJzLgorICB2YXIgU2hhcmVkVGV4dE1hcmtlciA9IENvZGVNaXJyb3IuU2hhcmVkVGV4dE1h
cmtlciA9IGZ1bmN0aW9uKG1hcmtlcnMsIHByaW1hcnkpIHsKICAgICB0aGlzLm1hcmtlcnMgPSBt
YXJrZXJzOwogICAgIHRoaXMucHJpbWFyeSA9IHByaW1hcnk7Ci0gICAgZm9yICh2YXIgaSA9IDAs
IG1lID0gdGhpczsgaSA8IG1hcmtlcnMubGVuZ3RoOyArK2kpIHsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG1hcmtlcnMubGVuZ3RoOyArK2kpCiAgICAgICBtYXJrZXJzW2ldLnBhcmVudCA9IHRo
aXM7Ci0gICAgICBvbihtYXJrZXJzW2ldLCAiY2xlYXIiLCBmdW5jdGlvbigpe21lLmNsZWFyKCk7
fSk7Ci0gICAgfQotICB9Ci0gIENvZGVNaXJyb3IuU2hhcmVkVGV4dE1hcmtlciA9IFNoYXJlZFRl
eHRNYXJrZXI7CisgIH07CiAgIGV2ZW50TWl4aW4oU2hhcmVkVGV4dE1hcmtlcik7CiAKICAgU2hh
cmVkVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKQEAgLTM5NDYsMTcg
KzUwNTcsMTcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB0aGlz
Lm1hcmtlcnNbaV0uY2xlYXIoKTsKICAgICBzaWduYWxMYXRlcih0aGlzLCAiY2xlYXIiKTsKICAg
fTsKLSAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiB0aGlzLnByaW1hcnkuZmluZCgpOworICBTaGFyZWRUZXh0TWFya2VyLnByb3RvdHlw
ZS5maW5kID0gZnVuY3Rpb24oc2lkZSwgbGluZU9iaikgeworICAgIHJldHVybiB0aGlzLnByaW1h
cnkuZmluZChzaWRlLCBsaW5lT2JqKTsKICAgfTsKIAogICBmdW5jdGlvbiBtYXJrVGV4dFNoYXJl
ZChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7CiAgICAgb3B0aW9ucyA9IGNvcHlPYmoo
b3B0aW9ucyk7CiAgICAgb3B0aW9ucy5zaGFyZWQgPSBmYWxzZTsKICAgICB2YXIgbWFya2VycyA9
IFttYXJrVGV4dChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKV0sIHByaW1hcnkgPSBtYXJr
ZXJzWzBdOwotICAgIHZhciB3aWRnZXQgPSBvcHRpb25zLnJlcGxhY2VkV2l0aDsKKyAgICB2YXIg
d2lkZ2V0ID0gb3B0aW9ucy53aWRnZXROb2RlOwogICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlv
bihkb2MpIHsKLSAgICAgIGlmICh3aWRnZXQpIG9wdGlvbnMucmVwbGFjZWRXaXRoID0gd2lkZ2V0
LmNsb25lTm9kZSh0cnVlKTsKKyAgICAgIGlmICh3aWRnZXQpIG9wdGlvbnMud2lkZ2V0Tm9kZSA9
IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7CiAgICAgICBtYXJrZXJzLnB1c2gobWFya1RleHQoZG9j
LCBjbGlwUG9zKGRvYywgZnJvbSksIGNsaXBQb3MoZG9jLCB0byksIG9wdGlvbnMsIHR5cGUpKTsK
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsraSkKICAgICAg
ICAgaWYgKGRvYy5saW5rZWRbaV0uaXNQYXJlbnQpIHJldHVybjsKQEAgLTM5NjUsNjAgKzUwNzYs
MTA0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBuZXcg
U2hhcmVkVGV4dE1hcmtlcihtYXJrZXJzLCBwcmltYXJ5KTsKICAgfQogCisgIGZ1bmN0aW9uIGZp
bmRTaGFyZWRNYXJrZXJzKGRvYykgeworICAgIHJldHVybiBkb2MuZmluZE1hcmtzKFBvcyhkb2Mu
Zmlyc3QsIDApLCBkb2MuY2xpcFBvcyhQb3MoZG9jLmxhc3RMaW5lKCkpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbihtKSB7IHJldHVybiBtLnBhcmVudDsgfSk7CisgIH0KKwor
ICBmdW5jdGlvbiBjb3B5U2hhcmVkTWFya2Vycyhkb2MsIG1hcmtlcnMpIHsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBtYXJrZXIgPSBt
YXJrZXJzW2ldLCBwb3MgPSBtYXJrZXIuZmluZCgpOworICAgICAgdmFyIG1Gcm9tID0gZG9jLmNs
aXBQb3MocG9zLmZyb20pLCBtVG8gPSBkb2MuY2xpcFBvcyhwb3MudG8pOworICAgICAgaWYgKGNt
cChtRnJvbSwgbVRvKSkgeworICAgICAgICB2YXIgc3ViTWFyayA9IG1hcmtUZXh0KGRvYywgbUZy
b20sIG1UbywgbWFya2VyLnByaW1hcnksIG1hcmtlci5wcmltYXJ5LnR5cGUpOworICAgICAgICBt
YXJrZXIubWFya2Vycy5wdXNoKHN1Yk1hcmspOworICAgICAgICBzdWJNYXJrLnBhcmVudCA9IG1h
cmtlcjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBkZXRhY2hTaGFyZWRNYXJr
ZXJzKG1hcmtlcnMpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBp
KyspIHsKKyAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJzW2ldLCBsaW5rZWQgPSBbbWFya2VyLnBy
aW1hcnkuZG9jXTs7CisgICAgICBsaW5rZWREb2NzKG1hcmtlci5wcmltYXJ5LmRvYywgZnVuY3Rp
b24oZCkgeyBsaW5rZWQucHVzaChkKTsgfSk7CisgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1h
cmtlci5tYXJrZXJzLmxlbmd0aDsgaisrKSB7CisgICAgICAgIHZhciBzdWJNYXJrZXIgPSBtYXJr
ZXIubWFya2Vyc1tqXTsKKyAgICAgICAgaWYgKGluZGV4T2YobGlua2VkLCBzdWJNYXJrZXIuZG9j
KSA9PSAtMSkgeworICAgICAgICAgIHN1Yk1hcmtlci5wYXJlbnQgPSBudWxsOworICAgICAgICAg
IG1hcmtlci5tYXJrZXJzLnNwbGljZShqLS0sIDEpOworICAgICAgICB9CisgICAgICB9CisgICAg
fQorICB9CisKICAgLy8gVEVYVE1BUktFUiBTUEFOUwogCisgIGZ1bmN0aW9uIE1hcmtlZFNwYW4o
bWFya2VyLCBmcm9tLCB0bykgeworICAgIHRoaXMubWFya2VyID0gbWFya2VyOworICAgIHRoaXMu
ZnJvbSA9IGZyb207IHRoaXMudG8gPSB0bzsKKyAgfQorCisgIC8vIFNlYXJjaCBhbiBhcnJheSBv
ZiBzcGFucyBmb3IgYSBzcGFuIG1hdGNoaW5nIHRoZSBnaXZlbiBtYXJrZXIuCiAgIGZ1bmN0aW9u
IGdldE1hcmtlZFNwYW5Gb3Ioc3BhbnMsIG1hcmtlcikgewogICAgIGlmIChzcGFucykgZm9yICh2
YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIHNwYW4gPSBzcGFu
c1tpXTsKICAgICAgIGlmIChzcGFuLm1hcmtlciA9PSBtYXJrZXIpIHJldHVybiBzcGFuOwogICAg
IH0KICAgfQorICAvLyBSZW1vdmUgYSBzcGFuIGZyb20gYW4gYXJyYXksIHJldHVybmluZyB1bmRl
ZmluZWQgaWYgbm8gc3BhbnMgYXJlCisgIC8vIGxlZnQgKHdlIGRvbid0IHN0b3JlIGFycmF5cyBm
b3IgbGluZXMgd2l0aG91dCBzcGFucykuCiAgIGZ1bmN0aW9uIHJlbW92ZU1hcmtlZFNwYW4oc3Bh
bnMsIHNwYW4pIHsKICAgICBmb3IgKHZhciByLCBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytp
KQogICAgICAgaWYgKHNwYW5zW2ldICE9IHNwYW4pIChyIHx8IChyID0gW10pKS5wdXNoKHNwYW5z
W2ldKTsKICAgICByZXR1cm4gcjsKICAgfQorICAvLyBBZGQgYSBzcGFuIHRvIGEgbGluZS4KICAg
ZnVuY3Rpb24gYWRkTWFya2VkU3BhbihsaW5lLCBzcGFuKSB7CiAgICAgbGluZS5tYXJrZWRTcGFu
cyA9IGxpbmUubWFya2VkU3BhbnMgPyBsaW5lLm1hcmtlZFNwYW5zLmNvbmNhdChbc3Bhbl0pIDog
W3NwYW5dOwogICAgIHNwYW4ubWFya2VyLmF0dGFjaExpbmUobGluZSk7CiAgIH0KIAorICAvLyBV
c2VkIGZvciB0aGUgYWxnb3JpdGhtIHRoYXQgYWRqdXN0cyBtYXJrZXJzIGZvciBhIGNoYW5nZSBp
biB0aGUKKyAgLy8gZG9jdW1lbnQuIFRoZXNlIGZ1bmN0aW9ucyBjdXQgYW4gYXJyYXkgb2Ygc3Bh
bnMgYXQgYSBnaXZlbgorICAvLyBjaGFyYWN0ZXIgcG9zaXRpb24sIHJldHVybmluZyBhbiBhcnJh
eSBvZiByZW1haW5pbmcgY2h1bmtzIChvcgorICAvLyB1bmRlZmluZWQgaWYgbm90aGluZyByZW1h
aW5zKS4KICAgZnVuY3Rpb24gbWFya2VkU3BhbnNCZWZvcmUob2xkLCBzdGFydENoLCBpc0luc2Vy
dCkgewogICAgIGlmIChvbGQpIGZvciAodmFyIGkgPSAwLCBudzsgaSA8IG9sZC5sZW5ndGg7ICsr
aSkgewogICAgICAgdmFyIHNwYW4gPSBvbGRbaV0sIG1hcmtlciA9IHNwYW4ubWFya2VyOwogICAg
ICAgdmFyIHN0YXJ0c0JlZm9yZSA9IHNwYW4uZnJvbSA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVz
aXZlTGVmdCA/IHNwYW4uZnJvbSA8PSBzdGFydENoIDogc3Bhbi5mcm9tIDwgc3RhcnRDaCk7Ci0g
ICAgICBpZiAoc3RhcnRzQmVmb3JlIHx8Ci0gICAgICAgICAgKG1hcmtlci5pbmNsdXNpdmVMZWZ0
ICYmIG1hcmtlci5pbmNsdXNpdmVSaWdodCB8fCBtYXJrZXIudHlwZSA9PSAiYm9va21hcmsiKSAm
JgotICAgICAgICAgIHNwYW4uZnJvbSA9PSBzdGFydENoICYmICghaXNJbnNlcnQgfHwgIXNwYW4u
bWFya2VyLmluc2VydExlZnQpKSB7CisgICAgICBpZiAoc3RhcnRzQmVmb3JlIHx8IHNwYW4uZnJv
bSA9PSBzdGFydENoICYmIG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYgKCFpc0luc2VydCB8
fCAhc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkpIHsKICAgICAgICAgdmFyIGVuZHNBZnRlciA9IHNw
YW4udG8gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZVJpZ2h0ID8gc3Bhbi50byA+PSBzdGFy
dENoIDogc3Bhbi50byA+IHN0YXJ0Q2gpOwotICAgICAgICAobncgfHwgKG53ID0gW10pKS5wdXNo
KHtmcm9tOiBzcGFuLmZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiBl
bmRzQWZ0ZXIgPyBudWxsIDogc3Bhbi50bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFya2VyOiBtYXJrZXJ9KTsKKyAgICAgICAgKG53IHx8IChudyA9IFtdKSkucHVzaChuZXcg
TWFya2VkU3BhbihtYXJrZXIsIHNwYW4uZnJvbSwgZW5kc0FmdGVyID8gbnVsbCA6IHNwYW4udG8p
KTsKICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG53OwogICB9Ci0KICAgZnVuY3Rpb24gbWFy
a2VkU3BhbnNBZnRlcihvbGQsIGVuZENoLCBpc0luc2VydCkgewogICAgIGlmIChvbGQpIGZvciAo
dmFyIGkgPSAwLCBudzsgaSA8IG9sZC5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIHNwYW4gPSBv
bGRbaV0sIG1hcmtlciA9IHNwYW4ubWFya2VyOwogICAgICAgdmFyIGVuZHNBZnRlciA9IHNwYW4u
dG8gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZVJpZ2h0ID8gc3Bhbi50byA+PSBlbmRDaCA6
IHNwYW4udG8gPiBlbmRDaCk7Ci0gICAgICBpZiAoZW5kc0FmdGVyIHx8IG1hcmtlci50eXBlID09
ICJib29rbWFyayIgJiYgc3Bhbi5mcm9tID09IGVuZENoICYmICghaXNJbnNlcnQgfHwgc3Bhbi5t
YXJrZXIuaW5zZXJ0TGVmdCkpIHsKKyAgICAgIGlmIChlbmRzQWZ0ZXIgfHwgc3Bhbi5mcm9tID09
IGVuZENoICYmIG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYgKCFpc0luc2VydCB8fCBzcGFu
Lm1hcmtlci5pbnNlcnRMZWZ0KSkgewogICAgICAgICB2YXIgc3RhcnRzQmVmb3JlID0gc3Bhbi5m
cm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bhbi5mcm9tIDw9IGVuZENo
IDogc3Bhbi5mcm9tIDwgZW5kQ2gpOwotICAgICAgICAobncgfHwgKG53ID0gW10pKS5wdXNoKHtm
cm9tOiBzdGFydHNCZWZvcmUgPyBudWxsIDogc3Bhbi5mcm9tIC0gZW5kQ2gsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvOiBzcGFuLnRvID09IG51bGwgPyBudWxsIDogc3Bhbi50
byAtIGVuZENoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXI6IG1hcmtl
cn0pOworICAgICAgICAobncgfHwgKG53ID0gW10pKS5wdXNoKG5ldyBNYXJrZWRTcGFuKG1hcmtl
ciwgc3RhcnRzQmVmb3JlID8gbnVsbCA6IHNwYW4uZnJvbSAtIGVuZENoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4udG8gPT0gbnVsbCA/IG51bGwg
OiBzcGFuLnRvIC0gZW5kQ2gpKTsKICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG53OwogICB9
CiAKKyAgLy8gR2l2ZW4gYSBjaGFuZ2Ugb2JqZWN0LCBjb21wdXRlIHRoZSBuZXcgc2V0IG9mIG1h
cmtlciBzcGFucyB0aGF0CisgIC8vIGNvdmVyIHRoZSBsaW5lIGluIHdoaWNoIHRoZSBjaGFuZ2Ug
dG9vayBwbGFjZS4gUmVtb3ZlcyBzcGFucworICAvLyBlbnRpcmVseSB3aXRoaW4gdGhlIGNoYW5n
ZSwgcmVjb25uZWN0cyBzcGFucyBiZWxvbmdpbmcgdG8gdGhlCisgIC8vIHNhbWUgbWFya2VyIHRo
YXQgYXBwZWFyIG9uIGJvdGggc2lkZXMgb2YgdGhlIGNoYW5nZSwgYW5kIGN1dHMgb2ZmCisgIC8v
IHNwYW5zIHBhcnRpYWxseSB3aXRoaW4gdGhlIGNoYW5nZS4gUmV0dXJucyBhbiBhcnJheSBvZiBz
cGFuCisgIC8vIGFycmF5cyB3aXRoIG9uZSBlbGVtZW50IGZvciBlYWNoIGxpbmUgaW4gKGFmdGVy
KSB0aGUgY2hhbmdlLgogICBmdW5jdGlvbiBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hh
bmdlKSB7CiAgICAgdmFyIG9sZEZpcnN0ID0gaXNMaW5lKGRvYywgY2hhbmdlLmZyb20ubGluZSkg
JiYgZ2V0TGluZShkb2MsIGNoYW5nZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zOwogICAgIHZhciBv
bGRMYXN0ID0gaXNMaW5lKGRvYywgY2hhbmdlLnRvLmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFu
Z2UudG8ubGluZSkubWFya2VkU3BhbnM7CiAgICAgaWYgKCFvbGRGaXJzdCAmJiAhb2xkTGFzdCkg
cmV0dXJuIG51bGw7CiAKLSAgICB2YXIgc3RhcnRDaCA9IGNoYW5nZS5mcm9tLmNoLCBlbmRDaCA9
IGNoYW5nZS50by5jaCwgaXNJbnNlcnQgPSBwb3NFcShjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKTsK
KyAgICB2YXIgc3RhcnRDaCA9IGNoYW5nZS5mcm9tLmNoLCBlbmRDaCA9IGNoYW5nZS50by5jaCwg
aXNJbnNlcnQgPSBjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMDsKICAgICAvLyBHZXQg
dGhlIHNwYW5zIHRoYXQgJ3N0aWNrIG91dCcgb24gYm90aCBzaWRlcwogICAgIHZhciBmaXJzdCA9
IG1hcmtlZFNwYW5zQmVmb3JlKG9sZEZpcnN0LCBzdGFydENoLCBpc0luc2VydCk7CiAgICAgdmFy
IGxhc3QgPSBtYXJrZWRTcGFuc0FmdGVyKG9sZExhc3QsIGVuZENoLCBpc0luc2VydCk7CkBAIC00
MDUzLDEzICs1MjA4LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICAgIH0KICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHNhbWVMaW5lICYmIGZpcnN0KSB7Ci0gICAg
ICAvLyBNYWtlIHN1cmUgd2UgZGlkbid0IGNyZWF0ZSBhbnkgemVyby1sZW5ndGggc3BhbnMKLSAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlyc3QubGVuZ3RoOyArK2kpCi0gICAgICAgIGlmIChm
aXJzdFtpXS5mcm9tICE9IG51bGwgJiYgZmlyc3RbaV0uZnJvbSA9PSBmaXJzdFtpXS50byAmJiBm
aXJzdFtpXS5tYXJrZXIudHlwZSAhPSAiYm9va21hcmsiKQotICAgICAgICAgIGZpcnN0LnNwbGlj
ZShpLS0sIDEpOwotICAgICAgaWYgKCFmaXJzdC5sZW5ndGgpIGZpcnN0ID0gbnVsbDsKLSAgICB9
CisgICAgLy8gTWFrZSBzdXJlIHdlIGRpZG4ndCBjcmVhdGUgYW55IHplcm8tbGVuZ3RoIHNwYW5z
CisgICAgaWYgKGZpcnN0KSBmaXJzdCA9IGNsZWFyRW1wdHlTcGFucyhmaXJzdCk7CisgICAgaWYg
KGxhc3QgJiYgbGFzdCAhPSBmaXJzdCkgbGFzdCA9IGNsZWFyRW1wdHlTcGFucyhsYXN0KTsKIAog
ICAgIHZhciBuZXdNYXJrZXJzID0gW2ZpcnN0XTsKICAgICBpZiAoIXNhbWVMaW5lKSB7CkBAIC00
MDY4LDcgKzUyMTksNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IGlmIChnYXAgPiAwICYmIGZpcnN0KQogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0
Lmxlbmd0aDsgKytpKQogICAgICAgICAgIGlmIChmaXJzdFtpXS50byA9PSBudWxsKQotICAgICAg
ICAgICAgKGdhcE1hcmtlcnMgfHwgKGdhcE1hcmtlcnMgPSBbXSkpLnB1c2goe2Zyb206IG51bGws
IHRvOiBudWxsLCBtYXJrZXI6IGZpcnN0W2ldLm1hcmtlcn0pOworICAgICAgICAgICAgKGdhcE1h
cmtlcnMgfHwgKGdhcE1hcmtlcnMgPSBbXSkpLnB1c2gobmV3IE1hcmtlZFNwYW4oZmlyc3RbaV0u
bWFya2VyLCBudWxsLCBudWxsKSk7CiAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdhcDsgKytp
KQogICAgICAgICBuZXdNYXJrZXJzLnB1c2goZ2FwTWFya2Vycyk7CiAgICAgICBuZXdNYXJrZXJz
LnB1c2gobGFzdCk7CkBAIC00MDc2LDYgKzUyMjcsMjIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIG5ld01hcmtlcnM7CiAgIH0KIAorICAvLyBSZW1vdmUg
c3BhbnMgdGhhdCBhcmUgZW1wdHkgYW5kIGRvbid0IGhhdmUgYSBjbGVhcldoZW5FbXB0eQorICAv
LyBvcHRpb24gb2YgZmFsc2UuCisgIGZ1bmN0aW9uIGNsZWFyRW1wdHlTcGFucyhzcGFucykgewor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZhciBz
cGFuID0gc3BhbnNbaV07CisgICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwgJiYgc3Bhbi5mcm9t
ID09IHNwYW4udG8gJiYgc3Bhbi5tYXJrZXIuY2xlYXJXaGVuRW1wdHkgIT09IGZhbHNlKQorICAg
ICAgICBzcGFucy5zcGxpY2UoaS0tLCAxKTsKKyAgICB9CisgICAgaWYgKCFzcGFucy5sZW5ndGgp
IHJldHVybiBudWxsOworICAgIHJldHVybiBzcGFuczsKKyAgfQorCisgIC8vIFVzZWQgZm9yIHVu
L3JlLWRvaW5nIGNoYW5nZXMgZnJvbSB0aGUgaGlzdG9yeS4gQ29tYmluZXMgdGhlCisgIC8vIHJl
c3VsdCBvZiBjb21wdXRpbmcgdGhlIGV4aXN0aW5nIHNwYW5zIHdpdGggdGhlIHNldCBvZiBzcGFu
cyB0aGF0CisgIC8vIGV4aXN0ZWQgaW4gdGhlIGhpc3RvcnkgKHNvIHRoYXQgZGVsZXRpbmcgYXJv
dW5kIGEgc3BhbiBhbmQgdGhlbgorICAvLyB1bmRvaW5nIGJyaW5ncyBiYWNrIHRoZSBzcGFuKS4K
ICAgZnVuY3Rpb24gbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkgewogICAgIHZhciBvbGQgPSBn
ZXRPbGRTcGFucyhkb2MsIGNoYW5nZSk7CiAgICAgdmFyIHN0cmV0Y2hlZCA9IHN0cmV0Y2hTcGFu
c092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpOwpAQCAtNDA5OCw2ICs1MjY1LDcgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIG9sZDsKICAgfQogCisgIC8vIFVz
ZWQgdG8gJ2NsaXAnIG91dCByZWFkT25seSByYW5nZXMgd2hlbiBtYWtpbmcgYSBjaGFuZ2UuCiAg
IGZ1bmN0aW9uIHJlbW92ZVJlYWRPbmx5UmFuZ2VzKGRvYywgZnJvbSwgdG8pIHsKICAgICB2YXIg
bWFya2VycyA9IG51bGw7CiAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVu
Y3Rpb24obGluZSkgewpAQCAtNDExMCwxNCArNTI3OCwxNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICBpZiAoIW1hcmtlcnMpIHJldHVybiBudWxsOwogICAgIHZhciBw
YXJ0cyA9IFt7ZnJvbTogZnJvbSwgdG86IHRvfV07CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBt
YXJrZXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgbWsgPSBtYXJrZXJzW2ldLCBtID0gbWsu
ZmluZCgpOworICAgICAgdmFyIG1rID0gbWFya2Vyc1tpXSwgbSA9IG1rLmZpbmQoMCk7CiAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcnRzLmxlbmd0aDsgKytqKSB7CiAgICAgICAgIHZhciBw
ID0gcGFydHNbal07Ci0gICAgICAgIGlmIChwb3NMZXNzKHAudG8sIG0uZnJvbSkgfHwgcG9zTGVz
cyhtLnRvLCBwLmZyb20pKSBjb250aW51ZTsKLSAgICAgICAgdmFyIG5ld1BhcnRzID0gW2osIDFd
OwotICAgICAgICBpZiAocG9zTGVzcyhwLmZyb20sIG0uZnJvbSkgfHwgIW1rLmluY2x1c2l2ZUxl
ZnQgJiYgcG9zRXEocC5mcm9tLCBtLmZyb20pKQorICAgICAgICBpZiAoY21wKHAudG8sIG0uZnJv
bSkgPCAwIHx8IGNtcChwLmZyb20sIG0udG8pID4gMCkgY29udGludWU7CisgICAgICAgIHZhciBu
ZXdQYXJ0cyA9IFtqLCAxXSwgZGZyb20gPSBjbXAocC5mcm9tLCBtLmZyb20pLCBkdG8gPSBjbXAo
cC50bywgbS50byk7CisgICAgICAgIGlmIChkZnJvbSA8IDAgfHwgIW1rLmluY2x1c2l2ZUxlZnQg
JiYgIWRmcm9tKQogICAgICAgICAgIG5ld1BhcnRzLnB1c2goe2Zyb206IHAuZnJvbSwgdG86IG0u
ZnJvbX0pOwotICAgICAgICBpZiAocG9zTGVzcyhtLnRvLCBwLnRvKSB8fCAhbWsuaW5jbHVzaXZl
UmlnaHQgJiYgcG9zRXEocC50bywgbS50bykpCisgICAgICAgIGlmIChkdG8gPiAwIHx8ICFtay5p
bmNsdXNpdmVSaWdodCAmJiAhZHRvKQogICAgICAgICAgIG5ld1BhcnRzLnB1c2goe2Zyb206IG0u
dG8sIHRvOiBwLnRvfSk7CiAgICAgICAgIHBhcnRzLnNwbGljZS5hcHBseShwYXJ0cywgbmV3UGFy
dHMpOwogICAgICAgICBqICs9IG5ld1BhcnRzLmxlbmd0aCAtIDE7CkBAIC00MTI2LDcxICs1Mjk0
LDE0OCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gcGFy
dHM7CiAgIH0KIAotICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXQobGluZSwgY2gpIHsKKyAgLy8g
Q29ubmVjdCBvciBkaXNjb25uZWN0IHNwYW5zIGZyb20gYSBsaW5lLgorICBmdW5jdGlvbiBkZXRh
Y2hNYXJrZWRTcGFucyhsaW5lKSB7CisgICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFuczsK
KyAgICBpZiAoIXNwYW5zKSByZXR1cm47CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5s
ZW5ndGg7ICsraSkKKyAgICAgIHNwYW5zW2ldLm1hcmtlci5kZXRhY2hMaW5lKGxpbmUpOworICAg
IGxpbmUubWFya2VkU3BhbnMgPSBudWxsOworICB9CisgIGZ1bmN0aW9uIGF0dGFjaE1hcmtlZFNw
YW5zKGxpbmUsIHNwYW5zKSB7CisgICAgaWYgKCFzcGFucykgcmV0dXJuOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpCisgICAgICBzcGFuc1tpXS5tYXJrZXIuYXR0
YWNoTGluZShsaW5lKTsKKyAgICBsaW5lLm1hcmtlZFNwYW5zID0gc3BhbnM7CisgIH0KKworICAv
LyBIZWxwZXJzIHVzZWQgd2hlbiBjb21wdXRpbmcgd2hpY2ggb3ZlcmxhcHBpbmcgY29sbGFwc2Vk
IHNwYW4KKyAgLy8gY291bnRzIGFzIHRoZSBsYXJnZXIgb25lLgorICBmdW5jdGlvbiBleHRyYUxl
ZnQobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IC0xIDogMDsgfQorICBm
dW5jdGlvbiBleHRyYVJpZ2h0KG1hcmtlcikgeyByZXR1cm4gbWFya2VyLmluY2x1c2l2ZVJpZ2h0
ID8gMSA6IDA7IH0KKworICAvLyBSZXR1cm5zIGEgbnVtYmVyIGluZGljYXRpbmcgd2hpY2ggb2Yg
dHdvIG92ZXJsYXBwaW5nIGNvbGxhcHNlZAorICAvLyBzcGFucyBpcyBsYXJnZXIgKGFuZCB0aHVz
IGluY2x1ZGVzIHRoZSBvdGhlcikuIEZhbGxzIGJhY2sgdG8KKyAgLy8gY29tcGFyaW5nIGlkcyB3
aGVuIHRoZSBzcGFucyBjb3ZlciBleGFjdGx5IHRoZSBzYW1lIHJhbmdlLgorICBmdW5jdGlvbiBj
b21wYXJlQ29sbGFwc2VkTWFya2VycyhhLCBiKSB7CisgICAgdmFyIGxlbkRpZmYgPSBhLmxpbmVz
Lmxlbmd0aCAtIGIubGluZXMubGVuZ3RoOworICAgIGlmIChsZW5EaWZmICE9IDApIHJldHVybiBs
ZW5EaWZmOworICAgIHZhciBhUG9zID0gYS5maW5kKCksIGJQb3MgPSBiLmZpbmQoKTsKKyAgICB2
YXIgZnJvbUNtcCA9IGNtcChhUG9zLmZyb20sIGJQb3MuZnJvbSkgfHwgZXh0cmFMZWZ0KGEpIC0g
ZXh0cmFMZWZ0KGIpOworICAgIGlmIChmcm9tQ21wKSByZXR1cm4gLWZyb21DbXA7CisgICAgdmFy
IHRvQ21wID0gY21wKGFQb3MudG8sIGJQb3MudG8pIHx8IGV4dHJhUmlnaHQoYSkgLSBleHRyYVJp
Z2h0KGIpOworICAgIGlmICh0b0NtcCkgcmV0dXJuIHRvQ21wOworICAgIHJldHVybiBiLmlkIC0g
YS5pZDsKKyAgfQorCisgIC8vIEZpbmQgb3V0IHdoZXRoZXIgYSBsaW5lIGVuZHMgb3Igc3RhcnRz
IGluIGEgY29sbGFwc2VkIHNwYW4uIElmCisgIC8vIHNvLCByZXR1cm4gdGhlIG1hcmtlciBmb3Ig
dGhhdCBzcGFuLgorICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIHN0YXJ0KSB7
CiAgICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYmIGxpbmUubWFya2VkU3BhbnMsIGZv
dW5kOwogICAgIGlmIChzcHMpIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsr
aSkgewogICAgICAgc3AgPSBzcHNbaV07Ci0gICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQp
IGNvbnRpbnVlOwotICAgICAgaWYgKChzcC5mcm9tID09IG51bGwgfHwgc3AuZnJvbSA8IGNoKSAm
JgotICAgICAgICAgIChzcC50byA9PSBudWxsIHx8IHNwLnRvID4gY2gpICYmCi0gICAgICAgICAg
KCFmb3VuZCB8fCBmb3VuZC53aWR0aCA8IHNwLm1hcmtlci53aWR0aCkpCisgICAgICBpZiAoc3Au
bWFya2VyLmNvbGxhcHNlZCAmJiAoc3RhcnQgPyBzcC5mcm9tIDogc3AudG8pID09IG51bGwgJiYK
KyAgICAgICAgICAoIWZvdW5kIHx8IGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGZvdW5kLCBzcC5t
YXJrZXIpIDwgMCkpCiAgICAgICAgIGZvdW5kID0gc3AubWFya2VyOwogICAgIH0KICAgICByZXR1
cm4gZm91bmQ7CiAgIH0KLSAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0U3RhcnQobGluZSkgeyBy
ZXR1cm4gY29sbGFwc2VkU3BhbkF0KGxpbmUsIC0xKTsgfQotICBmdW5jdGlvbiBjb2xsYXBzZWRT
cGFuQXRFbmQobGluZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0KGxpbmUsIGxpbmUudGV4dC5s
ZW5ndGggKyAxKTsgfQorICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSB7IHJl
dHVybiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIHRydWUpOyB9CisgIGZ1bmN0aW9uIGNvbGxh
cHNlZFNwYW5BdEVuZChsaW5lKSB7IHJldHVybiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIGZh
bHNlKTsgfQorCisgIC8vIFRlc3Qgd2hldGhlciB0aGVyZSBleGlzdHMgYSBjb2xsYXBzZWQgc3Bh
biB0aGF0IHBhcnRpYWxseQorICAvLyBvdmVybGFwcyAoY292ZXJzIHRoZSBzdGFydCBvciBlbmQs
IGJ1dCBub3QgYm90aCkgb2YgYSBuZXcgc3Bhbi4KKyAgLy8gU3VjaCBvdmVybGFwIGlzIG5vdCBh
bGxvd2VkLgorICBmdW5jdGlvbiBjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgbGluZU5v
LCBmcm9tLCB0bywgbWFya2VyKSB7CisgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbGluZU5v
KTsKKyAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFuczsK
KyAgICBpZiAoc3BzKSBmb3IgKHZhciBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSkgeworICAg
ICAgdmFyIHNwID0gc3BzW2ldOworICAgICAgaWYgKCFzcC5tYXJrZXIuY29sbGFwc2VkKSBjb250
aW51ZTsKKyAgICAgIHZhciBmb3VuZCA9IHNwLm1hcmtlci5maW5kKDApOworICAgICAgdmFyIGZy
b21DbXAgPSBjbXAoZm91bmQuZnJvbSwgZnJvbSkgfHwgZXh0cmFMZWZ0KHNwLm1hcmtlcikgLSBl
eHRyYUxlZnQobWFya2VyKTsKKyAgICAgIHZhciB0b0NtcCA9IGNtcChmb3VuZC50bywgdG8pIHx8
IGV4dHJhUmlnaHQoc3AubWFya2VyKSAtIGV4dHJhUmlnaHQobWFya2VyKTsKKyAgICAgIGlmIChm
cm9tQ21wID49IDAgJiYgdG9DbXAgPD0gMCB8fCBmcm9tQ21wIDw9IDAgJiYgdG9DbXAgPj0gMCkg
Y29udGludWU7CisgICAgICBpZiAoZnJvbUNtcCA8PSAwICYmIChjbXAoZm91bmQudG8sIGZyb20p
IHx8IGV4dHJhUmlnaHQoc3AubWFya2VyKSAtIGV4dHJhTGVmdChtYXJrZXIpKSA+IDAgfHwKKyAg
ICAgICAgICBmcm9tQ21wID49IDAgJiYgKGNtcChmb3VuZC5mcm9tLCB0bykgfHwgZXh0cmFMZWZ0
KHNwLm1hcmtlcikgLSBleHRyYVJpZ2h0KG1hcmtlcikpIDwgMCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICB9CiAKLSAgZnVuY3Rpb24gdmlzdWFsTGluZShkb2MsIGxpbmUpIHsKKyAg
Ly8gQSB2aXN1YWwgbGluZSBpcyBhIGxpbmUgYXMgZHJhd24gb24gdGhlIHNjcmVlbi4gRm9sZGlu
ZywgZm9yCisgIC8vIGV4YW1wbGUsIGNhbiBjYXVzZSBtdWx0aXBsZSBsb2dpY2FsIGxpbmVzIHRv
IGFwcGVhciBvbiB0aGUgc2FtZQorICAvLyB2aXN1YWwgbGluZS4gVGhpcyBmaW5kcyB0aGUgc3Rh
cnQgb2YgdGhlIHZpc3VhbCBsaW5lIHRoYXQgdGhlCisgIC8vIGdpdmVuIGxpbmUgaXMgcGFydCBv
ZiAodXN1YWxseSB0aGF0IGlzIHRoZSBsaW5lIGl0c2VsZikuCisgIGZ1bmN0aW9uIHZpc3VhbExp
bmUobGluZSkgewogICAgIHZhciBtZXJnZWQ7CiAgICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNl
ZFNwYW5BdFN0YXJ0KGxpbmUpKQotICAgICAgbGluZSA9IGdldExpbmUoZG9jLCBtZXJnZWQuZmlu
ZCgpLmZyb20ubGluZSk7CisgICAgICBsaW5lID0gbWVyZ2VkLmZpbmQoLTEsIHRydWUpLmxpbmU7
CiAgICAgcmV0dXJuIGxpbmU7CiAgIH0KIAorICAvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGxvZ2lj
YWwgbGluZXMgdGhhdCBjb250aW51ZSB0aGUgdmlzdWFsIGxpbmUKKyAgLy8gc3RhcnRlZCBieSB0
aGUgYXJndW1lbnQsIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gc3VjaCBsaW5lcy4KKyAg
ZnVuY3Rpb24gdmlzdWFsTGluZUNvbnRpbnVlZChsaW5lKSB7CisgICAgdmFyIG1lcmdlZCwgbGlu
ZXM7CisgICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSkgeworICAg
ICAgbGluZSA9IG1lcmdlZC5maW5kKDEsIHRydWUpLmxpbmU7CisgICAgICAobGluZXMgfHwgKGxp
bmVzID0gW10pKS5wdXNoKGxpbmUpOworICAgIH0KKyAgICByZXR1cm4gbGluZXM7CisgIH0KKwor
ICAvLyBHZXQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgdmlzdWFsIGxpbmUg
dGhhdCB0aGUKKyAgLy8gZ2l2ZW4gbGluZSBudW1iZXIgaXMgcGFydCBvZi4KKyAgZnVuY3Rpb24g
dmlzdWFsTGluZU5vKGRvYywgbGluZU4pIHsKKyAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBs
aW5lTiksIHZpcyA9IHZpc3VhbExpbmUobGluZSk7CisgICAgaWYgKGxpbmUgPT0gdmlzKSByZXR1
cm4gbGluZU47CisgICAgcmV0dXJuIGxpbmVObyh2aXMpOworICB9CisgIC8vIEdldCB0aGUgbGlu
ZSBudW1iZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHZpc3VhbCBsaW5lIGFmdGVyCisgIC8v
IHRoZSBnaXZlbiBsaW5lLgorICBmdW5jdGlvbiB2aXN1YWxMaW5lRW5kTm8oZG9jLCBsaW5lTikg
eworICAgIGlmIChsaW5lTiA+IGRvYy5sYXN0TGluZSgpKSByZXR1cm4gbGluZU47CisgICAgdmFy
IGxpbmUgPSBnZXRMaW5lKGRvYywgbGluZU4pLCBtZXJnZWQ7CisgICAgaWYgKCFsaW5lSXNIaWRk
ZW4oZG9jLCBsaW5lKSkgcmV0dXJuIGxpbmVOOworICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBz
ZWRTcGFuQXRFbmQobGluZSkpCisgICAgICBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGlu
ZTsKKyAgICByZXR1cm4gbGluZU5vKGxpbmUpICsgMTsKKyAgfQorCisgIC8vIENvbXB1dGUgd2hl
dGhlciBhIGxpbmUgaXMgaGlkZGVuLiBMaW5lcyBjb3VudCBhcyBoaWRkZW4gd2hlbiB0aGV5Cisg
IC8vIGFyZSBwYXJ0IG9mIGEgdmlzdWFsIGxpbmUgdGhhdCBzdGFydHMgd2l0aCBhbm90aGVyIGxp
bmUsIG9yIHdoZW4KKyAgLy8gdGhleSBhcmUgZW50aXJlbHkgY292ZXJlZCBieSBjb2xsYXBzZWQs
IG5vbi13aWRnZXQgc3Bhbi4KICAgZnVuY3Rpb24gbGluZUlzSGlkZGVuKGRvYywgbGluZSkgewog
ICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zOwogICAg
IGlmIChzcHMpIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSkgewogICAg
ICAgc3AgPSBzcHNbaV07CiAgICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIGNvbnRpbnVl
OwogICAgICAgaWYgKHNwLmZyb20gPT0gbnVsbCkgcmV0dXJuIHRydWU7Ci0gICAgICBpZiAoc3Au
bWFya2VyLnJlcGxhY2VkV2l0aCkgY29udGludWU7CisgICAgICBpZiAoc3AubWFya2VyLndpZGdl
dE5vZGUpIGNvbnRpbnVlOwogICAgICAgaWYgKHNwLmZyb20gPT0gMCAmJiBzcC5tYXJrZXIuaW5j
bHVzaXZlTGVmdCAmJiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICB9CiAgIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbklubmVyKGRv
YywgbGluZSwgc3BhbikgewogICAgIGlmIChzcGFuLnRvID09IG51bGwpIHsKLSAgICAgIHZhciBl
bmQgPSBzcGFuLm1hcmtlci5maW5kKCkudG8sIGVuZExpbmUgPSBnZXRMaW5lKGRvYywgZW5kLmxp
bmUpOwotICAgICAgcmV0dXJuIGxpbmVJc0hpZGRlbklubmVyKGRvYywgZW5kTGluZSwgZ2V0TWFy
a2VkU3BhbkZvcihlbmRMaW5lLm1hcmtlZFNwYW5zLCBzcGFuLm1hcmtlcikpOworICAgICAgdmFy
IGVuZCA9IHNwYW4ubWFya2VyLmZpbmQoMSwgdHJ1ZSk7CisgICAgICByZXR1cm4gbGluZUlzSGlk
ZGVuSW5uZXIoZG9jLCBlbmQubGluZSwgZ2V0TWFya2VkU3BhbkZvcihlbmQubGluZS5tYXJrZWRT
cGFucywgc3Bhbi5tYXJrZXIpKTsKICAgICB9CiAgICAgaWYgKHNwYW4ubWFya2VyLmluY2x1c2l2
ZVJpZ2h0ICYmIHNwYW4udG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkKICAgICAgIHJldHVybiB0cnVl
OwogICAgIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyAr
K2kpIHsKICAgICAgIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXTsKLSAgICAgIGlmIChzcC5tYXJr
ZXIuY29sbGFwc2VkICYmICFzcC5tYXJrZXIucmVwbGFjZWRXaXRoICYmIHNwLmZyb20gPT0gc3Bh
bi50byAmJgorICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgIXNwLm1hcmtlci53aWRn
ZXROb2RlICYmIHNwLmZyb20gPT0gc3Bhbi50byAmJgorICAgICAgICAgIChzcC50byA9PSBudWxs
IHx8IHNwLnRvICE9IHNwYW4uZnJvbSkgJiYKICAgICAgICAgICAoc3AubWFya2VyLmluY2x1c2l2
ZUxlZnQgfHwgc3Bhbi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpICYmCiAgICAgICAgICAgbGluZUlz
SGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcCkpIHJldHVybiB0cnVlOwogICAgIH0KICAgfQogCi0g
IGZ1bmN0aW9uIGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpIHsKLSAgICB2YXIgc3BhbnMgPSBsaW5l
Lm1hcmtlZFNwYW5zOwotICAgIGlmICghc3BhbnMpIHJldHVybjsKLSAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKQotICAgICAgc3BhbnNbaV0ubWFya2VyLmRldGFjaExp
bmUobGluZSk7Ci0gICAgbGluZS5tYXJrZWRTcGFucyA9IG51bGw7Ci0gIH0KLQotICBmdW5jdGlv
biBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBzcGFucykgewotICAgIGlmICghc3BhbnMpIHJldHVy
bjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKQotICAgICAgc3Bh
bnNbaV0ubWFya2VyLmF0dGFjaExpbmUobGluZSk7Ci0gICAgbGluZS5tYXJrZWRTcGFucyA9IHNw
YW5zOwotICB9Ci0KICAgLy8gTElORSBXSURHRVRTCiAKKyAgLy8gTGluZSB3aWRnZXRzIGFyZSBi
bG9jayBlbGVtZW50cyBkaXNwbGF5ZWQgYWJvdmUgb3IgYmVsb3cgYSBsaW5lLgorCiAgIHZhciBM
aW5lV2lkZ2V0ID0gQ29kZU1pcnJvci5MaW5lV2lkZ2V0ID0gZnVuY3Rpb24oY20sIG5vZGUsIG9w
dGlvbnMpIHsKICAgICBpZiAob3B0aW9ucykgZm9yICh2YXIgb3B0IGluIG9wdGlvbnMpIGlmIChv
cHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpCiAgICAgICB0aGlzW29wdF0gPSBvcHRpb25zW29w
dF07CkBAIC00MTk4LDM4ICs1NDQzLDM5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIHRoaXMubm9kZSA9IG5vZGU7CiAgIH07CiAgIGV2ZW50TWl4aW4oTGluZVdpZGdl
dCk7Ci0gIGZ1bmN0aW9uIHdpZGdldE9wZXJhdGlvbihmKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9u
KCkgewotICAgICAgdmFyIHdpdGhPcCA9ICF0aGlzLmNtLmN1ck9wOwotICAgICAgaWYgKHdpdGhP
cCkgc3RhcnRPcGVyYXRpb24odGhpcy5jbSk7Ci0gICAgICB0cnkge3ZhciByZXN1bHQgPSBmLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cyk7fQotICAgICAgZmluYWxseSB7aWYgKHdpdGhPcCkgZW5kT3Bl
cmF0aW9uKHRoaXMuY20pO30KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfTsKKworICBmdW5j
dGlvbiBhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlKGNtLCBsaW5lLCBkaWZmKSB7CisgICAg
aWYgKGhlaWdodEF0TGluZShsaW5lKSA8ICgoY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsVG9w
KSB8fCBjbS5kb2Muc2Nyb2xsVG9wKSkKKyAgICAgIGFkZFRvU2Nyb2xsUG9zKGNtLCBudWxsLCBk
aWZmKTsKICAgfQotICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jbGVhciA9IHdpZGdldE9wZXJhdGlv
bihmdW5jdGlvbigpIHsKLSAgICB2YXIgd3MgPSB0aGlzLmxpbmUud2lkZ2V0cywgbm8gPSBsaW5l
Tm8odGhpcy5saW5lKTsKKworICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9u
KCkgeworICAgIHZhciBjbSA9IHRoaXMuY20sIHdzID0gdGhpcy5saW5lLndpZGdldHMsIGxpbmUg
PSB0aGlzLmxpbmUsIG5vID0gbGluZU5vKGxpbmUpOwogICAgIGlmIChubyA9PSBudWxsIHx8ICF3
cykgcmV0dXJuOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd3MubGVuZ3RoOyArK2kpIGlmICh3
c1tpXSA9PSB0aGlzKSB3cy5zcGxpY2UoaS0tLCAxKTsKLSAgICBpZiAoIXdzLmxlbmd0aCkgdGhp
cy5saW5lLndpZGdldHMgPSBudWxsOwotICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExp
bmUodGhpcy5jbSwgdGhpcy5saW5lKSA8IHRoaXMuY20uZG9jLnNjcm9sbFRvcDsKLSAgICB1cGRh
dGVMaW5lSGVpZ2h0KHRoaXMubGluZSwgTWF0aC5tYXgoMCwgdGhpcy5saW5lLmhlaWdodCAtIHdp
ZGdldEhlaWdodCh0aGlzKSkpOwotICAgIGlmIChhYm92ZVZpc2libGUpIGFkZFRvU2Nyb2xsUG9z
KHRoaXMuY20sIDAsIC10aGlzLmhlaWdodCk7Ci0gICAgcmVnQ2hhbmdlKHRoaXMuY20sIG5vLCBu
byArIDEpOwotICB9KTsKLSAgTGluZVdpZGdldC5wcm90b3R5cGUuY2hhbmdlZCA9IHdpZGdldE9w
ZXJhdGlvbihmdW5jdGlvbigpIHsKLSAgICB2YXIgb2xkSCA9IHRoaXMuaGVpZ2h0OworICAgIGlm
ICghd3MubGVuZ3RoKSBsaW5lLndpZGdldHMgPSBudWxsOworICAgIHZhciBoZWlnaHQgPSB3aWRn
ZXRIZWlnaHQodGhpcyk7CisgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CisgICAgICBhZGp1
c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlKGNtLCBsaW5lLCAtaGVpZ2h0KTsKKyAgICAgIHJlZ0xp
bmVDaGFuZ2UoY20sIG5vLCAid2lkZ2V0Iik7CisgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUs
IE1hdGgubWF4KDAsIGxpbmUuaGVpZ2h0IC0gaGVpZ2h0KSk7CisgICAgfSk7CisgIH07CisgIExp
bmVXaWRnZXQucHJvdG90eXBlLmNoYW5nZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgb2xkSCA9
IHRoaXMuaGVpZ2h0LCBjbSA9IHRoaXMuY20sIGxpbmUgPSB0aGlzLmxpbmU7CiAgICAgdGhpcy5o
ZWlnaHQgPSBudWxsOwogICAgIHZhciBkaWZmID0gd2lkZ2V0SGVpZ2h0KHRoaXMpIC0gb2xkSDsK
ICAgICBpZiAoIWRpZmYpIHJldHVybjsKLSAgICB1cGRhdGVMaW5lSGVpZ2h0KHRoaXMubGluZSwg
dGhpcy5saW5lLmhlaWdodCArIGRpZmYpOwotICAgIHZhciBubyA9IGxpbmVObyh0aGlzLmxpbmUp
OwotICAgIHJlZ0NoYW5nZSh0aGlzLmNtLCBubywgbm8gKyAxKTsKLSAgfSk7CisgICAgcnVuSW5P
cChjbSwgZnVuY3Rpb24oKSB7CisgICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7Cisg
ICAgICBhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlKGNtLCBsaW5lLCBkaWZmKTsKKyAgICAg
IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyBkaWZmKTsKKyAgICB9KTsKKyAg
fTsKIAogICBmdW5jdGlvbiB3aWRnZXRIZWlnaHQod2lkZ2V0KSB7CiAgICAgaWYgKHdpZGdldC5o
ZWlnaHQgIT0gbnVsbCkgcmV0dXJuIHdpZGdldC5oZWlnaHQ7Ci0gICAgaWYgKCF3aWRnZXQubm9k
ZS5wYXJlbnROb2RlIHx8IHdpZGdldC5ub2RlLnBhcmVudE5vZGUubm9kZVR5cGUgIT0gMSkKKyAg
ICBpZiAoIWNvbnRhaW5zKGRvY3VtZW50LmJvZHksIHdpZGdldC5ub2RlKSkKICAgICAgIHJlbW92
ZUNoaWxkcmVuQW5kQWRkKHdpZGdldC5jbS5kaXNwbGF5Lm1lYXN1cmUsIGVsdCgiZGl2IiwgW3dp
ZGdldC5ub2RlXSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpKTsKICAgICByZXR1cm4gd2lk
Z2V0LmhlaWdodCA9IHdpZGdldC5ub2RlLm9mZnNldEhlaWdodDsKICAgfQpAQCAtNDIzNywxNSAr
NTQ4MywxNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24g
YWRkTGluZVdpZGdldChjbSwgaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7CiAgICAgdmFyIHdpZGdl
dCA9IG5ldyBMaW5lV2lkZ2V0KGNtLCBub2RlLCBvcHRpb25zKTsKICAgICBpZiAod2lkZ2V0Lm5v
SFNjcm9sbCkgY20uZGlzcGxheS5hbGlnbldpZGdldHMgPSB0cnVlOwotICAgIGNoYW5nZUxpbmUo
Y20sIGhhbmRsZSwgZnVuY3Rpb24obGluZSkgeworICAgIGNoYW5nZUxpbmUoY20sIGhhbmRsZSwg
IndpZGdldCIsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgIHZhciB3aWRnZXRzID0gbGluZS53aWRn
ZXRzIHx8IChsaW5lLndpZGdldHMgPSBbXSk7CiAgICAgICBpZiAod2lkZ2V0Lmluc2VydEF0ID09
IG51bGwpIHdpZGdldHMucHVzaCh3aWRnZXQpOwogICAgICAgZWxzZSB3aWRnZXRzLnNwbGljZShN
YXRoLm1pbih3aWRnZXRzLmxlbmd0aCAtIDEsIE1hdGgubWF4KDAsIHdpZGdldC5pbnNlcnRBdCkp
LCAwLCB3aWRnZXQpOwogICAgICAgd2lkZ2V0LmxpbmUgPSBsaW5lOwotICAgICAgaWYgKCFsaW5l
SXNIaWRkZW4oY20uZG9jLCBsaW5lKSB8fCB3aWRnZXQuc2hvd0lmSGlkZGVuKSB7Ci0gICAgICAg
IHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUoY20sIGxpbmUpIDwgY20uZG9jLnNjcm9s
bFRvcDsKKyAgICAgIGlmICghbGluZUlzSGlkZGVuKGNtLmRvYywgbGluZSkpIHsKKyAgICAgICAg
dmFyIGFib3ZlVmlzaWJsZSA9IGhlaWdodEF0TGluZShsaW5lKSA8IGNtLmRvYy5zY3JvbGxUb3A7
CiAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyB3aWRnZXRIZWln
aHQod2lkZ2V0KSk7Ci0gICAgICAgIGlmIChhYm92ZVZpc2libGUpIGFkZFRvU2Nyb2xsUG9zKGNt
LCAwLCB3aWRnZXQuaGVpZ2h0KTsKKyAgICAgICAgaWYgKGFib3ZlVmlzaWJsZSkgYWRkVG9TY3Jv
bGxQb3MoY20sIG51bGwsIHdpZGdldC5oZWlnaHQpOworICAgICAgICBjbS5jdXJPcC5mb3JjZVVw
ZGF0ZSA9IHRydWU7CiAgICAgICB9CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKQEAgLTQy
NjQsNiArNTUxMSw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBldmVu
dE1peGluKExpbmUpOwogICBMaW5lLnByb3RvdHlwZS5saW5lTm8gPSBmdW5jdGlvbigpIHsgcmV0
dXJuIGxpbmVObyh0aGlzKTsgfTsKIAorICAvLyBDaGFuZ2UgdGhlIGNvbnRlbnQgKHRleHQsIG1h
cmtlcnMpIG9mIGEgbGluZS4gQXV0b21hdGljYWxseQorICAvLyBpbnZhbGlkYXRlcyBjYWNoZWQg
aW5mb3JtYXRpb24gYW5kIHRyaWVzIHRvIHJlLWVzdGltYXRlIHRoZQorICAvLyBsaW5lJ3MgaGVp
Z2h0LgogICBmdW5jdGlvbiB1cGRhdGVMaW5lKGxpbmUsIHRleHQsIG1hcmtlZFNwYW5zLCBlc3Rp
bWF0ZUhlaWdodCkgewogICAgIGxpbmUudGV4dCA9IHRleHQ7CiAgICAgaWYgKGxpbmUuc3RhdGVB
ZnRlcikgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsKQEAgLTQyNzUsMjAgKzU1MjUsNDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKGVzdEhlaWdodCAhPSBsaW5l
LmhlaWdodCkgdXBkYXRlTGluZUhlaWdodChsaW5lLCBlc3RIZWlnaHQpOwogICB9CiAKKyAgLy8g
RGV0YWNoIGEgbGluZSBmcm9tIHRoZSBkb2N1bWVudCB0cmVlIGFuZCBpdHMgbWFya2Vycy4KICAg
ZnVuY3Rpb24gY2xlYW5VcExpbmUobGluZSkgewogICAgIGxpbmUucGFyZW50ID0gbnVsbDsKICAg
ICBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKTsKICAgfQogCi0gIC8vIFJ1biB0aGUgZ2l2ZW4gbW9k
ZSdzIHBhcnNlciBvdmVyIGEgbGluZSwgdXBkYXRlIHRoZSBzdHlsZXMKLSAgLy8gYXJyYXksIHdo
aWNoIGNvbnRhaW5zIGFsdGVybmF0aW5nIGZyYWdtZW50cyBvZiB0ZXh0IGFuZCBDU1MKLSAgLy8g
Y2xhc3Nlcy4KLSAgZnVuY3Rpb24gcnVuTW9kZShjbSwgdGV4dCwgbW9kZSwgc3RhdGUsIGYsIGZv
cmNlVG9FbmQpIHsKKyAgZnVuY3Rpb24gZXh0cmFjdExpbmVDbGFzc2VzKHR5cGUsIG91dHB1dCkg
eworICAgIGlmICh0eXBlKSBmb3IgKDs7KSB7CisgICAgICB2YXIgbGluZUNsYXNzID0gdHlwZS5t
YXRjaCgvKD86XnxccyspbGluZS0oYmFja2dyb3VuZC0pPyhcUyspLyk7CisgICAgICBpZiAoIWxp
bmVDbGFzcykgYnJlYWs7CisgICAgICB0eXBlID0gdHlwZS5zbGljZSgwLCBsaW5lQ2xhc3MuaW5k
ZXgpICsgdHlwZS5zbGljZShsaW5lQ2xhc3MuaW5kZXggKyBsaW5lQ2xhc3NbMF0ubGVuZ3RoKTsK
KyAgICAgIHZhciBwcm9wID0gbGluZUNsYXNzWzFdID8gImJnQ2xhc3MiIDogInRleHRDbGFzcyI7
CisgICAgICBpZiAob3V0cHV0W3Byb3BdID09IG51bGwpCisgICAgICAgIG91dHB1dFtwcm9wXSA9
IGxpbmVDbGFzc1syXTsKKyAgICAgIGVsc2UgaWYgKCEobmV3IFJlZ0V4cCgiKD86XnxccykiICsg
bGluZUNsYXNzWzJdICsgIig/OiR8XHMpIikpLnRlc3Qob3V0cHV0W3Byb3BdKSkKKyAgICAgICAg
b3V0cHV0W3Byb3BdICs9ICIgIiArIGxpbmVDbGFzc1syXTsKKyAgICB9CisgICAgcmV0dXJuIHR5
cGU7CisgIH0KKworICBmdW5jdGlvbiBjYWxsQmxhbmtMaW5lKG1vZGUsIHN0YXRlKSB7CisgICAg
aWYgKG1vZGUuYmxhbmtMaW5lKSByZXR1cm4gbW9kZS5ibGFua0xpbmUoc3RhdGUpOworICAgIGlm
ICghbW9kZS5pbm5lck1vZGUpIHJldHVybjsKKyAgICB2YXIgaW5uZXIgPSBDb2RlTWlycm9yLmlu
bmVyTW9kZShtb2RlLCBzdGF0ZSk7CisgICAgaWYgKGlubmVyLm1vZGUuYmxhbmtMaW5lKSByZXR1
cm4gaW5uZXIubW9kZS5ibGFua0xpbmUoaW5uZXIuc3RhdGUpOworICB9CisKKyAgZnVuY3Rpb24g
cmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICB2YXIgc3R5bGUgPSBtb2RlLnRv
a2VuKHN0cmVhbSwgc3RhdGUpOworICAgIGlmIChzdHJlYW0ucG9zIDw9IHN0cmVhbS5zdGFydCkK
KyAgICAgIHRocm93IG5ldyBFcnJvcigiTW9kZSAiICsgbW9kZS5uYW1lICsgIiBmYWlsZWQgdG8g
YWR2YW5jZSBzdHJlYW0uIik7CisgICAgcmV0dXJuIHN0eWxlOworICB9CisKKyAgLy8gUnVuIHRo
ZSBnaXZlbiBtb2RlJ3MgcGFyc2VyIG92ZXIgYSBsaW5lLCBjYWxsaW5nIGYgZm9yIGVhY2ggdG9r
ZW4uCisgIGZ1bmN0aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUsIHN0YXRlLCBmLCBsaW5lQ2xh
c3NlcywgZm9yY2VUb0VuZCkgewogICAgIHZhciBmbGF0dGVuU3BhbnMgPSBtb2RlLmZsYXR0ZW5T
cGFuczsKICAgICBpZiAoZmxhdHRlblNwYW5zID09IG51bGwpIGZsYXR0ZW5TcGFucyA9IGNtLm9w
dGlvbnMuZmxhdHRlblNwYW5zOwogICAgIHZhciBjdXJTdGFydCA9IDAsIGN1clN0eWxlID0gbnVs
bDsKICAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25zLnRh
YlNpemUpLCBzdHlsZTsKLSAgICBpZiAodGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9k
ZS5ibGFua0xpbmUoc3RhdGUpOworICAgIGlmICh0ZXh0ID09ICIiKSBleHRyYWN0TGluZUNsYXNz
ZXMoY2FsbEJsYW5rTGluZShtb2RlLCBzdGF0ZSksIGxpbmVDbGFzc2VzKTsKICAgICB3aGlsZSAo
IXN0cmVhbS5lb2woKSkgewogICAgICAgaWYgKHN0cmVhbS5wb3MgPiBjbS5vcHRpb25zLm1heEhp
Z2hsaWdodExlbmd0aCkgewogICAgICAgICBmbGF0dGVuU3BhbnMgPSBmYWxzZTsKQEAgLTQyOTYs
NyArNTU3MywxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAg
c3RyZWFtLnBvcyA9IHRleHQubGVuZ3RoOwogICAgICAgICBzdHlsZSA9IG51bGw7CiAgICAgICB9
IGVsc2UgewotICAgICAgICBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CisgICAg
ICAgIHN0eWxlID0gZXh0cmFjdExpbmVDbGFzc2VzKHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0
YXRlKSwgbGluZUNsYXNzZXMpOworICAgICAgfQorICAgICAgaWYgKGNtLm9wdGlvbnMuYWRkTW9k
ZUNsYXNzKSB7CisgICAgICAgIHZhciBtTmFtZSA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKG1vZGUs
IHN0YXRlKS5tb2RlLm5hbWU7CisgICAgICAgIGlmIChtTmFtZSkgc3R5bGUgPSAibS0iICsgKHN0
eWxlID8gbU5hbWUgKyAiICIgKyBzdHlsZSA6IG1OYW1lKTsKICAgICAgIH0KICAgICAgIGlmICgh
ZmxhdHRlblNwYW5zIHx8IGN1clN0eWxlICE9IHN0eWxlKSB7CiAgICAgICAgIGlmIChjdXJTdGFy
dCA8IHN0cmVhbS5zdGFydCkgZihzdHJlYW0uc3RhcnQsIGN1clN0eWxlKTsKQEAgLTQzMTIsMTQg
KzU1OTMsMTggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9
CiAKKyAgLy8gQ29tcHV0ZSBhIHN0eWxlIGFycmF5IChhbiBhcnJheSBzdGFydGluZyB3aXRoIGEg
bW9kZSBnZW5lcmF0aW9uCisgIC8vIC0tIGZvciBpbnZhbGlkYXRpb24gLS0gZm9sbG93ZWQgYnkg
cGFpcnMgb2YgZW5kIHBvc2l0aW9ucyBhbmQKKyAgLy8gc3R5bGUgc3RyaW5ncyksIHdoaWNoIGlz
IHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSB0b2tlbnMgb24gdGhlCisgIC8vIGxpbmUuCiAgIGZ1bmN0
aW9uIGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRlLCBmb3JjZVRvRW5kKSB7CiAgICAgLy8g
QSBzdHlsZXMgYXJyYXkgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbnVtYmVyIGlkZW50aWZ5aW5nIHRo
ZQogICAgIC8vIG1vZGUvb3ZlcmxheXMgdGhhdCBpdCBpcyBiYXNlZCBvbiAoZm9yIGVhc3kgaW52
YWxpZGF0aW9uKS4KLSAgICB2YXIgc3QgPSBbY20uc3RhdGUubW9kZUdlbl07CisgICAgdmFyIHN0
ID0gW2NtLnN0YXRlLm1vZGVHZW5dLCBsaW5lQ2xhc3NlcyA9IHt9OwogICAgIC8vIENvbXB1dGUg
dGhlIGJhc2UgYXJyYXkgb2Ygc3R5bGVzCiAgICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBjbS5k
b2MubW9kZSwgc3RhdGUsIGZ1bmN0aW9uKGVuZCwgc3R5bGUpIHsKICAgICAgIHN0LnB1c2goZW5k
LCBzdHlsZSk7Ci0gICAgfSwgZm9yY2VUb0VuZCk7CisgICAgfSwgbGluZUNsYXNzZXMsIGZvcmNl
VG9FbmQpOwogCiAgICAgLy8gUnVuIG92ZXJsYXlzLCBhZGp1c3Qgc3R5bGUgYXJyYXkuCiAgICAg
Zm9yICh2YXIgbyA9IDA7IG8gPCBjbS5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7ICsrbykgewpAQCAt
NDM0NCw5NiArNTYyOSw5NSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgIHN0W3N0YXJ0KzFdID0gY3VyID8gY3VyICsgIiAiICsgc3R5bGUgOiBzdHlsZTsK
ICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0pOworICAgICAgfSwgbGluZUNsYXNzZXMp
OwogICAgIH0KIAotICAgIHJldHVybiBzdDsKKyAgICByZXR1cm4ge3N0eWxlczogc3QsIGNsYXNz
ZXM6IGxpbmVDbGFzc2VzLmJnQ2xhc3MgfHwgbGluZUNsYXNzZXMudGV4dENsYXNzID8gbGluZUNs
YXNzZXMgOiBudWxsfTsKICAgfQogCiAgIGZ1bmN0aW9uIGdldExpbmVTdHlsZXMoY20sIGxpbmUp
IHsKLSAgICBpZiAoIWxpbmUuc3R5bGVzIHx8IGxpbmUuc3R5bGVzWzBdICE9IGNtLnN0YXRlLm1v
ZGVHZW4pCi0gICAgICBsaW5lLnN0eWxlcyA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIGxpbmUu
c3RhdGVBZnRlciA9IGdldFN0YXRlQmVmb3JlKGNtLCBsaW5lTm8obGluZSkpKTsKKyAgICBpZiAo
IWxpbmUuc3R5bGVzIHx8IGxpbmUuc3R5bGVzWzBdICE9IGNtLnN0YXRlLm1vZGVHZW4pIHsKKyAg
ICAgIHZhciByZXN1bHQgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBsaW5lLnN0YXRlQWZ0ZXIg
PSBnZXRTdGF0ZUJlZm9yZShjbSwgbGluZU5vKGxpbmUpKSk7CisgICAgICBsaW5lLnN0eWxlcyA9
IHJlc3VsdC5zdHlsZXM7CisgICAgICBpZiAocmVzdWx0LmNsYXNzZXMpIGxpbmUuc3R5bGVDbGFz
c2VzID0gcmVzdWx0LmNsYXNzZXM7CisgICAgICBlbHNlIGlmIChsaW5lLnN0eWxlQ2xhc3Nlcykg
bGluZS5zdHlsZUNsYXNzZXMgPSBudWxsOworICAgIH0KICAgICByZXR1cm4gbGluZS5zdHlsZXM7
CiAgIH0KIAogICAvLyBMaWdodHdlaWdodCBmb3JtIG9mIGhpZ2hsaWdodCAtLSBwcm9jZWVkIG92
ZXIgdGhpcyBsaW5lIGFuZAotICAvLyB1cGRhdGUgc3RhdGUsIGJ1dCBkb24ndCBzYXZlIGEgc3R5
bGUgYXJyYXkuCisgIC8vIHVwZGF0ZSBzdGF0ZSwgYnV0IGRvbid0IHNhdmUgYSBzdHlsZSBhcnJh
eS4gVXNlZCBmb3IgbGluZXMgdGhhdAorICAvLyBhcmVuJ3QgY3VycmVudGx5IHZpc2libGUuCiAg
IGZ1bmN0aW9uIHByb2Nlc3NMaW5lKGNtLCB0ZXh0LCBzdGF0ZSwgc3RhcnRBdCkgewogICAgIHZh
ciBtb2RlID0gY20uZG9jLm1vZGU7CiAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0o
dGV4dCwgY20ub3B0aW9ucy50YWJTaXplKTsKICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9z
ID0gc3RhcnRBdCB8fCAwOwotICAgIGlmICh0ZXh0ID09ICIiICYmIG1vZGUuYmxhbmtMaW5lKSBt
b2RlLmJsYW5rTGluZShzdGF0ZSk7CisgICAgaWYgKHRleHQgPT0gIiIpIGNhbGxCbGFua0xpbmUo
bW9kZSwgc3RhdGUpOwogICAgIHdoaWxlICghc3RyZWFtLmVvbCgpICYmIHN0cmVhbS5wb3MgPD0g
Y20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpIHsKLSAgICAgIG1vZGUudG9rZW4oc3RyZWFt
LCBzdGF0ZSk7CisgICAgICByZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgICBz
dHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgIH0KICAgfQogCi0gIHZhciBzdHlsZVRvQ2xh
c3NDYWNoZSA9IHt9OwotICBmdW5jdGlvbiBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlLCBidWls
ZGVyKSB7Ci0gICAgaWYgKCFzdHlsZSkgcmV0dXJuIG51bGw7Ci0gICAgZm9yICg7OykgewotICAg
ICAgdmFyIGxpbmVDbGFzcyA9IHN0eWxlLm1hdGNoKC8oPzpefFxzKWxpbmUtKGJhY2tncm91bmQt
KT8oXFMrKS8pOwotICAgICAgaWYgKCFsaW5lQ2xhc3MpIGJyZWFrOwotICAgICAgc3R5bGUgPSBz
dHlsZS5zbGljZSgwLCBsaW5lQ2xhc3MuaW5kZXgpICsgc3R5bGUuc2xpY2UobGluZUNsYXNzLmlu
ZGV4ICsgbGluZUNsYXNzWzBdLmxlbmd0aCk7Ci0gICAgICB2YXIgcHJvcCA9IGxpbmVDbGFzc1sx
XSA/ICJiZ0NsYXNzIiA6ICJ0ZXh0Q2xhc3MiOwotICAgICAgaWYgKGJ1aWxkZXJbcHJvcF0gPT0g
bnVsbCkKLSAgICAgICAgYnVpbGRlcltwcm9wXSA9IGxpbmVDbGFzc1syXTsKLSAgICAgIGVsc2Ug
aWYgKCEobmV3IFJlZ0V4cCgiKD86XnxccykiICsgbGluZUNsYXNzWzJdICsgIig/OiR8XHMpIikp
LnRlc3QoYnVpbGRlcltwcm9wXSkpCi0gICAgICAgIGJ1aWxkZXJbcHJvcF0gKz0gIiAiICsgbGlu
ZUNsYXNzWzJdOwotICAgIH0KLSAgICByZXR1cm4gc3R5bGVUb0NsYXNzQ2FjaGVbc3R5bGVdIHx8
Ci0gICAgICAoc3R5bGVUb0NsYXNzQ2FjaGVbc3R5bGVdID0gImNtLSIgKyBzdHlsZS5yZXBsYWNl
KC8gKy9nLCAiIGNtLSIpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGJ1aWxkTGluZUNvbnRlbnQoY20s
IHJlYWxMaW5lLCBtZWFzdXJlLCBjb3B5V2lkZ2V0cykgewotICAgIHZhciBtZXJnZWQsIGxpbmUg
PSByZWFsTGluZSwgZW1wdHkgPSB0cnVlOwotICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRT
cGFuQXRTdGFydChsaW5lKSkKLSAgICAgIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbWVyZ2VkLmZp
bmQoKS5mcm9tLmxpbmUpOwotCi0gICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHQoInByZSIpLCBj
b2w6IDAsIHBvczogMCwKLSAgICAgICAgICAgICAgICAgICBtZWFzdXJlOiBudWxsLCBtZWFzdXJl
ZFNvbWV0aGluZzogZmFsc2UsIGNtOiBjbSwKLSAgICAgICAgICAgICAgICAgICBjb3B5V2lkZ2V0
czogY29weVdpZGdldHN9OwotCi0gICAgZG8gewotICAgICAgaWYgKGxpbmUudGV4dCkgZW1wdHkg
PSBmYWxzZTsKLSAgICAgIGJ1aWxkZXIubWVhc3VyZSA9IGxpbmUgPT0gcmVhbExpbmUgJiYgbWVh
c3VyZTsKKyAgLy8gQ29udmVydCBhIHN0eWxlIGFzIHJldHVybmVkIGJ5IGEgbW9kZSAoZWl0aGVy
IG51bGwsIG9yIGEgc3RyaW5nCisgIC8vIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgc3R5bGVzKSB0
byBhIENTUyBzdHlsZS4gVGhpcyBpcyBjYWNoZWQsCisgIC8vIGFuZCBhbHNvIGxvb2tzIGZvciBs
aW5lLXdpZGUgc3R5bGVzLgorICB2YXIgc3R5bGVUb0NsYXNzQ2FjaGUgPSB7fSwgc3R5bGVUb0Ns
YXNzQ2FjaGVXaXRoTW9kZSA9IHt9OworICBmdW5jdGlvbiBpbnRlcnByZXRUb2tlblN0eWxlKHN0
eWxlLCBvcHRpb25zKSB7CisgICAgaWYgKCFzdHlsZSB8fCAvXlxzKiQvLnRlc3Qoc3R5bGUpKSBy
ZXR1cm4gbnVsbDsKKyAgICB2YXIgY2FjaGUgPSBvcHRpb25zLmFkZE1vZGVDbGFzcyA/IHN0eWxl
VG9DbGFzc0NhY2hlV2l0aE1vZGUgOiBzdHlsZVRvQ2xhc3NDYWNoZTsKKyAgICByZXR1cm4gY2Fj
aGVbc3R5bGVdIHx8CisgICAgICAoY2FjaGVbc3R5bGVdID0gc3R5bGUucmVwbGFjZSgvXFMrL2cs
ICJjbS0kJiIpKTsKKyAgfQorCisgIC8vIFJlbmRlciB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSB0ZXh0IG9mIGEgbGluZS4gQWxzbyBidWlsZHMKKyAgLy8gdXAgYSAnbGluZSBtYXAnLCB3
aGljaCBwb2ludHMgYXQgdGhlIERPTSBub2RlcyB0aGF0IHJlcHJlc2VudAorICAvLyBzcGVjaWZp
YyBzdHJldGNoZXMgb2YgdGV4dCwgYW5kIGlzIHVzZWQgYnkgdGhlIG1lYXN1cmluZyBjb2RlLgor
ICAvLyBUaGUgcmV0dXJuZWQgb2JqZWN0IGNvbnRhaW5zIHRoZSBET00gbm9kZSwgdGhpcyBtYXAs
IGFuZAorICAvLyBpbmZvcm1hdGlvbiBhYm91dCBsaW5lLXdpZGUgc3R5bGVzIHRoYXQgd2VyZSBz
ZXQgYnkgdGhlIG1vZGUuCisgIGZ1bmN0aW9uIGJ1aWxkTGluZUNvbnRlbnQoY20sIGxpbmVWaWV3
KSB7CisgICAgLy8gVGhlIHBhZGRpbmctcmlnaHQgZm9yY2VzIHRoZSBlbGVtZW50IHRvIGhhdmUg
YSAnYm9yZGVyJywgd2hpY2gKKyAgICAvLyBpcyBuZWVkZWQgb24gV2Via2l0IHRvIGJlIGFibGUg
dG8gZ2V0IGxpbmUtbGV2ZWwgYm91bmRpbmcKKyAgICAvLyByZWN0YW5nbGVzIGZvciBpdCAoaW4g
bWVhc3VyZUNoYXIpLgorICAgIHZhciBjb250ZW50ID0gZWx0KCJzcGFuIiwgbnVsbCwgbnVsbCwg
d2Via2l0ID8gInBhZGRpbmctcmlnaHQ6IC4xcHgiIDogbnVsbCk7CisgICAgdmFyIGJ1aWxkZXIg
PSB7cHJlOiBlbHQoInByZSIsIFtjb250ZW50XSksIGNvbnRlbnQ6IGNvbnRlbnQsIGNvbDogMCwg
cG9zOiAwLCBjbTogY219OworICAgIGxpbmVWaWV3Lm1lYXN1cmUgPSB7fTsKKworICAgIC8vIEl0
ZXJhdGUgb3ZlciB0aGUgbG9naWNhbCBsaW5lcyB0aGF0IG1ha2UgdXAgdGhpcyB2aXN1YWwgbGlu
ZS4KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAobGluZVZpZXcucmVzdCA/IGxpbmVWaWV3LnJl
c3QubGVuZ3RoIDogMCk7IGkrKykgeworICAgICAgdmFyIGxpbmUgPSBpID8gbGluZVZpZXcucmVz
dFtpIC0gMV0gOiBsaW5lVmlldy5saW5lLCBvcmRlcjsKICAgICAgIGJ1aWxkZXIucG9zID0gMDsK
LSAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZGVyLm1lYXN1cmUgPyBidWlsZFRva2VuTWVh
c3VyZSA6IGJ1aWxkVG9rZW47CisgICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tlbjsK
KyAgICAgIC8vIE9wdGlvbmFsbHkgd2lyZSBpbiBzb21lIGhhY2tzIGludG8gdGhlIHRva2VuLXJl
bmRlcmluZworICAgICAgLy8gYWxnb3JpdGhtLCB0byBkZWFsIHdpdGggYnJvd3NlciBxdWlya3Mu
CiAgICAgICBpZiAoKGllIHx8IHdlYmtpdCkgJiYgY20uZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmci
KSkKICAgICAgICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5TcGxpdFNwYWNlcyhidWls
ZGVyLmFkZFRva2VuKTsKLSAgICAgIHZhciBuZXh0ID0gaW5zZXJ0TGluZUNvbnRlbnQobGluZSwg
YnVpbGRlciwgZ2V0TGluZVN0eWxlcyhjbSwgbGluZSkpOwotICAgICAgaWYgKG1lYXN1cmUgJiYg
bGluZSA9PSByZWFsTGluZSAmJiAhYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZykgewotICAgICAg
ICBtZWFzdXJlWzBdID0gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChj
bS5kaXNwbGF5Lm1lYXN1cmUpKTsKLSAgICAgICAgYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZyA9
IHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAobmV4dCkgbGluZSA9IGdldExpbmUoY20uZG9jLCBu
ZXh0LnRvLmxpbmUpOwotICAgIH0gd2hpbGUgKG5leHQpOwotCi0gICAgaWYgKG1lYXN1cmUgJiYg
IWJ1aWxkZXIubWVhc3VyZWRTb21ldGhpbmcgJiYgIW1lYXN1cmVbMF0pCi0gICAgICBtZWFzdXJl
WzBdID0gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZW1wdHkgPyBlbHQoInNwYW4iLCAiXHUwMGEw
IikgOiB6ZXJvV2lkdGhFbGVtZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpOwotICAgIGlmICghYnVp
bGRlci5wcmUuZmlyc3RDaGlsZCAmJiAhbGluZUlzSGlkZGVuKGNtLmRvYywgcmVhbExpbmUpKQot
ICAgICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1
MDBhMCIpKTsKLQotICAgIHZhciBvcmRlcjsKLSAgICAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtIHdp
dGggdGhlIHJlcG9ydGVkIGRpbWVuc2lvbnMgb2Ygc2luZ2xlLWNoYXIKLSAgICAvLyBkaXJlY3Rp
b24gc3BhbnMgb24gSUUgKGlzc3VlICMxMTI5KS4gU2VlIGFsc28gdGhlIGNvbW1lbnQgaW4KLSAg
ICAvLyBjdXJzb3JDb29yZHMuCi0gICAgaWYgKG1lYXN1cmUgJiYgKGllIHx8IGllX2d0MTApICYm
IChvcmRlciA9IGdldE9yZGVyKGxpbmUpKSkgewotICAgICAgdmFyIGwgPSBvcmRlci5sZW5ndGgg
LSAxOwotICAgICAgaWYgKG9yZGVyW2xdLmZyb20gPT0gb3JkZXJbbF0udG8pIC0tbDsKLSAgICAg
IHZhciBsYXN0ID0gb3JkZXJbbF0sIHByZXYgPSBvcmRlcltsIC0gMV07Ci0gICAgICBpZiAobGFz
dC5mcm9tICsgMSA9PSBsYXN0LnRvICYmIHByZXYgJiYgbGFzdC5sZXZlbCA8IHByZXYubGV2ZWwp
IHsKLSAgICAgICAgdmFyIHNwYW4gPSBtZWFzdXJlW2J1aWxkZXIucG9zIC0gMV07Ci0gICAgICAg
IGlmIChzcGFuKSBzcGFuLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNwYW4ubWVhc3VyZVJpZ2h0
ID0gemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLm5leHRTaWJsaW5nKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICB2YXIgdGV4dENsYXNzID0gYnVpbGRlci50ZXh0Q2xhc3MgPyBidWls
ZGVyLnRleHRDbGFzcyArICIgIiArIChyZWFsTGluZS50ZXh0Q2xhc3MgfHwgIiIpIDogcmVhbExp
bmUudGV4dENsYXNzOwotICAgIGlmICh0ZXh0Q2xhc3MpIGJ1aWxkZXIucHJlLmNsYXNzTmFtZSA9
IHRleHRDbGFzczsKLQotICAgIHNpZ25hbChjbSwgInJlbmRlckxpbmUiLCBjbSwgcmVhbExpbmUs
IGJ1aWxkZXIucHJlKTsKKyAgICAgIGlmIChoYXNCYWRCaWRpUmVjdHMoY20uZGlzcGxheS5tZWFz
dXJlKSAmJiAob3JkZXIgPSBnZXRPcmRlcihsaW5lKSkpCisgICAgICAgIGJ1aWxkZXIuYWRkVG9r
ZW4gPSBidWlsZFRva2VuQmFkQmlkaShidWlsZGVyLmFkZFRva2VuLCBvcmRlcik7CisgICAgICBi
dWlsZGVyLm1hcCA9IFtdOworICAgICAgaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwg
Z2V0TGluZVN0eWxlcyhjbSwgbGluZSkpOworICAgICAgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSB7
CisgICAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzKQorICAgICAgICAgIGJ1aWxk
ZXIuYmdDbGFzcyA9IGpvaW5DbGFzc2VzKGxpbmUuc3R5bGVDbGFzc2VzLmJnQ2xhc3MsIGJ1aWxk
ZXIuYmdDbGFzcyB8fCAiIik7CisgICAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xh
c3MpCisgICAgICAgICAgYnVpbGRlci50ZXh0Q2xhc3MgPSBqb2luQ2xhc3NlcyhsaW5lLnN0eWxl
Q2xhc3Nlcy50ZXh0Q2xhc3MsIGJ1aWxkZXIudGV4dENsYXNzIHx8ICIiKTsKKyAgICAgIH0KKwor
ICAgICAgLy8gRW5zdXJlIGF0IGxlYXN0IGEgc2luZ2xlIG5vZGUgaXMgcHJlc2VudCwgZm9yIG1l
YXN1cmluZy4KKyAgICAgIGlmIChidWlsZGVyLm1hcC5sZW5ndGggPT0gMCkKKyAgICAgICAgYnVp
bGRlci5tYXAucHVzaCgwLCAwLCBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoemVyb1dpZHRo
RWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKSk7CisKKyAgICAgIC8vIFN0b3JlIHRoZSBtYXAg
YW5kIGEgY2FjaGUgb2JqZWN0IGZvciB0aGUgY3VycmVudCBsb2dpY2FsIGxpbmUKKyAgICAgIGlm
IChpID09IDApIHsKKyAgICAgICAgbGluZVZpZXcubWVhc3VyZS5tYXAgPSBidWlsZGVyLm1hcDsK
KyAgICAgICAgbGluZVZpZXcubWVhc3VyZS5jYWNoZSA9IHt9OworICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgKGxpbmVWaWV3Lm1lYXN1cmUubWFwcyB8fCAobGluZVZpZXcubWVhc3VyZS5tYXBzID0g
W10pKS5wdXNoKGJ1aWxkZXIubWFwKTsKKyAgICAgICAgKGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVz
IHx8IChsaW5lVmlldy5tZWFzdXJlLmNhY2hlcyA9IFtdKSkucHVzaCh7fSk7CisgICAgICB9Cisg
ICAgfQorCisgICAgc2lnbmFsKGNtLCAicmVuZGVyTGluZSIsIGNtLCBsaW5lVmlldy5saW5lLCBi
dWlsZGVyLnByZSk7CiAgICAgcmV0dXJuIGJ1aWxkZXI7CiAgIH0KIApAQCAtNDQ0MywxMiArNTcy
NywxNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gdG9r
ZW47CiAgIH0KIAorICAvLyBCdWlsZCB1cCB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIGZvciBhIHNp
bmdsZSB0b2tlbiwgYW5kIGFkZCBpdCB0bworICAvLyB0aGUgbGluZSBtYXAuIFRha2VzIGNhcmUg
dG8gcmVuZGVyIHNwZWNpYWwgY2hhcmFjdGVycyBzZXBhcmF0ZWx5LgogICBmdW5jdGlvbiBidWls
ZFRva2VuKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUp
IHsKICAgICBpZiAoIXRleHQpIHJldHVybjsKLSAgICB2YXIgc3BlY2lhbCA9IGJ1aWxkZXIuY20u
b3B0aW9ucy5zcGVjaWFsQ2hhcnM7CisgICAgdmFyIHNwZWNpYWwgPSBidWlsZGVyLmNtLm9wdGlv
bnMuc3BlY2lhbENoYXJzLCBtdXN0V3JhcCA9IGZhbHNlOwogICAgIGlmICghc3BlY2lhbC50ZXN0
KHRleHQpKSB7CiAgICAgICBidWlsZGVyLmNvbCArPSB0ZXh0Lmxlbmd0aDsKICAgICAgIHZhciBj
b250ZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7CisgICAgICBidWlsZGVyLm1h
cC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHRleHQubGVuZ3RoLCBjb250ZW50KTsK
KyAgICAgIGlmIChpZV91cHRvOCkgbXVzdFdyYXAgPSB0cnVlOworICAgICAgYnVpbGRlci5wb3Mg
Kz0gdGV4dC5sZW5ndGg7CiAgICAgfSBlbHNlIHsKICAgICAgIHZhciBjb250ZW50ID0gZG9jdW1l
bnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBwb3MgPSAwOwogICAgICAgd2hpbGUgKHRydWUp
IHsKQEAgLTQ0NTYsNTcgKzU3NDUsMzggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICAgIHZhciBtID0gc3BlY2lhbC5leGVjKHRleHQpOwogICAgICAgICB2YXIgc2tp
cHBlZCA9IG0gPyBtLmluZGV4IC0gcG9zIDogdGV4dC5sZW5ndGggLSBwb3M7CiAgICAgICAgIGlm
IChza2lwcGVkKSB7Ci0gICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSh0ZXh0LnNsaWNlKHBvcywgcG9zICsgc2tpcHBlZCkpKTsKKyAgICAgICAgICB2
YXIgdHh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dC5zbGljZShwb3MsIHBvcyArIHNr
aXBwZWQpKTsKKyAgICAgICAgICBpZiAoaWVfdXB0bzgpIGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0
KCJzcGFuIiwgW3R4dF0pKTsKKyAgICAgICAgICBlbHNlIGNvbnRlbnQuYXBwZW5kQ2hpbGQodHh0
KTsKKyAgICAgICAgICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyAr
IHNraXBwZWQsIHR4dCk7CiAgICAgICAgICAgYnVpbGRlci5jb2wgKz0gc2tpcHBlZDsKKyAgICAg
ICAgICBidWlsZGVyLnBvcyArPSBza2lwcGVkOwogICAgICAgICB9CiAgICAgICAgIGlmICghbSkg
YnJlYWs7CiAgICAgICAgIHBvcyArPSBza2lwcGVkICsgMTsKICAgICAgICAgaWYgKG1bMF0gPT0g
Ilx0IikgewogICAgICAgICAgIHZhciB0YWJTaXplID0gYnVpbGRlci5jbS5vcHRpb25zLnRhYlNp
emUsIHRhYldpZHRoID0gdGFiU2l6ZSAtIGJ1aWxkZXIuY29sICUgdGFiU2l6ZTsKLSAgICAgICAg
ICBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIHNwYWNlU3RyKHRhYldpZHRoKSwgImNt
LXRhYiIpKTsKKyAgICAgICAgICB2YXIgdHh0ID0gY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNw
YW4iLCBzcGFjZVN0cih0YWJXaWR0aCksICJjbS10YWIiKSk7CiAgICAgICAgICAgYnVpbGRlci5j
b2wgKz0gdGFiV2lkdGg7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdmFyIHRva2VuID0g
YnVpbGRlci5jbS5vcHRpb25zLnNwZWNpYWxDaGFyUGxhY2Vob2xkZXIobVswXSk7Ci0gICAgICAg
ICAgY29udGVudC5hcHBlbmRDaGlsZCh0b2tlbik7CisgICAgICAgICAgdmFyIHR4dCA9IGJ1aWxk
ZXIuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKG1bMF0pOworICAgICAgICAgIGlm
IChpZV91cHRvOCkgY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBbdHh0XSkpOworICAg
ICAgICAgIGVsc2UgY29udGVudC5hcHBlbmRDaGlsZCh0eHQpOwogICAgICAgICAgIGJ1aWxkZXIu
Y29sICs9IDE7CiAgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBv
cywgYnVpbGRlci5wb3MgKyAxLCB0eHQpOworICAgICAgICBidWlsZGVyLnBvcysrOwogICAgICAg
fQogICAgIH0KLSAgICBpZiAoc3R5bGUgfHwgc3RhcnRTdHlsZSB8fCBlbmRTdHlsZSB8fCBidWls
ZGVyLm1lYXN1cmUpIHsKKyAgICBpZiAoc3R5bGUgfHwgc3RhcnRTdHlsZSB8fCBlbmRTdHlsZSB8
fCBtdXN0V3JhcCkgewogICAgICAgdmFyIGZ1bGxTdHlsZSA9IHN0eWxlIHx8ICIiOwogICAgICAg
aWYgKHN0YXJ0U3R5bGUpIGZ1bGxTdHlsZSArPSBzdGFydFN0eWxlOwogICAgICAgaWYgKGVuZFN0
eWxlKSBmdWxsU3R5bGUgKz0gZW5kU3R5bGU7CiAgICAgICB2YXIgdG9rZW4gPSBlbHQoInNwYW4i
LCBbY29udGVudF0sIGZ1bGxTdHlsZSk7CiAgICAgICBpZiAodGl0bGUpIHRva2VuLnRpdGxlID0g
dGl0bGU7Ci0gICAgICByZXR1cm4gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQodG9rZW4pOwotICAg
IH0KLSAgICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChjb250ZW50KTsKLSAgfQotCi0gIGZ1bmN0
aW9uIGJ1aWxkVG9rZW5NZWFzdXJlKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBl
bmRTdHlsZSkgewotICAgIHZhciB3cmFwcGluZyA9IGJ1aWxkZXIuY20ub3B0aW9ucy5saW5lV3Jh
cHBpbmc7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgKytpKSB7Ci0gICAg
ICB2YXIgY2ggPSB0ZXh0LmNoYXJBdChpKSwgc3RhcnQgPSBpID09IDA7Ci0gICAgICBpZiAoY2gg
Pj0gIlx1ZDgwMCIgJiYgY2ggPCAiXHVkYmZmIiAmJiBpIDwgdGV4dC5sZW5ndGggLSAxKSB7Ci0g
ICAgICAgIGNoID0gdGV4dC5zbGljZShpLCBpICsgMik7Ci0gICAgICAgICsraTsKLSAgICAgIH0g
ZWxzZSBpZiAoaSAmJiB3cmFwcGluZyAmJiBzcGFuQWZmZWN0c1dyYXBwaW5nKHRleHQsIGkpKSB7
Ci0gICAgICAgIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGVsdCgid2JyIikpOwotICAgICAgfQot
ICAgICAgdmFyIG9sZCA9IGJ1aWxkZXIubWVhc3VyZVtidWlsZGVyLnBvc107Ci0gICAgICB2YXIg
c3BhbiA9IGJ1aWxkZXIubWVhc3VyZVtidWlsZGVyLnBvc10gPQotICAgICAgICBidWlsZFRva2Vu
KGJ1aWxkZXIsIGNoLCBzdHlsZSwKLSAgICAgICAgICAgICAgICAgICBzdGFydCAmJiBzdGFydFN0
eWxlLCBpID09IHRleHQubGVuZ3RoIC0gMSAmJiBlbmRTdHlsZSk7Ci0gICAgICBpZiAob2xkKSBz
cGFuLmxlZnRTaWRlID0gb2xkLmxlZnRTaWRlIHx8IG9sZDsKLSAgICAgIC8vIEluIElFIHNpbmds
ZS1zcGFjZSBub2RlcyB3cmFwIGRpZmZlcmVudGx5IHRoYW4gc3BhY2VzCi0gICAgICAvLyBlbWJl
ZGRlZCBpbiBsYXJnZXIgdGV4dCBub2RlcywgZXhjZXB0IHdoZW4gc2V0IHRvCi0gICAgICAvLyB3
aGl0ZS1zcGFjZTogbm9ybWFsIChpc3N1ZSAjMTI2OCkuCi0gICAgICBpZiAoaWUgJiYgd3JhcHBp
bmcgJiYgY2ggPT0gIiAiICYmIGkgJiYgIS9ccy8udGVzdCh0ZXh0LmNoYXJBdChpIC0gMSkpICYm
Ci0gICAgICAgICAgaSA8IHRleHQubGVuZ3RoIC0gMSAmJiAhL1xzLy50ZXN0KHRleHQuY2hhckF0
KGkgKyAxKSkpCi0gICAgICAgIHNwYW4uc3R5bGUud2hpdGVTcGFjZSA9ICJub3JtYWwiOwotICAg
ICAgYnVpbGRlci5wb3MgKz0gY2gubGVuZ3RoOworICAgICAgcmV0dXJuIGJ1aWxkZXIuY29udGVu
dC5hcHBlbmRDaGlsZCh0b2tlbik7CiAgICAgfQotICAgIGlmICh0ZXh0Lmxlbmd0aCkgYnVpbGRl
ci5tZWFzdXJlZFNvbWV0aGluZyA9IHRydWU7CisgICAgYnVpbGRlci5jb250ZW50LmFwcGVuZENo
aWxkKGNvbnRlbnQpOwogICB9CiAKICAgZnVuY3Rpb24gYnVpbGRUb2tlblNwbGl0U3BhY2VzKGlu
bmVyKSB7CkBAIC00NTE3LDI5ICs1Nzg3LDM2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgICAgcmV0dXJuIG91dDsKICAgICB9CiAgICAgcmV0dXJuIGZ1bmN0aW9uKGJ1
aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUpIHsKLSAgICAg
IHJldHVybiBpbm5lcihidWlsZGVyLCB0ZXh0LnJlcGxhY2UoLyB7Myx9L2csIHNwbGl0KSwgc3R5
bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSk7CisgICAgICBpbm5lcihidWlsZGVyLCB0
ZXh0LnJlcGxhY2UoLyB7Myx9L2csIHNwbGl0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxl
LCB0aXRsZSk7CiAgICAgfTsKICAgfQogCi0gIGZ1bmN0aW9uIGJ1aWxkQ29sbGFwc2VkU3Bhbihi
dWlsZGVyLCBzaXplLCBtYXJrZXIsIGlnbm9yZVdpZGdldCkgewotICAgIHZhciB3aWRnZXQgPSAh
aWdub3JlV2lkZ2V0ICYmIG1hcmtlci5yZXBsYWNlZFdpdGg7Ci0gICAgaWYgKHdpZGdldCkgewot
ICAgICAgaWYgKGJ1aWxkZXIuY29weVdpZGdldHMpIHdpZGdldCA9IHdpZGdldC5jbG9uZU5vZGUo
dHJ1ZSk7Ci0gICAgICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZCh3aWRnZXQpOwotICAgICAgaWYg
KGJ1aWxkZXIubWVhc3VyZSkgewotICAgICAgICBpZiAoc2l6ZSkgewotICAgICAgICAgIGJ1aWxk
ZXIubWVhc3VyZVtidWlsZGVyLnBvc10gPSB3aWRnZXQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgdmFyIGVsdCA9IHplcm9XaWR0aEVsZW1lbnQoYnVpbGRlci5jbS5kaXNwbGF5Lm1lYXN1
cmUpOwotICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSAiYm9va21hcmsiICYmICFtYXJrZXIu
aW5zZXJ0TGVmdCkKLSAgICAgICAgICAgIGJ1aWxkZXIubWVhc3VyZVtidWlsZGVyLnBvc10gPSBi
dWlsZGVyLnByZS5hcHBlbmRDaGlsZChlbHQpOwotICAgICAgICAgIGVsc2UgaWYgKGJ1aWxkZXIu
bWVhc3VyZVtidWlsZGVyLnBvc10pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgYnVpbGRlci5tZWFzdXJlW2J1aWxkZXIucG9zXSA9IGJ1aWxkZXIucHJl
Lmluc2VydEJlZm9yZShlbHQsIHdpZGdldCk7CisgIC8vIFdvcmsgYXJvdW5kIG5vbnNlbnNlIGRp
bWVuc2lvbnMgYmVpbmcgcmVwb3J0ZWQgZm9yIHN0cmV0Y2hlcyBvZgorICAvLyByaWdodC10by1s
ZWZ0IHRleHQuCisgIGZ1bmN0aW9uIGJ1aWxkVG9rZW5CYWRCaWRpKGlubmVyLCBvcmRlcikgewor
ICAgIHJldHVybiBmdW5jdGlvbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5k
U3R5bGUsIHRpdGxlKSB7CisgICAgICBzdHlsZSA9IHN0eWxlID8gc3R5bGUgKyAiIGNtLWZvcmNl
LWJvcmRlciIgOiAiY20tZm9yY2UtYm9yZGVyIjsKKyAgICAgIHZhciBzdGFydCA9IGJ1aWxkZXIu
cG9zLCBlbmQgPSBzdGFydCArIHRleHQubGVuZ3RoOworICAgICAgZm9yICg7OykgeworICAgICAg
ICAvLyBGaW5kIHRoZSBwYXJ0IHRoYXQgb3ZlcmxhcHMgd2l0aCB0aGUgc3RhcnQgb2YgdGhpcyB0
ZXh0CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICB2YXIgcGFydCA9IG9yZGVyW2ldOworICAgICAgICAgIGlmIChwYXJ0LnRvID4gc3Rh
cnQgJiYgcGFydC5mcm9tIDw9IHN0YXJ0KSBicmVhazsKICAgICAgICAgfQotICAgICAgICBidWls
ZGVyLm1lYXN1cmVkU29tZXRoaW5nID0gdHJ1ZTsKKyAgICAgICAgaWYgKHBhcnQudG8gPj0gZW5k
KSByZXR1cm4gaW5uZXIoYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxl
LCB0aXRsZSk7CisgICAgICAgIGlubmVyKGJ1aWxkZXIsIHRleHQuc2xpY2UoMCwgcGFydC50byAt
IHN0YXJ0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIG51bGwsIHRpdGxlKTsKKyAgICAgICAgc3RhcnRT
dHlsZSA9IG51bGw7CisgICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKHBhcnQudG8gLSBzdGFydCk7
CisgICAgICAgIHN0YXJ0ID0gcGFydC50bzsKICAgICAgIH0KKyAgICB9OworICB9CisKKyAgZnVu
Y3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUsIG1hcmtlciwgaWdub3JlV2lk
Z2V0KSB7CisgICAgdmFyIHdpZGdldCA9ICFpZ25vcmVXaWRnZXQgJiYgbWFya2VyLndpZGdldE5v
ZGU7CisgICAgaWYgKHdpZGdldCkgeworICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBv
cywgYnVpbGRlci5wb3MgKyBzaXplLCB3aWRnZXQpOworICAgICAgYnVpbGRlci5jb250ZW50LmFw
cGVuZENoaWxkKHdpZGdldCk7CiAgICAgfQogICAgIGJ1aWxkZXIucG9zICs9IHNpemU7CiAgIH0K
QEAgLTQ1NTAsNyArNTgyNyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnMsIGFsbFRleHQgPSBsaW5lLnRleHQsIGF0
ID0gMDsKICAgICBpZiAoIXNwYW5zKSB7CiAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHN0eWxl
cy5sZW5ndGg7IGkrPTIpCi0gICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgYWxsVGV4
dC5zbGljZShhdCwgYXQgPSBzdHlsZXNbaV0pLCBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tp
KzFdLCBidWlsZGVyKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgYWxsVGV4
dC5zbGljZShhdCwgYXQgPSBzdHlsZXNbaV0pLCBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tp
KzFdLCBidWlsZGVyLmNtLm9wdGlvbnMpKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ1
NjksMTcgKzU4NDYsMTcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICBpZiAobS5zdGFydFN0eWxlICYmIHNwLmZyb20gPT0gcG9zKSBzcGFuU3RhcnRTdHls
ZSArPSAiICIgKyBtLnN0YXJ0U3R5bGU7CiAgICAgICAgICAgICBpZiAobS5lbmRTdHlsZSAmJiBz
cC50byA9PSBuZXh0Q2hhbmdlKSBzcGFuRW5kU3R5bGUgKz0gIiAiICsgbS5lbmRTdHlsZTsKICAg
ICAgICAgICAgIGlmIChtLnRpdGxlICYmICF0aXRsZSkgdGl0bGUgPSBtLnRpdGxlOwotICAgICAg
ICAgICAgaWYgKG0uY29sbGFwc2VkICYmICghY29sbGFwc2VkIHx8IGNvbGxhcHNlZC5tYXJrZXIu
c2l6ZSA8IG0uc2l6ZSkpCisgICAgICAgICAgICBpZiAobS5jb2xsYXBzZWQgJiYgKCFjb2xsYXBz
ZWQgfHwgY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoY29sbGFwc2VkLm1hcmtlciwgbSkgPCAwKSkK
ICAgICAgICAgICAgICAgY29sbGFwc2VkID0gc3A7CiAgICAgICAgICAgfSBlbHNlIGlmIChzcC5m
cm9tID4gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC5mcm9tKSB7CiAgICAgICAgICAgICBuZXh0Q2hh
bmdlID0gc3AuZnJvbTsKICAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKG0udHlwZSA9PSAiYm9v
a21hcmsiICYmIHNwLmZyb20gPT0gcG9zICYmIG0ucmVwbGFjZWRXaXRoKSBmb3VuZEJvb2ttYXJr
cy5wdXNoKG0pOworICAgICAgICAgIGlmIChtLnR5cGUgPT0gImJvb2ttYXJrIiAmJiBzcC5mcm9t
ID09IHBvcyAmJiBtLndpZGdldE5vZGUpIGZvdW5kQm9va21hcmtzLnB1c2gobSk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGNvbGxhcHNlZCAmJiAoY29sbGFwc2VkLmZyb20gfHwgMCkgPT0gcG9z
KSB7Ci0gICAgICAgICAgYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIChjb2xsYXBzZWQudG8g
PT0gbnVsbCA/IGxlbiA6IGNvbGxhcHNlZC50bykgLSBwb3MsCisgICAgICAgICAgYnVpbGRDb2xs
YXBzZWRTcGFuKGJ1aWxkZXIsIChjb2xsYXBzZWQudG8gPT0gbnVsbCA/IGxlbiArIDEgOiBjb2xs
YXBzZWQudG8pIC0gcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQu
bWFya2VyLCBjb2xsYXBzZWQuZnJvbSA9PSBudWxsKTsKLSAgICAgICAgICBpZiAoY29sbGFwc2Vk
LnRvID09IG51bGwpIHJldHVybiBjb2xsYXBzZWQubWFya2VyLmZpbmQoKTsKKyAgICAgICAgICBp
ZiAoY29sbGFwc2VkLnRvID09IG51bGwpIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAo
IWNvbGxhcHNlZCAmJiBmb3VuZEJvb2ttYXJrcy5sZW5ndGgpIGZvciAodmFyIGogPSAwOyBqIDwg
Zm91bmRCb29rbWFya3MubGVuZ3RoOyArK2opCiAgICAgICAgICAgYnVpbGRDb2xsYXBzZWRTcGFu
KGJ1aWxkZXIsIDAsIGZvdW5kQm9va21hcmtzW2pdKTsKQEAgLTQ2MDAsMTQgKzU4NzcsMjMgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgc3BhblN0YXJ0U3R5
bGUgPSAiIjsKICAgICAgICAgfQogICAgICAgICB0ZXh0ID0gYWxsVGV4dC5zbGljZShhdCwgYXQg
PSBzdHlsZXNbaSsrXSk7Ci0gICAgICAgIHN0eWxlID0gaW50ZXJwcmV0VG9rZW5TdHlsZShzdHls
ZXNbaSsrXSwgYnVpbGRlcik7CisgICAgICAgIHN0eWxlID0gaW50ZXJwcmV0VG9rZW5TdHlsZShz
dHlsZXNbaSsrXSwgYnVpbGRlci5jbS5vcHRpb25zKTsKICAgICAgIH0KICAgICB9CiAgIH0KIAog
ICAvLyBET0NVTUVOVCBEQVRBIFNUUlVDVFVSRQogCi0gIGZ1bmN0aW9uIHVwZGF0ZURvYyhkb2Ms
IGNoYW5nZSwgbWFya2VkU3BhbnMsIHNlbEFmdGVyLCBlc3RpbWF0ZUhlaWdodCkgeworICAvLyBC
eSBkZWZhdWx0LCB1cGRhdGVzIHRoYXQgc3RhcnQgYW5kIGVuZCBhdCB0aGUgYmVnaW5uaW5nIG9m
IGEgbGluZQorICAvLyBhcmUgdHJlYXRlZCBzcGVjaWFsbHksIGluIG9yZGVyIHRvIG1ha2UgdGhl
IGFzc29jaWF0aW9uIG9mIGxpbmUKKyAgLy8gd2lkZ2V0cyBhbmQgbWFya2VyIGVsZW1lbnRzIHdp
dGggdGhlIHRleHQgYmVoYXZlIG1vcmUgaW50dWl0aXZlLgorICBmdW5jdGlvbiBpc1dob2xlTGlu
ZVVwZGF0ZShkb2MsIGNoYW5nZSkgeworICAgIHJldHVybiBjaGFuZ2UuZnJvbS5jaCA9PSAwICYm
IGNoYW5nZS50by5jaCA9PSAwICYmIGxzdChjaGFuZ2UudGV4dCkgPT0gIiIgJiYKKyAgICAgICgh
ZG9jLmNtIHx8IGRvYy5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSk7CisgIH0KKwor
ICAvLyBQZXJmb3JtIGEgY2hhbmdlIG9uIHRoZSBkb2N1bWVudCBkYXRhIHN0cnVjdHVyZS4KKyAg
ZnVuY3Rpb24gdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWln
aHQpIHsKICAgICBmdW5jdGlvbiBzcGFuc0ZvcihuKSB7cmV0dXJuIG1hcmtlZFNwYW5zID8gbWFy
a2VkU3BhbnNbbl0gOiBudWxsO30KICAgICBmdW5jdGlvbiB1cGRhdGUobGluZSwgdGV4dCwgc3Bh
bnMpIHsKICAgICAgIHVwZGF0ZUxpbmUobGluZSwgdGV4dCwgc3BhbnMsIGVzdGltYXRlSGVpZ2h0
KTsKQEAgLTQ2MTgsMTIgKzU5MDQsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgdmFyIGZpcnN0TGluZSA9IGdldExpbmUoZG9jLCBmcm9tLmxpbmUpLCBsYXN0TGlu
ZSA9IGdldExpbmUoZG9jLCB0by5saW5lKTsKICAgICB2YXIgbGFzdFRleHQgPSBsc3QodGV4dCks
IGxhc3RTcGFucyA9IHNwYW5zRm9yKHRleHQubGVuZ3RoIC0gMSksIG5saW5lcyA9IHRvLmxpbmUg
LSBmcm9tLmxpbmU7CiAKLSAgICAvLyBGaXJzdCBhZGp1c3QgdGhlIGxpbmUgc3RydWN0dXJlCi0g
ICAgaWYgKGZyb20uY2ggPT0gMCAmJiB0by5jaCA9PSAwICYmIGxhc3RUZXh0ID09ICIiICYmCi0g
ICAgICAgICghZG9jLmNtIHx8IGRvYy5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSkp
IHsKKyAgICAvLyBBZGp1c3QgdGhlIGxpbmUgc3RydWN0dXJlCisgICAgaWYgKGlzV2hvbGVMaW5l
VXBkYXRlKGRvYywgY2hhbmdlKSkgewogICAgICAgLy8gVGhpcyBpcyBhIHdob2xlLWxpbmUgcmVw
bGFjZS4gVHJlYXRlZCBzcGVjaWFsbHkgdG8gbWFrZQogICAgICAgLy8gc3VyZSBsaW5lIG9iamVj
dHMgbW92ZSB0aGUgd2F5IHRoZXkgYXJlIHN1cHBvc2VkIHRvLgotICAgICAgZm9yICh2YXIgaSA9
IDAsIGUgPSB0ZXh0Lmxlbmd0aCAtIDEsIGFkZGVkID0gW107IGkgPCBlOyArK2kpCisgICAgICBm
b3IgKHZhciBpID0gMCwgYWRkZWQgPSBbXTsgaSA8IHRleHQubGVuZ3RoIC0gMTsgKytpKQogICAg
ICAgICBhZGRlZC5wdXNoKG5ldyBMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhl
aWdodCkpOwogICAgICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0TGluZS50ZXh0LCBsYXN0U3BhbnMp
OwogICAgICAgaWYgKG5saW5lcykgZG9jLnJlbW92ZShmcm9tLmxpbmUsIG5saW5lcyk7CkBAIC00
NjMyLDcgKzU5MTcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IGlmICh0ZXh0Lmxlbmd0aCA9PSAxKSB7CiAgICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0
TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgbGFzdFRleHQgKyBmaXJzdExpbmUudGV4dC5z
bGljZSh0by5jaCksIGxhc3RTcGFucyk7CiAgICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHZh
ciBhZGRlZCA9IFtdLCBpID0gMSwgZSA9IHRleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkKKyAg
ICAgICAgZm9yICh2YXIgYWRkZWQgPSBbXSwgaSA9IDE7IGkgPCB0ZXh0Lmxlbmd0aCAtIDE7ICsr
aSkKICAgICAgICAgICBhZGRlZC5wdXNoKG5ldyBMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBl
c3RpbWF0ZUhlaWdodCkpOwogICAgICAgICBhZGRlZC5wdXNoKG5ldyBMaW5lKGxhc3RUZXh0ICsg
Zmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMsIGVzdGltYXRlSGVpZ2h0KSk7
CiAgICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20u
Y2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpOwpAQCAtNDY0NCwyMCArNTkyOSwzMiBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9IGVsc2UgewogICAgICAgdXBkYXRl
KGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdLCBz
cGFuc0ZvcigwKSk7CiAgICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RUZXh0ICsgbGFzdExpbmUu
dGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7Ci0gICAgICBmb3IgKHZhciBpID0gMSwgZSA9
IHRleHQubGVuZ3RoIC0gMSwgYWRkZWQgPSBbXTsgaSA8IGU7ICsraSkKKyAgICAgIGZvciAodmFy
IGkgPSAxLCBhZGRlZCA9IFtdOyBpIDwgdGV4dC5sZW5ndGggLSAxOyArK2kpCiAgICAgICAgIGFk
ZGVkLnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7
CiAgICAgICBpZiAobmxpbmVzID4gMSkgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMg
LSAxKTsKICAgICAgIGRvYy5pbnNlcnQoZnJvbS5saW5lICsgMSwgYWRkZWQpOwogICAgIH0KIAog
ICAgIHNpZ25hbExhdGVyKGRvYywgImNoYW5nZSIsIGRvYywgY2hhbmdlKTsKLSAgICBzZXRTZWxl
Y3Rpb24oZG9jLCBzZWxBZnRlci5hbmNob3IsIHNlbEFmdGVyLmhlYWQsIG51bGwsIHRydWUpOwog
ICB9CiAKKyAgLy8gVGhlIGRvY3VtZW50IGlzIHJlcHJlc2VudGVkIGFzIGEgQlRyZWUgY29uc2lz
dGluZyBvZiBsZWF2ZXMsIHdpdGgKKyAgLy8gY2h1bmsgb2YgbGluZXMgaW4gdGhlbSwgYW5kIGJy
YW5jaGVzLCB3aXRoIHVwIHRvIHRlbiBsZWF2ZXMgb3IKKyAgLy8gb3RoZXIgYnJhbmNoIG5vZGVz
IGJlbG93IHRoZW0uIFRoZSB0b3Agbm9kZSBpcyBhbHdheXMgYSBicmFuY2gKKyAgLy8gbm9kZSwg
YW5kIGlzIHRoZSBkb2N1bWVudCBvYmplY3QgaXRzZWxmIChtZWFuaW5nIGl0IGhhcworICAvLyBh
ZGRpdGlvbmFsIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMpLgorICAvLworICAvLyBBbGwgbm9kZXMg
aGF2ZSBwYXJlbnQgbGlua3MuIFRoZSB0cmVlIGlzIHVzZWQgYm90aCB0byBnbyBmcm9tCisgIC8v
IGxpbmUgbnVtYmVycyB0byBsaW5lIG9iamVjdHMsIGFuZCB0byBnbyBmcm9tIG9iamVjdHMgdG8g
bnVtYmVycy4KKyAgLy8gSXQgYWxzbyBpbmRleGVzIGJ5IGhlaWdodCwgYW5kIGlzIHVzZWQgdG8g
Y29udmVydCBiZXR3ZWVuIGhlaWdodAorICAvLyBhbmQgbGluZSBvYmplY3QsIGFuZCB0byBmaW5k
IHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGRvY3VtZW50LgorICAvLworICAvLyBTZWUgYWxzbyBo
dHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2Jsb2cvY29kZW1pcnJvci1saW5lLXRyZWUuaHRtbAor
CiAgIGZ1bmN0aW9uIExlYWZDaHVuayhsaW5lcykgewogICAgIHRoaXMubGluZXMgPSBsaW5lczsK
ICAgICB0aGlzLnBhcmVudCA9IG51bGw7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5lcy5s
ZW5ndGgsIGhlaWdodCA9IDA7IGkgPCBlOyArK2kpIHsKKyAgICBmb3IgKHZhciBpID0gMCwgaGVp
Z2h0ID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7CiAgICAgICBsaW5lc1tpXS5wYXJlbnQg
PSB0aGlzOwogICAgICAgaGVpZ2h0ICs9IGxpbmVzW2ldLmhlaWdodDsKICAgICB9CkBAIC00NjY2
LDYgKzU5NjMsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICBMZWFm
Q2h1bmsucHJvdG90eXBlID0gewogICAgIGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0
aGlzLmxpbmVzLmxlbmd0aDsgfSwKKyAgICAvLyBSZW1vdmUgdGhlIG4gbGluZXMgYXQgb2Zmc2V0
ICdhdCcuCiAgICAgcmVtb3ZlSW5uZXI6IGZ1bmN0aW9uKGF0LCBuKSB7CiAgICAgICBmb3IgKHZh
ciBpID0gYXQsIGUgPSBhdCArIG47IGkgPCBlOyArK2kpIHsKICAgICAgICAgdmFyIGxpbmUgPSB0
aGlzLmxpbmVzW2ldOwpAQCAtNDY3NSwxNCArNTk3MywxOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIH0KICAgICAgIHRoaXMubGluZXMuc3BsaWNlKGF0LCBuKTsK
ICAgICB9LAorICAgIC8vIEhlbHBlciB1c2VkIHRvIGNvbGxhcHNlIGEgc21hbGwgYnJhbmNoIGlu
dG8gYSBzaW5nbGUgbGVhZi4KICAgICBjb2xsYXBzZTogZnVuY3Rpb24obGluZXMpIHsKLSAgICAg
IGxpbmVzLnNwbGljZS5hcHBseShsaW5lcywgW2xpbmVzLmxlbmd0aCwgMF0uY29uY2F0KHRoaXMu
bGluZXMpKTsKKyAgICAgIGxpbmVzLnB1c2guYXBwbHkobGluZXMsIHRoaXMubGluZXMpOwogICAg
IH0sCisgICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBhcnJheSBvZiBsaW5lcyBhdCBvZmZzZXQgJ2F0
JywgY291bnQgdGhlbSBhcworICAgIC8vIGhhdmluZyB0aGUgZ2l2ZW4gaGVpZ2h0LgogICAgIGlu
c2VydElubmVyOiBmdW5jdGlvbihhdCwgbGluZXMsIGhlaWdodCkgewogICAgICAgdGhpcy5oZWln
aHQgKz0gaGVpZ2h0OwogICAgICAgdGhpcy5saW5lcyA9IHRoaXMubGluZXMuc2xpY2UoMCwgYXQp
LmNvbmNhdChsaW5lcykuY29uY2F0KHRoaXMubGluZXMuc2xpY2UoYXQpKTsKLSAgICAgIGZvciAo
dmFyIGkgPSAwLCBlID0gbGluZXMubGVuZ3RoOyBpIDwgZTsgKytpKSBsaW5lc1tpXS5wYXJlbnQg
PSB0aGlzOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgbGlu
ZXNbaV0ucGFyZW50ID0gdGhpczsKICAgICB9LAorICAgIC8vIFVzZWQgdG8gaXRlcmF0ZSBvdmVy
IGEgcGFydCBvZiB0aGUgdHJlZS4KICAgICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7CiAg
ICAgICBmb3IgKHZhciBlID0gYXQgKyBuOyBhdCA8IGU7ICsrYXQpCiAgICAgICAgIGlmIChvcCh0
aGlzLmxpbmVzW2F0XSkpIHJldHVybiB0cnVlOwpAQCAtNDY5Miw3ICs1OTk0LDcgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIEJyYW5jaENodW5rKGNoaWxk
cmVuKSB7CiAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuOwogICAgIHZhciBzaXplID0gMCwg
aGVpZ2h0ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8
IGU7ICsraSkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kp
IHsKICAgICAgIHZhciBjaCA9IGNoaWxkcmVuW2ldOwogICAgICAgc2l6ZSArPSBjaC5jaHVua1Np
emUoKTsgaGVpZ2h0ICs9IGNoLmhlaWdodDsKICAgICAgIGNoLnBhcmVudCA9IHRoaXM7CkBAIC00
NzE3LDcgKzYwMTksMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgYXQgPSAwOwogICAgICAgICB9IGVsc2UgYXQgLT0gc3o7CiAgICAgICB9Ci0gICAgICBp
ZiAodGhpcy5zaXplIC0gbiA8IDI1KSB7CisgICAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIHNtYWxs
ZXIgdGhhbiAyNSBsaW5lcywgZW5zdXJlIHRoYXQgaXQgaXMgYQorICAgICAgLy8gc2luZ2xlIGxl
YWYgbm9kZS4KKyAgICAgIGlmICh0aGlzLnNpemUgLSBuIDwgMjUgJiYKKyAgICAgICAgICAodGhp
cy5jaGlsZHJlbi5sZW5ndGggPiAxIHx8ICEodGhpcy5jaGlsZHJlblswXSBpbnN0YW5jZW9mIExl
YWZDaHVuaykpKSB7CiAgICAgICAgIHZhciBsaW5lcyA9IFtdOwogICAgICAgICB0aGlzLmNvbGxh
cHNlKGxpbmVzKTsKICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtuZXcgTGVhZkNodW5rKGxpbmVz
KV07CkBAIC00NzI1LDEyICs2MDMwLDEyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgfQogICAgIH0sCiAgICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7Ci0g
ICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytp
KSB0aGlzLmNoaWxkcmVuW2ldLmNvbGxhcHNlKGxpbmVzKTsKKyAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgdGhpcy5jaGlsZHJlbltpXS5jb2xsYXBz
ZShsaW5lcyk7CiAgICAgfSwKICAgICBpbnNlcnRJbm5lcjogZnVuY3Rpb24oYXQsIGxpbmVzLCBo
ZWlnaHQpIHsKICAgICAgIHRoaXMuc2l6ZSArPSBsaW5lcy5sZW5ndGg7CiAgICAgICB0aGlzLmhl
aWdodCArPSBoZWlnaHQ7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuY2hpbGRyZW4u
bGVuZ3RoOyBpIDwgZTsgKytpKSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hp
bGRyZW4ubGVuZ3RoOyArK2kpIHsKICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltp
XSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgICAgaWYgKGF0IDw9IHN6KSB7CiAgICAg
ICAgICAgY2hpbGQuaW5zZXJ0SW5uZXIoYXQsIGxpbmVzLCBoZWlnaHQpOwpAQCAtNDc0OSw2ICs2
MDU0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGF0IC09
IHN6OwogICAgICAgfQogICAgIH0sCisgICAgLy8gV2hlbiBhIG5vZGUgaGFzIGdyb3duLCBjaGVj
ayB3aGV0aGVyIGl0IHNob3VsZCBiZSBzcGxpdC4KICAgICBtYXliZVNwaWxsOiBmdW5jdGlvbigp
IHsKICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA8PSAxMCkgcmV0dXJuOwogICAgICAg
dmFyIG1lID0gdGhpczsKQEAgLTQ3NzEsNyArNjA3Nyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgICAgbWUucGFyZW50Lm1heWJlU3BpbGwoKTsKICAgICB9LAogICAg
IGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBlID0g
dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKKyAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgY2hpbGQgPSB0
aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICAgICBpZiAoYXQg
PCBzeikgewogICAgICAgICAgIHZhciB1c2VkID0gTWF0aC5taW4obiwgc3ogLSBhdCk7CkBAIC00
NzkyLDQzICs2MDk4LDUyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IHRoaXMuZmlyc3QgPSBmaXJzdExpbmU7CiAgICAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9s
bExlZnQgPSAwOwogICAgIHRoaXMuY2FudEVkaXQgPSBmYWxzZTsKLSAgICB0aGlzLmhpc3Rvcnkg
PSBtYWtlSGlzdG9yeSgpOwogICAgIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gMTsKICAgICB0aGlz
LmZyb250aWVyID0gZmlyc3RMaW5lOwogICAgIHZhciBzdGFydCA9IFBvcyhmaXJzdExpbmUsIDAp
OwotICAgIHRoaXMuc2VsID0ge2Zyb206IHN0YXJ0LCB0bzogc3RhcnQsIGhlYWQ6IHN0YXJ0LCBh
bmNob3I6IHN0YXJ0LCBzaGlmdDogZmFsc2UsIGV4dGVuZDogZmFsc2UsIGdvYWxDb2x1bW46IG51
bGx9OworICAgIHRoaXMuc2VsID0gc2ltcGxlU2VsZWN0aW9uKHN0YXJ0KTsKKyAgICB0aGlzLmhp
c3RvcnkgPSBuZXcgSGlzdG9yeShudWxsKTsKICAgICB0aGlzLmlkID0gKytuZXh0RG9jSWQ7CiAg
ICAgdGhpcy5tb2RlT3B0aW9uID0gbW9kZTsKIAogICAgIGlmICh0eXBlb2YgdGV4dCA9PSAic3Ry
aW5nIikgdGV4dCA9IHNwbGl0TGluZXModGV4dCk7Ci0gICAgdXBkYXRlRG9jKHRoaXMsIHtmcm9t
OiBzdGFydCwgdG86IHN0YXJ0LCB0ZXh0OiB0ZXh0fSwgbnVsbCwge2hlYWQ6IHN0YXJ0LCBhbmNo
b3I6IHN0YXJ0fSk7CisgICAgdXBkYXRlRG9jKHRoaXMsIHtmcm9tOiBzdGFydCwgdG86IHN0YXJ0
LCB0ZXh0OiB0ZXh0fSk7CisgICAgc2V0U2VsZWN0aW9uKHRoaXMsIHNpbXBsZVNlbGVjdGlvbihz
dGFydCksIHNlbF9kb250U2Nyb2xsKTsKICAgfTsKIAogICBEb2MucHJvdG90eXBlID0gY3JlYXRl
T2JqKEJyYW5jaENodW5rLnByb3RvdHlwZSwgewogICAgIGNvbnN0cnVjdG9yOiBEb2MsCisgICAg
Ly8gSXRlcmF0ZSBvdmVyIHRoZSBkb2N1bWVudC4gU3VwcG9ydHMgdHdvIGZvcm1zIC0tIHdpdGgg
b25seSBvbmUKKyAgICAvLyBhcmd1bWVudCwgaXQgY2FsbHMgdGhhdCBmb3IgZWFjaCBsaW5lIGlu
IHRoZSBkb2N1bWVudC4gV2l0aAorICAgIC8vIHRocmVlLCBpdCBpdGVyYXRlcyBvdmVyIHRoZSBy
YW5nZSBnaXZlbiBieSB0aGUgZmlyc3QgdHdvICh3aXRoCisgICAgLy8gdGhlIHNlY29uZCBiZWlu
ZyBub24taW5jbHVzaXZlKS4KICAgICBpdGVyOiBmdW5jdGlvbihmcm9tLCB0bywgb3ApIHsKICAg
ICAgIGlmIChvcCkgdGhpcy5pdGVyTihmcm9tIC0gdGhpcy5maXJzdCwgdG8gLSBmcm9tLCBvcCk7
CiAgICAgICBlbHNlIHRoaXMuaXRlck4odGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6
ZSwgZnJvbSk7CiAgICAgfSwKIAorICAgIC8vIE5vbi1wdWJsaWMgaW50ZXJmYWNlIGZvciBhZGRp
bmcgYW5kIHJlbW92aW5nIGxpbmVzLgogICAgIGluc2VydDogZnVuY3Rpb24oYXQsIGxpbmVzKSB7
CiAgICAgICB2YXIgaGVpZ2h0ID0gMDsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gbGluZXMu
bGVuZ3RoOyBpIDwgZTsgKytpKSBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0OworICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgaGVpZ2h0ICs9IGxpbmVzW2ldLmhl
aWdodDsKICAgICAgIHRoaXMuaW5zZXJ0SW5uZXIoYXQgLSB0aGlzLmZpcnN0LCBsaW5lcywgaGVp
Z2h0KTsKICAgICB9LAogICAgIHJlbW92ZTogZnVuY3Rpb24oYXQsIG4pIHsgdGhpcy5yZW1vdmVJ
bm5lcihhdCAtIHRoaXMuZmlyc3QsIG4pOyB9LAogCisgICAgLy8gRnJvbSBoZXJlLCB0aGUgbWV0
aG9kcyBhcmUgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gTW9zdAorICAgIC8vIGFyZSBh
bHNvIGF2YWlsYWJsZSBmcm9tIENvZGVNaXJyb3IgKGVkaXRvcikgaW5zdGFuY2VzLgorCiAgICAg
Z2V0VmFsdWU6IGZ1bmN0aW9uKGxpbmVTZXApIHsKICAgICAgIHZhciBsaW5lcyA9IGdldExpbmVz
KHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpOwogICAgICAgaWYgKGxp
bmVTZXAgPT09IGZhbHNlKSByZXR1cm4gbGluZXM7CiAgICAgICByZXR1cm4gbGluZXMuam9pbihs
aW5lU2VwIHx8ICJcbiIpOwogICAgIH0sCi0gICAgc2V0VmFsdWU6IGZ1bmN0aW9uKGNvZGUpIHsK
KyAgICBzZXRWYWx1ZTogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSkgewogICAgICAgdmFyIHRv
cCA9IFBvcyh0aGlzLmZpcnN0LCAwKSwgbGFzdCA9IHRoaXMuZmlyc3QgKyB0aGlzLnNpemUgLSAx
OwogICAgICAgbWFrZUNoYW5nZSh0aGlzLCB7ZnJvbTogdG9wLCB0bzogUG9zKGxhc3QsIGdldExp
bmUodGhpcywgbGFzdCkudGV4dC5sZW5ndGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dDogc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2luOiAic2V0VmFsdWUifSwKLSAgICAgICAgICAgICAg
ICAge2hlYWQ6IHRvcCwgYW5jaG9yOiB0b3B9LCB0cnVlKTsKLSAgICB9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dDogc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2luOiAic2V0VmFsdWUifSwg
dHJ1ZSk7CisgICAgICBzZXRTZWxlY3Rpb24odGhpcywgc2ltcGxlU2VsZWN0aW9uKHRvcCkpOwor
ICAgIH0pLAogICAgIHJlcGxhY2VSYW5nZTogZnVuY3Rpb24oY29kZSwgZnJvbSwgdG8sIG9yaWdp
bikgewogICAgICAgZnJvbSA9IGNsaXBQb3ModGhpcywgZnJvbSk7CiAgICAgICB0byA9IHRvID8g
Y2xpcFBvcyh0aGlzLCB0bykgOiBmcm9tOwpAQCAtNDg0MSwyMSArNjE1NiwxMyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9LAogCiAgICAgZ2V0TGluZTogZnVuY3Rp
b24obGluZSkge3ZhciBsID0gdGhpcy5nZXRMaW5lSGFuZGxlKGxpbmUpOyByZXR1cm4gbCAmJiBs
LnRleHQ7fSwKLSAgICBzZXRMaW5lOiBmdW5jdGlvbihsaW5lLCB0ZXh0KSB7Ci0gICAgICBpZiAo
aXNMaW5lKHRoaXMsIGxpbmUpKQotICAgICAgICByZXBsYWNlUmFuZ2UodGhpcywgdGV4dCwgUG9z
KGxpbmUsIDApLCBjbGlwUG9zKHRoaXMsIFBvcyhsaW5lKSkpOwotICAgIH0sCi0gICAgcmVtb3Zl
TGluZTogZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGxpbmUpIHJlcGxhY2VSYW5nZSh0aGlz
LCAiIiwgY2xpcFBvcyh0aGlzLCBQb3MobGluZSAtIDEpKSwgY2xpcFBvcyh0aGlzLCBQb3MobGlu
ZSkpKTsKLSAgICAgIGVsc2UgcmVwbGFjZVJhbmdlKHRoaXMsICIiLCBQb3MoMCwgMCksIGNsaXBQ
b3ModGhpcywgUG9zKDEsIDApKSk7Ci0gICAgfSwKIAogICAgIGdldExpbmVIYW5kbGU6IGZ1bmN0
aW9uKGxpbmUpIHtpZiAoaXNMaW5lKHRoaXMsIGxpbmUpKSByZXR1cm4gZ2V0TGluZSh0aGlzLCBs
aW5lKTt9LAogICAgIGdldExpbmVOdW1iZXI6IGZ1bmN0aW9uKGxpbmUpIHtyZXR1cm4gbGluZU5v
KGxpbmUpO30sCiAKICAgICBnZXRMaW5lSGFuZGxlVmlzdWFsU3RhcnQ6IGZ1bmN0aW9uKGxpbmUp
IHsKICAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUodGhp
cywgbGluZSk7Ci0gICAgICByZXR1cm4gdmlzdWFsTGluZSh0aGlzLCBsaW5lKTsKKyAgICAgIHJl
dHVybiB2aXN1YWxMaW5lKGxpbmUpOwogICAgIH0sCiAKICAgICBsaW5lQ291bnQ6IGZ1bmN0aW9u
KCkge3JldHVybiB0aGlzLnNpemU7fSwKQEAgLTQ4NjUsNDcgKzYxNzIsMTAzIEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGNsaXBQb3M6IGZ1bmN0aW9uKHBvcykge3Jl
dHVybiBjbGlwUG9zKHRoaXMsIHBvcyk7fSwKIAogICAgIGdldEN1cnNvcjogZnVuY3Rpb24oc3Rh
cnQpIHsKLSAgICAgIHZhciBzZWwgPSB0aGlzLnNlbCwgcG9zOwotICAgICAgaWYgKHN0YXJ0ID09
IG51bGwgfHwgc3RhcnQgPT0gImhlYWQiKSBwb3MgPSBzZWwuaGVhZDsKLSAgICAgIGVsc2UgaWYg
KHN0YXJ0ID09ICJhbmNob3IiKSBwb3MgPSBzZWwuYW5jaG9yOwotICAgICAgZWxzZSBpZiAoc3Rh
cnQgPT0gImVuZCIgfHwgc3RhcnQgPT09IGZhbHNlKSBwb3MgPSBzZWwudG87Ci0gICAgICBlbHNl
IHBvcyA9IHNlbC5mcm9tOwotICAgICAgcmV0dXJuIGNvcHlQb3MocG9zKTsKKyAgICAgIHZhciBy
YW5nZSA9IHRoaXMuc2VsLnByaW1hcnkoKSwgcG9zOworICAgICAgaWYgKHN0YXJ0ID09IG51bGwg
fHwgc3RhcnQgPT0gImhlYWQiKSBwb3MgPSByYW5nZS5oZWFkOworICAgICAgZWxzZSBpZiAoc3Rh
cnQgPT0gImFuY2hvciIpIHBvcyA9IHJhbmdlLmFuY2hvcjsKKyAgICAgIGVsc2UgaWYgKHN0YXJ0
ID09ICJlbmQiIHx8IHN0YXJ0ID09ICJ0byIgfHwgc3RhcnQgPT09IGZhbHNlKSBwb3MgPSByYW5n
ZS50bygpOworICAgICAgZWxzZSBwb3MgPSByYW5nZS5mcm9tKCk7CisgICAgICByZXR1cm4gcG9z
OwogICAgIH0sCi0gICAgc29tZXRoaW5nU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge3JldHVybiAhcG9z
RXEodGhpcy5zZWwuaGVhZCwgdGhpcy5zZWwuYW5jaG9yKTt9LAorICAgIGxpc3RTZWxlY3Rpb25z
OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuc2VsLnJhbmdlczsgfSwKKyAgICBzb21ldGhpbmdT
ZWxlY3RlZDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCk7
fSwKIAotICAgIHNldEN1cnNvcjogZG9jT3BlcmF0aW9uKGZ1bmN0aW9uKGxpbmUsIGNoLCBleHRl
bmQpIHsKLSAgICAgIHZhciBwb3MgPSBjbGlwUG9zKHRoaXMsIHR5cGVvZiBsaW5lID09ICJudW1i
ZXIiID8gUG9zKGxpbmUsIGNoIHx8IDApIDogbGluZSk7Ci0gICAgICBpZiAoZXh0ZW5kKSBleHRl
bmRTZWxlY3Rpb24odGhpcywgcG9zKTsKLSAgICAgIGVsc2Ugc2V0U2VsZWN0aW9uKHRoaXMsIHBv
cywgcG9zKTsKKyAgICBzZXRDdXJzb3I6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGxpbmUsIGNoLCBv
cHRpb25zKSB7CisgICAgICBzZXRTaW1wbGVTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCB0
eXBlb2YgbGluZSA9PSAibnVtYmVyIiA/IFBvcyhsaW5lLCBjaCB8fCAwKSA6IGxpbmUpLCBudWxs
LCBvcHRpb25zKTsKKyAgICB9KSwKKyAgICBzZXRTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0
aW9uKGFuY2hvciwgaGVhZCwgb3B0aW9ucykgeworICAgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRo
aXMsIGNsaXBQb3ModGhpcywgYW5jaG9yKSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvciks
IG9wdGlvbnMpOworICAgIH0pLAorICAgIGV4dGVuZFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVu
Y3Rpb24oaGVhZCwgb3RoZXIsIG9wdGlvbnMpIHsKKyAgICAgIGV4dGVuZFNlbGVjdGlvbih0aGlz
LCBjbGlwUG9zKHRoaXMsIGhlYWQpLCBvdGhlciAmJiBjbGlwUG9zKHRoaXMsIG90aGVyKSwgb3B0
aW9ucyk7CisgICAgfSksCisgICAgZXh0ZW5kU2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rp
b24oaGVhZHMsIG9wdGlvbnMpIHsKKyAgICAgIGV4dGVuZFNlbGVjdGlvbnModGhpcywgY2xpcFBv
c0FycmF5KHRoaXMsIGhlYWRzLCBvcHRpb25zKSk7CiAgICAgfSksCi0gICAgc2V0U2VsZWN0aW9u
OiBkb2NPcGVyYXRpb24oZnVuY3Rpb24oYW5jaG9yLCBoZWFkLCBiaWFzKSB7Ci0gICAgICBzZXRT
ZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCBhbmNob3IpLCBjbGlwUG9zKHRoaXMsIGhlYWQg
fHwgYW5jaG9yKSwgYmlhcyk7CisgICAgZXh0ZW5kU2VsZWN0aW9uc0J5OiBkb2NNZXRob2RPcChm
dW5jdGlvbihmLCBvcHRpb25zKSB7CisgICAgICBleHRlbmRTZWxlY3Rpb25zKHRoaXMsIG1hcCh0
aGlzLnNlbC5yYW5nZXMsIGYpLCBvcHRpb25zKTsKICAgICB9KSwKLSAgICBleHRlbmRTZWxlY3Rp
b246IGRvY09wZXJhdGlvbihmdW5jdGlvbihmcm9tLCB0bywgYmlhcykgewotICAgICAgZXh0ZW5k
U2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgZnJvbSksIHRvICYmIGNsaXBQb3ModGhpcywg
dG8pLCBiaWFzKTsKKyAgICBzZXRTZWxlY3Rpb25zOiBkb2NNZXRob2RPcChmdW5jdGlvbihyYW5n
ZXMsIHByaW1hcnksIG9wdGlvbnMpIHsKKyAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkgcmV0dXJu
OworICAgICAgZm9yICh2YXIgaSA9IDAsIG91dCA9IFtdOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsr
KQorICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2UoY2xpcFBvcyh0aGlzLCByYW5nZXNbaV0uYW5j
aG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQb3ModGhpcywgcmFuZ2VzW2ld
LmhlYWQpKTsKKyAgICAgIGlmIChwcmltYXJ5ID09IG51bGwpIHByaW1hcnkgPSBNYXRoLm1pbihy
YW5nZXMubGVuZ3RoIC0gMSwgdGhpcy5zZWwucHJpbUluZGV4KTsKKyAgICAgIHNldFNlbGVjdGlv
bih0aGlzLCBub3JtYWxpemVTZWxlY3Rpb24ob3V0LCBwcmltYXJ5KSwgb3B0aW9ucyk7CisgICAg
fSksCisgICAgYWRkU2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbihhbmNob3IsIGhlYWQs
IG9wdGlvbnMpIHsKKyAgICAgIHZhciByYW5nZXMgPSB0aGlzLnNlbC5yYW5nZXMuc2xpY2UoMCk7
CisgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoY2xpcFBvcyh0aGlzLCBhbmNob3IpLCBjbGlw
UG9zKHRoaXMsIGhlYWQgfHwgYW5jaG9yKSkpOworICAgICAgc2V0U2VsZWN0aW9uKHRoaXMsIG5v
cm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIHJhbmdlcy5sZW5ndGggLSAxKSwgb3B0aW9ucyk7CiAg
ICAgfSksCiAKLSAgICBnZXRTZWxlY3Rpb246IGZ1bmN0aW9uKGxpbmVTZXApIHtyZXR1cm4gdGhp
cy5nZXRSYW5nZSh0aGlzLnNlbC5mcm9tLCB0aGlzLnNlbC50bywgbGluZVNlcCk7fSwKLSAgICBy
ZXBsYWNlU2VsZWN0aW9uOiBmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSwgb3JpZ2luKSB7Ci0gICAg
ICBtYWtlQ2hhbmdlKHRoaXMsIHtmcm9tOiB0aGlzLnNlbC5mcm9tLCB0bzogdGhpcy5zZWwudG8s
IHRleHQ6IHNwbGl0TGluZXMoY29kZSksIG9yaWdpbjogb3JpZ2lufSwgY29sbGFwc2UgfHwgImFy
b3VuZCIpOworICAgIGdldFNlbGVjdGlvbjogZnVuY3Rpb24obGluZVNlcCkgeworICAgICAgdmFy
IHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlcywgbGluZXM7CisgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgc2VsID0gZ2V0QmV0d2Vlbih0
aGlzLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNbaV0udG8oKSk7CisgICAgICAgIGxpbmVzID0g
bGluZXMgPyBsaW5lcy5jb25jYXQoc2VsKSA6IHNlbDsKKyAgICAgIH0KKyAgICAgIGlmIChsaW5l
U2VwID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzOworICAgICAgZWxzZSByZXR1cm4gbGluZXMuam9p
bihsaW5lU2VwIHx8ICJcbiIpOworICAgIH0sCisgICAgZ2V0U2VsZWN0aW9uczogZnVuY3Rpb24o
bGluZVNlcCkgeworICAgICAgdmFyIHBhcnRzID0gW10sIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdl
czsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIHZhciBzZWwgPSBnZXRCZXR3ZWVuKHRoaXMsIHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tp
XS50bygpKTsKKyAgICAgICAgaWYgKGxpbmVTZXAgIT09IGZhbHNlKSBzZWwgPSBzZWwuam9pbihs
aW5lU2VwIHx8ICJcbiIpOworICAgICAgICBwYXJ0c1tpXSA9IHNlbDsKKyAgICAgIH0KKyAgICAg
IHJldHVybiBwYXJ0czsKKyAgICB9LAorICAgIHJlcGxhY2VTZWxlY3Rpb246IGRvY01ldGhvZE9w
KGZ1bmN0aW9uKGNvZGUsIGNvbGxhcHNlLCBvcmlnaW4pIHsKKyAgICAgIHZhciBkdXAgPSBbXTsK
KyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKQor
ICAgICAgICBkdXBbaV0gPSBjb2RlOworICAgICAgdGhpcy5yZXBsYWNlU2VsZWN0aW9ucyhkdXAs
IGNvbGxhcHNlLCBvcmlnaW4gfHwgIitpbnB1dCIpOworICAgIH0pLAorICAgIHJlcGxhY2VTZWxl
Y3Rpb25zOiBmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSwgb3JpZ2luKSB7CisgICAgICB2YXIgY2hh
bmdlcyA9IFtdLCBzZWwgPSB0aGlzLnNlbDsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vs
LnJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ld
OworICAgICAgICBjaGFuZ2VzW2ldID0ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRv
KCksIHRleHQ6IHNwbGl0TGluZXMoY29kZVtpXSksIG9yaWdpbjogb3JpZ2lufTsKKyAgICAgIH0K
KyAgICAgIHZhciBuZXdTZWwgPSBjb2xsYXBzZSAmJiBjb2xsYXBzZSAhPSAiZW5kIiAmJiBjb21w
dXRlUmVwbGFjZWRTZWwodGhpcywgY2hhbmdlcywgY29sbGFwc2UpOworICAgICAgZm9yICh2YXIg
aSA9IGNoYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgICAgIG1ha2VDaGFuZ2Uo
dGhpcywgY2hhbmdlc1tpXSk7CisgICAgICBpZiAobmV3U2VsKSBzZXRTZWxlY3Rpb25SZXBsYWNl
SGlzdG9yeSh0aGlzLCBuZXdTZWwpOworICAgICAgZWxzZSBpZiAodGhpcy5jbSkgZW5zdXJlQ3Vy
c29yVmlzaWJsZSh0aGlzLmNtKTsKICAgICB9LAotICAgIHVuZG86IGRvY09wZXJhdGlvbihmdW5j
dGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgInVuZG8iKTt9KSwKLSAgICByZWRv
OiBkb2NPcGVyYXRpb24oZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJy
ZWRvIik7fSksCisgICAgdW5kbzogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZy
b21IaXN0b3J5KHRoaXMsICJ1bmRvIik7fSksCisgICAgcmVkbzogZG9jTWV0aG9kT3AoZnVuY3Rp
b24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJyZWRvIik7fSksCisgICAgdW5kb1Nl
bGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRo
aXMsICJ1bmRvIiwgdHJ1ZSk7fSksCisgICAgcmVkb1NlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVu
Y3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJyZWRvIiwgdHJ1ZSk7fSksCiAK
LSAgICBzZXRFeHRlbmRpbmc6IGZ1bmN0aW9uKHZhbCkge3RoaXMuc2VsLmV4dGVuZCA9IHZhbDt9
LAorICAgIHNldEV4dGVuZGluZzogZnVuY3Rpb24odmFsKSB7dGhpcy5leHRlbmQgPSB2YWw7fSwK
KyAgICBnZXRFeHRlbmRpbmc6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmV4dGVuZDt9LAogCiAg
ICAgaGlzdG9yeVNpemU6IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGhpc3QgPSB0aGlzLmhpc3Rv
cnk7Ci0gICAgICByZXR1cm4ge3VuZG86IGhpc3QuZG9uZS5sZW5ndGgsIHJlZG86IGhpc3QudW5k
b25lLmxlbmd0aH07CisgICAgICB2YXIgaGlzdCA9IHRoaXMuaGlzdG9yeSwgZG9uZSA9IDAsIHVu
ZG9uZSA9IDA7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpc3QuZG9uZS5sZW5ndGg7IGkr
KykgaWYgKCFoaXN0LmRvbmVbaV0ucmFuZ2VzKSArK2RvbmU7CisgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGhpc3QudW5kb25lLmxlbmd0aDsgaSsrKSBpZiAoIWhpc3QudW5kb25lW2ldLnJhbmdl
cykgKyt1bmRvbmU7CisgICAgICByZXR1cm4ge3VuZG86IGRvbmUsIHJlZG86IHVuZG9uZX07CiAg
ICAgfSwKLSAgICBjbGVhckhpc3Rvcnk6IGZ1bmN0aW9uKCkge3RoaXMuaGlzdG9yeSA9IG1ha2VI
aXN0b3J5KHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKTt9LAorICAgIGNsZWFySGlzdG9yeTog
ZnVuY3Rpb24oKSB7dGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdl
bmVyYXRpb24pO30sCiAKICAgICBtYXJrQ2xlYW46IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5j
bGVhbkdlbmVyYXRpb24gPSB0aGlzLmNoYW5nZUdlbmVyYXRpb24oKTsKKyAgICAgIHRoaXMuY2xl
YW5HZW5lcmF0aW9uID0gdGhpcy5jaGFuZ2VHZW5lcmF0aW9uKHRydWUpOwogICAgIH0sCi0gICAg
Y2hhbmdlR2VuZXJhdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLmhpc3RvcnkubGFzdE9w
ID0gdGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW4gPSBudWxsOworICAgIGNoYW5nZUdlbmVyYXRpb246
IGZ1bmN0aW9uKGZvcmNlU3BsaXQpIHsKKyAgICAgIGlmIChmb3JjZVNwbGl0KQorICAgICAgICB0
aGlzLmhpc3RvcnkubGFzdE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW4gPSBudWxsOwogICAg
ICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uOwogICAgIH0sCiAgICAgaXNDbGVhbjog
ZnVuY3Rpb24gKGdlbikgewpAQCAtNDkxNyw5ICs2MjgwLDkgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgIHVuZG9uZTogY29weUhpc3RvcnlBcnJheSh0
aGlzLmhpc3RvcnkudW5kb25lKX07CiAgICAgfSwKICAgICBzZXRIaXN0b3J5OiBmdW5jdGlvbiho
aXN0RGF0YSkgewotICAgICAgdmFyIGhpc3QgPSB0aGlzLmhpc3RvcnkgPSBtYWtlSGlzdG9yeSh0
aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7Ci0gICAgICBoaXN0LmRvbmUgPSBoaXN0RGF0YS5k
b25lLnNsaWNlKDApOwotICAgICAgaGlzdC51bmRvbmUgPSBoaXN0RGF0YS51bmRvbmUuc2xpY2Uo
MCk7CisgICAgICB2YXIgaGlzdCA9IHRoaXMuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KHRoaXMuaGlz
dG9yeS5tYXhHZW5lcmF0aW9uKTsKKyAgICAgIGhpc3QuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXko
aGlzdERhdGEuZG9uZS5zbGljZSgwKSwgbnVsbCwgdHJ1ZSk7CisgICAgICBoaXN0LnVuZG9uZSA9
IGNvcHlIaXN0b3J5QXJyYXkoaGlzdERhdGEudW5kb25lLnNsaWNlKDApLCBudWxsLCB0cnVlKTsK
ICAgICB9LAogCiAgICAgbWFya1RleHQ6IGZ1bmN0aW9uKGZyb20sIHRvLCBvcHRpb25zKSB7CkBA
IC00OTI3LDcgKzYyOTAsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICB9LAogICAgIHNldEJvb2ttYXJrOiBmdW5jdGlvbihwb3MsIG9wdGlvbnMpIHsKICAgICAgIHZh
ciByZWFsT3B0cyA9IHtyZXBsYWNlZFdpdGg6IG9wdGlvbnMgJiYgKG9wdGlvbnMubm9kZVR5cGUg
PT0gbnVsbCA/IG9wdGlvbnMud2lkZ2V0IDogb3B0aW9ucyksCi0gICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0TGVmdDogb3B0aW9ucyAmJiBvcHRpb25zLmluc2VydExlZnR9OworICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydExlZnQ6IG9wdGlvbnMgJiYgb3B0aW9ucy5pbnNlcnRMZWZ0LAor
ICAgICAgICAgICAgICAgICAgICAgIGNsZWFyV2hlbkVtcHR5OiBmYWxzZSwgc2hhcmVkOiBvcHRp
b25zICYmIG9wdGlvbnMuc2hhcmVkfTsKICAgICAgIHBvcyA9IGNsaXBQb3ModGhpcywgcG9zKTsK
ICAgICAgIHJldHVybiBtYXJrVGV4dCh0aGlzLCBwb3MsIHBvcywgcmVhbE9wdHMsICJib29rbWFy
ayIpOwogICAgIH0sCkBAIC00OTQyLDYgKzYzMDYsMjMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICB9CiAgICAgICByZXR1cm4gbWFya2VyczsKICAgICB9LAorICAg
IGZpbmRNYXJrczogZnVuY3Rpb24oZnJvbSwgdG8sIGZpbHRlcikgeworICAgICAgZnJvbSA9IGNs
aXBQb3ModGhpcywgZnJvbSk7IHRvID0gY2xpcFBvcyh0aGlzLCB0byk7CisgICAgICB2YXIgZm91
bmQgPSBbXSwgbGluZU5vID0gZnJvbS5saW5lOworICAgICAgdGhpcy5pdGVyKGZyb20ubGluZSwg
dG8ubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgdmFyIHNwYW5zID0gbGluZS5t
YXJrZWRTcGFuczsKKyAgICAgICAgaWYgKHNwYW5zKSBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5z
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTsKKyAgICAgICAg
ICBpZiAoIShsaW5lTm8gPT0gZnJvbS5saW5lICYmIGZyb20uY2ggPiBzcGFuLnRvIHx8CisgICAg
ICAgICAgICAgICAgc3Bhbi5mcm9tID09IG51bGwgJiYgbGluZU5vICE9IGZyb20ubGluZXx8Cisg
ICAgICAgICAgICAgICAgbGluZU5vID09IHRvLmxpbmUgJiYgc3Bhbi5mcm9tID4gdG8uY2gpICYm
CisgICAgICAgICAgICAgICghZmlsdGVyIHx8IGZpbHRlcihzcGFuLm1hcmtlcikpKQorICAgICAg
ICAgICAgZm91bmQucHVzaChzcGFuLm1hcmtlci5wYXJlbnQgfHwgc3Bhbi5tYXJrZXIpOworICAg
ICAgICB9CisgICAgICAgICsrbGluZU5vOworICAgICAgfSk7CisgICAgICByZXR1cm4gZm91bmQ7
CisgICAgfSwKICAgICBnZXRBbGxNYXJrczogZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgbWFya2Vy
cyA9IFtdOwogICAgICAgdGhpcy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsKQEAgLTQ5NzUsOCArNjM1
Niw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGNvcHk6IGZ1bmN0
aW9uKGNvcHlIaXN0b3J5KSB7CiAgICAgICB2YXIgZG9jID0gbmV3IERvYyhnZXRMaW5lcyh0aGlz
LCB0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplKSwgdGhpcy5tb2RlT3B0aW9uLCB0
aGlzLmZpcnN0KTsKICAgICAgIGRvYy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFRvcDsgZG9jLnNj
cm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQ7Ci0gICAgICBkb2Muc2VsID0ge2Zyb206IHRoaXMu
c2VsLmZyb20sIHRvOiB0aGlzLnNlbC50bywgaGVhZDogdGhpcy5zZWwuaGVhZCwgYW5jaG9yOiB0
aGlzLnNlbC5hbmNob3IsCi0gICAgICAgICAgICAgICAgIHNoaWZ0OiB0aGlzLnNlbC5zaGlmdCwg
ZXh0ZW5kOiBmYWxzZSwgZ29hbENvbHVtbjogdGhpcy5zZWwuZ29hbENvbHVtbn07CisgICAgICBk
b2Muc2VsID0gdGhpcy5zZWw7CisgICAgICBkb2MuZXh0ZW5kID0gZmFsc2U7CiAgICAgICBpZiAo
Y29weUhpc3RvcnkpIHsKICAgICAgICAgZG9jLmhpc3RvcnkudW5kb0RlcHRoID0gdGhpcy5oaXN0
b3J5LnVuZG9EZXB0aDsKICAgICAgICAgZG9jLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkp
OwpAQCAtNDk5Myw2ICs2Mzc0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICBpZiAob3B0aW9ucy5zaGFyZWRIaXN0KSBjb3B5Lmhpc3RvcnkgPSB0aGlzLmhpc3Rv
cnk7CiAgICAgICAodGhpcy5saW5rZWQgfHwgKHRoaXMubGlua2VkID0gW10pKS5wdXNoKHtkb2M6
IGNvcHksIHNoYXJlZEhpc3Q6IG9wdGlvbnMuc2hhcmVkSGlzdH0pOwogICAgICAgY29weS5saW5r
ZWQgPSBbe2RvYzogdGhpcywgaXNQYXJlbnQ6IHRydWUsIHNoYXJlZEhpc3Q6IG9wdGlvbnMuc2hh
cmVkSGlzdH1dOworICAgICAgY29weVNoYXJlZE1hcmtlcnMoY29weSwgZmluZFNoYXJlZE1hcmtl
cnModGhpcykpOwogICAgICAgcmV0dXJuIGNvcHk7CiAgICAgfSwKICAgICB1bmxpbmtEb2M6IGZ1
bmN0aW9uKG90aGVyKSB7CkBAIC01MDAyLDEzICs2Mzg0LDE0IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAobGluay5kb2MgIT0gb3RoZXIpIGNvbnRpbnVl
OwogICAgICAgICB0aGlzLmxpbmtlZC5zcGxpY2UoaSwgMSk7CiAgICAgICAgIG90aGVyLnVubGlu
a0RvYyh0aGlzKTsKKyAgICAgICAgZGV0YWNoU2hhcmVkTWFya2VycyhmaW5kU2hhcmVkTWFya2Vy
cyh0aGlzKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgLy8gSWYgdGhlIGhpc3Rv
cmllcyB3ZXJlIHNoYXJlZCwgc3BsaXQgdGhlbSBhZ2FpbgogICAgICAgaWYgKG90aGVyLmhpc3Rv
cnkgPT0gdGhpcy5oaXN0b3J5KSB7CiAgICAgICAgIHZhciBzcGxpdElkcyA9IFtvdGhlci5pZF07
CiAgICAgICAgIGxpbmtlZERvY3Mob3RoZXIsIGZ1bmN0aW9uKGRvYykge3NwbGl0SWRzLnB1c2go
ZG9jLmlkKTt9LCB0cnVlKTsKLSAgICAgICAgb3RoZXIuaGlzdG9yeSA9IG1ha2VIaXN0b3J5KCk7
CisgICAgICAgIG90aGVyLmhpc3RvcnkgPSBuZXcgSGlzdG9yeShudWxsKTsKICAgICAgICAgb3Ro
ZXIuaGlzdG9yeS5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkuZG9uZSwgc3Bs
aXRJZHMpOwogICAgICAgICBvdGhlci5oaXN0b3J5LnVuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXko
dGhpcy5oaXN0b3J5LnVuZG9uZSwgc3BsaXRJZHMpOwogICAgICAgfQpAQCAtNTAxOSw5ICs2NDAy
LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGdldEVkaXRvcjog
ZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuY207fQogICB9KTsKIAorICAvLyBQdWJsaWMgYWxpYXMu
CiAgIERvYy5wcm90b3R5cGUuZWFjaExpbmUgPSBEb2MucHJvdG90eXBlLml0ZXI7CiAKLSAgLy8g
VGhlIERvYyBtZXRob2RzIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBvbiBDb2RlTWlycm9yIGlu
c3RhbmNlcworICAvLyBTZXQgdXAgbWV0aG9kcyBvbiBDb2RlTWlycm9yJ3MgcHJvdG90eXBlIHRv
IHJlZGlyZWN0IHRvIHRoZSBlZGl0b3IncyBkb2N1bWVudC4KICAgdmFyIGRvbnREZWxlZ2F0ZSA9
ICJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IiLnNwbGl0KCIgIik7CiAgIGZvciAo
dmFyIHByb3AgaW4gRG9jLnByb3RvdHlwZSkgaWYgKERvYy5wcm90b3R5cGUuaGFzT3duUHJvcGVy
dHkocHJvcCkgJiYgaW5kZXhPZihkb250RGVsZWdhdGUsIHByb3ApIDwgMCkKICAgICBDb2RlTWly
cm9yLnByb3RvdHlwZVtwcm9wXSA9IChmdW5jdGlvbihtZXRob2QpIHsKQEAgLTUwMzAsNiArNjQx
NCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIGV2ZW50TWl4aW4o
RG9jKTsKIAorICAvLyBDYWxsIGYgZm9yIGFsbCBsaW5rZWQgZG9jdW1lbnRzLgogICBmdW5jdGlv
biBsaW5rZWREb2NzKGRvYywgZiwgc2hhcmVkSGlzdE9ubHkpIHsKICAgICBmdW5jdGlvbiBwcm9w
YWdhdGUoZG9jLCBza2lwLCBzaGFyZWRIaXN0KSB7CiAgICAgICBpZiAoZG9jLmxpbmtlZCkgZm9y
ICh2YXIgaSA9IDA7IGkgPCBkb2MubGlua2VkLmxlbmd0aDsgKytpKSB7CkBAIC01MDQ0LDIyICs2
NDI5LDI1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHByb3BhZ2F0
ZShkb2MsIG51bGwsIHRydWUpOwogICB9CiAKKyAgLy8gQXR0YWNoIGEgZG9jdW1lbnQgdG8gYW4g
ZWRpdG9yLgogICBmdW5jdGlvbiBhdHRhY2hEb2MoY20sIGRvYykgewogICAgIGlmIChkb2MuY20p
IHRocm93IG5ldyBFcnJvcigiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS4iKTsKICAg
ICBjbS5kb2MgPSBkb2M7CiAgICAgZG9jLmNtID0gY207CiAgICAgZXN0aW1hdGVMaW5lSGVpZ2h0
cyhjbSk7CiAgICAgbG9hZE1vZGUoY20pOwotICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBp
bmcpIGNvbXB1dGVNYXhMZW5ndGgoY20pOworICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBp
bmcpIGZpbmRNYXhMaW5lKGNtKTsKICAgICBjbS5vcHRpb25zLm1vZGUgPSBkb2MubW9kZU9wdGlv
bjsKICAgICByZWdDaGFuZ2UoY20pOwogICB9CiAKICAgLy8gTElORSBVVElMSVRJRVMKIAotICBm
dW5jdGlvbiBnZXRMaW5lKGNodW5rLCBuKSB7Ci0gICAgbiAtPSBjaHVuay5maXJzdDsKLSAgICB3
aGlsZSAoIWNodW5rLmxpbmVzKSB7CisgIC8vIEZpbmQgdGhlIGxpbmUgb2JqZWN0IGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLgorICBmdW5jdGlvbiBnZXRMaW5lKGRvYywg
bikgeworICAgIG4gLT0gZG9jLmZpcnN0OworICAgIGlmIChuIDwgMCB8fCBuID49IGRvYy5zaXpl
KSB0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIGxpbmUgIiArIChuICsgZG9jLmZpcnN0KSAr
ICIgaW4gdGhlIGRvY3VtZW50LiIpOworICAgIGZvciAodmFyIGNodW5rID0gZG9jOyAhY2h1bmsu
bGluZXM7KSB7CiAgICAgICBmb3IgKHZhciBpID0gMDs7ICsraSkgewogICAgICAgICB2YXIgY2hp
bGQgPSBjaHVuay5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgICAg
aWYgKG4gPCBzeikgeyBjaHVuayA9IGNoaWxkOyBicmVhazsgfQpAQCAtNTA2OSw2ICs2NDU3LDgg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIGNodW5rLmxp
bmVzW25dOwogICB9CiAKKyAgLy8gR2V0IHRoZSBwYXJ0IG9mIGEgZG9jdW1lbnQgYmV0d2VlbiB0
d28gcG9zaXRpb25zLCBhcyBhbiBhcnJheSBvZgorICAvLyBzdHJpbmdzLgogICBmdW5jdGlvbiBn
ZXRCZXR3ZWVuKGRvYywgc3RhcnQsIGVuZCkgewogICAgIHZhciBvdXQgPSBbXSwgbiA9IHN0YXJ0
LmxpbmU7CiAgICAgZG9jLml0ZXIoc3RhcnQubGluZSwgZW5kLmxpbmUgKyAxLCBmdW5jdGlvbihs
aW5lKSB7CkBAIC01MDgwLDE3ICs2NDcwLDIyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIH0pOwogICAgIHJldHVybiBvdXQ7CiAgIH0KKyAgLy8gR2V0IHRoZSBsaW5l
cyBiZXR3ZWVuIGZyb20gYW5kIHRvLCBhcyBhcnJheSBvZiBzdHJpbmdzLgogICBmdW5jdGlvbiBn
ZXRMaW5lcyhkb2MsIGZyb20sIHRvKSB7CiAgICAgdmFyIG91dCA9IFtdOwogICAgIGRvYy5pdGVy
KGZyb20sIHRvLCBmdW5jdGlvbihsaW5lKSB7IG91dC5wdXNoKGxpbmUudGV4dCk7IH0pOwogICAg
IHJldHVybiBvdXQ7CiAgIH0KIAorICAvLyBVcGRhdGUgdGhlIGhlaWdodCBvZiBhIGxpbmUsIHBy
b3BhZ2F0aW5nIHRoZSBoZWlnaHQgY2hhbmdlCisgIC8vIHVwd2FyZHMgdG8gcGFyZW50IG5vZGVz
LgogICBmdW5jdGlvbiB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGhlaWdodCkgewogICAgIHZhciBk
aWZmID0gaGVpZ2h0IC0gbGluZS5oZWlnaHQ7Ci0gICAgZm9yICh2YXIgbiA9IGxpbmU7IG47IG4g
PSBuLnBhcmVudCkgbi5oZWlnaHQgKz0gZGlmZjsKKyAgICBpZiAoZGlmZikgZm9yICh2YXIgbiA9
IGxpbmU7IG47IG4gPSBuLnBhcmVudCkgbi5oZWlnaHQgKz0gZGlmZjsKICAgfQogCisgIC8vIEdp
dmVuIGEgbGluZSBvYmplY3QsIGZpbmQgaXRzIGxpbmUgbnVtYmVyIGJ5IHdhbGtpbmcgdXAgdGhy
b3VnaAorICAvLyBpdHMgcGFyZW50IGxpbmtzLgogICBmdW5jdGlvbiBsaW5lTm8obGluZSkgewog
ICAgIGlmIChsaW5lLnBhcmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICB2YXIgY3VyID0g
bGluZS5wYXJlbnQsIG5vID0gaW5kZXhPZihjdXIubGluZXMsIGxpbmUpOwpAQCAtNTEwMywxMCAr
NjQ5OCwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4g
bm8gKyBjdXIuZmlyc3Q7CiAgIH0KIAorICAvLyBGaW5kIHRoZSBsaW5lIGF0IHRoZSBnaXZlbiB2
ZXJ0aWNhbCBwb3NpdGlvbiwgdXNpbmcgdGhlIGhlaWdodAorICAvLyBpbmZvcm1hdGlvbiBpbiB0
aGUgZG9jdW1lbnQgdHJlZS4KICAgZnVuY3Rpb24gbGluZUF0SGVpZ2h0KGNodW5rLCBoKSB7CiAg
ICAgdmFyIG4gPSBjaHVuay5maXJzdDsKICAgICBvdXRlcjogZG8gewotICAgICAgZm9yICh2YXIg
aSA9IDAsIGUgPSBjaHVuay5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKKyAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKICAgICAgICAg
dmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIGNoID0gY2hpbGQuaGVpZ2h0OwogICAgICAg
ICBpZiAoaCA8IGNoKSB7IGNodW5rID0gY2hpbGQ7IGNvbnRpbnVlIG91dGVyOyB9CiAgICAgICAg
IGggLT0gY2g7CkBAIC01MTE0LDcgKzY1MTEsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICAgIH0KICAgICAgIHJldHVybiBuOwogICAgIH0gd2hpbGUgKCFjaHVuay5s
aW5lcyk7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaHVuay5saW5lcy5sZW5ndGg7IGkgPCBl
OyArK2kpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rLmxpbmVzLmxlbmd0aDsgKytp
KSB7CiAgICAgICB2YXIgbGluZSA9IGNodW5rLmxpbmVzW2ldLCBsaCA9IGxpbmUuaGVpZ2h0Owog
ICAgICAgaWYgKGggPCBsaCkgYnJlYWs7CiAgICAgICBoIC09IGxoOwpAQCAtNTEyMiw4ICs2NTE5
LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBuICsg
aTsKICAgfQogCi0gIGZ1bmN0aW9uIGhlaWdodEF0TGluZShjbSwgbGluZU9iaikgewotICAgIGxp
bmVPYmogPSB2aXN1YWxMaW5lKGNtLmRvYywgbGluZU9iaik7CisKKyAgLy8gRmluZCB0aGUgaGVp
Z2h0IGFib3ZlIHRoZSBnaXZlbiBsaW5lLgorICBmdW5jdGlvbiBoZWlnaHRBdExpbmUobGluZU9i
aikgeworICAgIGxpbmVPYmogPSB2aXN1YWxMaW5lKGxpbmVPYmopOwogCiAgICAgdmFyIGggPSAw
LCBjaHVuayA9IGxpbmVPYmoucGFyZW50OwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmsu
bGluZXMubGVuZ3RoOyArK2kpIHsKQEAgLTUxNDEsNiArNjU0MCw5IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBoOwogICB9CiAKKyAgLy8gR2V0IHRoZSBi
aWRpIG9yZGVyaW5nIGZvciB0aGUgZ2l2ZW4gbGluZSAoYW5kIGNhY2hlIGl0KS4gUmV0dXJucwor
ICAvLyBmYWxzZSBmb3IgbGluZXMgdGhhdCBhcmUgZnVsbHkgbGVmdC10by1yaWdodCwgYW5kIGFu
IGFycmF5IG9mCisgIC8vIEJpZGlTcGFuIG9iamVjdHMgb3RoZXJ3aXNlLgogICBmdW5jdGlvbiBn
ZXRPcmRlcihsaW5lKSB7CiAgICAgdmFyIG9yZGVyID0gbGluZS5vcmRlcjsKICAgICBpZiAob3Jk
ZXIgPT0gbnVsbCkgb3JkZXIgPSBsaW5lLm9yZGVyID0gYmlkaU9yZGVyaW5nKGxpbmUudGV4dCk7
CkBAIC01MTQ5LDUwICs2NTUxLDcwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogCiAgIC8vIEhJU1RPUlkKIAotICBmdW5jdGlvbiBtYWtlSGlzdG9yeShzdGFydEdlbikgewot
ICAgIHJldHVybiB7Ci0gICAgICAvLyBBcnJheXMgb2YgaGlzdG9yeSBldmVudHMuIERvaW5nIHNv
bWV0aGluZyBhZGRzIGFuIGV2ZW50IHRvCi0gICAgICAvLyBkb25lIGFuZCBjbGVhcnMgdW5kby4g
VW5kb2luZyBtb3ZlcyBldmVudHMgZnJvbSBkb25lIHRvCi0gICAgICAvLyB1bmRvbmUsIHJlZG9p
bmcgbW92ZXMgdGhlbSBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLgotICAgICAgZG9uZTogW10sIHVu
ZG9uZTogW10sIHVuZG9EZXB0aDogSW5maW5pdHksCi0gICAgICAvLyBVc2VkIHRvIHRyYWNrIHdo
ZW4gY2hhbmdlcyBjYW4gYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgdW5kbwotICAgICAgLy8gZXZl
bnQKLSAgICAgIGxhc3RUaW1lOiAwLCBsYXN0T3A6IG51bGwsIGxhc3RPcmlnaW46IG51bGwsCi0g
ICAgICAvLyBVc2VkIGJ5IHRoZSBpc0NsZWFuKCkgbWV0aG9kCi0gICAgICBnZW5lcmF0aW9uOiBz
dGFydEdlbiB8fCAxLCBtYXhHZW5lcmF0aW9uOiBzdGFydEdlbiB8fCAxCi0gICAgfTsKLSAgfQot
Ci0gIGZ1bmN0aW9uIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBjaGFuZ2UsIGZyb20sIHRvKSB7Ci0g
ICAgdmFyIGV4aXN0aW5nID0gY2hhbmdlWyJzcGFuc18iICsgZG9jLmlkXSwgbiA9IDA7Ci0gICAg
ZG9jLml0ZXIoTWF0aC5tYXgoZG9jLmZpcnN0LCBmcm9tKSwgTWF0aC5taW4oZG9jLmZpcnN0ICsg
ZG9jLnNpemUsIHRvKSwgZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGxpbmUubWFya2VkU3Bh
bnMpCi0gICAgICAgIChleGlzdGluZyB8fCAoZXhpc3RpbmcgPSBjaGFuZ2VbInNwYW5zXyIgKyBk
b2MuaWRdID0ge30pKVtuXSA9IGxpbmUubWFya2VkU3BhbnM7Ci0gICAgICArK247Ci0gICAgfSk7
Ci0gIH0KLQorICBmdW5jdGlvbiBIaXN0b3J5KHN0YXJ0R2VuKSB7CisgICAgLy8gQXJyYXlzIG9m
IGNoYW5nZSBldmVudHMgYW5kIHNlbGVjdGlvbnMuIERvaW5nIHNvbWV0aGluZyBhZGRzIGFuCisg
ICAgLy8gZXZlbnQgdG8gZG9uZSBhbmQgY2xlYXJzIHVuZG8uIFVuZG9pbmcgbW92ZXMgZXZlbnRz
IGZyb20gZG9uZQorICAgIC8vIHRvIHVuZG9uZSwgcmVkb2luZyBtb3ZlcyB0aGVtIGluIHRoZSBv
dGhlciBkaXJlY3Rpb24uCisgICAgdGhpcy5kb25lID0gW107IHRoaXMudW5kb25lID0gW107Cisg
ICAgdGhpcy51bmRvRGVwdGggPSBJbmZpbml0eTsKKyAgICAvLyBVc2VkIHRvIHRyYWNrIHdoZW4g
Y2hhbmdlcyBjYW4gYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgdW5kbworICAgIC8vIGV2ZW50Cisg
ICAgdGhpcy5sYXN0TW9kVGltZSA9IHRoaXMubGFzdFNlbFRpbWUgPSAwOworICAgIHRoaXMubGFz
dE9wID0gbnVsbDsKKyAgICB0aGlzLmxhc3RPcmlnaW4gPSB0aGlzLmxhc3RTZWxPcmlnaW4gPSBu
dWxsOworICAgIC8vIFVzZWQgYnkgdGhlIGlzQ2xlYW4oKSBtZXRob2QKKyAgICB0aGlzLmdlbmVy
YXRpb24gPSB0aGlzLm1heEdlbmVyYXRpb24gPSBzdGFydEdlbiB8fCAxOworICB9CisKKyAgLy8g
Q3JlYXRlIGEgaGlzdG9yeSBjaGFuZ2UgZXZlbnQgZnJvbSBhbiB1cGRhdGVEb2Mtc3R5bGUgY2hh
bmdlCisgIC8vIG9iamVjdC4KICAgZnVuY3Rpb24gaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9j
LCBjaGFuZ2UpIHsKLSAgICB2YXIgZnJvbSA9IHsgbGluZTogY2hhbmdlLmZyb20ubGluZSwgY2g6
IGNoYW5nZS5mcm9tLmNoIH07Ci0gICAgdmFyIGhpc3RDaGFuZ2UgPSB7ZnJvbTogZnJvbSwgdG86
IGNoYW5nZUVuZChjaGFuZ2UpLCB0ZXh0OiBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNo
YW5nZS50byl9OworICAgIHZhciBoaXN0Q2hhbmdlID0ge2Zyb206IGNvcHlQb3MoY2hhbmdlLmZy
b20pLCB0bzogY2hhbmdlRW5kKGNoYW5nZSksIHRleHQ6IGdldEJldHdlZW4oZG9jLCBjaGFuZ2Uu
ZnJvbSwgY2hhbmdlLnRvKX07CiAgICAgYXR0YWNoTG9jYWxTcGFucyhkb2MsIGhpc3RDaGFuZ2Us
IGNoYW5nZS5mcm9tLmxpbmUsIGNoYW5nZS50by5saW5lICsgMSk7CiAgICAgbGlua2VkRG9jcyhk
b2MsIGZ1bmN0aW9uKGRvYykge2F0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hhbmdlLCBjaGFu
Z2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpO30sIHRydWUpOwogICAgIHJldHVybiBo
aXN0Q2hhbmdlOwogICB9CiAKLSAgZnVuY3Rpb24gYWRkVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBz
ZWxBZnRlciwgb3BJZCkgeworICAvLyBQb3AgYWxsIHNlbGVjdGlvbiBldmVudHMgb2ZmIHRoZSBl
bmQgb2YgYSBoaXN0b3J5IGFycmF5LiBTdG9wIGF0CisgIC8vIGEgY2hhbmdlIGV2ZW50LgorICBm
dW5jdGlvbiBjbGVhclNlbGVjdGlvbkV2ZW50cyhhcnJheSkgeworICAgIHdoaWxlIChhcnJheS5s
ZW5ndGgpIHsKKyAgICAgIHZhciBsYXN0ID0gbHN0KGFycmF5KTsKKyAgICAgIGlmIChsYXN0LnJh
bmdlcykgYXJyYXkucG9wKCk7CisgICAgICBlbHNlIGJyZWFrOworICAgIH0KKyAgfQorCisgIC8v
IEZpbmQgdGhlIHRvcCBjaGFuZ2UgZXZlbnQgaW4gdGhlIGhpc3RvcnkuIFBvcCBvZmYgc2VsZWN0
aW9uCisgIC8vIGV2ZW50cyB0aGF0IGFyZSBpbiB0aGUgd2F5LgorICBmdW5jdGlvbiBsYXN0Q2hh
bmdlRXZlbnQoaGlzdCwgZm9yY2UpIHsKKyAgICBpZiAoZm9yY2UpIHsKKyAgICAgIGNsZWFyU2Vs
ZWN0aW9uRXZlbnRzKGhpc3QuZG9uZSk7CisgICAgICByZXR1cm4gbHN0KGhpc3QuZG9uZSk7Cisg
ICAgfSBlbHNlIGlmIChoaXN0LmRvbmUubGVuZ3RoICYmICFsc3QoaGlzdC5kb25lKS5yYW5nZXMp
IHsKKyAgICAgIHJldHVybiBsc3QoaGlzdC5kb25lKTsKKyAgICB9IGVsc2UgaWYgKGhpc3QuZG9u
ZS5sZW5ndGggPiAxICYmICFoaXN0LmRvbmVbaGlzdC5kb25lLmxlbmd0aCAtIDJdLnJhbmdlcykg
eworICAgICAgaGlzdC5kb25lLnBvcCgpOworICAgICAgcmV0dXJuIGxzdChoaXN0LmRvbmUpOwor
ICAgIH0KKyAgfQorCisgIC8vIFJlZ2lzdGVyIGEgY2hhbmdlIGluIHRoZSBoaXN0b3J5LiBNZXJn
ZXMgY2hhbmdlcyB0aGF0IGFyZSB3aXRoaW4KKyAgLy8gYSBzaW5nbGUgb3BlcmF0aW9uLCBvcmUg
YXJlIGNsb3NlIHRvZ2V0aGVyIHdpdGggYW4gb3JpZ2luIHRoYXQKKyAgLy8gYWxsb3dzIG1lcmdp
bmcgKHN0YXJ0aW5nIHdpdGggIisiKSBpbnRvIGEgc2luZ2xlIGV2ZW50LgorICBmdW5jdGlvbiBh
ZGRDaGFuZ2VUb0hpc3RvcnkoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBvcElkKSB7CiAgICAgdmFy
IGhpc3QgPSBkb2MuaGlzdG9yeTsKICAgICBoaXN0LnVuZG9uZS5sZW5ndGggPSAwOwotICAgIHZh
ciB0aW1lID0gK25ldyBEYXRlLCBjdXIgPSBsc3QoaGlzdC5kb25lKTsKKyAgICB2YXIgdGltZSA9
ICtuZXcgRGF0ZSwgY3VyOwogCi0gICAgaWYgKGN1ciAmJgotICAgICAgICAoaGlzdC5sYXN0T3Ag
PT0gb3BJZCB8fAorICAgIGlmICgoaGlzdC5sYXN0T3AgPT0gb3BJZCB8fAogICAgICAgICAgaGlz
dC5sYXN0T3JpZ2luID09IGNoYW5nZS5vcmlnaW4gJiYgY2hhbmdlLm9yaWdpbiAmJgotICAgICAg
ICAgKChjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKyIgJiYgZG9jLmNtICYmIGhpc3QubGFz
dFRpbWUgPiB0aW1lIC0gZG9jLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXkpIHx8Ci0gICAg
ICAgICAgY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gIioiKSkpIHsKKyAgICAgICAgICgoY2hh
bmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gIisiICYmIGRvYy5jbSAmJiBoaXN0Lmxhc3RNb2RUaW1l
ID4gdGltZSAtIGRvYy5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5KSB8fAorICAgICAgICAg
IGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09ICIqIikpICYmCisgICAgICAgIChjdXIgPSBsYXN0
Q2hhbmdlRXZlbnQoaGlzdCwgaGlzdC5sYXN0T3AgPT0gb3BJZCkpKSB7CiAgICAgICAvLyBNZXJn
ZSB0aGlzIGNoYW5nZSBpbnRvIHRoZSBsYXN0IGV2ZW50CiAgICAgICB2YXIgbGFzdCA9IGxzdChj
dXIuY2hhbmdlcyk7Ci0gICAgICBpZiAocG9zRXEoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgJiYg
cG9zRXEoY2hhbmdlLmZyb20sIGxhc3QudG8pKSB7CisgICAgICBpZiAoY21wKGNoYW5nZS5mcm9t
LCBjaGFuZ2UudG8pID09IDAgJiYgY21wKGNoYW5nZS5mcm9tLCBsYXN0LnRvKSA9PSAwKSB7CiAg
ICAgICAgIC8vIE9wdGltaXplZCBjYXNlIGZvciBzaW1wbGUgaW5zZXJ0aW9uIC0tIGRvbid0IHdh
bnQgdG8gYWRkCiAgICAgICAgIC8vIG5ldyBjaGFuZ2VzZXRzIGZvciBldmVyeSBjaGFyYWN0ZXIg
dHlwZWQKICAgICAgICAgbGFzdC50byA9IGNoYW5nZUVuZChjaGFuZ2UpOwpAQCAtNTIwMCwyMyAr
NjYyMiw4MSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgLy8g
QWRkIG5ldyBzdWItZXZlbnQKICAgICAgICAgY3VyLmNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdl
RnJvbUNoYW5nZShkb2MsIGNoYW5nZSkpOwogICAgICAgfQotICAgICAgY3VyLmFuY2hvckFmdGVy
ID0gc2VsQWZ0ZXIuYW5jaG9yOyBjdXIuaGVhZEFmdGVyID0gc2VsQWZ0ZXIuaGVhZDsKICAgICB9
IGVsc2UgewogICAgICAgLy8gQ2FuIG5vdCBiZSBtZXJnZWQsIHN0YXJ0IGEgbmV3IGV2ZW50Lgor
ICAgICAgdmFyIGJlZm9yZSA9IGxzdChoaXN0LmRvbmUpOworICAgICAgaWYgKCFiZWZvcmUgfHwg
IWJlZm9yZS5yYW5nZXMpCisgICAgICAgIHB1c2hTZWxlY3Rpb25Ub0hpc3RvcnkoZG9jLnNlbCwg
aGlzdC5kb25lKTsKICAgICAgIGN1ciA9IHtjaGFuZ2VzOiBbaGlzdG9yeUNoYW5nZUZyb21DaGFu
Z2UoZG9jLCBjaGFuZ2UpXSwKLSAgICAgICAgICAgICBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRp
b24sCi0gICAgICAgICAgICAgYW5jaG9yQmVmb3JlOiBkb2Muc2VsLmFuY2hvciwgaGVhZEJlZm9y
ZTogZG9jLnNlbC5oZWFkLAotICAgICAgICAgICAgIGFuY2hvckFmdGVyOiBzZWxBZnRlci5hbmNo
b3IsIGhlYWRBZnRlcjogc2VsQWZ0ZXIuaGVhZH07CisgICAgICAgICAgICAgZ2VuZXJhdGlvbjog
aGlzdC5nZW5lcmF0aW9ufTsKICAgICAgIGhpc3QuZG9uZS5wdXNoKGN1cik7Ci0gICAgICBoaXN0
LmdlbmVyYXRpb24gPSArK2hpc3QubWF4R2VuZXJhdGlvbjsKLSAgICAgIHdoaWxlIChoaXN0LmRv
bmUubGVuZ3RoID4gaGlzdC51bmRvRGVwdGgpCisgICAgICB3aGlsZSAoaGlzdC5kb25lLmxlbmd0
aCA+IGhpc3QudW5kb0RlcHRoKSB7CiAgICAgICAgIGhpc3QuZG9uZS5zaGlmdCgpOworICAgICAg
ICBpZiAoIWhpc3QuZG9uZVswXS5yYW5nZXMpIGhpc3QuZG9uZS5zaGlmdCgpOworICAgICAgfQog
ICAgIH0KLSAgICBoaXN0Lmxhc3RUaW1lID0gdGltZTsKKyAgICBoaXN0LmRvbmUucHVzaChzZWxB
ZnRlcik7CisgICAgaGlzdC5nZW5lcmF0aW9uID0gKytoaXN0Lm1heEdlbmVyYXRpb247CisgICAg
aGlzdC5sYXN0TW9kVGltZSA9IGhpc3QubGFzdFNlbFRpbWUgPSB0aW1lOworICAgIGhpc3QubGFz
dE9wID0gb3BJZDsKKyAgICBoaXN0Lmxhc3RPcmlnaW4gPSBoaXN0Lmxhc3RTZWxPcmlnaW4gPSBj
aGFuZ2Uub3JpZ2luOworCisgICAgaWYgKCFsYXN0KSBzaWduYWwoZG9jLCAiaGlzdG9yeUFkZGVk
Iik7CisgIH0KKworICBmdW5jdGlvbiBzZWxlY3Rpb25FdmVudENhbkJlTWVyZ2VkKGRvYywgb3Jp
Z2luLCBwcmV2LCBzZWwpIHsKKyAgICB2YXIgY2ggPSBvcmlnaW4uY2hhckF0KDApOworICAgIHJl
dHVybiBjaCA9PSAiKiIgfHwKKyAgICAgIGNoID09ICIrIiAmJgorICAgICAgcHJldi5yYW5nZXMu
bGVuZ3RoID09IHNlbC5yYW5nZXMubGVuZ3RoICYmCisgICAgICBwcmV2LnNvbWV0aGluZ1NlbGVj
dGVkKCkgPT0gc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCkgJiYKKyAgICAgIG5ldyBEYXRlIC0gZG9j
Lmhpc3RvcnkubGFzdFNlbFRpbWUgPD0gKGRvYy5jbSA/IGRvYy5jbS5vcHRpb25zLmhpc3RvcnlF
dmVudERlbGF5IDogNTAwKTsKKyAgfQorCisgIC8vIENhbGxlZCB3aGVuZXZlciB0aGUgc2VsZWN0
aW9uIGNoYW5nZXMsIHNldHMgdGhlIG5ldyBzZWxlY3Rpb24gYXMKKyAgLy8gdGhlIHBlbmRpbmcg
c2VsZWN0aW9uIGluIHRoZSBoaXN0b3J5LCBhbmQgcHVzaGVzIHRoZSBvbGQgcGVuZGluZworICAv
LyBzZWxlY3Rpb24gaW50byB0aGUgJ2RvbmUnIGFycmF5IHdoZW4gaXQgd2FzIHNpZ25pZmljYW50
bHkKKyAgLy8gZGlmZmVyZW50IChpbiBudW1iZXIgb2Ygc2VsZWN0ZWQgcmFuZ2VzLCBlbXB0aW5l
c3MsIG9yIHRpbWUpLgorICBmdW5jdGlvbiBhZGRTZWxlY3Rpb25Ub0hpc3RvcnkoZG9jLCBzZWws
IG9wSWQsIG9wdGlvbnMpIHsKKyAgICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5LCBvcmlnaW4gPSBv
cHRpb25zICYmIG9wdGlvbnMub3JpZ2luOworCisgICAgLy8gQSBuZXcgZXZlbnQgaXMgc3RhcnRl
ZCB3aGVuIHRoZSBwcmV2aW91cyBvcmlnaW4gZG9lcyBub3QgbWF0Y2gKKyAgICAvLyB0aGUgY3Vy
cmVudCwgb3IgdGhlIG9yaWdpbnMgZG9uJ3QgYWxsb3cgbWF0Y2hpbmcuIE9yaWdpbnMKKyAgICAv
LyBzdGFydGluZyB3aXRoICogYXJlIGFsd2F5cyBtZXJnZWQsIHRob3NlIHN0YXJ0aW5nIHdpdGgg
KyBhcmUKKyAgICAvLyBtZXJnZWQgd2hlbiBzaW1pbGFyIGFuZCBjbG9zZSB0b2dldGhlciBpbiB0
aW1lLgorICAgIGlmIChvcElkID09IGhpc3QubGFzdE9wIHx8CisgICAgICAgIChvcmlnaW4gJiYg
aGlzdC5sYXN0U2VsT3JpZ2luID09IG9yaWdpbiAmJgorICAgICAgICAgKGhpc3QubGFzdE1vZFRp
bWUgPT0gaGlzdC5sYXN0U2VsVGltZSAmJiBoaXN0Lmxhc3RPcmlnaW4gPT0gb3JpZ2luIHx8Cisg
ICAgICAgICAgc2VsZWN0aW9uRXZlbnRDYW5CZU1lcmdlZChkb2MsIG9yaWdpbiwgbHN0KGhpc3Qu
ZG9uZSksIHNlbCkpKSkKKyAgICAgIGhpc3QuZG9uZVtoaXN0LmRvbmUubGVuZ3RoIC0gMV0gPSBz
ZWw7CisgICAgZWxzZQorICAgICAgcHVzaFNlbGVjdGlvblRvSGlzdG9yeShzZWwsIGhpc3QuZG9u
ZSk7CisKKyAgICBoaXN0Lmxhc3RTZWxUaW1lID0gK25ldyBEYXRlOworICAgIGhpc3QubGFzdFNl
bE9yaWdpbiA9IG9yaWdpbjsKICAgICBoaXN0Lmxhc3RPcCA9IG9wSWQ7Ci0gICAgaGlzdC5sYXN0
T3JpZ2luID0gY2hhbmdlLm9yaWdpbjsKKyAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNsZWFy
UmVkbyAhPT0gZmFsc2UpCisgICAgICBjbGVhclNlbGVjdGlvbkV2ZW50cyhoaXN0LnVuZG9uZSk7
CisgIH0KKworICBmdW5jdGlvbiBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbCwgZGVzdCkgewor
ICAgIHZhciB0b3AgPSBsc3QoZGVzdCk7CisgICAgaWYgKCEodG9wICYmIHRvcC5yYW5nZXMgJiYg
dG9wLmVxdWFscyhzZWwpKSkKKyAgICAgIGRlc3QucHVzaChzZWwpOworICB9CisKKyAgLy8gVXNl
ZCB0byBzdG9yZSBtYXJrZWQgc3BhbiBpbmZvcm1hdGlvbiBpbiB0aGUgaGlzdG9yeS4KKyAgZnVu
Y3Rpb24gYXR0YWNoTG9jYWxTcGFucyhkb2MsIGNoYW5nZSwgZnJvbSwgdG8pIHsKKyAgICB2YXIg
ZXhpc3RpbmcgPSBjaGFuZ2VbInNwYW5zXyIgKyBkb2MuaWRdLCBuID0gMDsKKyAgICBkb2MuaXRl
cihNYXRoLm1heChkb2MuZmlyc3QsIGZyb20pLCBNYXRoLm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6
ZSwgdG8pLCBmdW5jdGlvbihsaW5lKSB7CisgICAgICBpZiAobGluZS5tYXJrZWRTcGFucykKKyAg
ICAgICAgKGV4aXN0aW5nIHx8IChleGlzdGluZyA9IGNoYW5nZVsic3BhbnNfIiArIGRvYy5pZF0g
PSB7fSkpW25dID0gbGluZS5tYXJrZWRTcGFuczsKKyAgICAgICsrbjsKKyAgICB9KTsKICAgfQog
CisgIC8vIFdoZW4gdW4vcmUtZG9pbmcgcmVzdG9yZXMgdGV4dCBjb250YWluaW5nIG1hcmtlZCBz
cGFucywgdGhvc2UKKyAgLy8gdGhhdCBoYXZlIGJlZW4gZXhwbGljaXRseSBjbGVhcmVkIHNob3Vs
ZCBub3QgYmUgcmVzdG9yZWQuCiAgIGZ1bmN0aW9uIHJlbW92ZUNsZWFyZWRTcGFucyhzcGFucykg
ewogICAgIGlmICghc3BhbnMpIHJldHVybiBudWxsOwogICAgIGZvciAodmFyIGkgPSAwLCBvdXQ7
IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgewpAQCAtNTIyNiw2ICs2NzA2LDcgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuICFvdXQgPyBzcGFucyA6IG91dC5s
ZW5ndGggPyBvdXQgOiBudWxsOwogICB9CiAKKyAgLy8gUmV0cmlldmUgYW5kIGZpbHRlciB0aGUg
b2xkIG1hcmtlZCBzcGFucyBzdG9yZWQgaW4gYSBjaGFuZ2UgZXZlbnQuCiAgIGZ1bmN0aW9uIGdl
dE9sZFNwYW5zKGRvYywgY2hhbmdlKSB7CiAgICAgdmFyIGZvdW5kID0gY2hhbmdlWyJzcGFuc18i
ICsgZG9jLmlkXTsKICAgICBpZiAoIWZvdW5kKSByZXR1cm4gbnVsbDsKQEAgLTUyMzYsMTEgKzY3
MTcsMTUgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gVXNlZCBi
b3RoIHRvIHByb3ZpZGUgYSBKU09OLXNhZmUgb2JqZWN0IGluIC5nZXRIaXN0b3J5LCBhbmQsIHdo
ZW4KICAgLy8gZGV0YWNoaW5nIGEgZG9jdW1lbnQsIHRvIHNwbGl0IHRoZSBoaXN0b3J5IGluIHR3
bwotICBmdW5jdGlvbiBjb3B5SGlzdG9yeUFycmF5KGV2ZW50cywgbmV3R3JvdXApIHsKKyAgZnVu
Y3Rpb24gY29weUhpc3RvcnlBcnJheShldmVudHMsIG5ld0dyb3VwLCBpbnN0YW50aWF0ZVNlbCkg
ewogICAgIGZvciAodmFyIGkgPSAwLCBjb3B5ID0gW107IGkgPCBldmVudHMubGVuZ3RoOyArK2kp
IHsKLSAgICAgIHZhciBldmVudCA9IGV2ZW50c1tpXSwgY2hhbmdlcyA9IGV2ZW50LmNoYW5nZXMs
IG5ld0NoYW5nZXMgPSBbXTsKLSAgICAgIGNvcHkucHVzaCh7Y2hhbmdlczogbmV3Q2hhbmdlcywg
YW5jaG9yQmVmb3JlOiBldmVudC5hbmNob3JCZWZvcmUsIGhlYWRCZWZvcmU6IGV2ZW50LmhlYWRC
ZWZvcmUsCi0gICAgICAgICAgICAgICAgIGFuY2hvckFmdGVyOiBldmVudC5hbmNob3JBZnRlciwg
aGVhZEFmdGVyOiBldmVudC5oZWFkQWZ0ZXJ9KTsKKyAgICAgIHZhciBldmVudCA9IGV2ZW50c1tp
XTsKKyAgICAgIGlmIChldmVudC5yYW5nZXMpIHsKKyAgICAgICAgY29weS5wdXNoKGluc3RhbnRp
YXRlU2VsID8gU2VsZWN0aW9uLnByb3RvdHlwZS5kZWVwQ29weS5jYWxsKGV2ZW50KSA6IGV2ZW50
KTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICB2YXIgY2hhbmdlcyA9IGV2ZW50
LmNoYW5nZXMsIG5ld0NoYW5nZXMgPSBbXTsKKyAgICAgIGNvcHkucHVzaCh7Y2hhbmdlczogbmV3
Q2hhbmdlc30pOwogICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGFuZ2VzLmxlbmd0aDsgKytq
KSB7CiAgICAgICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2pdLCBtOwogICAgICAgICBuZXdDaGFu
Z2VzLnB1c2goe2Zyb206IGNoYW5nZS5mcm9tLCB0bzogY2hhbmdlLnRvLCB0ZXh0OiBjaGFuZ2Uu
dGV4dH0pOwpAQCAtNTI1Nyw3ICs2NzQyLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAKICAgLy8gUmViYXNpbmcvcmVzZXR0aW5nIGhpc3RvcnkgdG8gZGVhbCB3aXRoIGV4
dGVybmFsbHktc291cmNlZCBjaGFuZ2VzCiAKLSAgZnVuY3Rpb24gcmViYXNlSGlzdFNlbChwb3Ms
IGZyb20sIHRvLCBkaWZmKSB7CisgIGZ1bmN0aW9uIHJlYmFzZUhpc3RTZWxTaW5nbGUocG9zLCBm
cm9tLCB0bywgZGlmZikgewogICAgIGlmICh0byA8IHBvcy5saW5lKSB7CiAgICAgICBwb3MubGlu
ZSArPSBkaWZmOwogICAgIH0gZWxzZSBpZiAoZnJvbSA8IHBvcy5saW5lKSB7CkBAIC01Mjc2LDI4
ICs2NzYxLDI3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlv
biByZWJhc2VIaXN0QXJyYXkoYXJyYXksIGZyb20sIHRvLCBkaWZmKSB7CiAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIHN1YiA9IGFycmF5W2ld
LCBvayA9IHRydWU7CisgICAgICBpZiAoc3ViLnJhbmdlcykgeworICAgICAgICBpZiAoIXN1Yi5j
b3BpZWQpIHsgc3ViID0gYXJyYXlbaV0gPSBzdWIuZGVlcENvcHkoKTsgc3ViLmNvcGllZCA9IHRy
dWU7IH0KKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdWIucmFuZ2VzLmxlbmd0aDsgaisr
KSB7CisgICAgICAgICAgcmViYXNlSGlzdFNlbFNpbmdsZShzdWIucmFuZ2VzW2pdLmFuY2hvciwg
ZnJvbSwgdG8sIGRpZmYpOworICAgICAgICAgIHJlYmFzZUhpc3RTZWxTaW5nbGUoc3ViLnJhbmdl
c1tqXS5oZWFkLCBmcm9tLCB0bywgZGlmZik7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7
CisgICAgICB9CiAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1Yi5jaGFuZ2VzLmxlbmd0aDsg
KytqKSB7CiAgICAgICAgIHZhciBjdXIgPSBzdWIuY2hhbmdlc1tqXTsKLSAgICAgICAgaWYgKCFz
dWIuY29waWVkKSB7IGN1ci5mcm9tID0gY29weVBvcyhjdXIuZnJvbSk7IGN1ci50byA9IGNvcHlQ
b3MoY3VyLnRvKTsgfQogICAgICAgICBpZiAodG8gPCBjdXIuZnJvbS5saW5lKSB7Ci0gICAgICAg
ICAgY3VyLmZyb20ubGluZSArPSBkaWZmOwotICAgICAgICAgIGN1ci50by5saW5lICs9IGRpZmY7
CisgICAgICAgICAgY3VyLmZyb20gPSBQb3MoY3VyLmZyb20ubGluZSArIGRpZmYsIGN1ci5mcm9t
LmNoKTsKKyAgICAgICAgICBjdXIudG8gPSBQb3MoY3VyLnRvLmxpbmUgKyBkaWZmLCBjdXIudG8u
Y2gpOwogICAgICAgICB9IGVsc2UgaWYgKGZyb20gPD0gY3VyLnRvLmxpbmUpIHsKICAgICAgICAg
ICBvayA9IGZhbHNlOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICB9Ci0gICAg
ICBpZiAoIXN1Yi5jb3BpZWQpIHsKLSAgICAgICAgc3ViLmFuY2hvckJlZm9yZSA9IGNvcHlQb3Mo
c3ViLmFuY2hvckJlZm9yZSk7IHN1Yi5oZWFkQmVmb3JlID0gY29weVBvcyhzdWIuaGVhZEJlZm9y
ZSk7Ci0gICAgICAgIHN1Yi5hbmNob3JBZnRlciA9IGNvcHlQb3Moc3ViLmFuY2hvckFmdGVyKTsg
c3ViLnJlYWRBZnRlciA9IGNvcHlQb3Moc3ViLmhlYWRBZnRlcik7Ci0gICAgICAgIHN1Yi5jb3Bp
ZWQgPSB0cnVlOwotICAgICAgfQogICAgICAgaWYgKCFvaykgewogICAgICAgICBhcnJheS5zcGxp
Y2UoMCwgaSArIDEpOwogICAgICAgICBpID0gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
YmFzZUhpc3RTZWwoc3ViLmFuY2hvckJlZm9yZSk7IHJlYmFzZUhpc3RTZWwoc3ViLmhlYWRCZWZv
cmUpOwotICAgICAgICByZWJhc2VIaXN0U2VsKHN1Yi5hbmNob3JBZnRlcik7IHJlYmFzZUhpc3RT
ZWwoc3ViLmhlYWRBZnRlcik7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC01MzA4LDMwICs2Nzky
LDIzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJlYmFzZUhpc3RB
cnJheShoaXN0LnVuZG9uZSwgZnJvbSwgdG8sIGRpZmYpOwogICB9CiAKLSAgLy8gRVZFTlQgT1BF
UkFUT1JTCisgIC8vIEVWRU5UIFVUSUxJVElFUwogCi0gIGZ1bmN0aW9uIHN0b3BNZXRob2QoKSB7
ZV9zdG9wKHRoaXMpO30KLSAgLy8gRW5zdXJlIGFuIGV2ZW50IGhhcyBhIHN0b3AgbWV0aG9kLgot
ICBmdW5jdGlvbiBhZGRTdG9wKGV2ZW50KSB7Ci0gICAgaWYgKCFldmVudC5zdG9wKSBldmVudC5z
dG9wID0gc3RvcE1ldGhvZDsKLSAgICByZXR1cm4gZXZlbnQ7Ci0gIH0KKyAgLy8gRHVlIHRvIHRo
ZSBmYWN0IHRoYXQgd2Ugc3RpbGwgc3VwcG9ydCBqdXJhc3NpYyBJRSB2ZXJzaW9ucywgc29tZQor
ICAvLyBjb21wYXRpYmlsaXR5IHdyYXBwZXJzIGFyZSBuZWVkZWQuCiAKLSAgZnVuY3Rpb24gZV9w
cmV2ZW50RGVmYXVsdChlKSB7CisgIHZhciBlX3ByZXZlbnREZWZhdWx0ID0gQ29kZU1pcnJvci5l
X3ByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oZSkgewogICAgIGlmIChlLnByZXZlbnREZWZhdWx0
KSBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgZWxzZSBlLnJldHVyblZhbHVlID0gZmFsc2U7Ci0g
IH0KLSAgZnVuY3Rpb24gZV9zdG9wUHJvcGFnYXRpb24oZSkgeworICB9OworICB2YXIgZV9zdG9w
UHJvcGFnYXRpb24gPSBDb2RlTWlycm9yLmVfc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oZSkg
ewogICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICBl
bHNlIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKLSAgfQorICB9OwogICBmdW5jdGlvbiBlX2RlZmF1
bHRQcmV2ZW50ZWQoZSkgewogICAgIHJldHVybiBlLmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/
IGUuZGVmYXVsdFByZXZlbnRlZCA6IGUucmV0dXJuVmFsdWUgPT0gZmFsc2U7CiAgIH0KLSAgZnVu
Y3Rpb24gZV9zdG9wKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihl
KTt9Ci0gIENvZGVNaXJyb3IuZV9zdG9wID0gZV9zdG9wOwotICBDb2RlTWlycm9yLmVfcHJldmVu
dERlZmF1bHQgPSBlX3ByZXZlbnREZWZhdWx0OwotICBDb2RlTWlycm9yLmVfc3RvcFByb3BhZ2F0
aW9uID0gZV9zdG9wUHJvcGFnYXRpb247CisgIHZhciBlX3N0b3AgPSBDb2RlTWlycm9yLmVfc3Rv
cCA9IGZ1bmN0aW9uKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihl
KTt9OwogCiAgIGZ1bmN0aW9uIGVfdGFyZ2V0KGUpIHtyZXR1cm4gZS50YXJnZXQgfHwgZS5zcmNF
bGVtZW50O30KICAgZnVuY3Rpb24gZV9idXR0b24oZSkgewpAQCAtNTM0Nyw3ICs2ODI0LDEwIEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIC8vIEVWRU5UIEhBTkRMSU5H
CiAKLSAgZnVuY3Rpb24gb24oZW1pdHRlciwgdHlwZSwgZikgeworICAvLyBMaWdodHdlaWdodCBl
dmVudCBmcmFtZXdvcmsuIG9uL29mZiBhbHNvIHdvcmsgb24gRE9NIG5vZGVzLAorICAvLyByZWdp
c3RlcmluZyBuYXRpdmUgRE9NIGhhbmRsZXJzLgorCisgIHZhciBvbiA9IENvZGVNaXJyb3Iub24g
PSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlLCBmKSB7CiAgICAgaWYgKGVtaXR0ZXIuYWRkRXZlbnRM
aXN0ZW5lcikKICAgICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmLCBmYWxzZSk7
CiAgICAgZWxzZSBpZiAoZW1pdHRlci5hdHRhY2hFdmVudCkKQEAgLTUzNTcsOSArNjgzNyw5IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIGFyciA9IG1hcFt0
eXBlXSB8fCAobWFwW3R5cGVdID0gW10pOwogICAgICAgYXJyLnB1c2goZik7CiAgICAgfQotICB9
CisgIH07CiAKLSAgZnVuY3Rpb24gb2ZmKGVtaXR0ZXIsIHR5cGUsIGYpIHsKKyAgdmFyIG9mZiA9
IENvZGVNaXJyb3Iub2ZmID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSwgZikgewogICAgIGlmIChl
bWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIpCiAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlz
dGVuZXIodHlwZSwgZiwgZmFsc2UpOwogICAgIGVsc2UgaWYgKGVtaXR0ZXIuZGV0YWNoRXZlbnQp
CkBAIC01MzcwLDE1ICs2ODUwLDIyIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpCiAgICAgICAgIGlm
IChhcnJbaV0gPT0gZikgeyBhcnIuc3BsaWNlKGksIDEpOyBicmVhazsgfQogICAgIH0KLSAgfQor
ICB9OwogCi0gIGZ1bmN0aW9uIHNpZ25hbChlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykg
eworICB2YXIgc2lnbmFsID0gQ29kZU1pcnJvci5zaWduYWwgPSBmdW5jdGlvbihlbWl0dGVyLCB0
eXBlIC8qLCB2YWx1ZXMuLi4qLykgewogICAgIHZhciBhcnIgPSBlbWl0dGVyLl9oYW5kbGVycyAm
JiBlbWl0dGVyLl9oYW5kbGVyc1t0eXBlXTsKICAgICBpZiAoIWFycikgcmV0dXJuOwogICAgIHZh
ciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkgYXJyW2ldLmFwcGx5KG51bGwsIGFy
Z3MpOwotICB9CisgIH07CiAKKyAgLy8gT2Z0ZW4sIHdlIHdhbnQgdG8gc2lnbmFsIGV2ZW50cyBh
dCBhIHBvaW50IHdoZXJlIHdlIGFyZSBpbiB0aGUKKyAgLy8gbWlkZGxlIG9mIHNvbWUgd29yaywg
YnV0IGRvbid0IHdhbnQgdGhlIGhhbmRsZXIgdG8gc3RhcnQgY2FsbGluZworICAvLyBvdGhlciBt
ZXRob2RzIG9uIHRoZSBlZGl0b3IsIHdoaWNoIG1pZ2h0IGJlIGluIGFuIGluY29uc2lzdGVudAor
ICAvLyBzdGF0ZSBvciBzaW1wbHkgbm90IGV4cGVjdCBhbnkgb3RoZXIgZXZlbnRzIHRvIGhhcHBl
bi4KKyAgLy8gc2lnbmFsTGF0ZXIgbG9va3Mgd2hldGhlciB0aGVyZSBhcmUgYW55IGhhbmRsZXJz
LCBhbmQgc2NoZWR1bGVzCisgIC8vIHRoZW0gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbGFzdCBv
cGVyYXRpb24gZW5kcywgb3IsIGlmIG5vCisgIC8vIG9wZXJhdGlvbiBpcyBhY3RpdmUsIHdoZW4g
YSB0aW1lb3V0IGZpcmVzLgogICB2YXIgZGVsYXllZENhbGxiYWNrcywgZGVsYXllZENhbGxiYWNr
RGVwdGggPSAwOwogICBmdW5jdGlvbiBzaWduYWxMYXRlcihlbWl0dGVyLCB0eXBlIC8qLCB2YWx1
ZXMuLi4qLykgewogICAgIHZhciBhcnIgPSBlbWl0dGVyLl9oYW5kbGVycyAmJiBlbWl0dGVyLl9o
YW5kbGVyc1t0eXBlXTsKQEAgLTUzOTQsMTEgKzY4ODEsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIGRlbGF5ZWRDYWxsYmFja3MucHVzaChibmQoYXJyW2ldKSk7
CiAgIH0KIAotICBmdW5jdGlvbiBzaWduYWxET01FdmVudChjbSwgZSwgb3ZlcnJpZGUpIHsKLSAg
ICBzaWduYWwoY20sIG92ZXJyaWRlIHx8IGUudHlwZSwgY20sIGUpOwotICAgIHJldHVybiBlX2Rl
ZmF1bHRQcmV2ZW50ZWQoZSkgfHwgZS5jb2RlbWlycm9ySWdub3JlOwotICB9Ci0KICAgZnVuY3Rp
b24gZmlyZURlbGF5ZWQoKSB7CiAgICAgLS1kZWxheWVkQ2FsbGJhY2tEZXB0aDsKICAgICB2YXIg
ZGVsYXllZCA9IGRlbGF5ZWRDYWxsYmFja3M7CkBAIC01NDA2LDEzICs2ODg4LDIxIEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVs
YXllZC5sZW5ndGg7ICsraSkgZGVsYXllZFtpXSgpOwogICB9CiAKKyAgLy8gVGhlIERPTSBldmVu
dHMgdGhhdCBDb2RlTWlycm9yIGhhbmRsZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkKKyAgLy8gcmVn
aXN0ZXJpbmcgYSAobm9uLURPTSkgaGFuZGxlciBvbiB0aGUgZWRpdG9yIGZvciB0aGUgZXZlbnQg
bmFtZSwKKyAgLy8gYW5kIHByZXZlbnREZWZhdWx0LWluZyB0aGUgZXZlbnQgaW4gdGhhdCBoYW5k
bGVyLgorICBmdW5jdGlvbiBzaWduYWxET01FdmVudChjbSwgZSwgb3ZlcnJpZGUpIHsKKyAgICBz
aWduYWwoY20sIG92ZXJyaWRlIHx8IGUudHlwZSwgY20sIGUpOworICAgIHJldHVybiBlX2RlZmF1
bHRQcmV2ZW50ZWQoZSkgfHwgZS5jb2RlbWlycm9ySWdub3JlOworICB9CisKICAgZnVuY3Rpb24g
aGFzSGFuZGxlcihlbWl0dGVyLCB0eXBlKSB7CiAgICAgdmFyIGFyciA9IGVtaXR0ZXIuX2hhbmRs
ZXJzICYmIGVtaXR0ZXIuX2hhbmRsZXJzW3R5cGVdOwogICAgIHJldHVybiBhcnIgJiYgYXJyLmxl
bmd0aCA+IDA7CiAgIH0KIAotICBDb2RlTWlycm9yLm9uID0gb247IENvZGVNaXJyb3Iub2ZmID0g
b2ZmOyBDb2RlTWlycm9yLnNpZ25hbCA9IHNpZ25hbDsKLQorICAvLyBBZGQgb24gYW5kIG9mZiBt
ZXRob2RzIHRvIGEgY29uc3RydWN0b3IncyBwcm90b3R5cGUsIHRvIG1ha2UKKyAgLy8gcmVnaXN0
ZXJpbmcgZXZlbnRzIG9uIHN1Y2ggb2JqZWN0cyBtb3JlIGNvbnZlbmllbnQuCiAgIGZ1bmN0aW9u
IGV2ZW50TWl4aW4oY3RvcikgewogICAgIGN0b3IucHJvdG90eXBlLm9uID0gZnVuY3Rpb24odHlw
ZSwgZikge29uKHRoaXMsIHR5cGUsIGYpO307CiAgICAgY3Rvci5wcm90b3R5cGUub2ZmID0gZnVu
Y3Rpb24odHlwZSwgZikge29mZih0aGlzLCB0eXBlLCBmKTt9OwpAQCAtNTQyNywyMyArNjkxNyw0
NyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gaGFuZGxpbmcgdGhp
cycuCiAgIHZhciBQYXNzID0gQ29kZU1pcnJvci5QYXNzID0ge3RvU3RyaW5nOiBmdW5jdGlvbigp
e3JldHVybiAiQ29kZU1pcnJvci5QYXNzIjt9fTsKIAorICAvLyBSZXVzZWQgb3B0aW9uIG9iamVj
dHMgZm9yIHNldFNlbGVjdGlvbiAmIGZyaWVuZHMKKyAgdmFyIHNlbF9kb250U2Nyb2xsID0ge3Nj
cm9sbDogZmFsc2V9LCBzZWxfbW91c2UgPSB7b3JpZ2luOiAiKm1vdXNlIn0sIHNlbF9tb3ZlID0g
e29yaWdpbjogIittb3ZlIn07CisKICAgZnVuY3Rpb24gRGVsYXllZCgpIHt0aGlzLmlkID0gbnVs
bDt9Ci0gIERlbGF5ZWQucHJvdG90eXBlID0ge3NldDogZnVuY3Rpb24obXMsIGYpIHtjbGVhclRp
bWVvdXQodGhpcy5pZCk7IHRoaXMuaWQgPSBzZXRUaW1lb3V0KGYsIG1zKTt9fTsKKyAgRGVsYXll
ZC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obXMsIGYpIHsKKyAgICBjbGVhclRpbWVvdXQodGhp
cy5pZCk7CisgICAgdGhpcy5pZCA9IHNldFRpbWVvdXQoZiwgbXMpOworICB9OwogCiAgIC8vIENv
dW50cyB0aGUgY29sdW1uIG9mZnNldCBpbiBhIHN0cmluZywgdGFraW5nIHRhYnMgaW50byBhY2Nv
dW50LgogICAvLyBVc2VkIG1vc3RseSB0byBmaW5kIGluZGVudGF0aW9uLgotICBmdW5jdGlvbiBj
b3VudENvbHVtbihzdHJpbmcsIGVuZCwgdGFiU2l6ZSwgc3RhcnRJbmRleCwgc3RhcnRWYWx1ZSkg
eworICB2YXIgY291bnRDb2x1bW4gPSBDb2RlTWlycm9yLmNvdW50Q29sdW1uID0gZnVuY3Rpb24o
c3RyaW5nLCBlbmQsIHRhYlNpemUsIHN0YXJ0SW5kZXgsIHN0YXJ0VmFsdWUpIHsKICAgICBpZiAo
ZW5kID09IG51bGwpIHsKICAgICAgIGVuZCA9IHN0cmluZy5zZWFyY2goL1teXHNcdTAwYTBdLyk7
CiAgICAgICBpZiAoZW5kID09IC0xKSBlbmQgPSBzdHJpbmcubGVuZ3RoOwogICAgIH0KLSAgICBm
b3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBuID0gc3RhcnRWYWx1ZSB8fCAwOyBpIDwgZW5k
OyArK2kpIHsKLSAgICAgIGlmIChzdHJpbmcuY2hhckF0KGkpID09ICJcdCIpIG4gKz0gdGFiU2l6
ZSAtIChuICUgdGFiU2l6ZSk7Ci0gICAgICBlbHNlICsrbjsKKyAgICBmb3IgKHZhciBpID0gc3Rh
cnRJbmRleCB8fCAwLCBuID0gc3RhcnRWYWx1ZSB8fCAwOzspIHsKKyAgICAgIHZhciBuZXh0VGFi
ID0gc3RyaW5nLmluZGV4T2YoIlx0IiwgaSk7CisgICAgICBpZiAobmV4dFRhYiA8IDAgfHwgbmV4
dFRhYiA+PSBlbmQpCisgICAgICAgIHJldHVybiBuICsgKGVuZCAtIGkpOworICAgICAgbiArPSBu
ZXh0VGFiIC0gaTsKKyAgICAgIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSk7CisgICAgICBp
ID0gbmV4dFRhYiArIDE7CisgICAgfQorICB9OworCisgIC8vIFRoZSBpbnZlcnNlIG9mIGNvdW50
Q29sdW1uIC0tIGZpbmQgdGhlIG9mZnNldCB0aGF0IGNvcnJlc3BvbmRzIHRvCisgIC8vIGEgcGFy
dGljdWxhciBjb2x1bW4uCisgIGZ1bmN0aW9uIGZpbmRDb2x1bW4oc3RyaW5nLCBnb2FsLCB0YWJT
aXplKSB7CisgICAgZm9yICh2YXIgcG9zID0gMCwgY29sID0gMDs7KSB7CisgICAgICB2YXIgbmV4
dFRhYiA9IHN0cmluZy5pbmRleE9mKCJcdCIsIHBvcyk7CisgICAgICBpZiAobmV4dFRhYiA9PSAt
MSkgbmV4dFRhYiA9IHN0cmluZy5sZW5ndGg7CisgICAgICB2YXIgc2tpcHBlZCA9IG5leHRUYWIg
LSBwb3M7CisgICAgICBpZiAobmV4dFRhYiA9PSBzdHJpbmcubGVuZ3RoIHx8IGNvbCArIHNraXBw
ZWQgPj0gZ29hbCkKKyAgICAgICAgcmV0dXJuIHBvcyArIE1hdGgubWluKHNraXBwZWQsIGdvYWwg
LSBjb2wpOworICAgICAgY29sICs9IG5leHRUYWIgLSBwb3M7CisgICAgICBjb2wgKz0gdGFiU2l6
ZSAtIChjb2wgJSB0YWJTaXplKTsKKyAgICAgIHBvcyA9IG5leHRUYWIgKyAxOworICAgICAgaWYg
KGNvbCA+PSBnb2FsKSByZXR1cm4gcG9zOwogICAgIH0KLSAgICByZXR1cm4gbjsKICAgfQotICBD
b2RlTWlycm9yLmNvdW50Q29sdW1uID0gY291bnRDb2x1bW47CiAKICAgdmFyIHNwYWNlU3RycyA9
IFsiIl07CiAgIGZ1bmN0aW9uIHNwYWNlU3RyKG4pIHsKQEAgLTU0NTQsNjAgKzY5NjgsNjkgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gbHN0KGFycikg
eyByZXR1cm4gYXJyW2Fyci5sZW5ndGgtMV07IH0KIAotICBmdW5jdGlvbiBzZWxlY3RJbnB1dChu
b2RlKSB7Ci0gICAgaWYgKGlvcykgeyAvLyBNb2JpbGUgU2FmYXJpIGFwcGFyZW50bHkgaGFzIGEg
YnVnIHdoZXJlIHNlbGVjdCgpIGlzIGJyb2tlbi4KLSAgICAgIG5vZGUuc2VsZWN0aW9uU3RhcnQg
PSAwOwotICAgICAgbm9kZS5zZWxlY3Rpb25FbmQgPSBub2RlLnZhbHVlLmxlbmd0aDsKLSAgICB9
IGVsc2UgewotICAgICAgLy8gU3VwcHJlc3MgbXlzdGVyaW91cyBJRTEwIGVycm9ycwotICAgICAg
dHJ5IHsgbm9kZS5zZWxlY3QoKTsgfQotICAgICAgY2F0Y2goX2UpIHt9Ci0gICAgfQotICB9Cisg
IHZhciBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9uKG5vZGUpIHsgbm9kZS5zZWxlY3QoKTsgfTsKKyAg
aWYgKGlvcykgLy8gTW9iaWxlIFNhZmFyaSBhcHBhcmVudGx5IGhhcyBhIGJ1ZyB3aGVyZSBzZWxl
Y3QoKSBpcyBicm9rZW4uCisgICAgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IG5vZGUu
c2VsZWN0aW9uU3RhcnQgPSAwOyBub2RlLnNlbGVjdGlvbkVuZCA9IG5vZGUudmFsdWUubGVuZ3Ro
OyB9OworICBlbHNlIGlmIChpZSkgLy8gU3VwcHJlc3MgbXlzdGVyaW91cyBJRTEwIGVycm9ycwor
ICAgIHNlbGVjdElucHV0ID0gZnVuY3Rpb24obm9kZSkgeyB0cnkgeyBub2RlLnNlbGVjdCgpOyB9
IGNhdGNoKF9lKSB7fSB9OwogCi0gIGZ1bmN0aW9uIGluZGV4T2YoY29sbGVjdGlvbiwgZWx0KSB7
Ci0gICAgaWYgKGNvbGxlY3Rpb24uaW5kZXhPZikgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihl
bHQpOwotICAgIGZvciAodmFyIGkgPSAwLCBlID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBlOyAr
K2kpCi0gICAgICBpZiAoY29sbGVjdGlvbltpXSA9PSBlbHQpIHJldHVybiBpOworICBmdW5jdGlv
biBpbmRleE9mKGFycmF5LCBlbHQpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxl
bmd0aDsgKytpKQorICAgICAgaWYgKGFycmF5W2ldID09IGVsdCkgcmV0dXJuIGk7CiAgICAgcmV0
dXJuIC0xOwogICB9CisgIGlmIChbXS5pbmRleE9mKSBpbmRleE9mID0gZnVuY3Rpb24oYXJyYXks
IGVsdCkgeyByZXR1cm4gYXJyYXkuaW5kZXhPZihlbHQpOyB9OworICBmdW5jdGlvbiBtYXAoYXJy
YXksIGYpIHsKKyAgICB2YXIgb3V0ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJh
eS5sZW5ndGg7IGkrKykgb3V0W2ldID0gZihhcnJheVtpXSwgaSk7CisgICAgcmV0dXJuIG91dDsK
KyAgfQorICBpZiAoW10ubWFwKSBtYXAgPSBmdW5jdGlvbihhcnJheSwgZikgeyByZXR1cm4gYXJy
YXkubWFwKGYpOyB9OwogCiAgIGZ1bmN0aW9uIGNyZWF0ZU9iaihiYXNlLCBwcm9wcykgewotICAg
IGZ1bmN0aW9uIE9iaigpIHt9Ci0gICAgT2JqLnByb3RvdHlwZSA9IGJhc2U7Ci0gICAgdmFyIGlu
c3QgPSBuZXcgT2JqKCk7CisgICAgdmFyIGluc3Q7CisgICAgaWYgKE9iamVjdC5jcmVhdGUpIHsK
KyAgICAgIGluc3QgPSBPYmplY3QuY3JlYXRlKGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICB2
YXIgY3RvciA9IGZ1bmN0aW9uKCkge307CisgICAgICBjdG9yLnByb3RvdHlwZSA9IGJhc2U7Cisg
ICAgICBpbnN0ID0gbmV3IGN0b3IoKTsKKyAgICB9CiAgICAgaWYgKHByb3BzKSBjb3B5T2JqKHBy
b3BzLCBpbnN0KTsKICAgICByZXR1cm4gaW5zdDsKLSAgfQorICB9OwogCi0gIGZ1bmN0aW9uIGNv
cHlPYmoob2JqLCB0YXJnZXQpIHsKKyAgZnVuY3Rpb24gY29weU9iaihvYmosIHRhcmdldCwgb3Zl
cndyaXRlKSB7CiAgICAgaWYgKCF0YXJnZXQpIHRhcmdldCA9IHt9OwotICAgIGZvciAodmFyIHBy
b3AgaW4gb2JqKSBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3ApKSB0YXJnZXRbcHJvcF0gPSBv
YmpbcHJvcF07CisgICAgZm9yICh2YXIgcHJvcCBpbiBvYmopCisgICAgICBpZiAob2JqLmhhc093
blByb3BlcnR5KHByb3ApICYmIChvdmVyd3JpdGUgIT09IGZhbHNlIHx8ICF0YXJnZXQuaGFzT3du
UHJvcGVydHkocHJvcCkpKQorICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07CiAgICAg
cmV0dXJuIHRhcmdldDsKICAgfQogCi0gIGZ1bmN0aW9uIGVtcHR5QXJyYXkoc2l6ZSkgewotICAg
IGZvciAodmFyIGEgPSBbXSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIGEucHVzaCh1bmRlZmluZWQp
OwotICAgIHJldHVybiBhOwotICB9Ci0KICAgZnVuY3Rpb24gYmluZChmKSB7CiAgICAgdmFyIGFy
Z3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwogICAgIHJldHVy
biBmdW5jdGlvbigpe3JldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO307CiAgIH0KIAotICB2YXIg
bm9uQVNDSUlTaW5nbGVDYXNlV29yZENoYXIgPSAvW1x1MzA0MC1cdTMwOWZcdTMwYTAtXHUzMGZm
XHUzNDAwLVx1NGRiNVx1NGUwMC1cdTlmY2NcdWFjMDAtXHVkN2FmXS87Ci0gIGZ1bmN0aW9uIGlz
V29yZENoYXIoY2gpIHsKKyAgdmFyIG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyID0gL1tcdTAw
ZGZcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVh
YzAwLVx1ZDdhZl0vOworICB2YXIgaXNXb3JkQ2hhciA9IENvZGVNaXJyb3IuaXNXb3JkQ2hhciA9
IGZ1bmN0aW9uKGNoKSB7CiAgICAgcmV0dXJuIC9cdy8udGVzdChjaCkgfHwgY2ggPiAiXHg4MCIg
JiYKICAgICAgIChjaC50b1VwcGVyQ2FzZSgpICE9IGNoLnRvTG93ZXJDYXNlKCkgfHwgbm9uQVND
SUlTaW5nbGVDYXNlV29yZENoYXIudGVzdChjaCkpOwotICB9CisgIH07CiAKICAgZnVuY3Rpb24g
aXNFbXB0eShvYmopIHsKICAgICBmb3IgKHZhciBuIGluIG9iaikgaWYgKG9iai5oYXNPd25Qcm9w
ZXJ0eShuKSAmJiBvYmpbbl0pIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQog
Ci0gIHZhciBpc0V4dGVuZGluZ0NoYXIgPSAvW1x1MDMwMC1cdTAzNkZcdTA0ODMtXHUwNDg3XHUw
NDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0LVx1MDVDNVx1
MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEItXHUwNjVGXHUwNjcwXHUwNkQ2LVx1MDZEQ1x1MDZERi1c
dTA2RTRcdTA2RTctXHUwNkU4XHUwNkVBLVx1MDZFRFx1QTY2Rlx1MURDMOKAk1x1MURGRlx1MjBE
MOKAk1x1MjBGRlx1QTY3MC1cdUE2NzJcdUE2NzQtXHVBNjdEXHVBNjlGXHVkYzAwLVx1ZGZmZlx1
RkUyMOKAk1x1RkUyRl0vOworICAvLyBFeHRlbmRpbmcgdW5pY29kZSBjaGFyYWN0ZXJzLiBBIHNl
cmllcyBvZiBhIG5vbi1leHRlbmRpbmcgY2hhciArCisgIC8vIGFueSBudW1iZXIgb2YgZXh0ZW5k
aW5nIGNoYXJzIGlzIHRyZWF0ZWQgYXMgYSBzaW5nbGUgdW5pdCBhcyBmYXIKKyAgLy8gYXMgZWRp
dGluZyBhbmQgbWVhc3VyaW5nIGlzIGNvbmNlcm5lZC4gVGhpcyBpcyBub3QgZnVsbHkgY29ycmVj
dCwKKyAgLy8gc2luY2Ugc29tZSBzY3JpcHRzL2ZvbnRzL2Jyb3dzZXJzIGFsc28gdHJlYXQgb3Ro
ZXIgY29uZmlndXJhdGlvbnMKKyAgLy8gb2YgY29kZSBwb2ludHMgYXMgYSBncm91cC4KKyAgdmFy
IGV4dGVuZGluZ0NoYXJzID0gL1tcdTAzMDAtXHUwMzZmXHUwNDgzLVx1MDQ4OVx1MDU5MS1cdTA1
YmRcdTA1YmZcdTA1YzFcdTA1YzJcdTA1YzRcdTA1YzVcdTA1YzdcdTA2MTAtXHUwNjFhXHUwNjRi
LVx1MDY1ZVx1MDY3MFx1MDZkNi1cdTA2ZGNcdTA2ZGUtXHUwNmU0XHUwNmU3XHUwNmU4XHUwNmVh
LVx1MDZlZFx1MDcxMVx1MDczMC1cdTA3NGFcdTA3YTYtXHUwN2IwXHUwN2ViLVx1MDdmM1x1MDgx
Ni1cdTA4MTlcdTA4MWItXHUwODIzXHUwODI1LVx1MDgyN1x1MDgyOS1cdTA4MmRcdTA5MDAtXHUw
OTAyXHUwOTNjXHUwOTQxLVx1MDk0OFx1MDk0ZFx1MDk1MS1cdTA5NTVcdTA5NjJcdTA5NjNcdTA5
ODFcdTA5YmNcdTA5YmVcdTA5YzEtXHUwOWM0XHUwOWNkXHUwOWQ3XHUwOWUyXHUwOWUzXHUwYTAx
XHUwYTAyXHUwYTNjXHUwYTQxXHUwYTQyXHUwYTQ3XHUwYTQ4XHUwYTRiLVx1MGE0ZFx1MGE1MVx1
MGE3MFx1MGE3MVx1MGE3NVx1MGE4MVx1MGE4Mlx1MGFiY1x1MGFjMS1cdTBhYzVcdTBhYzdcdTBh
YzhcdTBhY2RcdTBhZTJcdTBhZTNcdTBiMDFcdTBiM2NcdTBiM2VcdTBiM2ZcdTBiNDEtXHUwYjQ0
XHUwYjRkXHUwYjU2XHUwYjU3XHUwYjYyXHUwYjYzXHUwYjgyXHUwYmJlXHUwYmMwXHUwYmNkXHUw
YmQ3XHUwYzNlLVx1MGM0MFx1MGM0Ni1cdTBjNDhcdTBjNGEtXHUwYzRkXHUwYzU1XHUwYzU2XHUw
YzYyXHUwYzYzXHUwY2JjXHUwY2JmXHUwY2MyXHUwY2M2XHUwY2NjXHUwY2NkXHUwY2Q1XHUwY2Q2
XHUwY2UyXHUwY2UzXHUwZDNlXHUwZDQxLVx1MGQ0NFx1MGQ0ZFx1MGQ1N1x1MGQ2Mlx1MGQ2M1x1
MGRjYVx1MGRjZlx1MGRkMi1cdTBkZDRcdTBkZDZcdTBkZGZcdTBlMzFcdTBlMzQtXHUwZTNhXHUw
ZTQ3LVx1MGU0ZVx1MGViMVx1MGViNC1cdTBlYjlcdTBlYmJcdTBlYmNcdTBlYzgtXHUwZWNkXHUw
ZjE4XHUwZjE5XHUwZjM1XHUwZjM3XHUwZjM5XHUwZjcxLVx1MGY3ZVx1MGY4MC1cdTBmODRcdTBm
ODZcdTBmODdcdTBmOTAtXHUwZjk3XHUwZjk5LVx1MGZiY1x1MGZjNlx1MTAyZC1cdTEwMzBcdTEw
MzItXHUxMDM3XHUxMDM5XHUxMDNhXHUxMDNkXHUxMDNlXHUxMDU4XHUxMDU5XHUxMDVlLVx1MTA2
MFx1MTA3MS1cdTEwNzRcdTEwODJcdTEwODVcdTEwODZcdTEwOGRcdTEwOWRcdTEzNWZcdTE3MTIt
XHUxNzE0XHUxNzMyLVx1MTczNFx1MTc1Mlx1MTc1M1x1MTc3Mlx1MTc3M1x1MTdiNy1cdTE3YmRc
dTE3YzZcdTE3YzktXHUxN2QzXHUxN2RkXHUxODBiLVx1MTgwZFx1MThhOVx1MTkyMC1cdTE5MjJc
dTE5MjdcdTE5MjhcdTE5MzJcdTE5MzktXHUxOTNiXHUxYTE3XHUxYTE4XHUxYTU2XHUxYTU4LVx1
MWE1ZVx1MWE2MFx1MWE2Mlx1MWE2NS1cdTFhNmNcdTFhNzMtXHUxYTdjXHUxYTdmXHUxYjAwLVx1
MWIwM1x1MWIzNFx1MWIzNi1cdTFiM2FcdTFiM2NcdTFiNDJcdTFiNmItXHUxYjczXHUxYjgwXHUx
YjgxXHUxYmEyLVx1MWJhNVx1MWJhOFx1MWJhOVx1MWMyYy1cdTFjMzNcdTFjMzZcdTFjMzdcdTFj
ZDAtXHUxY2QyXHUxY2Q0LVx1MWNlMFx1MWNlMi1cdTFjZThcdTFjZWRcdTFkYzAtXHUxZGU2XHUx
ZGZkLVx1MWRmZlx1MjAwY1x1MjAwZFx1MjBkMC1cdTIwZjBcdTJjZWYtXHUyY2YxXHUyZGUwLVx1
MmRmZlx1MzAyYS1cdTMwMmZcdTMwOTlcdTMwOWFcdWE2NmYtXHVhNjcyXHVhNjdjXHVhNjdkXHVh
NmYwXHVhNmYxXHVhODAyXHVhODA2XHVhODBiXHVhODI1XHVhODI2XHVhOGM0XHVhOGUwLVx1YThm
MVx1YTkyNi1cdWE5MmRcdWE5NDctXHVhOTUxXHVhOTgwLVx1YTk4Mlx1YTliM1x1YTliNi1cdWE5
YjlcdWE5YmNcdWFhMjktXHVhYTJlXHVhYTMxXHVhYTMyXHVhYTM1XHVhYTM2XHVhYTQzXHVhYTRj
XHVhYWIwXHVhYWIyLVx1YWFiNFx1YWFiN1x1YWFiOFx1YWFiZVx1YWFiZlx1YWFjMVx1YWJlNVx1
YWJlOFx1YWJlZFx1ZGMwMC1cdWRmZmZcdWZiMWVcdWZlMDAtXHVmZTBmXHVmZTIwLVx1ZmUyNlx1
ZmY5ZVx1ZmY5Zl0vOworICBmdW5jdGlvbiBpc0V4dGVuZGluZ0NoYXIoY2gpIHsgcmV0dXJuIGNo
LmNoYXJDb2RlQXQoMCkgPj0gNzY4ICYmIGV4dGVuZGluZ0NoYXJzLnRlc3QoY2gpOyB9CiAKICAg
Ly8gRE9NIFVUSUxJVElFUwogCkBAIC01NTE1LDExICs3MDM4LDI3IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0
YWcpOwogICAgIGlmIChjbGFzc05hbWUpIGUuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgIGlm
IChzdHlsZSkgZS5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7Ci0gICAgaWYgKHR5cGVvZiBjb250ZW50
ID09ICJzdHJpbmciKSBzZXRUZXh0Q29udGVudChlLCBjb250ZW50KTsKKyAgICBpZiAodHlwZW9m
IGNvbnRlbnQgPT0gInN0cmluZyIpIGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoY29udGVudCkpOwogICAgIGVsc2UgaWYgKGNvbnRlbnQpIGZvciAodmFyIGkgPSAwOyBpIDwg
Y29udGVudC5sZW5ndGg7ICsraSkgZS5hcHBlbmRDaGlsZChjb250ZW50W2ldKTsKICAgICByZXR1
cm4gZTsKICAgfQogCisgIHZhciByYW5nZTsKKyAgaWYgKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSBy
YW5nZSA9IGZ1bmN0aW9uKG5vZGUsIHN0YXJ0LCBlbmQpIHsKKyAgICB2YXIgciA9IGRvY3VtZW50
LmNyZWF0ZVJhbmdlKCk7CisgICAgci5zZXRFbmQobm9kZSwgZW5kKTsKKyAgICByLnNldFN0YXJ0
KG5vZGUsIHN0YXJ0KTsKKyAgICByZXR1cm4gcjsKKyAgfTsKKyAgZWxzZSByYW5nZSA9IGZ1bmN0
aW9uKG5vZGUsIHN0YXJ0LCBlbmQpIHsKKyAgICB2YXIgciA9IGRvY3VtZW50LmJvZHkuY3JlYXRl
VGV4dFJhbmdlKCk7CisgICAgci5tb3ZlVG9FbGVtZW50VGV4dChub2RlLnBhcmVudE5vZGUpOwor
ICAgIHIuY29sbGFwc2UodHJ1ZSk7CisgICAgci5tb3ZlRW5kKCJjaGFyYWN0ZXIiLCBlbmQpOwor
ICAgIHIubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLCBzdGFydCk7CisgICAgcmV0dXJuIHI7CisgIH07
CisKICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRyZW4oZSkgewogICAgIGZvciAodmFyIGNvdW50ID0g
ZS5jaGlsZE5vZGVzLmxlbmd0aDsgY291bnQgPiAwOyAtLWNvdW50KQogICAgICAgZS5yZW1vdmVD
aGlsZChlLmZpcnN0Q2hpbGQpOwpAQCAtNTUzMCwxNyArNzA2OSwzNSBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4ocGFyZW50KS5h
cHBlbmRDaGlsZChlKTsKICAgfQogCi0gIGZ1bmN0aW9uIHNldFRleHRDb250ZW50KGUsIHN0cikg
ewotICAgIGlmIChpZV9sdDkpIHsKLSAgICAgIGUuaW5uZXJIVE1MID0gIiI7Ci0gICAgICBlLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cikpOwotICAgIH0gZWxzZSBlLnRl
eHRDb250ZW50ID0gc3RyOworICBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7Cisg
ICAgaWYgKHBhcmVudC5jb250YWlucykKKyAgICAgIHJldHVybiBwYXJlbnQuY29udGFpbnMoY2hp
bGQpOworICAgIHdoaWxlIChjaGlsZCA9IGNoaWxkLnBhcmVudE5vZGUpCisgICAgICBpZiAoY2hp
bGQgPT0gcGFyZW50KSByZXR1cm4gdHJ1ZTsKICAgfQogCi0gIGZ1bmN0aW9uIGdldFJlY3Qobm9k
ZSkgewotICAgIHJldHVybiBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICBmdW5jdGlv
biBhY3RpdmVFbHQoKSB7IHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50OyB9CisgIC8vIE9s
ZGVyIHZlcnNpb25zIG9mIElFIHRocm93cyB1bnNwZWNpZmllZCBlcnJvciB3aGVuIHRvdWNoaW5n
CisgIC8vIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW4gc29tZSBjYXNlcyAoZHVyaW5nIGxvYWRp
bmcsIGluIGlmcmFtZSkKKyAgaWYgKGllX3VwdG8xMCkgYWN0aXZlRWx0ID0gZnVuY3Rpb24oKSB7
CisgICAgdHJ5IHsgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7IH0KKyAgICBjYXRjaChl
KSB7IHJldHVybiBkb2N1bWVudC5ib2R5OyB9CisgIH07CisKKyAgZnVuY3Rpb24gY2xhc3NUZXN0
KGNscykgeyByZXR1cm4gbmV3IFJlZ0V4cCgiXFxiIiArIGNscyArICJcXGJcXHMqIik7IH0KKyAg
ZnVuY3Rpb24gcm1DbGFzcyhub2RlLCBjbHMpIHsKKyAgICB2YXIgdGVzdCA9IGNsYXNzVGVzdChj
bHMpOworICAgIGlmICh0ZXN0LnRlc3Qobm9kZS5jbGFzc05hbWUpKSBub2RlLmNsYXNzTmFtZSA9
IG5vZGUuY2xhc3NOYW1lLnJlcGxhY2UodGVzdCwgIiIpOworICB9CisgIGZ1bmN0aW9uIGFkZENs
YXNzKG5vZGUsIGNscykgeworICAgIGlmICghY2xhc3NUZXN0KGNscykudGVzdChub2RlLmNsYXNz
TmFtZSkpIG5vZGUuY2xhc3NOYW1lICs9ICIgIiArIGNsczsKKyAgfQorICBmdW5jdGlvbiBqb2lu
Q2xhc3NlcyhhLCBiKSB7CisgICAgdmFyIGFzID0gYS5zcGxpdCgiICIpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgYXMubGVuZ3RoOyBpKyspCisgICAgICBpZiAoYXNbaV0gJiYgIWNsYXNzVGVz
dChhc1tpXSkudGVzdChiKSkgYiArPSAiICIgKyBhc1tpXTsKKyAgICByZXR1cm4gYjsKICAgfQot
ICBDb2RlTWlycm9yLnJlcGxhY2VHZXRSZWN0ID0gZnVuY3Rpb24oZikgeyBnZXRSZWN0ID0gZjsg
fTsKIAogICAvLyBGRUFUVVJFIERFVEVDVElPTgogCkBAIC01NTQ4LDQzICs3MTA1LDExIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB2YXIgZHJhZ0FuZERyb3AgPSBmdW5j
dGlvbigpIHsKICAgICAvLyBUaGVyZSBpcyAqc29tZSoga2luZCBvZiBkcmFnLWFuZC1kcm9wIHN1
cHBvcnQgaW4gSUU2LTgsIGJ1dCBJCiAgICAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgeWV0
LgotICAgIGlmIChpZV9sdDkpIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaWVfdXB0bzgpIHJldHVy
biBmYWxzZTsKICAgICB2YXIgZGl2ID0gZWx0KCdkaXYnKTsKICAgICByZXR1cm4gImRyYWdnYWJs
ZSIgaW4gZGl2IHx8ICJkcmFnRHJvcCIgaW4gZGl2OwogICB9KCk7CiAKLSAgLy8gRm9yIGEgcmVh
c29uIEkgaGF2ZSB5ZXQgdG8gZmlndXJlIG91dCwgc29tZSBicm93c2VycyBkaXNhbGxvdwotICAv
LyB3b3JkIHdyYXBwaW5nIGJldHdlZW4gY2VydGFpbiBjaGFyYWN0ZXJzICpvbmx5KiBpZiBhIG5l
dyBpbmxpbmUKLSAgLy8gZWxlbWVudCBpcyBzdGFydGVkIGJldHdlZW4gdGhlbS4gVGhpcyBtYWtl
cyBpdCBoYXJkIHRvIHJlbGlhYmx5Ci0gIC8vIG1lYXN1cmUgdGhlIHBvc2l0aW9uIG9mIHRoaW5n
cywgc2luY2UgdGhhdCByZXF1aXJlcyBpbnNlcnRpbmcgYW4KLSAgLy8gZXh0cmEgc3Bhbi4gVGhp
cyB0ZXJyaWJseSBmcmFnaWxlIHNldCBvZiB0ZXN0cyBtYXRjaGVzIHRoZQotICAvLyBjaGFyYWN0
ZXIgY29tYmluYXRpb25zIHRoYXQgc3VmZmVyIGZyb20gdGhpcyBwaGVub21lbm9uIG9uIHRoZQot
ICAvLyB2YXJpb3VzIGJyb3dzZXJzLgotICBmdW5jdGlvbiBzcGFuQWZmZWN0c1dyYXBwaW5nKCkg
eyByZXR1cm4gZmFsc2U7IH0KLSAgaWYgKGdlY2tvKSAvLyBPbmx5IGZvciAiJCciCi0gICAgc3Bh
bkFmZmVjdHNXcmFwcGluZyA9IGZ1bmN0aW9uKHN0ciwgaSkgewotICAgICAgcmV0dXJuIHN0ci5j
aGFyQ29kZUF0KGkgLSAxKSA9PSAzNiAmJiBzdHIuY2hhckNvZGVBdChpKSA9PSAzOTsKLSAgICB9
OwotICBlbHNlIGlmIChzYWZhcmkgJiYgIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChu
YXZpZ2F0b3IudXNlckFnZW50KSkKLSAgICBzcGFuQWZmZWN0c1dyYXBwaW5nID0gZnVuY3Rpb24o
c3RyLCBpKSB7Ci0gICAgICB2YXIgcmVzdWx0ID0gL1wtW14gXC0/XXxcP1teICFcJ1wiXCksLlwt
XC86O1w/XF1cfV0vLnRlc3Qoc3RyLnNsaWNlKGkgLSAxLCBpICsgMSkpOwotICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9OwotICBlbHNlIGlmICh3ZWJraXQgJiYgL0Nocm9tZVwvKD86Mjl8WzMt
OV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpCi0gICAgc3BhbkFmZmVj
dHNXcmFwcGluZyA9IGZ1bmN0aW9uKHN0ciwgaSkgewotICAgICAgdmFyIGNvZGUgPSBzdHIuY2hh
ckNvZGVBdChpIC0gMSk7Ci0gICAgICByZXR1cm4gY29kZSA+PSA4MjA4ICYmIGNvZGUgPD0gODIx
MjsKLSAgICB9OwotICBlbHNlIGlmICh3ZWJraXQpCi0gICAgc3BhbkFmZmVjdHNXcmFwcGluZyA9
IGZ1bmN0aW9uKHN0ciwgaSkgewotICAgICAgaWYgKGkgPiAxICYmIHN0ci5jaGFyQ29kZUF0KGkg
LSAxKSA9PSA0NSkgewotICAgICAgICBpZiAoL1x3Ly50ZXN0KHN0ci5jaGFyQXQoaSAtIDIpKSAm
JiAvW15cLT9cLl0vLnRlc3Qoc3RyLmNoYXJBdChpKSkpIHJldHVybiB0cnVlOwotICAgICAgICBp
ZiAoaSA+IDIgJiYgL1tcZFwuLF0vLnRlc3Qoc3RyLmNoYXJBdChpIC0gMikpICYmIC9bXGRcLixd
Ly50ZXN0KHN0ci5jaGFyQXQoaSkpKSByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICB2YXIg
cmVzdWx0ID0gL1t+ISMlJiopPSt9XF1cXHxcIlwuPiw6O11bKHtbPF18LVteXC0/XC5cdTIwMTAt
XHUyMDFmXHUyMDI2XXxcP1tcd35gQCMkJVxeJiooXz0re1t8PjxdfOKApltcd35gQCMkJVxeJioo
Xz0re1s+PF0vLnRlc3Qoc3RyLnNsaWNlKGkgLSAxLCBpICsgMSkpOwotICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9OwotCiAgIHZhciBrbm93blNjcm9sbGJhcldpZHRoOwogICBmdW5jdGlvbiBz
Y3JvbGxiYXJXaWR0aChtZWFzdXJlKSB7CiAgICAgaWYgKGtub3duU2Nyb2xsYmFyV2lkdGggIT0g
bnVsbCkgcmV0dXJuIGtub3duU2Nyb2xsYmFyV2lkdGg7CkBAIC01NjAxLDE1ICs3MTI2LDI2IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdmFyIHRlc3QgPSBlbHQo
InNwYW4iLCAiXHUyMDBiIik7CiAgICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFzdXJlLCBl
bHQoInNwYW4iLCBbdGVzdCwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKV0pKTsKICAgICAg
IGlmIChtZWFzdXJlLmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0ICE9IDApCi0gICAgICAgIHp3c3BT
dXBwb3J0ZWQgPSB0ZXN0Lm9mZnNldFdpZHRoIDw9IDEgJiYgdGVzdC5vZmZzZXRIZWlnaHQgPiAy
ICYmICFpZV9sdDg7CisgICAgICAgIHp3c3BTdXBwb3J0ZWQgPSB0ZXN0Lm9mZnNldFdpZHRoIDw9
IDEgJiYgdGVzdC5vZmZzZXRIZWlnaHQgPiAyICYmICFpZV91cHRvNzsKICAgICB9CiAgICAgaWYg
KHp3c3BTdXBwb3J0ZWQpIHJldHVybiBlbHQoInNwYW4iLCAiXHUyMDBiIik7CiAgICAgZWxzZSBy
ZXR1cm4gZWx0KCJzcGFuIiwgIlx1MDBhMCIsIG51bGwsICJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpOwogICB9CiAKKyAgLy8gRmVhdHVyZS1k
ZXRlY3QgSUUncyBjcnVtbXkgY2xpZW50IHJlY3QgcmVwb3J0aW5nIGZvciBiaWRpIHRleHQKKyAg
dmFyIGJhZEJpZGlSZWN0czsKKyAgZnVuY3Rpb24gaGFzQmFkQmlkaVJlY3RzKG1lYXN1cmUpIHsK
KyAgICBpZiAoYmFkQmlkaVJlY3RzICE9IG51bGwpIHJldHVybiBiYWRCaWRpUmVjdHM7CisgICAg
dmFyIHR4dCA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCJBXHUwNjJlQSIpKTsKKyAgICB2YXIgcjAgPSByYW5nZSh0eHQsIDAsIDEpLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpOworICAgIGlmIChyMC5sZWZ0ID09IHIwLnJpZ2h0KSByZXR1cm4g
ZmFsc2U7CisgICAgdmFyIHIxID0gcmFuZ2UodHh0LCAxLCAyKS5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKTsKKyAgICByZXR1cm4gYmFkQmlkaVJlY3RzID0gKHIxLnJpZ2h0IC0gcjAucmlnaHQgPCAz
KTsKKyAgfQorCiAgIC8vIFNlZSBpZiAiIi5zcGxpdCBpcyB0aGUgYnJva2VuIElFIHZlcnNpb24s
IGlmIHNvLCBwcm92aWRlIGFuCiAgIC8vIGFsdGVybmF0aXZlIHdheSB0byBzcGxpdCBsaW5lcy4K
LSAgdmFyIHNwbGl0TGluZXMgPSAiXG5cbmIiLnNwbGl0KC9cbi8pLmxlbmd0aCAhPSAzID8gZnVu
Y3Rpb24oc3RyaW5nKSB7CisgIHZhciBzcGxpdExpbmVzID0gQ29kZU1pcnJvci5zcGxpdExpbmVz
ID0gIlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGggIT0gMyA/IGZ1bmN0aW9uKHN0cmluZykgewog
ICAgIHZhciBwb3MgPSAwLCByZXN1bHQgPSBbXSwgbCA9IHN0cmluZy5sZW5ndGg7CiAgICAgd2hp
bGUgKHBvcyA8PSBsKSB7CiAgICAgICB2YXIgbmwgPSBzdHJpbmcuaW5kZXhPZigiXG4iLCBwb3Mp
OwpAQCAtNTYyNiw3ICs3MTYyLDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiAgIH0gOiBmdW5jdGlvbihzdHJpbmcpe3JldHVy
biBzdHJpbmcuc3BsaXQoL1xyXG4/fFxuLyk7fTsKLSAgQ29kZU1pcnJvci5zcGxpdExpbmVzID0g
c3BsaXRMaW5lczsKIAogICB2YXIgaGFzU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbiA/
IGZ1bmN0aW9uKHRlKSB7CiAgICAgdHJ5IHsgcmV0dXJuIHRlLnNlbGVjdGlvblN0YXJ0ICE9IHRl
LnNlbGVjdGlvbkVuZDsgfQpAQCAtNTY0MiwyMiArNzE3NywyMiBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICB2YXIgZSA9IGVsdCgiZGl2Iik7CiAgICAgaWYgKCJvbmNv
cHkiIGluIGUpIHJldHVybiB0cnVlOwogICAgIGUuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCAicmV0
dXJuOyIpOwotICAgIHJldHVybiB0eXBlb2YgZS5vbmNvcHkgPT0gJ2Z1bmN0aW9uJzsKKyAgICBy
ZXR1cm4gdHlwZW9mIGUub25jb3B5ID09ICJmdW5jdGlvbiI7CiAgIH0pKCk7CiAKLSAgLy8gS0VZ
IE5BTUlORworICAvLyBLRVkgTkFNRVMKIAogICB2YXIga2V5TmFtZXMgPSB7MzogIkVudGVyIiwg
ODogIkJhY2tzcGFjZSIsIDk6ICJUYWIiLCAxMzogIkVudGVyIiwgMTY6ICJTaGlmdCIsIDE3OiAi
Q3RybCIsIDE4OiAiQWx0IiwKICAgICAgICAgICAgICAgICAgIDE5OiAiUGF1c2UiLCAyMDogIkNh
cHNMb2NrIiwgMjc6ICJFc2MiLCAzMjogIlNwYWNlIiwgMzM6ICJQYWdlVXAiLCAzNDogIlBhZ2VE
b3duIiwgMzU6ICJFbmQiLAogICAgICAgICAgICAgICAgICAgMzY6ICJIb21lIiwgMzc6ICJMZWZ0
IiwgMzg6ICJVcCIsIDM5OiAiUmlnaHQiLCA0MDogIkRvd24iLCA0NDogIlByaW50U2NybiIsIDQ1
OiAiSW5zZXJ0IiwKLSAgICAgICAgICAgICAgICAgIDQ2OiAiRGVsZXRlIiwgNTk6ICI7IiwgOTE6
ICJNb2QiLCA5MjogIk1vZCIsIDkzOiAiTW9kIiwgMTA5OiAiLSIsIDEwNzogIj0iLCAxMjc6ICJE
ZWxldGUiLAotICAgICAgICAgICAgICAgICAgMTg2OiAiOyIsIDE4NzogIj0iLCAxODg6ICIsIiwg
MTg5OiAiLSIsIDE5MDogIi4iLCAxOTE6ICIvIiwgMTkyOiAiYCIsIDIxOTogIlsiLCAyMjA6ICJc
XCIsCi0gICAgICAgICAgICAgICAgICAyMjE6ICJdIiwgMjIyOiAiJyIsIDYzMjc2OiAiUGFnZVVw
IiwgNjMyNzc6ICJQYWdlRG93biIsIDYzMjc1OiAiRW5kIiwgNjMyNzM6ICJIb21lIiwKLSAgICAg
ICAgICAgICAgICAgIDYzMjM0OiAiTGVmdCIsIDYzMjMyOiAiVXAiLCA2MzIzNTogIlJpZ2h0Iiwg
NjMyMzM6ICJEb3duIiwgNjMzMDI6ICJJbnNlcnQiLCA2MzI3MjogIkRlbGV0ZSJ9OworICAgICAg
ICAgICAgICAgICAgNDY6ICJEZWxldGUiLCA1OTogIjsiLCA2MTogIj0iLCA5MTogIk1vZCIsIDky
OiAiTW9kIiwgOTM6ICJNb2QiLCAxMDc6ICI9IiwgMTA5OiAiLSIsIDEyNzogIkRlbGV0ZSIsCisg
ICAgICAgICAgICAgICAgICAxNzM6ICItIiwgMTg2OiAiOyIsIDE4NzogIj0iLCAxODg6ICIsIiwg
MTg5OiAiLSIsIDE5MDogIi4iLCAxOTE6ICIvIiwgMTkyOiAiYCIsIDIxOTogIlsiLCAyMjA6ICJc
XCIsCisgICAgICAgICAgICAgICAgICAyMjE6ICJdIiwgMjIyOiAiJyIsIDYzMjMyOiAiVXAiLCA2
MzIzMzogIkRvd24iLCA2MzIzNDogIkxlZnQiLCA2MzIzNTogIlJpZ2h0IiwgNjMyNzI6ICJEZWxl
dGUiLAorICAgICAgICAgICAgICAgICAgNjMyNzM6ICJIb21lIiwgNjMyNzU6ICJFbmQiLCA2MzI3
NjogIlBhZ2VVcCIsIDYzMjc3OiAiUGFnZURvd24iLCA2MzMwMjogIkluc2VydCJ9OwogICBDb2Rl
TWlycm9yLmtleU5hbWVzID0ga2V5TmFtZXM7CiAgIChmdW5jdGlvbigpIHsKICAgICAvLyBOdW1i
ZXIga2V5cwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykga2V5TmFtZXNbaSArIDQ4
XSA9IFN0cmluZyhpKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIGtleU5hbWVz
W2kgKyA0OF0gPSBrZXlOYW1lc1tpICsgOTZdID0gU3RyaW5nKGkpOwogICAgIC8vIEFscGhhYmV0
aWMga2V5cwogICAgIGZvciAodmFyIGkgPSA2NTsgaSA8PSA5MDsgaSsrKSBrZXlOYW1lc1tpXSA9
IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7CiAgICAgLy8gRnVuY3Rpb24ga2V5cwpAQCAtNTY5MSwx
OSArNzIyNiwyMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICBmdW5j
dGlvbiBsaW5lU3RhcnQoY20sIGxpbmVOKSB7CiAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNtLmRv
YywgbGluZU4pOwotICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKGNtLmRvYywgbGluZSk7Cisg
ICAgdmFyIHZpc3VhbCA9IHZpc3VhbExpbmUobGluZSk7CiAgICAgaWYgKHZpc3VhbCAhPSBsaW5l
KSBsaW5lTiA9IGxpbmVObyh2aXN1YWwpOwogICAgIHZhciBvcmRlciA9IGdldE9yZGVyKHZpc3Vh
bCk7CiAgICAgdmFyIGNoID0gIW9yZGVyID8gMCA6IG9yZGVyWzBdLmxldmVsICUgMiA/IGxpbmVS
aWdodCh2aXN1YWwpIDogbGluZUxlZnQodmlzdWFsKTsKICAgICByZXR1cm4gUG9zKGxpbmVOLCBj
aCk7CiAgIH0KICAgZnVuY3Rpb24gbGluZUVuZChjbSwgbGluZU4pIHsKLSAgICB2YXIgbWVyZ2Vk
LCBsaW5lOwotICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSA9IGdl
dExpbmUoY20uZG9jLCBsaW5lTikpKQotICAgICAgbGluZU4gPSBtZXJnZWQuZmluZCgpLnRvLmxp
bmU7CisgICAgdmFyIG1lcmdlZCwgbGluZSA9IGdldExpbmUoY20uZG9jLCBsaW5lTik7CisgICAg
d2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSkgeworICAgICAgbGluZSA9
IG1lcmdlZC5maW5kKDEsIHRydWUpLmxpbmU7CisgICAgICBsaW5lTiA9IG51bGw7CisgICAgfQog
ICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUpOwogICAgIHZhciBjaCA9ICFvcmRlciA/IGxp
bmUudGV4dC5sZW5ndGggOiBvcmRlclswXS5sZXZlbCAlIDIgPyBsaW5lTGVmdChsaW5lKSA6IGxp
bmVSaWdodChsaW5lKTsKLSAgICByZXR1cm4gUG9zKGxpbmVOLCBjaCk7CisgICAgcmV0dXJuIFBv
cyhsaW5lTiA9PSBudWxsID8gbGluZU5vKGxpbmUpIDogbGluZU4sIGNoKTsKICAgfQogCiAgIGZ1
bmN0aW9uIGNvbXBhcmVCaWRpTGV2ZWwob3JkZXIsIGEsIGIpIHsKQEAgLTU3MTQsMzggKzcyNTEs
MzcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KICAgdmFyIGJpZGlP
dGhlcjsKICAgZnVuY3Rpb24gZ2V0QmlkaVBhcnRBdChvcmRlciwgcG9zKSB7CisgICAgYmlkaU90
aGVyID0gbnVsbDsKICAgICBmb3IgKHZhciBpID0gMCwgZm91bmQ7IGkgPCBvcmRlci5sZW5ndGg7
ICsraSkgewogICAgICAgdmFyIGN1ciA9IG9yZGVyW2ldOwotICAgICAgaWYgKGN1ci5mcm9tIDwg
cG9zICYmIGN1ci50byA+IHBvcykgeyBiaWRpT3RoZXIgPSBudWxsOyByZXR1cm4gaTsgfQotICAg
ICAgaWYgKGN1ci5mcm9tID09IHBvcyB8fCBjdXIudG8gPT0gcG9zKSB7CisgICAgICBpZiAoY3Vy
LmZyb20gPCBwb3MgJiYgY3VyLnRvID4gcG9zKSByZXR1cm4gaTsKKyAgICAgIGlmICgoY3VyLmZy
b20gPT0gcG9zIHx8IGN1ci50byA9PSBwb3MpKSB7CiAgICAgICAgIGlmIChmb3VuZCA9PSBudWxs
KSB7CiAgICAgICAgICAgZm91bmQgPSBpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVCaWRp
TGV2ZWwob3JkZXIsIGN1ci5sZXZlbCwgb3JkZXJbZm91bmRdLmxldmVsKSkgewotICAgICAgICAg
IGJpZGlPdGhlciA9IGZvdW5kOworICAgICAgICAgIGlmIChjdXIuZnJvbSAhPSBjdXIudG8pIGJp
ZGlPdGhlciA9IGZvdW5kOwogICAgICAgICAgIHJldHVybiBpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIGJpZGlPdGhlciA9IGk7CisgICAgICAgICAgaWYgKGN1ci5mcm9tICE9IGN1ci50
bykgYmlkaU90aGVyID0gaTsKICAgICAgICAgICByZXR1cm4gZm91bmQ7CiAgICAgICAgIH0KICAg
ICAgIH0KICAgICB9Ci0gICAgYmlkaU90aGVyID0gbnVsbDsKICAgICByZXR1cm4gZm91bmQ7CiAg
IH0KIAogICBmdW5jdGlvbiBtb3ZlSW5MaW5lKGxpbmUsIHBvcywgZGlyLCBieVVuaXQpIHsKICAg
ICBpZiAoIWJ5VW5pdCkgcmV0dXJuIHBvcyArIGRpcjsKICAgICBkbyBwb3MgKz0gZGlyOwotICAg
IHdoaWxlIChwb3MgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhci50ZXN0KGxpbmUudGV4dC5jaGFyQXQo
cG9zKSkpOworICAgIHdoaWxlIChwb3MgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhcihsaW5lLnRleHQu
Y2hhckF0KHBvcykpKTsKICAgICByZXR1cm4gcG9zOwogICB9CiAKLSAgLy8gVGhpcyBpcyBzb21l
d2hhdCBpbnZvbHZlZC4gSXQgaXMgbmVlZGVkIGluIG9yZGVyIHRvIG1vdmUKLSAgLy8gJ3Zpc3Vh
bGx5JyB0aHJvdWdoIGJpLWRpcmVjdGlvbmFsIHRleHQgLS0gaS5lLiwgcHJlc3NpbmcgbGVmdAot
ICAvLyBzaG91bGQgbWFrZSB0aGUgY3Vyc29yIGdvIGxlZnQsIGV2ZW4gd2hlbiBpbiBSVEwgdGV4
dC4gVGhlCi0gIC8vIHRyaWNreSBwYXJ0IGlzIHRoZSAnanVtcHMnLCB3aGVyZSBSVEwgYW5kIExU
UiB0ZXh0IHRvdWNoIGVhY2gKLSAgLy8gb3RoZXIuIFRoaXMgb2Z0ZW4gcmVxdWlyZXMgdGhlIGN1
cnNvciBvZmZzZXQgdG8gbW92ZSBtb3JlIHRoYW4KLSAgLy8gb25lIHVuaXQsIGluIG9yZGVyIHRv
IHZpc3VhbGx5IG1vdmUgb25lIHVuaXQuCisgIC8vIFRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIHRv
IG1vdmUgJ3Zpc3VhbGx5JyB0aHJvdWdoIGJpLWRpcmVjdGlvbmFsCisgIC8vIHRleHQgLS0gaS5l
LiwgcHJlc3NpbmcgbGVmdCBzaG91bGQgbWFrZSB0aGUgY3Vyc29yIGdvIGxlZnQsIGV2ZW4KKyAg
Ly8gd2hlbiBpbiBSVEwgdGV4dC4gVGhlIHRyaWNreSBwYXJ0IGlzIHRoZSAnanVtcHMnLCB3aGVy
ZSBSVEwgYW5kCisgIC8vIExUUiB0ZXh0IHRvdWNoIGVhY2ggb3RoZXIuIFRoaXMgb2Z0ZW4gcmVx
dWlyZXMgdGhlIGN1cnNvciBvZmZzZXQKKyAgLy8gdG8gbW92ZSBtb3JlIHRoYW4gb25lIHVuaXQs
IGluIG9yZGVyIHRvIHZpc3VhbGx5IG1vdmUgb25lIHVuaXQuCiAgIGZ1bmN0aW9uIG1vdmVWaXN1
YWxseShsaW5lLCBzdGFydCwgZGlyLCBieVVuaXQpIHsKICAgICB2YXIgYmlkaSA9IGdldE9yZGVy
KGxpbmUpOwogICAgIGlmICghYmlkaSkgcmV0dXJuIG1vdmVMb2dpY2FsbHkobGluZSwgc3RhcnQs
IGRpciwgYnlVbml0KTsKQEAgLTU3NzEsNyArNzMwNyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIG1vdmVMb2dpY2FsbHkobGluZSwgc3RhcnQsIGRp
ciwgYnlVbml0KSB7CiAgICAgdmFyIHRhcmdldCA9IHN0YXJ0ICsgZGlyOwotICAgIGlmIChieVVu
aXQpIHdoaWxlICh0YXJnZXQgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhci50ZXN0KGxpbmUudGV4dC5j
aGFyQXQodGFyZ2V0KSkpIHRhcmdldCArPSBkaXI7CisgICAgaWYgKGJ5VW5pdCkgd2hpbGUgKHRh
cmdldCA+IDAgJiYgaXNFeHRlbmRpbmdDaGFyKGxpbmUudGV4dC5jaGFyQXQodGFyZ2V0KSkpIHRh
cmdldCArPSBkaXI7CiAgICAgcmV0dXJuIHRhcmdldCA8IDAgfHwgdGFyZ2V0ID4gbGluZS50ZXh0
Lmxlbmd0aCA/IG51bGwgOiB0YXJnZXQ7CiAgIH0KIApAQCAtNTgwMCwxNCArNzMzNiwxNiBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gb2JqZWN0cykgaW4gdGhlIG9y
ZGVyIGluIHdoaWNoIHRoZXkgb2NjdXIgdmlzdWFsbHkuCiAgIHZhciBiaWRpT3JkZXJpbmcgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgLy8gQ2hhcmFjdGVyIHR5cGVzIGZvciBjb2RlcG9pbnRzIDAgdG8g
MHhmZgotICAgIHZhciBsb3dUeXBlcyA9ICJiYmJiYmJiYmJ0c3R3c2JiYmJiYmJiYmJiYmJic3Nz
dHdOTiUlJU5OTk5OTixOLE4xMTExMTExMTExTk5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExM
TExMTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OYmJiYmJic2JiYmJiYmJiYmJi
YmJiYmJiYmJiYmJiYmJiLE4lJSUlTk5OTkxOTk5OTiUlMTFOTE5OTjFMTk5OTk5MTExMTExMTExM
TExMTExMTExMTExMTE5MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMIjsK
KyAgICB2YXIgbG93VHlwZXMgPSAiYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4l
JSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5O
Tk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJi
YmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExM
TExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE4iOwogICAgIC8vIENoYXJh
Y3RlciB0eXBlcyBmb3IgY29kZXBvaW50cyAweDYwMCB0byAweDZmZgotICAgIHZhciBhcmFiaWNU
eXBlcyA9ICJycnJycnJycnJycnIsck5ObW1tbW1tcnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbXJycnJycnJubm5ubm5ubm5u
JW5ucnJybXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1t
bW1tbW1tbW1tbW1tbU5tbW1tcnJycnJycnJycnJycnJycnJyIjsKKyAgICB2YXIgYXJhYmljVHlw
ZXMgPSAicnJycnJycnJycnJyLHJOTm1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1ycnJycnJybm5ubm5ubm5ubiVu
bnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1t
bW1tbW1tbW1tbW1ObW1tbSI7CiAgICAgZnVuY3Rpb24gY2hhclR5cGUoY29kZSkgewotICAgICAg
aWYgKGNvZGUgPD0gMHhmZikgcmV0dXJuIGxvd1R5cGVzLmNoYXJBdChjb2RlKTsKKyAgICAgIGlm
IChjb2RlIDw9IDB4ZjcpIHJldHVybiBsb3dUeXBlcy5jaGFyQXQoY29kZSk7CiAgICAgICBlbHNl
IGlmICgweDU5MCA8PSBjb2RlICYmIGNvZGUgPD0gMHg1ZjQpIHJldHVybiAiUiI7Ci0gICAgICBl
bHNlIGlmICgweDYwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHg2ZmYpIHJldHVybiBhcmFiaWNUeXBl
cy5jaGFyQXQoY29kZSAtIDB4NjAwKTsKLSAgICAgIGVsc2UgaWYgKDB4NzAwIDw9IGNvZGUgJiYg
Y29kZSA8PSAweDhhYykgcmV0dXJuICJyIjsKKyAgICAgIGVsc2UgaWYgKDB4NjAwIDw9IGNvZGUg
JiYgY29kZSA8PSAweDZlZCkgcmV0dXJuIGFyYWJpY1R5cGVzLmNoYXJBdChjb2RlIC0gMHg2MDAp
OworICAgICAgZWxzZSBpZiAoMHg2ZWUgPD0gY29kZSAmJiBjb2RlIDw9IDB4OGFjKSByZXR1cm4g
InIiOworICAgICAgZWxzZSBpZiAoMHgyMDAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDIwMGIpIHJl
dHVybiAidyI7CisgICAgICBlbHNlIGlmIChjb2RlID09IDB4MjAwYykgcmV0dXJuICJiIjsKICAg
ICAgIGVsc2UgcmV0dXJuICJMIjsKICAgICB9CiAKQEAgLTU4MTYsNiArNzM1NCwxMSBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAvLyBCcm93c2VycyBzZWVtIHRvIGFs
d2F5cyB0cmVhdCB0aGUgYm91bmRhcmllcyBvZiBibG9jayBlbGVtZW50cyBhcyBiZWluZyBMLgog
ICAgIHZhciBvdXRlclR5cGUgPSAiTCI7CiAKKyAgICBmdW5jdGlvbiBCaWRpU3BhbihsZXZlbCwg
ZnJvbSwgdG8pIHsKKyAgICAgIHRoaXMubGV2ZWwgPSBsZXZlbDsKKyAgICAgIHRoaXMuZnJvbSA9
IGZyb207IHRoaXMudG8gPSB0bzsKKyAgICB9CisKICAgICByZXR1cm4gZnVuY3Rpb24oc3RyKSB7
CiAgICAgICBpZiAoIWJpZGlSRS50ZXN0KHN0cikpIHJldHVybiBmYWxzZTsKICAgICAgIHZhciBs
ZW4gPSBzdHIubGVuZ3RoLCB0eXBlcyA9IFtdOwpAQCAtNTg2Myw3ICs3NDA2LDcgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmICh0eXBlID09ICIsIikgdHlw
ZXNbaV0gPSAiTiI7CiAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIiUiKSB7CiAgICAgICAgICAg
Zm9yICh2YXIgZW5kID0gaSArIDE7IGVuZCA8IGxlbiAmJiB0eXBlc1tlbmRdID09ICIlIjsgKytl
bmQpIHt9Ci0gICAgICAgICAgdmFyIHJlcGxhY2UgPSAoaSAmJiB0eXBlc1tpLTFdID09ICIhIikg
fHwgKGVuZCA8IGxlbiAtIDEgJiYgdHlwZXNbZW5kXSA9PSAiMSIpID8gIjEiIDogIk4iOworICAg
ICAgICAgIHZhciByZXBsYWNlID0gKGkgJiYgdHlwZXNbaS0xXSA9PSAiISIpIHx8IChlbmQgPCBs
ZW4gJiYgdHlwZXNbZW5kXSA9PSAiMSIpID8gIjEiIDogIk4iOwogICAgICAgICAgIGZvciAodmFy
IGogPSBpOyBqIDwgZW5kOyArK2opIHR5cGVzW2pdID0gcmVwbGFjZTsKICAgICAgICAgICBpID0g
ZW5kIC0gMTsKICAgICAgICAgfQpAQCAtNTg4OCw3ICs3NDMxLDcgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChpc05ldXRyYWwudGVzdCh0eXBlc1tpXSkp
IHsKICAgICAgICAgICBmb3IgKHZhciBlbmQgPSBpICsgMTsgZW5kIDwgbGVuICYmIGlzTmV1dHJh
bC50ZXN0KHR5cGVzW2VuZF0pOyArK2VuZCkge30KICAgICAgICAgICB2YXIgYmVmb3JlID0gKGkg
PyB0eXBlc1tpLTFdIDogb3V0ZXJUeXBlKSA9PSAiTCI7Ci0gICAgICAgICAgdmFyIGFmdGVyID0g
KGVuZCA8IGxlbiAtIDEgPyB0eXBlc1tlbmRdIDogb3V0ZXJUeXBlKSA9PSAiTCI7CisgICAgICAg
ICAgdmFyIGFmdGVyID0gKGVuZCA8IGxlbiA/IHR5cGVzW2VuZF0gOiBvdXRlclR5cGUpID09ICJM
IjsKICAgICAgICAgICB2YXIgcmVwbGFjZSA9IGJlZm9yZSB8fCBhZnRlciA/ICJMIiA6ICJSIjsK
ICAgICAgICAgICBmb3IgKHZhciBqID0gaTsgaiA8IGVuZDsgKytqKSB0eXBlc1tqXSA9IHJlcGxh
Y2U7CiAgICAgICAgICAgaSA9IGVuZCAtIDE7CkBAIC01OTA1LDMyICs3NDQ4LDMyIEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAoY291bnRzQXNMZWZ0LnRl
c3QodHlwZXNbaV0pKSB7CiAgICAgICAgICAgdmFyIHN0YXJ0ID0gaTsKICAgICAgICAgICBmb3Ig
KCsraTsgaSA8IGxlbiAmJiBjb3VudHNBc0xlZnQudGVzdCh0eXBlc1tpXSk7ICsraSkge30KLSAg
ICAgICAgICBvcmRlci5wdXNoKHtmcm9tOiBzdGFydCwgdG86IGksIGxldmVsOiAwfSk7CisgICAg
ICAgICAgb3JkZXIucHVzaChuZXcgQmlkaVNwYW4oMCwgc3RhcnQsIGkpKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICB2YXIgcG9zID0gaSwgYXQgPSBvcmRlci5sZW5ndGg7CiAgICAgICAg
ICAgZm9yICgrK2k7IGkgPCBsZW4gJiYgdHlwZXNbaV0gIT0gIkwiOyArK2kpIHt9CiAgICAgICAg
ICAgZm9yICh2YXIgaiA9IHBvczsgaiA8IGk7KSB7CiAgICAgICAgICAgICBpZiAoY291bnRzQXNO
dW0udGVzdCh0eXBlc1tqXSkpIHsKLSAgICAgICAgICAgICAgaWYgKHBvcyA8IGopIG9yZGVyLnNw
bGljZShhdCwgMCwge2Zyb206IHBvcywgdG86IGosIGxldmVsOiAxfSk7CisgICAgICAgICAgICAg
IGlmIChwb3MgPCBqKSBvcmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRpU3BhbigxLCBwb3MsIGop
KTsKICAgICAgICAgICAgICAgdmFyIG5zdGFydCA9IGo7CiAgICAgICAgICAgICAgIGZvciAoKytq
OyBqIDwgaSAmJiBjb3VudHNBc051bS50ZXN0KHR5cGVzW2pdKTsgKytqKSB7fQotICAgICAgICAg
ICAgICBvcmRlci5zcGxpY2UoYXQsIDAsIHtmcm9tOiBuc3RhcnQsIHRvOiBqLCBsZXZlbDogMn0p
OworICAgICAgICAgICAgICBvcmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRpU3BhbigyLCBuc3Rh
cnQsIGopKTsKICAgICAgICAgICAgICAgcG9zID0gajsKICAgICAgICAgICAgIH0gZWxzZSArK2o7
CiAgICAgICAgICAgfQotICAgICAgICAgIGlmIChwb3MgPCBpKSBvcmRlci5zcGxpY2UoYXQsIDAs
IHtmcm9tOiBwb3MsIHRvOiBpLCBsZXZlbDogMX0pOworICAgICAgICAgIGlmIChwb3MgPCBpKSBv
cmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRpU3BhbigxLCBwb3MsIGkpKTsKICAgICAgICAgfQog
ICAgICAgfQogICAgICAgaWYgKG9yZGVyWzBdLmxldmVsID09IDEgJiYgKG0gPSBzdHIubWF0Y2go
L15ccysvKSkpIHsKICAgICAgICAgb3JkZXJbMF0uZnJvbSA9IG1bMF0ubGVuZ3RoOwotICAgICAg
ICBvcmRlci51bnNoaWZ0KHtmcm9tOiAwLCB0bzogbVswXS5sZW5ndGgsIGxldmVsOiAwfSk7Cisg
ICAgICAgIG9yZGVyLnVuc2hpZnQobmV3IEJpZGlTcGFuKDAsIDAsIG1bMF0ubGVuZ3RoKSk7CiAg
ICAgICB9CiAgICAgICBpZiAobHN0KG9yZGVyKS5sZXZlbCA9PSAxICYmIChtID0gc3RyLm1hdGNo
KC9ccyskLykpKSB7CiAgICAgICAgIGxzdChvcmRlcikudG8gLT0gbVswXS5sZW5ndGg7Ci0gICAg
ICAgIG9yZGVyLnB1c2goe2Zyb206IGxlbiAtIG1bMF0ubGVuZ3RoLCB0bzogbGVuLCBsZXZlbDog
MH0pOworICAgICAgICBvcmRlci5wdXNoKG5ldyBCaWRpU3BhbigwLCBsZW4gLSBtWzBdLmxlbmd0
aCwgbGVuKSk7CiAgICAgICB9CiAgICAgICBpZiAob3JkZXJbMF0ubGV2ZWwgIT0gbHN0KG9yZGVy
KS5sZXZlbCkKLSAgICAgICAgb3JkZXIucHVzaCh7ZnJvbTogbGVuLCB0bzogbGVuLCBsZXZlbDog
b3JkZXJbMF0ubGV2ZWx9KTsKKyAgICAgICAgb3JkZXIucHVzaChuZXcgQmlkaVNwYW4ob3JkZXJb
MF0ubGV2ZWwsIGxlbiwgbGVuKSk7CiAKICAgICAgIHJldHVybiBvcmRlcjsKICAgICB9OwpAQCAt
NTkzOCw3ICs3NDgxLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAg
Ly8gVEhFIEVORAogCi0gIENvZGVNaXJyb3IudmVyc2lvbiA9ICIzLjIwLjAiOworICBDb2RlTWly
cm9yLnZlcnNpb24gPSAiNC4wLjQiOwogCiAgIHJldHVybiBDb2RlTWlycm9yOwotfSkoKTsKK30p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5n
L2Nzcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jc3Mu
anMKaW5kZXggNzk5ZWExNi4uMzQyNjczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY3NzLmpzCkBAIC0xLDg5ICsxLDkxIEBACi1Db2RlTWly
cm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7Ci0g
ICJ1c2Ugc3RyaWN0IjsKKyhmdW5jdGlvbihtb2QpIHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09
ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCisgICAg
bW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikpOworICBlbHNlIGlmICh0eXBlb2Yg
ZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgLy8gQU1ECisgICAgZGVmaW5lKFsi
Li4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVu
dgorICAgIG1vZChDb2RlTWlycm9yKTsKK30pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKKyJ1c2Ug
c3RyaWN0IjsKIAorQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcs
IHBhcnNlckNvbmZpZykgewogICBpZiAoIXBhcnNlckNvbmZpZy5wcm9wZXJ0eUtleXdvcmRzKSBw
YXJzZXJDb25maWcgPSBDb2RlTWlycm9yLnJlc29sdmVNb2RlKCJ0ZXh0L2NzcyIpOwogCi0gIHZh
ciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQgfHwgY29uZmlnLnRhYlNpemUgfHwgMiwK
LSAgICAgIGhvb2tzID0gcGFyc2VyQ29uZmlnLmhvb2tzIHx8IHt9LAotICAgICAgYXRNZWRpYVR5
cGVzID0gcGFyc2VyQ29uZmlnLmF0TWVkaWFUeXBlcyB8fCB7fSwKLSAgICAgIGF0TWVkaWFGZWF0
dXJlcyA9IHBhcnNlckNvbmZpZy5hdE1lZGlhRmVhdHVyZXMgfHwge30sCisgIHZhciBpbmRlbnRV
bml0ID0gY29uZmlnLmluZGVudFVuaXQsCisgICAgICB0b2tlbkhvb2tzID0gcGFyc2VyQ29uZmln
LnRva2VuSG9va3MsCisgICAgICBtZWRpYVR5cGVzID0gcGFyc2VyQ29uZmlnLm1lZGlhVHlwZXMg
fHwge30sCisgICAgICBtZWRpYUZlYXR1cmVzID0gcGFyc2VyQ29uZmlnLm1lZGlhRmVhdHVyZXMg
fHwge30sCiAgICAgICBwcm9wZXJ0eUtleXdvcmRzID0gcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5
d29yZHMgfHwge30sCisgICAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBwYXJzZXJD
b25maWcubm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzIHx8IHt9LAogICAgICAgY29sb3JLZXl3
b3JkcyA9IHBhcnNlckNvbmZpZy5jb2xvcktleXdvcmRzIHx8IHt9LAogICAgICAgdmFsdWVLZXl3
b3JkcyA9IHBhcnNlckNvbmZpZy52YWx1ZUtleXdvcmRzIHx8IHt9LAotICAgICAgYWxsb3dOZXN0
ZWQgPSAhIXBhcnNlckNvbmZpZy5hbGxvd05lc3RlZCwKLSAgICAgIHR5cGUgPSBudWxsOworICAg
ICAgZm9udFByb3BlcnRpZXMgPSBwYXJzZXJDb25maWcuZm9udFByb3BlcnRpZXMgfHwge30sCisg
ICAgICBhbGxvd05lc3RlZCA9IHBhcnNlckNvbmZpZy5hbGxvd05lc3RlZDsKIAorICB2YXIgdHlw
ZSwgb3ZlcnJpZGU7CiAgIGZ1bmN0aW9uIHJldChzdHlsZSwgdHApIHsgdHlwZSA9IHRwOyByZXR1
cm4gc3R5bGU7IH0KIAorICAvLyBUb2tlbml6ZXJzCisKICAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0
cmVhbSwgc3RhdGUpIHsKICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwotICAgIGlmIChob29r
c1tjaF0pIHsKLSAgICAgIC8vIHJlc3VsdFswXSBpcyBzdHlsZSBhbmQgcmVzdWx0WzFdIGlzIHR5
cGUKLSAgICAgIHZhciByZXN1bHQgPSBob29rc1tjaF0oc3RyZWFtLCBzdGF0ZSk7CisgICAgaWYg
KHRva2VuSG9va3NbY2hdKSB7CisgICAgICB2YXIgcmVzdWx0ID0gdG9rZW5Ib29rc1tjaF0oc3Ry
ZWFtLCBzdGF0ZSk7CiAgICAgICBpZiAocmVzdWx0ICE9PSBmYWxzZSkgcmV0dXJuIHJlc3VsdDsK
ICAgICB9Ci0gICAgaWYgKGNoID09ICJAIikge3N0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsg
cmV0dXJuIHJldCgiZGVmIiwgc3RyZWFtLmN1cnJlbnQoKSk7fQotICAgIGVsc2UgaWYgKGNoID09
ICI9IikgcmV0KG51bGwsICJjb21wYXJlIik7Ci0gICAgZWxzZSBpZiAoKGNoID09ICJ+IiB8fCBj
aCA9PSAifCIpICYmIHN0cmVhbS5lYXQoIj0iKSkgcmV0dXJuIHJldChudWxsLCAiY29tcGFyZSIp
OwotICAgIGVsc2UgaWYgKGNoID09ICJcIiIgfHwgY2ggPT0gIiciKSB7CisgICAgaWYgKGNoID09
ICJAIikgeworICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOworICAgICAgcmV0dXJu
IHJldCgiZGVmIiwgc3RyZWFtLmN1cnJlbnQoKSk7CisgICAgfSBlbHNlIGlmIChjaCA9PSAiPSIg
fHwgKGNoID09ICJ+IiB8fCBjaCA9PSAifCIpICYmIHN0cmVhbS5lYXQoIj0iKSkgeworICAgICAg
cmV0dXJuIHJldChudWxsLCAiY29tcGFyZSIpOworICAgIH0gZWxzZSBpZiAoY2ggPT0gIlwiIiB8
fCBjaCA9PSAiJyIpIHsKICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpOwog
ICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwotICAgIH0KLSAgICBl
bHNlIGlmIChjaCA9PSAiIyIpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICIjIikgewogICAgICAg
c3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwogICAgICAgcmV0dXJuIHJldCgiYXRvbSIsICJo
YXNoIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNoID09ICIhIikgeworICAgIH0gZWxzZSBpZiAo
Y2ggPT0gIiEiKSB7CiAgICAgICBzdHJlYW0ubWF0Y2goL15ccypcdyovKTsKICAgICAgIHJldHVy
biByZXQoImtleXdvcmQiLCAiaW1wb3J0YW50Iik7Ci0gICAgfQotICAgIGVsc2UgaWYgKC9cZC8u
dGVzdChjaCkgfHwgY2ggPT0gIi4iICYmIHN0cmVhbS5lYXQoL1xkLykpIHsKKyAgICB9IGVsc2Ug
aWYgKC9cZC8udGVzdChjaCkgfHwgY2ggPT0gIi4iICYmIHN0cmVhbS5lYXQoL1xkLykpIHsKICAg
ICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgICByZXR1cm4gcmV0KCJudW1iZXIi
LCAidW5pdCIpOwotICAgIH0KLSAgICBlbHNlIGlmIChjaCA9PT0gIi0iKSB7Ci0gICAgICBpZiAo
L1xkLy50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7CisgICAgfSBlbHNlIGlmIChjaCA9PT0gIi0iKSB7
CisgICAgICBpZiAoL1tcZC5dLy50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7CiAgICAgICAgIHN0cmVh
bS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJ1bml0
Iik7CiAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXlteLV0rLS8pKSB7CiAgICAgICAg
IHJldHVybiByZXQoIm1ldGEiLCAibWV0YSIpOwogICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlm
ICgvWywrPipcL10vLnRlc3QoY2gpKSB7CisgICAgfSBlbHNlIGlmICgvWywrPipcL10vLnRlc3Qo
Y2gpKSB7CiAgICAgICByZXR1cm4gcmV0KG51bGwsICJzZWxlY3Qtb3AiKTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAoY2ggPT0gIi4iICYmIHN0cmVhbS5tYXRjaCgvXi0/W19hLXpdW19hLXowLTktXSov
aSkpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICIuIiAmJiBzdHJlYW0ubWF0Y2goL14tP1tfYS16
XVtfYS16MC05LV0qL2kpKSB7CiAgICAgICByZXR1cm4gcmV0KCJxdWFsaWZpZXIiLCAicXVhbGlm
aWVyIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNoID09ICI6IikgewotICAgICAgcmV0dXJuIHJl
dCgib3BlcmF0b3IiLCBjaCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKC9bO3t9XFtcXVwoXCldLy50
ZXN0KGNoKSkgeworICAgIH0gZWxzZSBpZiAoL1s6O3t9XFtcXVwoXCldLy50ZXN0KGNoKSkgewog
ICAgICAgcmV0dXJuIHJldChudWxsLCBjaCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNoID09ICJ1
IiAmJiBzdHJlYW0ubWF0Y2goInJsKCIpKSB7CisgICAgfSBlbHNlIGlmIChjaCA9PSAidSIgJiYg
c3RyZWFtLm1hdGNoKCJybCgiKSkgewogICAgICAgc3RyZWFtLmJhY2tVcCgxKTsKICAgICAgIHN0
YXRlLnRva2VuaXplID0gdG9rZW5QYXJlbnRoZXNpemVkOwotICAgICAgcmV0dXJuIHJldCgicHJv
cGVydHkiLCAidmFyaWFibGUiKTsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgICByZXR1cm4gcmV0
KCJwcm9wZXJ0eSIsICJ3b3JkIik7CisgICAgfSBlbHNlIGlmICgvW1x3XFxcLV0vLnRlc3QoY2gp
KSB7CiAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7Ci0gICAgICByZXR1cm4gcmV0
KCJwcm9wZXJ0eSIsICJ2YXJpYWJsZSIpOworICAgICAgcmV0dXJuIHJldCgicHJvcGVydHkiLCAi
d29yZCIpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gcmV0KG51bGwsIG51bGwpOwogICAg
IH0KICAgfQogCi0gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlLCBub25JbmNsdXNpdmUpIHsK
KyAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgICByZXR1cm4gZnVuY3Rpb24oc3Ry
ZWFtLCBzdGF0ZSkgewogICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgICB3aGls
ZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewotICAgICAgICBpZiAoY2ggPT0gcXVv
dGUgJiYgIWVzY2FwZWQpCisgICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgewor
ICAgICAgICAgIGlmIChxdW90ZSA9PSAiKSIpIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJc
XCI7CiAgICAgICB9Ci0gICAgICBpZiAoIWVzY2FwZWQpIHsKLSAgICAgICAgaWYgKG5vbkluY2x1
c2l2ZSkgc3RyZWFtLmJhY2tVcCgxKTsKLSAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJh
c2U7Ci0gICAgICB9CisgICAgICBpZiAoY2ggPT0gcXVvdGUgfHwgIWVzY2FwZWQgJiYgcXVvdGUg
IT0gIikiKSBzdGF0ZS50b2tlbml6ZSA9IG51bGw7CiAgICAgICByZXR1cm4gcmV0KCJzdHJpbmci
LCAic3RyaW5nIik7CiAgICAgfTsKICAgfQpAQCAtOTEsMjE4ICs5MywyNTEgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICBm
dW5jdGlvbiB0b2tlblBhcmVudGhlc2l6ZWQoc3RyZWFtLCBzdGF0ZSkgewogICAgIHN0cmVhbS5u
ZXh0KCk7IC8vIE11c3QgYmUgJygnCiAgICAgaWYgKCFzdHJlYW0ubWF0Y2goL1xzKltcIlwnXS8s
IGZhbHNlKSkKLSAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoIikiLCB0cnVlKTsK
KyAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoIikiKTsKICAgICBlbHNlCi0gICAg
ICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKKyAgICAgIHN0YXRlLnRva2VuaXplID0gbnVs
bDsKICAgICByZXR1cm4gcmV0KG51bGwsICIoIik7CiAgIH0KIAorICAvLyBDb250ZXh0IG1hbmFn
ZW1lbnQKKworICBmdW5jdGlvbiBDb250ZXh0KHR5cGUsIGluZGVudCwgcHJldikgeworICAgIHRo
aXMudHlwZSA9IHR5cGU7CisgICAgdGhpcy5pbmRlbnQgPSBpbmRlbnQ7CisgICAgdGhpcy5wcmV2
ID0gcHJldjsKKyAgfQorCisgIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIHR5
cGUpIHsKKyAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQodHlwZSwgc3RyZWFtLmluZGVu
dGF0aW9uKCkgKyBpbmRlbnRVbml0LCBzdGF0ZS5jb250ZXh0KTsKKyAgICByZXR1cm4gdHlwZTsK
KyAgfQorCisgIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKKyAgICBzdGF0ZS5jb250ZXh0
ID0gc3RhdGUuY29udGV4dC5wcmV2OworICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7Cisg
IH0KKworICBmdW5jdGlvbiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICByZXR1cm4g
c3RhdGVzW3N0YXRlLmNvbnRleHQudHlwZV0odHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgIH0KKyAg
ZnVuY3Rpb24gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCBuKSB7CisgICAgZm9yICh2
YXIgaSA9IG4gfHwgMTsgaSA+IDA7IGktLSkKKyAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5j
b250ZXh0LnByZXY7CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgIH0K
KworICAvLyBQYXJzZXIKKworICBmdW5jdGlvbiB3b3JkQXNWYWx1ZShzdHJlYW0pIHsKKyAgICB2
YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTsKKyAgICBpZiAodmFsdWVL
ZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkKKyAgICAgIG92ZXJyaWRlID0gImF0b20iOwor
ICAgIGVsc2UgaWYgKGNvbG9yS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpCisgICAgICBv
dmVycmlkZSA9ICJrZXl3b3JkIjsKKyAgICBlbHNlCisgICAgICBvdmVycmlkZSA9ICJ2YXJpYWJs
ZSI7CisgIH0KKworICB2YXIgc3RhdGVzID0ge307CisKKyAgc3RhdGVzLnRvcCA9IGZ1bmN0aW9u
KHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAieyIpIHsKKyAgICAgIHJl
dHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAiYmxvY2siKTsKKyAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gIn0iICYmIHN0YXRlLmNvbnRleHQucHJldikgeworICAgICAgcmV0dXJuIHBvcENv
bnRleHQoc3RhdGUpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiQG1lZGlhIikgeworICAgICAg
cmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJtZWRpYSIpOworICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSAiQGZvbnQtZmFjZSIpIHsKKyAgICAgIHJldHVybiAiZm9udF9mYWNlX2JlZm9y
ZSI7CisgICAgfSBlbHNlIGlmICgvXkAoLShtb3p8bXN8b3x3ZWJraXQpLSk/a2V5ZnJhbWVzJC8u
dGVzdCh0eXBlKSkgeworICAgICAgcmV0dXJuICJrZXlmcmFtZXMiOworICAgIH0gZWxzZSBpZiAo
dHlwZSAmJiB0eXBlLmNoYXJBdCgwKSA9PSAiQCIpIHsKKyAgICAgIHJldHVybiBwdXNoQ29udGV4
dChzdGF0ZSwgc3RyZWFtLCAiYXQiKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImhhc2giKSB7
CisgICAgICBvdmVycmlkZSA9ICJidWlsdGluIjsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIndv
cmQiKSB7CisgICAgICBvdmVycmlkZSA9ICJ0YWciOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAi
dmFyaWFibGUtZGVmaW5pdGlvbiIpIHsKKyAgICAgIHJldHVybiAibWF5YmVwcm9wIjsKKyAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gImludGVycG9sYXRpb24iKSB7CisgICAgICByZXR1cm4gcHVzaENv
bnRleHQoc3RhdGUsIHN0cmVhbSwgImludGVycG9sYXRpb24iKTsKKyAgICB9IGVsc2UgaWYgKHR5
cGUgPT0gIjoiKSB7CisgICAgICByZXR1cm4gInBzZXVkbyI7CisgICAgfSBlbHNlIGlmIChhbGxv
d05lc3RlZCAmJiB0eXBlID09ICIoIikgeworICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRl
LCBzdHJlYW0sICJwYXJhbXMiKTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQudHlw
ZTsKKyAgfTsKKworICBzdGF0ZXMuYmxvY2sgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRl
KSB7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CisgICAgICB2YXIgd29yZCA9IHN0cmVhbS5j
dXJyZW50KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgIGlmIChwcm9wZXJ0eUtleXdvcmRzLmhhc093
blByb3BlcnR5KHdvcmQpKSB7CisgICAgICAgIG92ZXJyaWRlID0gInByb3BlcnR5IjsKKyAgICAg
ICAgcmV0dXJuICJtYXliZXByb3AiOworICAgICAgfSBlbHNlIGlmIChub25TdGFuZGFyZFByb3Bl
cnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKKyAgICAgICAgb3ZlcnJpZGUgPSAi
c3RyaW5nLTIiOworICAgICAgICByZXR1cm4gIm1heWJlcHJvcCI7CisgICAgICB9IGVsc2UgaWYg
KGFsbG93TmVzdGVkKSB7CisgICAgICAgIG92ZXJyaWRlID0gc3RyZWFtLm1hdGNoKC9eXHMqOi8s
IGZhbHNlKSA/ICJwcm9wZXJ0eSIgOiAidGFnIjsKKyAgICAgICAgcmV0dXJuICJibG9jayI7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBvdmVycmlkZSArPSAiIGVycm9yIjsKKyAgICAgICAgcmV0
dXJuICJtYXliZXByb3AiOworICAgICAgfQorICAgIH0gZWxzZSBpZiAodHlwZSA9PSAibWV0YSIp
IHsKKyAgICAgIHJldHVybiAiYmxvY2siOworICAgIH0gZWxzZSBpZiAoIWFsbG93TmVzdGVkICYm
ICh0eXBlID09ICJoYXNoIiB8fCB0eXBlID09ICJxdWFsaWZpZXIiKSkgeworICAgICAgb3ZlcnJp
ZGUgPSAiZXJyb3IiOworICAgICAgcmV0dXJuICJibG9jayI7CisgICAgfSBlbHNlIHsKKyAgICAg
IHJldHVybiBzdGF0ZXMudG9wKHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIH0KKyAgfTsKKwor
ICBzdGF0ZXMubWF5YmVwcm9wID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICAg
IGlmICh0eXBlID09ICI6IikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJwcm9w
Iik7CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgIH07CisKKyAgc3Rh
dGVzLnByb3AgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUg
PT0gIjsiKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gInsiICYm
IGFsbG93TmVzdGVkKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInByb3BCbG9j
ayIpOworICAgIGlmICh0eXBlID09ICJ9IiB8fCB0eXBlID09ICJ7IikgcmV0dXJuIHBvcEFuZFBh
c3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gcHVz
aENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInBhcmVucyIpOworCisgICAgaWYgKHR5cGUgPT0gImhh
c2giICYmICEvXiMoWzAtOWEtZkEtZl17M318WzAtOWEtZkEtZl17Nn0pJC8udGVzdChzdHJlYW0u
Y3VycmVudCgpKSkgeworICAgICAgb3ZlcnJpZGUgKz0gIiBlcnJvciI7CisgICAgfSBlbHNlIGlm
ICh0eXBlID09ICJ3b3JkIikgeworICAgICAgd29yZEFzVmFsdWUoc3RyZWFtKTsKKyAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gImludGVycG9sYXRpb24iKSB7CisgICAgICByZXR1cm4gcHVzaENvbnRl
eHQoc3RhdGUsIHN0cmVhbSwgImludGVycG9sYXRpb24iKTsKKyAgICB9CisgICAgcmV0dXJuICJw
cm9wIjsKKyAgfTsKKworICBzdGF0ZXMucHJvcEJsb2NrID0gZnVuY3Rpb24odHlwZSwgX3N0cmVh
bSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAifSIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRl
KTsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHsgb3ZlcnJpZGUgPSAicHJvcGVydHkiOyByZXR1
cm4gIm1heWJlcHJvcCI7IH0KKyAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlOworICB9Owor
CisgIHN0YXRlcy5wYXJlbnMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAg
aWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBz
dHJlYW0sIHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAiKSIpIHJldHVybiBwb3BDb250ZXh0KHN0
YXRlKTsKKyAgICByZXR1cm4gInBhcmVucyI7CisgIH07CisKKyAgc3RhdGVzLnBzZXVkbyA9IGZ1
bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHsK
KyAgICAgIG92ZXJyaWRlID0gInZhcmlhYmxlLTMiOworICAgICAgcmV0dXJuIHN0YXRlLmNvbnRl
eHQudHlwZTsKKyAgICB9CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7Cisg
IH07CisKKyAgc3RhdGVzLm1lZGlhID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgewor
ICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJt
ZWRpYV9wYXJlbnMiKTsKKyAgICBpZiAodHlwZSA9PSAifSIpIHJldHVybiBwb3BBbmRQYXNzKHR5
cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIHBvcENvbnRl
eHQoc3RhdGUpICYmIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIGFsbG93TmVzdGVkID8gImJs
b2NrIiA6ICJ0b3AiKTsKKworICAgIGlmICh0eXBlID09ICJ3b3JkIikgeworICAgICAgdmFyIHdv
cmQgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7CisgICAgICBpZiAod29yZCA9PSAi
b25seSIgfHwgd29yZCA9PSAibm90IiB8fCB3b3JkID09ICJhbmQiKQorICAgICAgICBvdmVycmlk
ZSA9ICJrZXl3b3JkIjsKKyAgICAgIGVsc2UgaWYgKG1lZGlhVHlwZXMuaGFzT3duUHJvcGVydHko
d29yZCkpCisgICAgICAgIG92ZXJyaWRlID0gImF0dHJpYnV0ZSI7CisgICAgICBlbHNlIGlmICht
ZWRpYUZlYXR1cmVzLmhhc093blByb3BlcnR5KHdvcmQpKQorICAgICAgICBvdmVycmlkZSA9ICJw
cm9wZXJ0eSI7CisgICAgICBlbHNlCisgICAgICAgIG92ZXJyaWRlID0gImVycm9yIjsKKyAgICB9
CisgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQudHlwZTsKKyAgfTsKKworICBzdGF0ZXMubWVkaWFf
cGFyZW5zID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09
ICIpIikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpOworICAgIGlmICh0eXBlID09ICJ7IiB8fCB0
eXBlID09ICJ9IikgcmV0dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSwgMik7Cisg
ICAgcmV0dXJuIHN0YXRlcy5tZWRpYSh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKKyAgfTsKKworICBz
dGF0ZXMuZm9udF9mYWNlX2JlZm9yZSA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsK
KyAgICBpZiAodHlwZSA9PSAieyIpCisgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0
cmVhbSwgImZvbnRfZmFjZSIpOworICAgIHJldHVybiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUp
OworICB9OworCisgIHN0YXRlcy5mb250X2ZhY2UgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0
YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7Cisg
ICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CisgICAgICBpZiAoIWZvbnRQcm9wZXJ0aWVzLmhhc093
blByb3BlcnR5KHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSkpCisgICAgICAgIG92ZXJy
aWRlID0gImVycm9yIjsKKyAgICAgIGVsc2UKKyAgICAgICAgb3ZlcnJpZGUgPSAicHJvcGVydHki
OworICAgICAgcmV0dXJuICJtYXliZXByb3AiOworICAgIH0KKyAgICByZXR1cm4gImZvbnRfZmFj
ZSI7CisgIH07CisKKyAgc3RhdGVzLmtleWZyYW1lcyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwg
c3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHsgb3ZlcnJpZGUgPSAidmFyaWFibGUi
OyByZXR1cm4gImtleWZyYW1lcyI7IH0KKyAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBwdXNo
Q29udGV4dChzdGF0ZSwgc3RyZWFtLCAidG9wIik7CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3Ry
ZWFtLCBzdGF0ZSk7CisgIH07CisKKyAgc3RhdGVzLmF0ID0gZnVuY3Rpb24odHlwZSwgc3RyZWFt
LCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUp
OworICAgIGlmICh0eXBlID09ICJ7IiB8fCB0eXBlID09ICJ9IikgcmV0dXJuIHBvcEFuZFBhc3Mo
dHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSBvdmVycmlkZSA9
ICJ0YWciOworICAgIGVsc2UgaWYgKHR5cGUgPT0gImhhc2giKSBvdmVycmlkZSA9ICJidWlsdGlu
IjsKKyAgICByZXR1cm4gImF0IjsKKyAgfTsKKworICBzdGF0ZXMuaW50ZXJwb2xhdGlvbiA9IGZ1
bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAifSIpIHJldHVy
biBwb3BDb250ZXh0KHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAieyIgfHwgdHlwZSA9PSAiOyIp
IHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIGlmICh0eXBlICE9
ICJ2YXJpYWJsZSIpIG92ZXJyaWRlID0gImVycm9yIjsKKyAgICByZXR1cm4gImludGVycG9sYXRp
b24iOworICB9OworCisgIHN0YXRlcy5wYXJhbXMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0
YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIikiKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7Cisg
ICAgaWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBl
LCBzdHJlYW0sIHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHdvcmRBc1ZhbHVlKHN0
cmVhbSk7CisgICAgcmV0dXJuICJwYXJhbXMiOworICB9OworCiAgIHJldHVybiB7CiAgICAgc3Rh
cnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewotICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5C
YXNlLAotICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCi0gICAgICAgICAgICAg
IHN0YWNrOiBbXSwKLSAgICAgICAgICAgICAgbGFzdFRva2VuOiBudWxsfTsKKyAgICAgIHJldHVy
biB7dG9rZW5pemU6IG51bGwsCisgICAgICAgICAgICAgIHN0YXRlOiAidG9wIiwKKyAgICAgICAg
ICAgICAgY29udGV4dDogbmV3IENvbnRleHQoInRvcCIsIGJhc2UgfHwgMCwgbnVsbCl9OwogICAg
IH0sCiAKICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotCi0gICAgICAvLyBV
c2UgdGhlc2UgdGVybXMgd2hlbiBhcHBsaWNhYmxlIChzZWUgaHR0cDovL3d3dy54YW50aGlyLmNv
bS9ibG9nL2I0RTUwKQotICAgICAgLy8KLSAgICAgIC8vIHJ1bGUqKiBvciAqKnJ1bGVzZXQ6Ci0g
ICAgICAvLyBBIHNlbGVjdG9yICsgYnJhY2VzIGNvbWJvLCBvciBhbiBhdC1ydWxlLgotICAgICAg
Ly8KLSAgICAgIC8vIGRlY2xhcmF0aW9uIGJsb2NrOgotICAgICAgLy8gQSBzZXF1ZW5jZSBvZiBk
ZWNsYXJhdGlvbnMuCi0gICAgICAvLwotICAgICAgLy8gZGVjbGFyYXRpb246Ci0gICAgICAvLyBB
IHByb3BlcnR5ICsgY29sb24gKyB2YWx1ZSBjb21iby4KLSAgICAgIC8vCi0gICAgICAvLyBwcm9w
ZXJ0eSB2YWx1ZToKLSAgICAgIC8vIFRoZSBlbnRpcmUgdmFsdWUgb2YgYSBwcm9wZXJ0eS4KLSAg
ICAgIC8vCi0gICAgICAvLyBjb21wb25lbnQgdmFsdWU6Ci0gICAgICAvLyBBIHNpbmdsZSBwaWVj
ZSBvZiBhIHByb3BlcnR5IHZhbHVlLiBMaWtlIHRoZSA1cHggaW4KLSAgICAgIC8vIHRleHQtc2hh
ZG93OiAwIDAgNXB4IGJsdWU7LiBDYW4gYWxzbyByZWZlciB0byB0aGluZ3MgdGhhdCBhcmUKLSAg
ICAgIC8vIG11bHRpcGxlIHRlcm1zLCBsaWtlIHRoZSAxLTQgdGVybXMgdGhhdCBtYWtlIHVwIHRo
ZSBiYWNrZ3JvdW5kLXNpemUKLSAgICAgIC8vIHBvcnRpb24gb2YgdGhlIGJhY2tncm91bmQgc2hv
cnRoYW5kLgotICAgICAgLy8KLSAgICAgIC8vIHRlcm06Ci0gICAgICAvLyBUaGUgYmFzaWMgdW5p
dCBvZiBhdXRob3ItZmFjaW5nIENTUywgbGlrZSBhIHNpbmdsZSBudW1iZXIgKDUpLAotICAgICAg
Ly8gZGltZW5zaW9uICg1cHgpLCBzdHJpbmcgKCJmb28iKSwgb3IgZnVuY3Rpb24uIE9mZmljaWFs
bHkgZGVmaW5lZAotICAgICAgLy8gIGJ5IHRoZSBDU1MgMi4xIGdyYW1tYXIgKGxvb2sgZm9yIHRo
ZSAndGVybScgcHJvZHVjdGlvbikKLSAgICAgIC8vCi0gICAgICAvLwotICAgICAgLy8gc2ltcGxl
IHNlbGVjdG9yOgotICAgICAgLy8gQSBzaW5nbGUgYXRvbWljIHNlbGVjdG9yLCBsaWtlIGEgdHlw
ZSBzZWxlY3RvciwgYW4gYXR0ciBzZWxlY3RvciwgYQotICAgICAgLy8gY2xhc3Mgc2VsZWN0b3Is
IGV0Yy4KLSAgICAgIC8vCi0gICAgICAvLyBjb21wb3VuZCBzZWxlY3RvcjoKLSAgICAgIC8vIE9u
ZSBvciBtb3JlIHNpbXBsZSBzZWxlY3RvcnMgd2l0aG91dCBhIGNvbWJpbmF0b3IuIGRpdi5leGFt
cGxlIGlzCi0gICAgICAvLyBjb21wb3VuZCwgZGl2ID4gLmV4YW1wbGUgaXMgbm90LgotICAgICAg
Ly8KLSAgICAgIC8vIGNvbXBsZXggc2VsZWN0b3I6Ci0gICAgICAvLyBPbmUgb3IgbW9yZSBjb21w
b3VuZCBzZWxlY3RvcnMgY2hhaW5lZCB3aXRoIGNvbWJpbmF0b3JzLgotICAgICAgLy8KLSAgICAg
IC8vIGNvbWJpbmF0b3I6Ci0gICAgICAvLyBUaGUgcGFydHMgb2Ygc2VsZWN0b3JzIHRoYXQgZXhw
cmVzcyByZWxhdGlvbnNoaXBzLiBUaGVyZSBhcmUgZm91cgotICAgICAgLy8gY3VycmVudGx5IC0g
dGhlIHNwYWNlIChkZXNjZW5kYW50IGNvbWJpbmF0b3IpLCB0aGUgZ3JlYXRlci10aGFuCi0gICAg
ICAvLyBicmFja2V0IChjaGlsZCBjb21iaW5hdG9yKSwgdGhlIHBsdXMgc2lnbiAobmV4dCBzaWJs
aW5nIGNvbWJpbmF0b3IpLAotICAgICAgLy8gYW5kIHRoZSB0aWxkYSAoZm9sbG93aW5nIHNpYmxp
bmcgY29tYmluYXRvcikuCi0gICAgICAvLwotICAgICAgLy8gc2VxdWVuY2Ugb2Ygc2VsZWN0b3Jz
OgotICAgICAgLy8gT25lIG9yIG1vcmUgb2YgdGhlIG5hbWVkIHR5cGUgb2Ygc2VsZWN0b3IgY2hh
aW5lZCB3aXRoIGNvbW1hcy4KLQotICAgICAgc3RhdGUudG9rZW5pemUgPSBzdGF0ZS50b2tlbml6
ZSB8fCB0b2tlbkJhc2U7Ci0gICAgICBpZiAoc3RhdGUudG9rZW5pemUgPT0gdG9rZW5CYXNlICYm
IHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKLSAgICAgIHZhciBzdHlsZSA9IHN0YXRl
LnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwotICAgICAgaWYgKHN0eWxlICYmIHR5cGVvZiBzdHls
ZSAhPSAic3RyaW5nIikgc3R5bGUgPSByZXQoc3R5bGVbMF0sIHN0eWxlWzFdKTsKLQotICAgICAg
Ly8gQ2hhbmdpbmcgc3R5bGUgcmV0dXJuZWQgYmFzZWQgb24gY29udGV4dAotICAgICAgdmFyIGNv
bnRleHQgPSBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV07Ci0gICAgICBpZiAoc3R5
bGUgPT0gInZhcmlhYmxlIikgewotICAgICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUtZGVmaW5p
dGlvbiIpIHN0YXRlLnN0YWNrLnB1c2goInByb3BlcnR5VmFsdWUiKTsKLSAgICAgICAgcmV0dXJu
IHN0YXRlLmxhc3RUb2tlbiA9ICJ2YXJpYWJsZS0yIjsKLSAgICAgIH0gZWxzZSBpZiAoc3R5bGUg
PT0gInByb3BlcnR5IikgewotICAgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9M
b3dlckNhc2UoKTsKLSAgICAgICAgaWYgKGNvbnRleHQgPT0gInByb3BlcnR5VmFsdWUiKSB7Ci0g
ICAgICAgICAgaWYgKHZhbHVlS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAgICAg
ICAgICAgIHN0eWxlID0gInN0cmluZy0yIjsKLSAgICAgICAgICB9IGVsc2UgaWYgKGNvbG9yS2V5
d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAgICAgICAgICAgIHN0eWxlID0gImtleXdv
cmQiOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZSA9ICJ2YXJpYWJsZS0y
IjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAicnVsZSIpIHsK
LSAgICAgICAgICBpZiAoIXByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsK
LSAgICAgICAgICAgIHN0eWxlICs9ICIgZXJyb3IiOwotICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmIChjb250ZXh0ID09ICJibG9jayIpIHsKLSAgICAgICAgICAvLyBpZiBhIHZhbHVlIGlz
IHByZXNlbnQgaW4gYm90aCBwcm9wZXJ0eSwgdmFsdWUsIG9yIGNvbG9yLCB0aGUgb3JkZXIKLSAg
ICAgICAgICAvLyBvZiBwcmVmZXJlbmNlIGlzIHByb3BlcnR5IC0+IGNvbG9yIC0+IHZhbHVlCi0g
ICAgICAgICAgaWYgKHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAg
ICAgICAgICAgIHN0eWxlID0gInByb3BlcnR5IjsKLSAgICAgICAgICB9IGVsc2UgaWYgKGNvbG9y
S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAgICAgICAgICAgIHN0eWxlID0gImtl
eXdvcmQiOwotICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0
eSh3b3JkKSkgewotICAgICAgICAgICAgc3R5bGUgPSAic3RyaW5nLTIiOwotICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZSA9ICJ0YWciOwotICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmICghY29udGV4dCB8fCBjb250ZXh0ID09ICJAbWVkaWF7IikgewotICAgICAgICAg
IHN0eWxlID0gInRhZyI7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhIikg
ewotICAgICAgICAgIGlmIChhdE1lZGlhVHlwZXNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKLSAgICAg
ICAgICAgIHN0eWxlID0gImF0dHJpYnV0ZSI7IC8vIEtub3duIGF0dHJpYnV0ZQotICAgICAgICAg
IH0gZWxzZSBpZiAoL14ob25seXxub3QpJC8udGVzdCh3b3JkKSkgewotICAgICAgICAgICAgc3R5
bGUgPSAia2V5d29yZCI7Ci0gICAgICAgICAgfSBlbHNlIGlmICh3b3JkID09ICJhbmQiKSB7Ci0g
ICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7IC8vICJhbmQiIGlzIG9ubHkgYWxsb3dlZCBpbiBA
bWVkaWFUeXBlCi0gICAgICAgICAgfSBlbHNlIGlmIChhdE1lZGlhRmVhdHVyZXMuaGFzT3duUHJv
cGVydHkod29yZCkpIHsKLSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gS25vd24gcHJv
cGVydHksIHNob3VsZCBiZSBpbiBAbWVkaWFUeXBlKAotICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBVbmtub3duLCBleHBlY3Rpbmcga2V5d29yZCBvciBhdHRyaWJ1dGUsIGFzc3Vt
aW5nIGF0dHJpYnV0ZQotICAgICAgICAgICAgc3R5bGUgPSAiYXR0cmlidXRlIGVycm9yIjsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhVHlwZSIpIHsK
LSAgICAgICAgICBpZiAoYXRNZWRpYVR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKSB7Ci0gICAg
ICAgICAgICBzdHlsZSA9ICJhdHRyaWJ1dGUiOwotICAgICAgICAgIH0gZWxzZSBpZiAod29yZCA9
PSAiYW5kIikgewotICAgICAgICAgICAgc3R5bGUgPSAib3BlcmF0b3IiOwotICAgICAgICAgIH0g
ZWxzZSBpZiAoL14ob25seXxub3QpJC8udGVzdCh3b3JkKSkgewotICAgICAgICAgICAgc3R5bGUg
PSAiZXJyb3IiOyAvLyBPbmx5IGFsbG93ZWQgaW4gQG1lZGlhCi0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIFVua25vd24gYXR0cmlidXRlIG9yIHByb3BlcnR5LCBidXQgZXhwZWN0
aW5nIHByb3BlcnR5IChwcmVjZWRlZAotICAgICAgICAgICAgLy8gYnkgImFuZCIpLiBTaG91bGQg
YmUgaW4gcGFyZW50aGVzZXMKLSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhVHlwZSgiKSB7Ci0gICAg
ICAgICAgaWYgKHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAgICAg
ICAgICAgIC8vIGRvIG5vdGhpbmcsIHJlbWFpbnMgInByb3BlcnR5IgotICAgICAgICAgIH0gZWxz
ZSBpZiAoYXRNZWRpYVR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKSB7Ci0gICAgICAgICAgICBz
dHlsZSA9ICJlcnJvciI7IC8vIEtub3duIHByb3BlcnR5LCBzaG91bGQgYmUgaW4gcGFyZW50aGVz
ZXMKLSAgICAgICAgICB9IGVsc2UgaWYgKHdvcmQgPT0gImFuZCIpIHsKLSAgICAgICAgICAgIHN0
eWxlID0gIm9wZXJhdG9yIjsKLSAgICAgICAgICB9IGVsc2UgaWYgKC9eKG9ubHl8bm90KSQvLnRl
c3Qod29yZCkpIHsKLSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gT25seSBhbGxvd2Vk
IGluIEBtZWRpYQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZSArPSAiIGVy
cm9yIjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQGltcG9y
dCIpIHsKLSAgICAgICAgICBzdHlsZSA9ICJ0YWciOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIHN0eWxlID0gImVycm9yIjsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChzdHlsZSA9
PSAiYXRvbSIpIHsKLSAgICAgICAgaWYoIWNvbnRleHQgfHwgY29udGV4dCA9PSAiQG1lZGlheyIg
fHwgY29udGV4dCA9PSAiYmxvY2siKSB7Ci0gICAgICAgICAgc3R5bGUgPSAiYnVpbHRpbiI7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAicHJvcGVydHlWYWx1ZSIpIHsKLSAgICAgICAg
ICBpZiAoIS9eIyhbMC05YS1mQS1mXXszfXxbMC05YS1mQS1mXXs2fSkkLy50ZXN0KHN0cmVhbS5j
dXJyZW50KCkpKSB7Ci0gICAgICAgICAgICBzdHlsZSArPSAiIGVycm9yIjsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOwotICAgICAgICB9
Ci0gICAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYSIgJiYgdHlwZSA9PSAieyIpIHsK
LSAgICAgICAgc3R5bGUgPSAiZXJyb3IiOwotICAgICAgfQotCi0gICAgICAvLyBQdXNoL3BvcCBj
b250ZXh0IHN0YWNrCi0gICAgICBpZiAodHlwZSA9PSAieyIpIHsKLSAgICAgICAgaWYgKGNvbnRl
eHQgPT0gIkBtZWRpYSIgfHwgY29udGV4dCA9PSAiQG1lZGlhVHlwZSIpIHsKLSAgICAgICAgICBz
dGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPSAiQG1lZGlheyI7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgdmFyIG5ld0NvbnRleHQgPSBhbGxvd05lc3RlZCA/
ICJibG9jayIgOiAicnVsZSI7Ci0gICAgICAgICAgc3RhdGUuc3RhY2sucHVzaChuZXdDb250ZXh0
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZSA9PSAifSIpIHsKLSAg
ICAgICAgaWYgKGNvbnRleHQgPT0gImludGVycG9sYXRpb24iKSBzdHlsZSA9ICJvcGVyYXRvciI7
Ci0gICAgICAgIC8vIFBvcCBvZmYgZW5kIG9mIGFycmF5IHVudGlsIHsgaXMgcmVhY2hlZAotICAg
ICAgICB3aGlsZShzdGF0ZS5zdGFjay5sZW5ndGgpewotICAgICAgICAgIHZhciByZW1vdmVkID0g
c3RhdGUuc3RhY2sucG9wKCk7Ci0gICAgICAgICAgaWYocmVtb3ZlZC5pbmRleE9mKCJ7IikgPiAt
MSB8fCByZW1vdmVkID09ICJibG9jayIgfHwgcmVtb3ZlZCA9PSAicnVsZSIpewotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlm
ICh0eXBlID09ICJpbnRlcnBvbGF0aW9uIikgc3RhdGUuc3RhY2sucHVzaCgiaW50ZXJwb2xhdGlv
biIpOwotICAgICAgZWxzZSBpZiAodHlwZSA9PSAiQG1lZGlhIikgc3RhdGUuc3RhY2sucHVzaCgi
QG1lZGlhIik7Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICJAaW1wb3J0Iikgc3RhdGUuc3RhY2su
cHVzaCgiQGltcG9ydCIpOwotICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhIiAmJiAv
XGIoa2V5d29yZHxhdHRyaWJ1dGUpXGIvLnRlc3Qoc3R5bGUpKQotICAgICAgICBzdGF0ZS5zdGFj
a1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPSAiQG1lZGlhVHlwZSI7Ci0gICAgICBlbHNlIGlmIChj
b250ZXh0ID09ICJAbWVkaWFUeXBlIiAmJiBzdHJlYW0uY3VycmVudCgpID09ICIsIikKLSAgICAg
ICAgc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID0gIkBtZWRpYSI7Ci0gICAgICBl
bHNlIGlmICh0eXBlID09ICIoIikgewotICAgICAgICBpZiAoY29udGV4dCA9PSAiQG1lZGlhIiB8
fCBjb250ZXh0ID09ICJAbWVkaWFUeXBlIikgewotICAgICAgICAgIC8vIE1ha2Ugc3VyZSBAbWVk
aWFUeXBlIGlzIHVzZWQgdG8gYXZvaWQgZXJyb3Igb24gewotICAgICAgICAgIHN0YXRlLnN0YWNr
W3N0YXRlLnN0YWNrLmxlbmd0aC0xXSA9ICJAbWVkaWFUeXBlIjsKLSAgICAgICAgICBzdGF0ZS5z
dGFjay5wdXNoKCJAbWVkaWFUeXBlKCIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ugc3RhdGUu
c3RhY2sucHVzaCgiKCIpOworICAgICAgaWYgKCFzdGF0ZS50b2tlbml6ZSAmJiBzdHJlYW0uZWF0
U3BhY2UoKSkgcmV0dXJuIG51bGw7CisgICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUg
fHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTsKKyAgICAgIGlmIChzdHlsZSAmJiB0eXBlb2Yg
c3R5bGUgPT0gIm9iamVjdCIpIHsKKyAgICAgICAgdHlwZSA9IHN0eWxlWzFdOworICAgICAgICBz
dHlsZSA9IHN0eWxlWzBdOwogICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZSA9PSAiKSIpIHsK
LSAgICAgICAgLy8gUG9wIG9mZiBlbmQgb2YgYXJyYXkgdW50aWwgKCBpcyByZWFjaGVkCi0gICAg
ICAgIHdoaWxlKHN0YXRlLnN0YWNrLmxlbmd0aCl7Ci0gICAgICAgICAgdmFyIHJlbW92ZWQgPSBz
dGF0ZS5zdGFjay5wb3AoKTsKLSAgICAgICAgICBpZihyZW1vdmVkLmluZGV4T2YoIigiKSA+IC0x
KXsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgZWxzZSBpZiAodHlwZSA9PSAiOiIgJiYgc3RhdGUubGFzdFRva2VuID09ICJwcm9wZXJ0
eSIpIHN0YXRlLnN0YWNrLnB1c2goInByb3BlcnR5VmFsdWUiKTsKLSAgICAgIGVsc2UgaWYgKGNv
bnRleHQgPT0gInByb3BlcnR5VmFsdWUiICYmIHR5cGUgPT0gIjsiKSBzdGF0ZS5zdGFjay5wb3Ao
KTsKLSAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gIkBpbXBvcnQiICYmIHR5cGUgPT0gIjsiKSBz
dGF0ZS5zdGFjay5wb3AoKTsKLQotICAgICAgcmV0dXJuIHN0YXRlLmxhc3RUb2tlbiA9IHN0eWxl
OworICAgICAgb3ZlcnJpZGUgPSBzdHlsZTsKKyAgICAgIHN0YXRlLnN0YXRlID0gc3RhdGVzW3N0
YXRlLnN0YXRlXSh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKKyAgICAgIHJldHVybiBvdmVycmlkZTsK
ICAgICB9LAogCiAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7Ci0gICAg
ICB2YXIgbiA9IHN0YXRlLnN0YWNrLmxlbmd0aDsKLSAgICAgIGlmICgvXlx9Ly50ZXN0KHRleHRB
ZnRlcikpCi0gICAgICAgIG4gLT0gc3RhdGUuc3RhY2tbbi0xXSA9PSAicHJvcGVydHlWYWx1ZSIg
PyAyIDogMTsKLSAgICAgIHJldHVybiBzdGF0ZS5iYXNlSW5kZW50ICsgbiAqIGluZGVudFVuaXQ7
CisgICAgICB2YXIgY3ggPSBzdGF0ZS5jb250ZXh0LCBjaCA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0
ZXIuY2hhckF0KDApOworICAgICAgdmFyIGluZGVudCA9IGN4LmluZGVudDsKKyAgICAgIGlmIChj
eC50eXBlID09ICJwcm9wIiAmJiBjaCA9PSAifSIpIGN4ID0gY3gucHJldjsKKyAgICAgIGlmIChj
eC5wcmV2ICYmCisgICAgICAgICAgKGNoID09ICJ9IiAmJiAoY3gudHlwZSA9PSAiYmxvY2siIHx8
IGN4LnR5cGUgPT0gInRvcCIgfHwgY3gudHlwZSA9PSAiaW50ZXJwb2xhdGlvbiIgfHwgY3gudHlw
ZSA9PSAiZm9udF9mYWNlIikgfHwKKyAgICAgICAgICAgY2ggPT0gIikiICYmIChjeC50eXBlID09
ICJwYXJlbnMiIHx8IGN4LnR5cGUgPT0gInBhcmFtcyIgfHwgY3gudHlwZSA9PSAibWVkaWFfcGFy
ZW5zIikgfHwKKyAgICAgICAgICAgY2ggPT0gInsiICYmIChjeC50eXBlID09ICJhdCIgfHwgY3gu
dHlwZSA9PSAibWVkaWEiKSkpIHsKKyAgICAgICAgaW5kZW50ID0gY3guaW5kZW50IC0gaW5kZW50
VW5pdDsKKyAgICAgICAgY3ggPSBjeC5wcmV2OworICAgICAgfQorICAgICAgcmV0dXJuIGluZGVu
dDsKICAgICB9LAogCiAgICAgZWxlY3RyaWNDaGFyczogIn0iLApAQCAtMzEyLDcgKzM0Nyw2IEBA
IENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgfTsKIH0pOwogCi0oZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIGtleVNldChhcnJh
eSkgewogICAgIHZhciBrZXlzID0ge307CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5s
ZW5ndGg7ICsraSkgewpAQCAtMzIxLDEyICszNTUsMTIgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2Rl
KCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHJldHVybiBrZXlz
OwogICB9CiAKLSAgdmFyIGF0TWVkaWFUeXBlcyA9IGtleVNldChbCisgIHZhciBtZWRpYVR5cGVz
XyA9IFsKICAgICAiYWxsIiwgImF1cmFsIiwgImJyYWlsbGUiLCAiaGFuZGhlbGQiLCAicHJpbnQi
LCAicHJvamVjdGlvbiIsICJzY3JlZW4iLAogICAgICJ0dHkiLCAidHYiLCAiZW1ib3NzZWQiCi0g
IF0pOworICBdLCBtZWRpYVR5cGVzID0ga2V5U2V0KG1lZGlhVHlwZXNfKTsKIAotICB2YXIgYXRN
ZWRpYUZlYXR1cmVzID0ga2V5U2V0KFsKKyAgdmFyIG1lZGlhRmVhdHVyZXNfID0gWwogICAgICJ3
aWR0aCIsICJtaW4td2lkdGgiLCAibWF4LXdpZHRoIiwgImhlaWdodCIsICJtaW4taGVpZ2h0Iiwg
Im1heC1oZWlnaHQiLAogICAgICJkZXZpY2Utd2lkdGgiLCAibWluLWRldmljZS13aWR0aCIsICJt
YXgtZGV2aWNlLXdpZHRoIiwgImRldmljZS1oZWlnaHQiLAogICAgICJtaW4tZGV2aWNlLWhlaWdo
dCIsICJtYXgtZGV2aWNlLWhlaWdodCIsICJhc3BlY3QtcmF0aW8iLApAQCAtMzM1LDE1ICszNjks
MTUgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgICJtYXgtY29sb3IiLCAiY29sb3ItaW5kZXgiLCAibWluLWNvbG9yLWlu
ZGV4IiwgIm1heC1jb2xvci1pbmRleCIsCiAgICAgIm1vbm9jaHJvbWUiLCAibWluLW1vbm9jaHJv
bWUiLCAibWF4LW1vbm9jaHJvbWUiLCAicmVzb2x1dGlvbiIsCiAgICAgIm1pbi1yZXNvbHV0aW9u
IiwgIm1heC1yZXNvbHV0aW9uIiwgInNjYW4iLCAiZ3JpZCIKLSAgXSk7CisgIF0sIG1lZGlhRmVh
dHVyZXMgPSBrZXlTZXQobWVkaWFGZWF0dXJlc18pOwogCi0gIHZhciBwcm9wZXJ0eUtleXdvcmRz
ID0ga2V5U2V0KFsKKyAgdmFyIHByb3BlcnR5S2V5d29yZHNfID0gWwogICAgICJhbGlnbi1jb250
ZW50IiwgImFsaWduLWl0ZW1zIiwgImFsaWduLXNlbGYiLCAiYWxpZ25tZW50LWFkanVzdCIsCiAg
ICAgImFsaWdubWVudC1iYXNlbGluZSIsICJhbmNob3ItcG9pbnQiLCAiYW5pbWF0aW9uIiwgImFu
aW1hdGlvbi1kZWxheSIsCi0gICAgImFuaW1hdGlvbi1kaXJlY3Rpb24iLCAiYW5pbWF0aW9uLWR1
cmF0aW9uIiwgImFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiLAotICAgICJhbmltYXRpb24tbmFt
ZSIsICJhbmltYXRpb24tcGxheS1zdGF0ZSIsICJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwK
LSAgICAiYXBwZWFyYW5jZSIsICJhemltdXRoIiwgImJhY2tmYWNlLXZpc2liaWxpdHkiLCAiYmFj
a2dyb3VuZCIsCi0gICAgImJhY2tncm91bmQtYXR0YWNobWVudCIsICJiYWNrZ3JvdW5kLWNsaXAi
LCAiYmFja2dyb3VuZC1jb2xvciIsCisgICAgImFuaW1hdGlvbi1kaXJlY3Rpb24iLCAiYW5pbWF0
aW9uLWR1cmF0aW9uIiwgImFuaW1hdGlvbi1maWxsLW1vZGUiLAorICAgICJhbmltYXRpb24taXRl
cmF0aW9uLWNvdW50IiwgImFuaW1hdGlvbi1uYW1lIiwgImFuaW1hdGlvbi1wbGF5LXN0YXRlIiwK
KyAgICAiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsICJhcHBlYXJhbmNlIiwgImF6aW11dGgi
LCAiYmFja2ZhY2UtdmlzaWJpbGl0eSIsCisgICAgImJhY2tncm91bmQiLCAiYmFja2dyb3VuZC1h
dHRhY2htZW50IiwgImJhY2tncm91bmQtY2xpcCIsICJiYWNrZ3JvdW5kLWNvbG9yIiwKICAgICAi
YmFja2dyb3VuZC1pbWFnZSIsICJiYWNrZ3JvdW5kLW9yaWdpbiIsICJiYWNrZ3JvdW5kLXBvc2l0
aW9uIiwKICAgICAiYmFja2dyb3VuZC1yZXBlYXQiLCAiYmFja2dyb3VuZC1zaXplIiwgImJhc2Vs
aW5lLXNoaWZ0IiwgImJpbmRpbmciLAogICAgICJibGVlZCIsICJib29rbWFyay1sYWJlbCIsICJi
b29rbWFyay1sZXZlbCIsICJib29rbWFyay1zdGF0ZSIsCkBAIC0zNzQsMTAgKzQwOCwxMSBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgICAgImZvbnQtc3RyZXRjaCIsICJmb250LXN0eWxlIiwgImZvbnQtc3ludGhlc2lzIiwg
ImZvbnQtdmFyaWFudCIsCiAgICAgImZvbnQtdmFyaWFudC1hbHRlcm5hdGVzIiwgImZvbnQtdmFy
aWFudC1jYXBzIiwgImZvbnQtdmFyaWFudC1lYXN0LWFzaWFuIiwKICAgICAiZm9udC12YXJpYW50
LWxpZ2F0dXJlcyIsICJmb250LXZhcmlhbnQtbnVtZXJpYyIsICJmb250LXZhcmlhbnQtcG9zaXRp
b24iLAotICAgICJmb250LXdlaWdodCIsICJncmlkLWNlbGwiLCAiZ3JpZC1jb2x1bW4iLCAiZ3Jp
ZC1jb2x1bW4tYWxpZ24iLAotICAgICJncmlkLWNvbHVtbi1zaXppbmciLCAiZ3JpZC1jb2x1bW4t
c3BhbiIsICJncmlkLWNvbHVtbnMiLCAiZ3JpZC1mbG93IiwKLSAgICAiZ3JpZC1yb3ciLCAiZ3Jp
ZC1yb3ctYWxpZ24iLCAiZ3JpZC1yb3ctc2l6aW5nIiwgImdyaWQtcm93LXNwYW4iLAotICAgICJn
cmlkLXJvd3MiLCAiZ3JpZC10ZW1wbGF0ZS1hcmVhcyIsICJoYW5naW5nLXB1bmN0dWF0aW9uIiwg
ImhlaWdodCIsICJoeXBoZW5zIiwKKyAgICAiZm9udC13ZWlnaHQiLCAiZ3JpZCIsICJncmlkLWFy
ZWEiLCAiZ3JpZC1hdXRvLWNvbHVtbnMiLCAiZ3JpZC1hdXRvLWZsb3ciLAorICAgICJncmlkLWF1
dG8tcG9zaXRpb24iLCAiZ3JpZC1hdXRvLXJvd3MiLCAiZ3JpZC1jb2x1bW4iLCAiZ3JpZC1jb2x1
bW4tZW5kIiwKKyAgICAiZ3JpZC1jb2x1bW4tc3RhcnQiLCAiZ3JpZC1yb3ciLCAiZ3JpZC1yb3ct
ZW5kIiwgImdyaWQtcm93LXN0YXJ0IiwKKyAgICAiZ3JpZC10ZW1wbGF0ZSIsICJncmlkLXRlbXBs
YXRlLWFyZWFzIiwgImdyaWQtdGVtcGxhdGUtY29sdW1ucyIsCisgICAgImdyaWQtdGVtcGxhdGUt
cm93cyIsICJoYW5naW5nLXB1bmN0dWF0aW9uIiwgImhlaWdodCIsICJoeXBoZW5zIiwKICAgICAi
aWNvbiIsICJpbWFnZS1vcmllbnRhdGlvbiIsICJpbWFnZS1yZW5kZXJpbmciLCAiaW1hZ2UtcmVz
b2x1dGlvbiIsCiAgICAgImlubGluZS1ib3gtYWxpZ24iLCAianVzdGlmeS1jb250ZW50IiwgImxl
ZnQiLCAibGV0dGVyLXNwYWNpbmciLAogICAgICJsaW5lLWJyZWFrIiwgImxpbmUtaGVpZ2h0Iiwg
ImxpbmUtc3RhY2tpbmciLCAibGluZS1zdGFja2luZy1ydWJ5IiwKQEAgLTQxNCw3ICs0NDksNyBA
QCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29u
ZmlnKSB7CiAgICAgInZlcnRpY2FsLWFsaWduIiwgInZpc2liaWxpdHkiLCAidm9pY2UtYmFsYW5j
ZSIsICJ2b2ljZS1kdXJhdGlvbiIsCiAgICAgInZvaWNlLWZhbWlseSIsICJ2b2ljZS1waXRjaCIs
ICJ2b2ljZS1yYW5nZSIsICJ2b2ljZS1yYXRlIiwgInZvaWNlLXN0cmVzcyIsCiAgICAgInZvaWNl
LXZvbHVtZSIsICJ2b2x1bWUiLCAid2hpdGUtc3BhY2UiLCAid2lkb3dzIiwgIndpZHRoIiwgIndv
cmQtYnJlYWsiLAotICAgICJ3b3JkLXNwYWNpbmciLCAid29yZC13cmFwIiwgInotaW5kZXgiLCAi
em9vbSIsCisgICAgIndvcmQtc3BhY2luZyIsICJ3b3JkLXdyYXAiLCAiei1pbmRleCIsCiAgICAg
Ly8gU1ZHLXNwZWNpZmljCiAgICAgImNsaXAtcGF0aCIsICJjbGlwLXJ1bGUiLCAibWFzayIsICJl
bmFibGUtYmFja2dyb3VuZCIsICJmaWx0ZXIiLCAiZmxvb2QtY29sb3IiLAogICAgICJmbG9vZC1v
cGFjaXR5IiwgImxpZ2h0aW5nLWNvbG9yIiwgInN0b3AtY29sb3IiLCAic3RvcC1vcGFjaXR5Iiwg
InBvaW50ZXItZXZlbnRzIiwKQEAgLTQyNSw5ICs0NjAsMTcgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJzdHJva2Ut
bWl0ZXJsaW1pdCIsICJzdHJva2Utb3BhY2l0eSIsICJzdHJva2Utd2lkdGgiLCAidGV4dC1yZW5k
ZXJpbmciLAogICAgICJiYXNlbGluZS1zaGlmdCIsICJkb21pbmFudC1iYXNlbGluZSIsICJnbHlw
aC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwKICAgICAiZ2x5cGgtb3JpZW50YXRpb24tdmVydGlj
YWwiLCAia2VybmluZyIsICJ0ZXh0LWFuY2hvciIsICJ3cml0aW5nLW1vZGUiCi0gIF0pOworICBd
LCBwcm9wZXJ0eUtleXdvcmRzID0ga2V5U2V0KHByb3BlcnR5S2V5d29yZHNfKTsKIAotICB2YXIg
Y29sb3JLZXl3b3JkcyA9IGtleVNldChbCisgIHZhciBub25TdGFuZGFyZFByb3BlcnR5S2V5d29y
ZHMgPSBbCisgICAgInNjcm9sbGJhci1hcnJvdy1jb2xvciIsICJzY3JvbGxiYXItYmFzZS1jb2xv
ciIsICJzY3JvbGxiYXItZGFyay1zaGFkb3ctY29sb3IiLAorICAgICJzY3JvbGxiYXItZmFjZS1j
b2xvciIsICJzY3JvbGxiYXItaGlnaGxpZ2h0LWNvbG9yIiwgInNjcm9sbGJhci1zaGFkb3ctY29s
b3IiLAorICAgICJzY3JvbGxiYXItM2QtbGlnaHQtY29sb3IiLCAic2Nyb2xsYmFyLXRyYWNrLWNv
bG9yIiwgInNoYXBlLWluc2lkZSIsCisgICAgInNlYXJjaGZpZWxkLWNhbmNlbC1idXR0b24iLCAi
c2VhcmNoZmllbGQtZGVjb3JhdGlvbiIsICJzZWFyY2hmaWVsZC1yZXN1bHRzLWJ1dHRvbiIsCisg
ICAgInNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3JhdGlvbiIsICJ6b29tIgorICBdLCBub25TdGFu
ZGFyZFByb3BlcnR5S2V5d29yZHMgPSBrZXlTZXQobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRz
KTsKKworICB2YXIgY29sb3JLZXl3b3Jkc18gPSBbCiAgICAgImFsaWNlYmx1ZSIsICJhbnRpcXVl
d2hpdGUiLCAiYXF1YSIsICJhcXVhbWFyaW5lIiwgImF6dXJlIiwgImJlaWdlIiwKICAgICAiYmlz
cXVlIiwgImJsYWNrIiwgImJsYW5jaGVkYWxtb25kIiwgImJsdWUiLCAiYmx1ZXZpb2xldCIsICJi
cm93biIsCiAgICAgImJ1cmx5d29vZCIsICJjYWRldGJsdWUiLCAiY2hhcnRyZXVzZSIsICJjaG9j
b2xhdGUiLCAiY29yYWwiLCAiY29ybmZsb3dlcmJsdWUiLApAQCAtNDU0LDkgKzQ5Nyw5IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKICAgICAic2xhdGVibHVlIiwgInNsYXRlZ3JheSIsICJzbm93IiwgInNwcmluZ2dyZWVuIiwg
InN0ZWVsYmx1ZSIsICJ0YW4iLAogICAgICJ0ZWFsIiwgInRoaXN0bGUiLCAidG9tYXRvIiwgInR1
cnF1b2lzZSIsICJ2aW9sZXQiLCAid2hlYXQiLCAid2hpdGUiLAogICAgICJ3aGl0ZXNtb2tlIiwg
InllbGxvdyIsICJ5ZWxsb3dncmVlbiIKLSAgXSk7CisgIF0sIGNvbG9yS2V5d29yZHMgPSBrZXlT
ZXQoY29sb3JLZXl3b3Jkc18pOwogCi0gIHZhciB2YWx1ZUtleXdvcmRzID0ga2V5U2V0KFsKKyAg
dmFyIHZhbHVlS2V5d29yZHNfID0gWwogICAgICJhYm92ZSIsICJhYnNvbHV0ZSIsICJhY3RpdmVi
b3JkZXIiLCAiYWN0aXZlY2FwdGlvbiIsICJhZmFyIiwKICAgICAiYWZ0ZXItd2hpdGUtc3BhY2Ui
LCAiYWhlYWQiLCAiYWxpYXMiLCAiYWxsIiwgImFsbC1zY3JvbGwiLCAiYWx0ZXJuYXRlIiwKICAg
ICAiYWx3YXlzIiwgImFtaGFyaWMiLCAiYW1oYXJpYy1hYmVnZWRlIiwgImFudGlhbGlhc2VkIiwg
ImFwcHdvcmtzcGFjZSIsCkBAIC01MzksNyArNTgyLDE2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9k
ZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAidmlzaWJsZVN0
cm9rZSIsICJ2aXN1YWwiLCAidy1yZXNpemUiLCAid2FpdCIsICJ3YXZlIiwgIndpZGVyIiwKICAg
ICAid2luZG93IiwgIndpbmRvd2ZyYW1lIiwgIndpbmRvd3RleHQiLCAieC1sYXJnZSIsICJ4LXNt
YWxsIiwgInhvciIsCiAgICAgInh4LWxhcmdlIiwgInh4LXNtYWxsIgotICBdKTsKKyAgXSwgdmFs
dWVLZXl3b3JkcyA9IGtleVNldCh2YWx1ZUtleXdvcmRzXyk7CisKKyAgdmFyIGZvbnRQcm9wZXJ0
aWVzXyA9IFsKKyAgICAiZm9udC1mYW1pbHkiLCAic3JjIiwgInVuaWNvZGUtcmFuZ2UiLCAiZm9u
dC12YXJpYW50IiwgImZvbnQtZmVhdHVyZS1zZXR0aW5ncyIsCisgICAgImZvbnQtc3RyZXRjaCIs
ICJmb250LXdlaWdodCIsICJmb250LXN0eWxlIgorICBdLCBmb250UHJvcGVydGllcyA9IGtleVNl
dChmb250UHJvcGVydGllc18pOworCisgIHZhciBhbGxXb3JkcyA9IG1lZGlhVHlwZXNfLmNvbmNh
dChtZWRpYUZlYXR1cmVzXykuY29uY2F0KHByb3BlcnR5S2V5d29yZHNfKQorICAgIC5jb25jYXQo
bm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzKS5jb25jYXQoY29sb3JLZXl3b3Jkc18pLmNvbmNh
dCh2YWx1ZUtleXdvcmRzXyk7CisgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoImhpbnRXb3Jk
cyIsICJjc3MiLCBhbGxXb3Jkcyk7CiAKICAgZnVuY3Rpb24gdG9rZW5DQ29tbWVudChzdHJlYW0s
IHN0YXRlKSB7CiAgICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwpAQCAtNTUzLDY3ICs2MDUs
OTAgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgIHJldHVybiBbImNvbW1lbnQiLCAiY29tbWVudCJdOwogICB9CiAKKyAg
ZnVuY3Rpb24gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHN0cmVh
bS5za2lwVG8oIi0tPiIpKSB7CisgICAgICBzdHJlYW0ubWF0Y2goIi0tPiIpOworICAgICAgc3Rh
dGUudG9rZW5pemUgPSBudWxsOworICAgIH0gZWxzZSB7CisgICAgICBzdHJlYW0uc2tpcFRvRW5k
KCk7CisgICAgfQorICAgIHJldHVybiBbImNvbW1lbnQiLCAiY29tbWVudCJdOworICB9CisKICAg
Q29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2NzcyIsIHsKLSAgICBhdE1lZGlhVHlwZXM6IGF0
TWVkaWFUeXBlcywKLSAgICBhdE1lZGlhRmVhdHVyZXM6IGF0TWVkaWFGZWF0dXJlcywKKyAgICBt
ZWRpYVR5cGVzOiBtZWRpYVR5cGVzLAorICAgIG1lZGlhRmVhdHVyZXM6IG1lZGlhRmVhdHVyZXMs
CiAgICAgcHJvcGVydHlLZXl3b3JkczogcHJvcGVydHlLZXl3b3JkcywKKyAgICBub25TdGFuZGFy
ZFByb3BlcnR5S2V5d29yZHM6IG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcywKICAgICBjb2xv
cktleXdvcmRzOiBjb2xvcktleXdvcmRzLAogICAgIHZhbHVlS2V5d29yZHM6IHZhbHVlS2V5d29y
ZHMsCi0gICAgaG9va3M6IHsKKyAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsCisg
ICAgdG9rZW5Ib29rczogewogICAgICAgIjwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0g
ICAgICAgIGZ1bmN0aW9uIHRva2VuU0dNTENvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewotICAgICAg
ICAgIHZhciBkYXNoZXMgPSAwLCBjaDsKLSAgICAgICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5l
eHQoKSkgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKGRhc2hlcyA+PSAyICYmIGNoID09ICI+
IikgewotICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7Ci0gICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGFzaGVzID0gKGNoID09ICItIikg
PyBkYXNoZXMgKyAxIDogMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIFsiY29tbWVu
dCIsICJjb21tZW50Il07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmVhbS5lYXQoIiEiKSkg
ewotICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TR01MQ29tbWVudDsKLSAgICAgICAg
ICByZXR1cm4gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKLSAgICAgICAgfQorICAg
ICAgICBpZiAoIXN0cmVhbS5tYXRjaCgiIS0tIikpIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3Rh
dGUudG9rZW5pemUgPSB0b2tlblNHTUxDb21tZW50OworICAgICAgICByZXR1cm4gdG9rZW5TR01M
Q29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgIH0sCiAgICAgICAiLyI6IGZ1bmN0aW9uKHN0
cmVhbSwgc3RhdGUpIHsKLSAgICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewotICAgICAgICAg
IHN0YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDsKLSAgICAgICAgICByZXR1cm4gdG9rZW5D
Q29tbWVudChzdHJlYW0sIHN0YXRlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmICghc3RyZWFtLmVhdCgiKiIpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHN0
YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDsKKyAgICAgICAgcmV0dXJuIHRva2VuQ0NvbW1l
bnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICB9CiAgICAgfSwKICAgICBuYW1lOiAiY3NzIgogICB9
KTsKIAogICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1zY3NzIiwgewotICAgIGF0TWVk
aWFUeXBlczogYXRNZWRpYVR5cGVzLAotICAgIGF0TWVkaWFGZWF0dXJlczogYXRNZWRpYUZlYXR1
cmVzLAorICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsCisgICAgbWVkaWFGZWF0dXJlczogbWVk
aWFGZWF0dXJlcywKICAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtleXdvcmRzLAorICAg
IG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRz
LAogICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsCiAgICAgdmFsdWVLZXl3b3Jkczog
dmFsdWVLZXl3b3JkcywKKyAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsCiAgICAg
YWxsb3dOZXN0ZWQ6IHRydWUsCi0gICAgaG9va3M6IHsKKyAgICB0b2tlbkhvb2tzOiB7CisgICAg
ICAiLyI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKKyAgICAgICAgaWYgKHN0cmVhbS5lYXQo
Ii8iKSkgeworICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKKyAgICAgICAgICByZXR1cm4g
WyJjb21tZW50IiwgImNvbW1lbnQiXTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KCIq
IikpIHsKKyAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ0NvbW1lbnQ7CisgICAgICAg
ICAgcmV0dXJuIHRva2VuQ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgcmV0dXJuIFsib3BlcmF0b3IiLCAib3BlcmF0b3IiXTsKKyAgICAgICAgfQor
ICAgICAgfSwKICAgICAgICI6IjogZnVuY3Rpb24oc3RyZWFtKSB7Ci0gICAgICAgIGlmIChzdHJl
YW0ubWF0Y2goL1xzKnsvKSkgeworICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ccyp7LykpCiAg
ICAgICAgICAgcmV0dXJuIFtudWxsLCAieyJdOwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgIH0sCiAgICAgICAiJCI6IGZ1bmN0aW9uKHN0cmVhbSkgewogICAgICAgICBz
dHJlYW0ubWF0Y2goL15bXHctXSsvKTsKLSAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gIjoi
KSB7Ci0gICAgICAgICAgcmV0dXJuIFsidmFyaWFibGUiLCAidmFyaWFibGUtZGVmaW5pdGlvbiJd
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBbInZhcmlhYmxlIiwgInZhcmlhYmxlIl07Ci0g
ICAgICB9LAotICAgICAgIiwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0gICAgICAgIGlm
IChzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGggLSAxXSA9PSAicHJvcGVydHlWYWx1ZSIg
JiYgc3RyZWFtLm1hdGNoKC9eICpcJC8sIGZhbHNlKSkgewotICAgICAgICAgIHJldHVybiBbIm9w
ZXJhdG9yIiwgIjsiXTsKLSAgICAgICAgfQorICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXHMq
Oi8sIGZhbHNlKSkKKyAgICAgICAgICByZXR1cm4gWyJ2YXJpYWJsZS0yIiwgInZhcmlhYmxlLWRl
ZmluaXRpb24iXTsKKyAgICAgICAgcmV0dXJuIFsidmFyaWFibGUtMiIsICJ2YXJpYWJsZSJdOwog
ICAgICAgfSwKKyAgICAgICIjIjogZnVuY3Rpb24oc3RyZWFtKSB7CisgICAgICAgIGlmICghc3Ry
ZWFtLmVhdCgieyIpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBbbnVsbCwgImludGVy
cG9sYXRpb24iXTsKKyAgICAgIH0KKyAgICB9LAorICAgIG5hbWU6ICJjc3MiLAorICAgIGhlbHBl
clR5cGU6ICJzY3NzIgorICB9KTsKKworICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1s
ZXNzIiwgeworICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsCisgICAgbWVkaWFGZWF0dXJlczog
bWVkaWFGZWF0dXJlcywKKyAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtleXdvcmRzLAor
ICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdv
cmRzLAorICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsCisgICAgdmFsdWVLZXl3b3Jk
czogdmFsdWVLZXl3b3JkcywKKyAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsCisg
ICAgYWxsb3dOZXN0ZWQ6IHRydWUsCisgICAgdG9rZW5Ib29rczogewogICAgICAgIi8iOiBmdW5j
dGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsKICAg
ICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CkBAIC02MjUsMTUgKzcwMCwxOSBAQCBDb2RlTWly
cm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAg
ICAgICAgICAgcmV0dXJuIFsib3BlcmF0b3IiLCAib3BlcmF0b3IiXTsKICAgICAgICAgfQogICAg
ICAgfSwKLSAgICAgICIjIjogZnVuY3Rpb24oc3RyZWFtKSB7Ci0gICAgICAgIGlmIChzdHJlYW0u
ZWF0KCJ7IikpIHsKLSAgICAgICAgICByZXR1cm4gWyJvcGVyYXRvciIsICJpbnRlcnBvbGF0aW9u
Il07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwt
XS8pOwotICAgICAgICAgIHJldHVybiBbImF0b20iLCAiaGFzaCJdOwotICAgICAgICB9CisgICAg
ICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSkgeworICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKGNo
YXJzZXR8ZG9jdW1lbnR8Zm9udC1mYWNlfGltcG9ydHwoLShtb3p8bXN8b3x3ZWJraXQpLSk/a2V5
ZnJhbWVzfG1lZGlhfG5hbWVzcGFjZXxwYWdlfHN1cHBvcnRzKVxiLywgZmFsc2UpKSByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKKyAgICAgICAgaWYg
KHN0cmVhbS5tYXRjaCgvXlxzKjovLCBmYWxzZSkpCisgICAgICAgICAgcmV0dXJuIFsidmFyaWFi
bGUtMiIsICJ2YXJpYWJsZS1kZWZpbml0aW9uIl07CisgICAgICAgIHJldHVybiBbInZhcmlhYmxl
LTIiLCAidmFyaWFibGUiXTsKKyAgICAgIH0sCisgICAgICAiJiI6IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gWyJhdG9tIiwgImF0b20iXTsKICAgICAgIH0KICAgICB9LAotICAgIG5hbWU6
ICJjc3MiCisgICAgbmFtZTogImNzcyIsCisgICAgaGVscGVyVHlwZTogImxlc3MiCiAgIH0pOwot
fSkoKTsKKworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJl
dHR5UHJpbnRpbmcvamF2YXNjcmlwdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9Q
cmV0dHlQcmludGluZy9qYXZhc2NyaXB0LmpzCmluZGV4IGYyN2MwNjMuLjkzMThhYWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9qYXZhc2Ny
aXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9q
YXZhc2NyaXB0LmpzCkBAIC0xLDkgKzEsMjAgQEAKIC8vIFRPRE8gYWN0dWFsbHkgcmVjb2duaXpl
IHN5bnRheCBvZiBUeXBlU2NyaXB0IGNvbnN0cnVjdHMKIAorKGZ1bmN0aW9uKG1vZCkgeworICBp
ZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0
IikgLy8gQ29tbW9uSlMKKyAgICBtb2QocmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSk7
CisgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAv
LyBBTUQKKyAgICBkZWZpbmUoWyIuLi8uLi9saWIvY29kZW1pcnJvciJdLCBtb2QpOworICBlbHNl
IC8vIFBsYWluIGJyb3dzZXIgZW52CisgICAgbW9kKENvZGVNaXJyb3IpOworfSkoZnVuY3Rpb24o
Q29kZU1pcnJvcikgeworInVzZSBzdHJpY3QiOworCiBDb2RlTWlycm9yLmRlZmluZU1vZGUoImph
dmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB2YXIgaW5kZW50
VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogICB2YXIgc3RhdGVtZW50SW5kZW50ID0gcGFyc2Vy
Q29uZmlnLnN0YXRlbWVudEluZGVudDsKLSAgdmFyIGpzb25Nb2RlID0gcGFyc2VyQ29uZmlnLmpz
b247CisgIHZhciBqc29ubGRNb2RlID0gcGFyc2VyQ29uZmlnLmpzb25sZDsKKyAgdmFyIGpzb25N
b2RlID0gcGFyc2VyQ29uZmlnLmpzb24gfHwganNvbmxkTW9kZTsKICAgdmFyIGlzVFMgPSBwYXJz
ZXJDb25maWcudHlwZXNjcmlwdDsKIAogICAvLyBUb2tlbml6ZXIKQEAgLTE1LDcgKzI2LDcgQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKIAogICAgIHZhciBqc0tleXdvcmRzID0gewogICAgICAgImlmIjoga3coImlm
IiksICJ3aGlsZSI6IEEsICJ3aXRoIjogQSwgImVsc2UiOiBCLCAiZG8iOiBCLCAidHJ5IjogQiwg
ImZpbmFsbHkiOiBCLAotICAgICAgInJldHVybiI6IEMsICJicmVhayI6IEMsICJjb250aW51ZSI6
IEMsICJuZXciOiBDLCAiZGVsZXRlIjogQywgInRocm93IjogQywKKyAgICAgICJyZXR1cm4iOiBD
LCAiYnJlYWsiOiBDLCAiY29udGludWUiOiBDLCAibmV3IjogQywgImRlbGV0ZSI6IEMsICJ0aHJv
dyI6IEMsICJkZWJ1Z2dlciI6IEMsCiAgICAgICAidmFyIjoga3coInZhciIpLCAiY29uc3QiOiBr
dygidmFyIiksICJsZXQiOiBrdygidmFyIiksCiAgICAgICAiZnVuY3Rpb24iOiBrdygiZnVuY3Rp
b24iKSwgImNhdGNoIjoga3coImNhdGNoIiksCiAgICAgICAiZm9yIjoga3coImZvciIpLCAic3dp
dGNoIjoga3coInN3aXRjaCIpLCAiY2FzZSI6IGt3KCJjYXNlIiksICJkZWZhdWx0Ijoga3coImRl
ZmF1bHQiKSwKQEAgLTUzLDE1ICs2NCwxOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFz
Y3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9KCk7CiAKICAgdmFy
IGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hP3x+Xl0vOworICB2YXIgaXNKc29ubGRLZXl3
b3JkID0gL15AKGNvbnRleHR8aWR8dmFsdWV8bGFuZ3VhZ2V8dHlwZXxjb250YWluZXJ8bGlzdHxz
ZXR8cmV2ZXJzZXxpbmRleHxiYXNlfHZvY2FifGdyYXBoKSIvOwogCi0gIGZ1bmN0aW9uIG5leHRV
bnRpbFVuZXNjYXBlZChzdHJlYW0sIGVuZCkgewotICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5l
eHQ7CisgIGZ1bmN0aW9uIHJlYWRSZWdleHAoc3RyZWFtKSB7CisgICAgdmFyIGVzY2FwZWQgPSBm
YWxzZSwgbmV4dCwgaW5TZXQgPSBmYWxzZTsKICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4
dCgpKSAhPSBudWxsKSB7Ci0gICAgICBpZiAobmV4dCA9PSBlbmQgJiYgIWVzY2FwZWQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGlmICghZXNjYXBlZCkgeworICAgICAgICBpZiAobmV4
dCA9PSAiLyIgJiYgIWluU2V0KSByZXR1cm47CisgICAgICAgIGlmIChuZXh0ID09ICJbIikgaW5T
ZXQgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChpblNldCAmJiBuZXh0ID09ICJdIikgaW5TZXQg
PSBmYWxzZTsKKyAgICAgIH0KICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJc
XCI7CiAgICAgfQotICAgIHJldHVybiBlc2NhcGVkOwogICB9CiAKICAgLy8gVXNlZCBhcyBzY3Jh
dGNoIHZhcmlhYmxlcyB0byBjb21tdW5pY2F0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aG91dApAQCAt
ODMsNyArOTcsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlv
bihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIH0gZWxzZSBpZiAoL1tcW1xde31cKFwpLDtc
OlwuXS8udGVzdChjaCkpIHsKICAgICAgIHJldHVybiByZXQoY2gpOwogICAgIH0gZWxzZSBpZiAo
Y2ggPT0gIj0iICYmIHN0cmVhbS5lYXQoIj4iKSkgewotICAgICAgcmV0dXJuIHJldCgiPT4iKTsK
KyAgICAgIHJldHVybiByZXQoIj0+IiwgIm9wZXJhdG9yIik7CiAgICAgfSBlbHNlIGlmIChjaCA9
PSAiMCIgJiYgc3RyZWFtLmVhdCgveC9pKSkgewogICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXGRh
LWZdL2kpOwogICAgICAgcmV0dXJuIHJldCgibnVtYmVyIiwgIm51bWJlciIpOwpAQCAtOTksMTIg
KzExMywxMiBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihj
b25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgICByZXR1cm4gcmV0KCJjb21tZW50IiwgImNv
bW1lbnQiKTsKICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGFzdFR5cGUgPT0gIm9wZXJhdG9yIiB8
fCBzdGF0ZS5sYXN0VHlwZSA9PSAia2V5d29yZCBjIiB8fAogICAgICAgICAgICAgICAgc3RhdGUu
bGFzdFR5cGUgPT0gInNvZiIgfHwgL15bXFt7fVwoLDs6XSQvLnRlc3Qoc3RhdGUubGFzdFR5cGUp
KSB7Ci0gICAgICAgIG5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sICIvIik7CisgICAgICAgIHJl
YWRSZWdleHAoc3RyZWFtKTsKICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bZ2lteV0vKTsgLy8g
J3knIGlzICJzdGlja3kiIG9wdGlvbiBpbiBNb3ppbGxhCiAgICAgICAgIHJldHVybiByZXQoInJl
Z2V4cCIsICJzdHJpbmctMiIpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3RyZWFtLmVhdFdo
aWxlKGlzT3BlcmF0b3JDaGFyKTsKLSAgICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCBudWxs
LCBzdHJlYW0uY3VycmVudCgpKTsKKyAgICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCAib3Bl
cmF0b3IiLCBzdHJlYW0uY3VycmVudCgpKTsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGNoID09
ICJgIikgewogICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblF1YXNpOwpAQCAtMTE0LDcgKzEy
OCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICByZXR1cm4gcmV0KCJlcnJvciIsICJlcnJvciIpOwog
ICAgIH0gZWxzZSBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHsKICAgICAgIHN0cmVhbS5l
YXRXaGlsZShpc09wZXJhdG9yQ2hhcik7Ci0gICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsIG51
bGwsIHN0cmVhbS5jdXJyZW50KCkpOworICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCAib3Bl
cmF0b3IiLCBzdHJlYW0uY3VycmVudCgpKTsKICAgICB9IGVsc2UgewogICAgICAgc3RyZWFtLmVh
dFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCksIGtu
b3duID0ga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkgJiYga2V5d29yZHNbd29y
ZF07CkBAIC0xMjUsOCArMTM5LDE2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlw
dCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAKICAgZnVuY3Rpb24gdG9rZW5T
dHJpbmcocXVvdGUpIHsKICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAg
ICAgaWYgKCFuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCBxdW90ZSkpCisgICAgICB2YXIgZXNj
YXBlZCA9IGZhbHNlLCBuZXh0OworICAgICAgaWYgKGpzb25sZE1vZGUgJiYgc3RyZWFtLnBlZWso
KSA9PSAiQCIgJiYgc3RyZWFtLm1hdGNoKGlzSnNvbmxkS2V5d29yZCkpewogICAgICAgICBzdGF0
ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKKyAgICAgICAgcmV0dXJuIHJldCgianNvbmxkLWtleXdv
cmQiLCAibWV0YSIpOworICAgICAgfQorICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQo
KSkgIT0gbnVsbCkgeworICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgYnJl
YWs7CisgICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CisgICAgICB9
CisgICAgICBpZiAoIWVzY2FwZWQpIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAg
cmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwogICAgIH07CiAgIH0KQEAgLTE4OSw3ICsy
MTEsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25m
aWcsIHBhcnNlckNvbmZpZykgewogCiAgIC8vIFBhcnNlcgogCi0gIHZhciBhdG9taWNUeXBlcyA9
IHsiYXRvbSI6IHRydWUsICJudW1iZXIiOiB0cnVlLCAidmFyaWFibGUiOiB0cnVlLCAic3RyaW5n
IjogdHJ1ZSwgInJlZ2V4cCI6IHRydWUsICJ0aGlzIjogdHJ1ZX07CisgIHZhciBhdG9taWNUeXBl
cyA9IHsiYXRvbSI6IHRydWUsICJudW1iZXIiOiB0cnVlLCAidmFyaWFibGUiOiB0cnVlLCAic3Ry
aW5nIjogdHJ1ZSwgInJlZ2V4cCI6IHRydWUsICJ0aGlzIjogdHJ1ZSwgImpzb25sZC1rZXl3b3Jk
IjogdHJ1ZX07CiAKICAgZnVuY3Rpb24gSlNMZXhpY2FsKGluZGVudGVkLCBjb2x1bW4sIHR5cGUs
IGFsaWduLCBwcmV2LCBpbmZvKSB7CiAgICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkOwpAQCAt
Mjg5LDExICszMTEsMTIgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVu
Y3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgcG9wbGV4LmxleCA9IHRydWU7CiAKICAg
ZnVuY3Rpb24gZXhwZWN0KHdhbnRlZCkgewotICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7Cisg
ICAgZnVuY3Rpb24gZXhwKHR5cGUpIHsKICAgICAgIGlmICh0eXBlID09IHdhbnRlZCkgcmV0dXJu
IGNvbnQoKTsKICAgICAgIGVsc2UgaWYgKHdhbnRlZCA9PSAiOyIpIHJldHVybiBwYXNzKCk7Ci0g
ICAgICBlbHNlIHJldHVybiBjb250KGFyZ3VtZW50cy5jYWxsZWUpOworICAgICAgZWxzZSByZXR1
cm4gY29udChleHApOwogICAgIH07CisgICAgcmV0dXJuIGV4cDsKICAgfQogCiAgIGZ1bmN0aW9u
IHN0YXRlbWVudCh0eXBlLCB2YWx1ZSkgewpAQCAtMzAyLDkgKzMyNSwxMyBAQCBDb2RlTWlycm9y
LmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykg
ewogICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGIiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3Jt
IiksIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250
KHB1c2hsZXgoIn0iKSwgYmxvY2ssIHBvcGxleCk7CiAgICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1
cm4gY29udCgpOwotICAgIGlmICh0eXBlID09ICJpZiIpIHJldHVybiBjb250KHB1c2hsZXgoImZv
cm0iKSwgZXhwcmVzc2lvbiwgc3RhdGVtZW50LCBwb3BsZXgsIG1heWJlZWxzZSk7CisgICAgaWYg
KHR5cGUgPT0gImlmIikgeworICAgICAgaWYgKGN4LnN0YXRlLmxleGljYWwuaW5mbyA9PSAiZWxz
ZSIgJiYgY3guc3RhdGUuY2NbY3guc3RhdGUuY2MubGVuZ3RoIC0gMV0gPT0gcG9wbGV4KQorICAg
ICAgICBjeC5zdGF0ZS5jYy5wb3AoKSgpOworICAgICAgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9y
bSIpLCBleHByZXNzaW9uLCBzdGF0ZW1lbnQsIHBvcGxleCwgbWF5YmVlbHNlKTsKKyAgICB9CiAg
ICAgaWYgKHR5cGUgPT0gImZ1bmN0aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOwotICAg
IGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGZvcnNwZWMs
IHBvcGxleCwgc3RhdGVtZW50LCBwb3BsZXgpOworICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1
cm4gY29udChwdXNobGV4KCJmb3JtIiksIGZvcnNwZWMsIHN0YXRlbWVudCwgcG9wbGV4KTsKICAg
ICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSByZXR1cm4gY29udChwdXNobGV4KCJzdGF0IiksIG1h
eWJlbGFiZWwpOwogICAgIGlmICh0eXBlID09ICJzd2l0Y2giKSByZXR1cm4gY29udChwdXNobGV4
KCJmb3JtIiksIGV4cHJlc3Npb24sIHB1c2hsZXgoIn0iLCAic3dpdGNoIiksIGV4cGVjdCgieyIp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgcG9wbGV4LCBw
b3BsZXgpOwpAQCAtMzI3LDE4ICszNTQsMTggQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZh
c2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgZnVuY3Rpb24gZXhw
cmVzc2lvbklubmVyKHR5cGUsIG5vQ29tbWEpIHsKICAgICBpZiAoY3guc3RhdGUuZmF0QXJyb3dB
dCA9PSBjeC5zdHJlYW0uc3RhcnQpIHsKICAgICAgIHZhciBib2R5ID0gbm9Db21tYSA/IGFycm93
Qm9keU5vQ29tbWEgOiBhcnJvd0JvZHk7Ci0gICAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBj
b250KHB1c2hjb250ZXh0LCBjb21tYXNlcChwYXR0ZXJuLCAiKSIpLCBleHBlY3QoIj0+IiksIGJv
ZHksIHBvcGNvbnRleHQpOworICAgICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNo
Y29udGV4dCwgcHVzaGxleCgiKSIpLCBjb21tYXNlcChwYXR0ZXJuLCAiKSIpLCBwb3BsZXgsIGV4
cGVjdCgiPT4iKSwgYm9keSwgcG9wY29udGV4dCk7CiAgICAgICBlbHNlIGlmICh0eXBlID09ICJ2
YXJpYWJsZSIpIHJldHVybiBwYXNzKHB1c2hjb250ZXh0LCBwYXR0ZXJuLCBleHBlY3QoIj0+Iiks
IGJvZHksIHBvcGNvbnRleHQpOwogICAgIH0KIAogICAgIHZhciBtYXliZW9wID0gbm9Db21tYSA/
IG1heWJlb3BlcmF0b3JOb0NvbW1hIDogbWF5YmVvcGVyYXRvckNvbW1hOwogICAgIGlmIChhdG9t
aWNUeXBlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuIGNvbnQobWF5YmVvcCk7Ci0gICAg
aWYgKHR5cGUgPT0gImZ1bmN0aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOworICAgIGlm
ICh0eXBlID09ICJmdW5jdGlvbiIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmLCBtYXliZW9wKTsK
ICAgICBpZiAodHlwZSA9PSAia2V5d29yZCBjIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IG1heWJl
ZXhwcmVzc2lvbk5vQ29tbWEgOiBtYXliZWV4cHJlc3Npb24pOwogICAgIGlmICh0eXBlID09ICIo
IikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBtYXliZWV4cHJlc3Npb24sIGNvbXByZWhlbnNp
b24sIGV4cGVjdCgiKSIpLCBwb3BsZXgsIG1heWJlb3ApOwogICAgIGlmICh0eXBlID09ICJvcGVy
YXRvciIgfHwgdHlwZSA9PSAic3ByZWFkIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IGV4cHJlc3Np
b25Ob0NvbW1hIDogZXhwcmVzc2lvbik7Ci0gICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29u
dChwdXNobGV4KCJdIiksIGV4cHJlc3Npb25Ob0NvbW1hLCBtYXliZUFycmF5Q29tcHJlaGVuc2lv
biwgcG9wbGV4LCBtYXliZW9wKTsKLSAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KGNv
bW1hc2VwKG9ianByb3AsICJ9IiksIG1heWJlb3ApOworICAgIGlmICh0eXBlID09ICJbIikgcmV0
dXJuIGNvbnQocHVzaGxleCgiXSIpLCBhcnJheUxpdGVyYWwsIHBvcGxleCwgbWF5YmVvcCk7Cisg
ICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udENvbW1hc2VwKG9ianByb3AsICJ9IiwgbnVs
bCwgbWF5YmVvcCk7CiAgICAgcmV0dXJuIGNvbnQoKTsKICAgfQogICBmdW5jdGlvbiBtYXliZWV4
cHJlc3Npb24odHlwZSkgewpAQCAtMzY1LDEyICszOTIsMTEgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICB9
CiAgICAgaWYgKHR5cGUgPT0gInF1YXNpIikgeyBjeC5jYy5wdXNoKG1lKTsgcmV0dXJuIHF1YXNp
KHZhbHVlKTsgfQogICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuOwotICAgIGlmICh0eXBlID09
ICIoIikgcmV0dXJuIGNvbnQoY29tbWFzZXAoZXhwcmVzc2lvbk5vQ29tbWEsICIpIiwgImNhbGwi
KSwgbWUpOworICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnRDb21tYXNlcChleHByZXNz
aW9uTm9Db21tYSwgIikiLCAiY2FsbCIsIG1lKTsKICAgICBpZiAodHlwZSA9PSAiLiIpIHJldHVy
biBjb250KHByb3BlcnR5LCBtZSk7CiAgICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChw
dXNobGV4KCJdIiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KCJdIiksIHBvcGxleCwgbWUpOwog
ICB9CiAgIGZ1bmN0aW9uIHF1YXNpKHZhbHVlKSB7Ci0gICAgaWYgKCF2YWx1ZSkgZGVidWdnZXI7
CiAgICAgaWYgKHZhbHVlLnNsaWNlKHZhbHVlLmxlbmd0aCAtIDIpICE9ICIkeyIpIHJldHVybiBj
b250KCk7CiAgICAgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgY29udGludWVRdWFzaSk7CiAgIH0K
QEAgLTQwMyw3ICs0MjksNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBm
dW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgY3gubWFya2VkID0gInByb3Bl
cnR5IjsKICAgICAgIGlmICh2YWx1ZSA9PSAiZ2V0IiB8fCB2YWx1ZSA9PSAic2V0IikgcmV0dXJu
IGNvbnQoZ2V0dGVyU2V0dGVyKTsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIm51bWJlciIgfHwg
dHlwZSA9PSAic3RyaW5nIikgewotICAgICAgY3gubWFya2VkID0gdHlwZSArICIgcHJvcGVydHki
OworICAgICAgY3gubWFya2VkID0ganNvbmxkTW9kZSA/ICJwcm9wZXJ0eSIgOiAodHlwZSArICIg
cHJvcGVydHkiKTsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIlsiKSB7CiAgICAgICByZXR1cm4g
Y29udChleHByZXNzaW9uLCBleHBlY3QoIl0iKSwgYWZ0ZXJwcm9wKTsKICAgICB9CkBAIC00MTgs
NyArNDQ0LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodHlwZSA9PSAiOiIpIHJldHVybiBjb250
KGV4cHJlc3Npb25Ob0NvbW1hKTsKICAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBwYXNzKGZ1
bmN0aW9uZGVmKTsKICAgfQotICBmdW5jdGlvbiBjb21tYXNlcCh3aGF0LCBlbmQsIGluZm8pIHsK
KyAgZnVuY3Rpb24gY29tbWFzZXAod2hhdCwgZW5kKSB7CiAgICAgZnVuY3Rpb24gcHJvY2VlZCh0
eXBlKSB7CiAgICAgICBpZiAodHlwZSA9PSAiLCIpIHsKICAgICAgICAgdmFyIGxleCA9IGN4LnN0
YXRlLmxleGljYWw7CkBAIC00MzAsMTAgKzQ1NiwxNCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIH0KICAg
ICByZXR1cm4gZnVuY3Rpb24odHlwZSkgewogICAgICAgaWYgKHR5cGUgPT0gZW5kKSByZXR1cm4g
Y29udCgpOwotICAgICAgaWYgKGluZm8gPT09IGZhbHNlKSByZXR1cm4gcGFzcyh3aGF0LCBwcm9j
ZWVkKTsKLSAgICAgIHJldHVybiBwYXNzKHB1c2hsZXgoZW5kLCBpbmZvKSwgd2hhdCwgcHJvY2Vl
ZCwgcG9wbGV4KTsKKyAgICAgIHJldHVybiBwYXNzKHdoYXQsIHByb2NlZWQpOwogICAgIH07CiAg
IH0KKyAgZnVuY3Rpb24gY29udENvbW1hc2VwKHdoYXQsIGVuZCwgaW5mbykgeworICAgIGZvciAo
dmFyIGkgPSAzOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKQorICAgICAgY3guY2MucHVzaChh
cmd1bWVudHNbaV0pOworICAgIHJldHVybiBjb250KHB1c2hsZXgoZW5kLCBpbmZvKSwgY29tbWFz
ZXAod2hhdCwgZW5kKSwgcG9wbGV4KTsKKyAgfQogICBmdW5jdGlvbiBibG9jayh0eXBlKSB7CiAg
ICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgIHJldHVybiBwYXNzKHN0YXRl
bWVudCwgYmxvY2spOwpAQCAtNDQ5LDggKzQ3OSw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgi
amF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIH0KICAgZnVu
Y3Rpb24gcGF0dGVybih0eXBlLCB2YWx1ZSkgewogICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIp
IHsgcmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udCgpOyB9Ci0gICAgaWYgKHR5cGUgPT0gIlsi
KSByZXR1cm4gY29udChjb21tYXNlcChwYXR0ZXJuLCAiXSIpKTsKLSAgICBpZiAodHlwZSA9PSAi
eyIpIHJldHVybiBjb250KGNvbW1hc2VwKHByb3BwYXR0ZXJuLCAifSIpKTsKKyAgICBpZiAodHlw
ZSA9PSAiWyIpIHJldHVybiBjb250Q29tbWFzZXAocGF0dGVybiwgIl0iKTsKKyAgICBpZiAodHlw
ZSA9PSAieyIpIHJldHVybiBjb250Q29tbWFzZXAocHJvcHBhdHRlcm4sICJ9Iik7CiAgIH0KICAg
ZnVuY3Rpb24gcHJvcHBhdHRlcm4odHlwZSwgdmFsdWUpIHsKICAgICBpZiAodHlwZSA9PSAidmFy
aWFibGUiICYmICFjeC5zdHJlYW0ubWF0Y2goL15ccyo6LywgZmFsc2UpKSB7CkBAIC00NjcsMTAg
KzQ5NywxMCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihj
b25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQo
dmFyZGVmKTsKICAgfQogICBmdW5jdGlvbiBtYXliZWVsc2UodHlwZSwgdmFsdWUpIHsKLSAgICBp
ZiAodHlwZSA9PSAia2V5d29yZCBiIiAmJiB2YWx1ZSA9PSAiZWxzZSIpIHJldHVybiBjb250KHB1
c2hsZXgoImZvcm0iKSwgc3RhdGVtZW50LCBwb3BsZXgpOworICAgIGlmICh0eXBlID09ICJrZXl3
b3JkIGIiICYmIHZhbHVlID09ICJlbHNlIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIsICJl
bHNlIiksIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgfQogICBmdW5jdGlvbiBmb3JzcGVjKHR5cGUp
IHsKLSAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgZm9yc3Bl
YzEsIGV4cGVjdCgiKSIpKTsKKyAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hs
ZXgoIikiKSwgZm9yc3BlYzEsIGV4cGVjdCgiKSIpLCBwb3BsZXgpOwogICB9CiAgIGZ1bmN0aW9u
IGZvcnNwZWMxKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAidmFyIikgcmV0dXJuIGNvbnQodmFy
ZGVmLCBleHBlY3QoIjsiKSwgZm9yc3BlYzIpOwpAQCAtNDkzLDcgKzUyMyw3IEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgIGZ1bmN0aW9uIGZ1bmN0aW9uZGVmKHR5cGUsIHZhbHVlKSB7CiAgICAgaWYgKHZhbHVl
ID09ICIqIikge2N4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYp
O30KICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4g
Y29udChmdW5jdGlvbmRlZik7fQotICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVz
aGNvbnRleHQsIGNvbW1hc2VwKGZ1bmFyZywgIikiKSwgc3RhdGVtZW50LCBwb3Bjb250ZXh0KTsK
KyAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBwdXNobGV4KCIp
IiksIGNvbW1hc2VwKGZ1bmFyZywgIikiKSwgcG9wbGV4LCBzdGF0ZW1lbnQsIHBvcGNvbnRleHQp
OwogICB9CiAgIGZ1bmN0aW9uIGZ1bmFyZyh0eXBlKSB7CiAgICAgaWYgKHR5cGUgPT0gInNwcmVh
ZCIpIHJldHVybiBjb250KGZ1bmFyZyk7CkBAIC01MDYsNyArNTM2LDcgQEAgQ29kZU1pcnJvci5k
ZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
ICAgICBpZiAodmFsdWUgPT0gImV4dGVuZHMiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAg
fQogICBmdW5jdGlvbiBvYmpsaXQodHlwZSkgewotICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJu
IGNvbnQoY29tbWFzZXAob2JqcHJvcCwgIn0iKSk7CisgICAgaWYgKHR5cGUgPT0gInsiKSByZXR1
cm4gY29udENvbW1hc2VwKG9ianByb3AsICJ9Iik7CiAgIH0KICAgZnVuY3Rpb24gYWZ0ZXJNb2R1
bGUodHlwZSwgdmFsdWUpIHsKICAgICBpZiAodHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGNvbnQo
c3RhdGVtZW50KTsKQEAgLTUyMiwxNyArNTUyLDIxIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgi
amF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgcmV0dXJu
IHBhc3MoaW1wb3J0U3BlYywgbWF5YmVGcm9tKTsKICAgfQogICBmdW5jdGlvbiBpbXBvcnRTcGVj
KHR5cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChjb21tYXNl
cChpbXBvcnRTcGVjLCAifSIpKTsKKyAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250Q29t
bWFzZXAoaW1wb3J0U3BlYywgIn0iKTsKICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSByZWdp
c3Rlcih2YWx1ZSk7CiAgICAgcmV0dXJuIGNvbnQoKTsKICAgfQogICBmdW5jdGlvbiBtYXliZUZy
b20oX3R5cGUsIHZhbHVlKSB7CiAgICAgaWYgKHZhbHVlID09ICJmcm9tIikgeyBjeC5tYXJrZWQg
PSAia2V5d29yZCI7IHJldHVybiBjb250KGV4cHJlc3Npb24pOyB9CiAgIH0KKyAgZnVuY3Rpb24g
YXJyYXlMaXRlcmFsKHR5cGUpIHsKKyAgICBpZiAodHlwZSA9PSAiXSIpIHJldHVybiBjb250KCk7
CisgICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEsIG1heWJlQXJyYXlDb21wcmVoZW5z
aW9uKTsKKyAgfQogICBmdW5jdGlvbiBtYXliZUFycmF5Q29tcHJlaGVuc2lvbih0eXBlKSB7Ci0g
ICAgaWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBwYXNzKGNvbXByZWhlbnNpb24pOwotICAgIGlm
ICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQoY29tbWFzZXAoZXhwcmVzc2lvbk5vQ29tbWEsICJd
IiwgZmFsc2UpKTsKLSAgICByZXR1cm4gcGFzcyhjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwg
Il0iLCBmYWxzZSkpOworICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gcGFzcyhjb21wcmVo
ZW5zaW9uLCBleHBlY3QoIl0iKSk7CisgICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udChj
b21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIl0iKSk7CisgICAgcmV0dXJuIHBhc3MoY29tbWFz
ZXAoZXhwcmVzc2lvbk5vQ29tbWEsICJdIikpOwogICB9CiAgIGZ1bmN0aW9uIGNvbXByZWhlbnNp
b24odHlwZSkgewogICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gY29udChmb3JzcGVjLCBj
b21wcmVoZW5zaW9uKTsKQEAgLTU1Miw3ICs1ODYsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgICBj
b250ZXh0OiBwYXJzZXJDb25maWcubG9jYWxWYXJzICYmIHt2YXJzOiBwYXJzZXJDb25maWcubG9j
YWxWYXJzfSwKICAgICAgICAgaW5kZW50ZWQ6IDAKICAgICAgIH07Ci0gICAgICBpZiAocGFyc2Vy
Q29uZmlnLmdsb2JhbFZhcnMpIHN0YXRlLmdsb2JhbFZhcnMgPSBwYXJzZXJDb25maWcuZ2xvYmFs
VmFyczsKKyAgICAgIGlmIChwYXJzZXJDb25maWcuZ2xvYmFsVmFycyAmJiB0eXBlb2YgcGFyc2Vy
Q29uZmlnLmdsb2JhbFZhcnMgPT0gIm9iamVjdCIpCisgICAgICAgIHN0YXRlLmdsb2JhbFZhcnMg
PSBwYXJzZXJDb25maWcuZ2xvYmFsVmFyczsKICAgICAgIHJldHVybiBzdGF0ZTsKICAgICB9LAog
CkBAIC01NzUsNyArNjEwLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0Iiwg
ZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgIGlmIChzdGF0ZS50b2tlbml6
ZSAhPSB0b2tlbkJhc2UpIHJldHVybiAwOwogICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRl
ciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBsZXhpY2FsID0gc3RhdGUubGV4aWNhbDsKICAgICAg
IC8vIEtsdWRnZSB0byBwcmV2ZW50ICdtYXliZWxzZScgZnJvbSBibG9ja2luZyBsZXhpY2FsIHNj
b3BlIHBvcHMKLSAgICAgIGZvciAodmFyIGkgPSBzdGF0ZS5jYy5sZW5ndGggLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgaWYgKCEvXlxzKmVsc2VcYi8udGVzdCh0ZXh0QWZ0ZXIpKSBmb3IgKHZh
ciBpID0gc3RhdGUuY2MubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgdmFyIGMg
PSBzdGF0ZS5jY1tpXTsKICAgICAgICAgaWYgKGMgPT0gcG9wbGV4KSBsZXhpY2FsID0gbGV4aWNh
bC5wcmV2OwogICAgICAgICBlbHNlIGlmIChjICE9IG1heWJlZWxzZSkgYnJlYWs7CkBAIC02MDMs
NiArNjM4LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBmb2xkOiAiYnJhY2UiLAogCiAgICAgaGVscGVy
VHlwZToganNvbk1vZGUgPyAianNvbiIgOiAiamF2YXNjcmlwdCIsCisgICAganNvbmxkTW9kZTog
anNvbmxkTW9kZSwKICAgICBqc29uTW9kZToganNvbk1vZGUKICAgfTsKIH0pOwpAQCAtNjEzLDUg
KzY0OSw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24vamF2YXNjcmlwdCIs
ICJqYXZhc2NyaXB0Iik7CiBDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL2VjbWFz
Y3JpcHQiLCAiamF2YXNjcmlwdCIpOwogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlv
bi9qc29uIiwge25hbWU6ICJqYXZhc2NyaXB0IiwganNvbjogdHJ1ZX0pOwogQ29kZU1pcnJvci5k
ZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWpzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29u
OiB0cnVlfSk7CitDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL2xkK2pzb24iLCB7
bmFtZTogImphdmFzY3JpcHQiLCBqc29ubGQ6IHRydWV9KTsKIENvZGVNaXJyb3IuZGVmaW5lTUlN
RSgidGV4dC90eXBlc2NyaXB0IiwgeyBuYW1lOiAiamF2YXNjcmlwdCIsIHR5cGVzY3JpcHQ6IHRy
dWUgfSk7CiBDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3R5cGVzY3JpcHQiLCB7
IG5hbWU6ICJqYXZhc2NyaXB0IiwgdHlwZXNjcmlwdDogdHJ1ZSB9KTsKKworfSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWly
cm9yL2Nsb2p1cmUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL2Nsb2p1cmUuanMKaW5kZXggZWUyMmExMi4uM2I1OTZhZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9jbG9qdXJlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvanVyZS5qcwpAQCAtMiwxMCArMiwyMiBAQAogICogQXV0
aG9yOiBIYW5zIEVuZ2VsCiAgKiBCcmFuY2hlZCBmcm9tIENvZGVNaXJyb3IncyBTY2hlbWUgbW9k
ZSAoYnkgS29oIFppIEhhbiwgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgS29oIFppIENodW4p
CiAgKi8KLUNvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY2xvanVyZSIsIGZ1bmN0aW9uICgpIHsKKwor
KGZ1bmN0aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgdHlw
ZW9mIG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKKyAgICBtb2QocmVxdWlyZSgiLi4v
Li4vbGliL2NvZGVtaXJyb3IiKSk7CisgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0
aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAgICBkZWZpbmUoWyIuLi8uLi9saWIvY29kZW1p
cnJvciJdLCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52CisgICAgbW9kKENvZGVN
aXJyb3IpOworfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgeworInVzZSBzdHJpY3QiOworCitDb2Rl
TWlycm9yLmRlZmluZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgIHZh
ciBCVUlMVElOID0gImJ1aWx0aW4iLCBDT01NRU5UID0gImNvbW1lbnQiLCBTVFJJTkcgPSAic3Ry
aW5nIiwgQ0hBUkFDVEVSID0gInN0cmluZy0yIiwKICAgICAgICAgQVRPTSA9ICJhdG9tIiwgTlVN
QkVSID0gIm51bWJlciIsIEJSQUNLRVQgPSAiYnJhY2tldCIsIEtFWVdPUkQgPSAia2V5d29yZCI7
Ci0gICAgdmFyIElOREVOVF9XT1JEX1NLSVAgPSAyOworICAgIHZhciBJTkRFTlRfV09SRF9TS0lQ
ID0gb3B0aW9ucy5pbmRlbnRVbml0IHx8IDI7CisgICAgdmFyIE5PUk1BTF9JTkRFTlRfVU5JVCA9
IG9wdGlvbnMuaW5kZW50VW5pdCB8fCAyOwogCiAgICAgZnVuY3Rpb24gbWFrZUtleXdvcmRzKHN0
cikgewogICAgICAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7CkBAIC00
NCw3ICs1Niw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY2xvanVyZSIsIGZ1bmN0aW9uICgp
IHsKICAgICAgICAgc2lnbjogL1srLV0vLAogICAgICAgICBleHBvbmVudDogL2UvaSwKICAgICAg
ICAga2V5d29yZF9jaGFyOiAvW15cc1woXFtcO1wpXF1dLywKLSAgICAgICAgc3ltYm9sOiAvW1x3
KishXC1cLl8/OlwvXS8KKyAgICAgICAgc3ltYm9sOiAvW1x3KishXC1cLl8/Ojw+XC9dLwogICAg
IH07CiAKICAgICBmdW5jdGlvbiBzdGF0ZVN0YWNrKGluZGVudCwgdHlwZSwgcHJldikgeyAvLyBy
ZXByZXNlbnRzIGEgc3RhdGUgc3RhY2sgb2JqZWN0CkBAIC0xNzksOCArMTkxLDggQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJjbG9qdXJlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdHJlYW0uZW9sKCkgfHwgc3RyZWFtLnBlZWsoKSA9PSAiOyIpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90aGluZyBzaWduaWZpY2FudCBhZnRlcgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXN0YXJ0IGluZGVudGF0aW9uIDEg
c3BhY2UgYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaFN0YWNrKHN0
YXRlLCBpbmRlbnRUZW1wICsgMSwgY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSByZXN0YXJ0IGluZGVudGF0aW9uIHRoZSB1c2VyIGRlZmluZWQgc3BhY2VzIGFmdGVy
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50
VGVtcCArIE5PUk1BTF9JTkRFTlRfVU5JVCwgY2gpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhz
dGF0ZSwgaW5kZW50VGVtcCArIHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoLCBjaCk7IC8vIGVsc2Ug
d2UgbWF0Y2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMjIsMyArMjM0LDUg
QEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjbG9qdXJlIiwgZnVuY3Rpb24gKCkgewogfSk7CiAK
IENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWNsb2p1cmUiLCAiY2xvanVyZSIpOworCit9
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3IvY2xvc2VicmFja2V0cy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvc2VicmFja2V0cy5qcwppbmRleCA4
ODcxOGI3Li4zY2VhODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb3NlYnJhY2tldHMuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9zZWJy
YWNrZXRzLmpzCkBAIC0xLDggKzEsMTcgQEAKLShmdW5jdGlvbigpIHsKKyhmdW5jdGlvbihtb2Qp
IHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0g
Im9iamVjdCIpIC8vIENvbW1vbkpTCisgICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWly
cm9yIikpOworICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5l
LmFtZCkgLy8gQU1ECisgICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsK
KyAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudgorICAgIG1vZChDb2RlTWlycm9yKTsKK30pKGZ1
bmN0aW9uKENvZGVNaXJyb3IpIHsKICAgdmFyIERFRkFVTFRfQlJBQ0tFVFMgPSAiKClbXXt9Jydc
IlwiIjsKICAgdmFyIERFRkFVTFRfRVhQTE9ERV9PTl9FTlRFUiA9ICJbXXt9IjsKICAgdmFyIFNQ
QUNFX0NIQVJfUkVHRVggPSAvXHMvOwogCisgIHZhciBQb3MgPSBDb2RlTWlycm9yLlBvczsKKwog
ICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbigiYXV0b0Nsb3NlQnJhY2tldHMiLCBmYWxzZSwgZnVu
Y3Rpb24oY20sIHZhbCwgb2xkKSB7CiAgICAgaWYgKG9sZCAhPSBDb2RlTWlycm9yLkluaXQgJiYg
b2xkKQogICAgICAgY20ucmVtb3ZlS2V5TWFwKCJhdXRvQ2xvc2VCcmFja2V0cyIpOwpAQCAtMTks
OCArMjgsOCBAQAogICB9KTsKIAogICBmdW5jdGlvbiBjaGFyc0Fyb3VuZChjbSwgcG9zKSB7Ci0g
ICAgdmFyIHN0ciA9IGNtLmdldFJhbmdlKENvZGVNaXJyb3IuUG9zKHBvcy5saW5lLCBwb3MuY2gg
LSAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZU1pcnJvci5Qb3MocG9zLmxpbmUs
IHBvcy5jaCArIDEpKTsKKyAgICB2YXIgc3RyID0gY20uZ2V0UmFuZ2UoUG9zKHBvcy5saW5lLCBw
b3MuY2ggLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zKHBvcy5saW5lLCBwb3Mu
Y2ggKyAxKSk7CiAgICAgcmV0dXJuIHN0ci5sZW5ndGggPT0gMiA/IHN0ciA6IG51bGw7CiAgIH0K
IApAQCAtMjgsNTUgKzM3LDEwNCBAQAogICAgIHZhciBtYXAgPSB7CiAgICAgICBuYW1lIDogImF1
dG9DbG9zZUJyYWNrZXRzIiwKICAgICAgIEJhY2tzcGFjZTogZnVuY3Rpb24oY20pIHsKLSAgICAg
ICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0g
ICAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgYXJvdW5kID0gY2hhcnNBcm91bmQoY20s
IGN1cik7Ci0gICAgICAgIGlmIChhcm91bmQgJiYgcGFpcnMuaW5kZXhPZihhcm91bmQpICUgMiA9
PSAwKQotICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgQ29kZU1pcnJvci5Qb3MoY3VyLmxp
bmUsIGN1ci5jaCAtIDEpLCBDb2RlTWlycm9yLlBvcyhjdXIubGluZSwgY3VyLmNoICsgMSkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgICAg
aWYgKGNtLmdldE9wdGlvbigiZGlzYWJsZUlucHV0IikpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7
CisgICAgICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpOworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIGlmICghcmFu
Z2VzW2ldLmVtcHR5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAgICAgICAgdmFyIGFy
b3VuZCA9IGNoYXJzQXJvdW5kKGNtLCByYW5nZXNbaV0uaGVhZCk7CisgICAgICAgICAgaWYgKCFh
cm91bmQgfHwgcGFpcnMuaW5kZXhPZihhcm91bmQpICUgMiAhPSAwKSByZXR1cm4gQ29kZU1pcnJv
ci5QYXNzOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoIC0g
MTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICB2YXIgY3VyID0gcmFuZ2VzW2ldLmhlYWQ7Cisg
ICAgICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpLCBQ
b3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpKTsKKyAgICAgICAgfQogICAgICAgfQogICAgIH07CiAg
ICAgdmFyIGNsb3NpbmdCcmFja2V0cyA9ICIiOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFp
cnMubGVuZ3RoOyBpICs9IDIpIChmdW5jdGlvbihsZWZ0LCByaWdodCkgewogICAgICAgaWYgKGxl
ZnQgIT0gcmlnaHQpIGNsb3NpbmdCcmFja2V0cyArPSByaWdodDsKLSAgICAgIGZ1bmN0aW9uIHN1
cnJvdW5kKGNtKSB7Ci0gICAgICAgIHZhciBzZWxlY3Rpb24gPSBjbS5nZXRTZWxlY3Rpb24oKTsK
LSAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihsZWZ0ICsgc2VsZWN0aW9uICsgcmlnaHQpOwot
ICAgICAgfQotICAgICAgZnVuY3Rpb24gbWF5YmVPdmVyd3JpdGUoY20pIHsKLSAgICAgICAgdmFy
IGN1ciA9IGNtLmdldEN1cnNvcigpLCBhaGVhZCA9IGNtLmdldFJhbmdlKGN1ciwgQ29kZU1pcnJv
ci5Qb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpKTsKLSAgICAgICAgaWYgKGFoZWFkICE9IHJpZ2h0
IHx8IGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAg
ICAgIGVsc2UgY20uZXhlY0NvbW1hbmQoImdvQ2hhclJpZ2h0Iik7Ci0gICAgICB9CiAgICAgICBt
YXBbIiciICsgbGVmdCArICInIl0gPSBmdW5jdGlvbihjbSkgewotICAgICAgICBpZiAobGVmdCA9
PSAiJyIgJiYgY20uZ2V0VG9rZW5BdChjbS5nZXRDdXJzb3IoKSkudHlwZSA9PSAiY29tbWVudCIp
Ci0gICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKLSAgICAgICAgaWYgKGNtLnNvbWV0
aGluZ1NlbGVjdGVkKCkpIHJldHVybiBzdXJyb3VuZChjbSk7Ci0gICAgICAgIGlmIChsZWZ0ID09
IHJpZ2h0ICYmIG1heWJlT3ZlcndyaXRlKGNtKSAhPSBDb2RlTWlycm9yLlBhc3MpIHJldHVybjsK
LSAgICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBhaGVhZCA9IENvZGVNaXJyb3IuUG9z
KGN1ci5saW5lLCBjdXIuY2ggKyAxKTsKLSAgICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKGN1
ci5saW5lKSwgbmV4dENoYXIgPSBsaW5lLmNoYXJBdChjdXIuY2gpLCBjdXJDaGFyID0gY3VyLmNo
ID4gMCA/IGxpbmUuY2hhckF0KGN1ci5jaCAtIDEpIDogIiI7Ci0gICAgICAgIGlmIChsZWZ0ID09
IHJpZ2h0ICYmIENvZGVNaXJyb3IuaXNXb3JkQ2hhcihjdXJDaGFyKSkKLSAgICAgICAgICByZXR1
cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAgICBpZiAobGluZS5sZW5ndGggPT0gY3VyLmNoIHx8
IGNsb3NpbmdCcmFja2V0cy5pbmRleE9mKG5leHRDaGFyKSA+PSAwIHx8IFNQQUNFX0NIQVJfUkVH
RVgudGVzdChuZXh0Q2hhcikpCi0gICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihsZWZ0ICsg
cmlnaHQsIHtoZWFkOiBhaGVhZCwgYW5jaG9yOiBhaGVhZH0pOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgICAgaWYgKGNtLmdldE9wdGlvbigi
ZGlzYWJsZUlucHV0IikpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAgICAgIHZhciByYW5n
ZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCB0eXBlLCBuZXh0OworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHZhciByYW5nZSA9IHJh
bmdlc1tpXSwgY3VyID0gcmFuZ2UuaGVhZCwgY3VyVHlwZTsKKyAgICAgICAgICBpZiAobGVmdCA9
PSAiJyIgJiYgY20uZ2V0VG9rZW5UeXBlQXQoY3VyKSA9PSAiY29tbWVudCIpCisgICAgICAgICAg
ICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAgICAgICAgIHZhciBuZXh0ID0gY20uZ2V0UmFu
Z2UoY3VyLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpKTsKKyAgICAgICAgICBpZiAoIXJhbmdl
LmVtcHR5KCkpCisgICAgICAgICAgICBjdXJUeXBlID0gInN1cnJvdW5kIjsKKyAgICAgICAgICBl
bHNlIGlmIChsZWZ0ID09IHJpZ2h0ICYmIG5leHQgPT0gcmlnaHQpIHsKKyAgICAgICAgICAgIGlm
IChjbS5nZXRSYW5nZShjdXIsIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMykpID09IGxlZnQgKyBs
ZWZ0ICsgbGVmdCkKKyAgICAgICAgICAgICAgY3VyVHlwZSA9ICJza2lwVGhyZWUiOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICBjdXJUeXBlID0gInNraXAiOworICAgICAgICAgIH0g
ZWxzZSBpZiAobGVmdCA9PSByaWdodCAmJiBjdXIuY2ggPiAxICYmCisgICAgICAgICAgICAgICAg
ICAgICBjbS5nZXRSYW5nZShQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDIpLCBjdXIpID09IGxlZnQg
KyBsZWZ0ICYmCisgICAgICAgICAgICAgICAgICAgICAoY3VyLmNoIDw9IDIgfHwgY20uZ2V0UmFu
Z2UoUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAzKSwgUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAyKSkg
IT0gbGVmdCkpCisgICAgICAgICAgICBjdXJUeXBlID0gImFkZEZvdXIiOworICAgICAgICAgIGVs
c2UgaWYgKGxlZnQgPT0gcmlnaHQgJiYgQ29kZU1pcnJvci5pc1dvcmRDaGFyKG5leHQpKQorICAg
ICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgICAgICBlbHNlIGlmIChjbS5n
ZXRMaW5lKGN1ci5saW5lKS5sZW5ndGggPT0gY3VyLmNoIHx8IGNsb3NpbmdCcmFja2V0cy5pbmRl
eE9mKG5leHQpID49IDAgfHwgU1BBQ0VfQ0hBUl9SRUdFWC50ZXN0KG5leHQpKQorICAgICAgICAg
ICAgY3VyVHlwZSA9ICJib3RoIjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4g
Q29kZU1pcnJvci5QYXNzOworICAgICAgICAgIGlmICghdHlwZSkgdHlwZSA9IGN1clR5cGU7Cisg
ICAgICAgICAgZWxzZSBpZiAodHlwZSAhPSBjdXJUeXBlKSByZXR1cm4gQ29kZU1pcnJvci5QYXNz
OworICAgICAgICB9CisKKyAgICAgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgeworICAgICAg
ICAgIGlmICh0eXBlID09ICJza2lwIikgeworICAgICAgICAgICAgY20uZXhlY0NvbW1hbmQoImdv
Q2hhclJpZ2h0Iik7CisgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICJza2lwVGhyZWUiKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgICAgICAg
Y20uZXhlY0NvbW1hbmQoImdvQ2hhclJpZ2h0Iik7CisgICAgICAgICAgfSBlbHNlIGlmICh0eXBl
ID09ICJzdXJyb3VuZCIpIHsKKyAgICAgICAgICAgIHZhciBzZWxzID0gY20uZ2V0U2VsZWN0aW9u
cygpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxzLmxlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgICBzZWxzW2ldID0gbGVmdCArIHNlbHNbaV0gKyByaWdodDsKKyAgICAgICAg
ICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNlbHMsICJhcm91bmQiKTsKKyAgICAgICAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gImJvdGgiKSB7CisgICAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9u
KGxlZnQgKyByaWdodCwgbnVsbCk7CisgICAgICAgICAgICBjbS5leGVjQ29tbWFuZCgiZ29DaGFy
TGVmdCIpOworICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiYWRkRm91ciIpIHsKKyAgICAg
ICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24obGVmdCArIGxlZnQgKyBsZWZ0ICsgbGVmdCwgImJl
Zm9yZSIpOworICAgICAgICAgICAgY20uZXhlY0NvbW1hbmQoImdvQ2hhclJpZ2h0Iik7CisgICAg
ICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH07CisgICAgICBpZiAobGVmdCAhPSByaWdodCkg
bWFwWyInIiArIHJpZ2h0ICsgIiciXSA9IGZ1bmN0aW9uKGNtKSB7CisgICAgICAgIHZhciByYW5n
ZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJh
bmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHZhciByYW5nZSA9IHJhbmdlc1tpXTsKKyAg
ICAgICAgICBpZiAoIXJhbmdlLmVtcHR5KCkgfHwKKyAgICAgICAgICAgICAgY20uZ2V0UmFuZ2Uo
cmFuZ2UuaGVhZCwgUG9zKHJhbmdlLmhlYWQubGluZSwgcmFuZ2UuaGVhZC5jaCArIDEpKSAhPSBy
aWdodCkKKyAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAgICAgIH0KKyAg
ICAgICAgY20uZXhlY0NvbW1hbmQoImdvQ2hhclJpZ2h0Iik7CiAgICAgICB9OwotICAgICAgaWYg
KGxlZnQgIT0gcmlnaHQpIG1hcFsiJyIgKyByaWdodCArICInIl0gPSBtYXliZU92ZXJ3cml0ZTsK
ICAgICB9KShwYWlycy5jaGFyQXQoaSksIHBhaXJzLmNoYXJBdChpICsgMSkpOwogICAgIHJldHVy
biBtYXA7CiAgIH0KIAogICBmdW5jdGlvbiBidWlsZEV4cGxvZGVIYW5kbGVyKHBhaXJzKSB7CiAg
ICAgcmV0dXJuIGZ1bmN0aW9uKGNtKSB7Ci0gICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCks
IGFyb3VuZCA9IGNoYXJzQXJvdW5kKGNtLCBjdXIpOwotICAgICAgaWYgKCFhcm91bmQgfHwgcGFp
cnMuaW5kZXhPZihhcm91bmQpICUgMiAhPSAwKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAg
ICAgaWYgKGNtLmdldE9wdGlvbigiZGlzYWJsZUlucHV0IikpIHJldHVybiBDb2RlTWlycm9yLlBh
c3M7CisgICAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTsKKyAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICghcmFuZ2Vz
W2ldLmVtcHR5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAgICAgIHZhciBhcm91bmQg
PSBjaGFyc0Fyb3VuZChjbSwgcmFuZ2VzW2ldLmhlYWQpOworICAgICAgICBpZiAoIWFyb3VuZCB8
fCBwYWlycy5pbmRleE9mKGFyb3VuZCkgJSAyICE9IDApIHJldHVybiBDb2RlTWlycm9yLlBhc3M7
CisgICAgICB9CiAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBu
ZXdQb3MgPSBDb2RlTWlycm9yLlBvcyhjdXIubGluZSArIDEsIDApOwotICAgICAgICBjbS5yZXBs
YWNlU2VsZWN0aW9uKCJcblxuIiwge2FuY2hvcjogbmV3UG9zLCBoZWFkOiBuZXdQb3N9LCAiK2lu
cHV0Iik7Ci0gICAgICAgIGNtLmluZGVudExpbmUoY3VyLmxpbmUgKyAxLCBudWxsLCB0cnVlKTsK
LSAgICAgICAgY20uaW5kZW50TGluZShjdXIubGluZSArIDIsIG51bGwsIHRydWUpOworICAgICAg
ICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJcblxuIiwgbnVsbCk7CisgICAgICAgIGNtLmV4ZWNDb21t
YW5kKCJnb0NoYXJMZWZ0Iik7CisgICAgICAgIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgdmFyIGxpbmUgPSByYW5nZXNbaV0uaGVhZC5saW5lOworICAgICAgICAgIGNtLmluZGVu
dExpbmUobGluZSwgbnVsbCwgdHJ1ZSk7CisgICAgICAgICAgY20uaW5kZW50TGluZShsaW5lICsg
MSwgbnVsbCwgdHJ1ZSk7CisgICAgICAgIH0KICAgICAgIH0pOwogICAgIH07CiAgIH0KLX0pKCk7
Cit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzCmluZGV4IDIz
ZWFmNzQuLjA5OGEzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5jc3MKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9y
LmNzcwpAQCAtMzYsMTMgKzM2LDE0IEBACiAgIG1pbi13aWR0aDogMjBweDsKICAgdGV4dC1hbGln
bjogcmlnaHQ7CiAgIGNvbG9yOiAjOTk5OworICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94
OworICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKIH0KIAogLyogQ1VSU09SICovCiAKIC5Db2Rl
TWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQg
YmxhY2s7Ci0gIHotaW5kZXg6IDM7CiB9CiAvKiBTaG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJl
Y3Rpb25hbCB0ZXh0ICovCiAuQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJz
b3IgewpAQCAtNTIsMjQgKzUzLDI5IEBACiAgIHdpZHRoOiBhdXRvOwogICBib3JkZXI6IDA7CiAg
IGJhY2tncm91bmQ6ICM3ZTc7Ci0gIHotaW5kZXg6IDE7CiB9CiAvKiBDYW4gc3R5bGUgY3Vyc29y
IGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLS5Db2RlTWlycm9y
IGRpdi5Db2RlTWlycm9yLWN1cnNvci5Db2RlTWlycm9yLW92ZXJ3cml0ZSB7fQorZGl2LkNvZGVN
aXJyb3Itb3ZlcndyaXRlIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7fQogCiAuY20tdGFiIHsgZGlz
cGxheTogaW5saW5lLWJsb2NrOyB9CiAKKy5Db2RlTWlycm9yLXJ1bGVyIHsKKyAgYm9yZGVyLWxl
ZnQ6IDFweCBzb2xpZCAjY2NjOworICBwb3NpdGlvbjogYWJzb2x1dGU7Cit9CisKIC8qIERFRkFV
TFQgVEhFTUUgKi8KIAogLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7Y29sb3I6ICM3MDg7fQog
LmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7Y29sb3I6ICMyMTk7fQogLmNtLXMtZGVmYXVsdCAuY20t
bnVtYmVyIHtjb2xvcjogIzE2NDt9CiAuY20tcy1kZWZhdWx0IC5jbS1kZWYge2NvbG9yOiAjMDBm
O30KLS5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlIHtjb2xvcjogYmxhY2s7fQorLmNtLXMtZGVm
YXVsdCAuY20tdmFyaWFibGUsCisuY20tcy1kZWZhdWx0IC5jbS1wdW5jdHVhdGlvbiwKKy5jbS1z
LWRlZmF1bHQgLmNtLXByb3BlcnR5LAorLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3Ige30KIC5j
bS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjMDVhO30KIC5jbS1zLWRlZmF1bHQg
LmNtLXZhcmlhYmxlLTMge2NvbG9yOiAjMDg1O30KLS5jbS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5
IHtjb2xvcjogYmxhY2s7fQotLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3Ige2NvbG9yOiBibGFj
azt9CiAuY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHtjb2xvcjogI2E1MDt9CiAuY20tcy1kZWZh
dWx0IC5jbS1zdHJpbmcge2NvbG9yOiAjYTExO30KIC5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0y
IHtjb2xvcjogI2Y1MDt9CkBAIC0xMTQsNyArMTIwLDcgQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5D
b2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogICAvKiAzMHB4IGlz
IHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxi
YXJzICovCiAgIC8qIFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAgIG1h
cmdpbi1ib3R0b206IC0zMHB4OyBtYXJnaW4tcmlnaHQ6IC0zMHB4OwotICBwYWRkaW5nLWJvdHRv
bTogMzBweDsgcGFkZGluZy1yaWdodDogMzBweDsKKyAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAg
IGhlaWdodDogMTAwJTsKICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9t
IGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwogICBwb3NpdGlvbjogcmVsYXRpdmU7CkBAIC0x
MjMsNiArMTI5LDkgQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5n
YnJhY2tldCB7Y29sb3I6ICNmMjI7fQogfQogLkNvZGVNaXJyb3Itc2l6ZXIgewogICBwb3NpdGlv
bjogcmVsYXRpdmU7CisgIGJvcmRlci1yaWdodDogMzBweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAg
LW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgYm94LXNpemluZzogY29udGVudC1ib3g7
CiB9CiAKIC8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVk
cmF3IGR1cmluZyBzY3JvbGxpbmcKQEAgLTE5NywxNiArMjA2LDcgQEAgZGl2LkNvZGVNaXJyb3Ig
c3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogICB3aGl0
ZS1zcGFjZTogcHJlLXdyYXA7CiAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKIH0KLS5Db2RlTWlycm9y
LWNvZGUgcHJlIHsKLSAgYm9yZGVyLXJpZ2h0OiAzMHB4IHNvbGlkIHRyYW5zcGFyZW50OwotICB3
aWR0aDogLXdlYmtpdC1maXQtY29udGVudDsKLSAgd2lkdGg6IC1tb3otZml0LWNvbnRlbnQ7Ci0g
IHdpZHRoOiBmaXQtY29udGVudDsKLX0KLS5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3ItY29k
ZSBwcmUgewotICBib3JkZXItcmlnaHQ6IG5vbmU7Ci0gIHdpZHRoOiBhdXRvOwotfQorCiAuQ29k
ZU1pcnJvci1saW5lYmFja2dyb3VuZCB7CiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgbGVmdDog
MDsgcmlnaHQ6IDA7IHRvcDogMDsgYm90dG9tOiAwOwpAQCAtMjM2LDE2ICsyMzYsMjIgQEAgZGl2
LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNm
MjI7fQogCiAuQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICBwb3NpdGlvbjog
YWJzb2x1dGU7Ci0gIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgYm9yZGVyLXJpZ2h0OiBub25lOwog
ICB3aWR0aDogMDsKIH0KLS5Db2RlTWlycm9yLWZvY3VzZWQgZGl2LkNvZGVNaXJyb3ItY3Vyc29y
IHsKKworZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7CisgIHZpc2liaWxpdHk6IGhpZGRlbjsKKyAg
cG9zaXRpb246IHJlbGF0aXZlOworICB6LWluZGV4OiAxOworfQorLkNvZGVNaXJyb3ItZm9jdXNl
ZCBkaXYuQ29kZU1pcnJvci1jdXJzb3JzIHsKICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKIH0KIAog
LkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDlkOWQ5OyB9CiAuQ29kZU1pcnJv
ci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogI2Q3ZDRmMDsgfQor
LkNvZGVNaXJyb3ItY3Jvc3NoYWlyIHsgY3Vyc29yOiBjcm9zc2hhaXI7IH0KIAogLmNtLXNlYXJj
aGluZyB7CiAgIGJhY2tncm91bmQ6ICNmZmE7CkBAIC0yNTUsOSArMjYxLDEyIEBAIGRpdi5Db2Rl
TWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30K
IC8qIElFNyBoYWNrIHRvIHByZXZlbnQgaXQgZnJvbSByZXR1cm5pbmcgZnVubnkgb2Zmc2V0VG9w
cyBvbiB0aGUgc3BhbnMgKi8KIC5Db2RlTWlycm9yIHNwYW4geyAqdmVydGljYWwtYWxpZ246IHRl
eHQtYm90dG9tOyB9CiAKKy8qIFVzZWQgdG8gZm9yY2UgYSBib3JkZXIgbW9kZWwgZm9yIGEgbm9k
ZSAqLworLmNtLWZvcmNlLWJvcmRlciB7IHBhZGRpbmctcmlnaHQ6IC4xcHg7IH0KKwogQG1lZGlh
IHByaW50IHsKICAgLyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KLSAgLkNvZGVN
aXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKKyAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJy
b3ItY3Vyc29ycyB7CiAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICB9CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L2NvZGVtaXJyb3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanMKaW5kZXggNDYzNzNiZi4uMWE3MGNkNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29k
ZU1pcnJvci9jb2RlbWlycm9yLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qcwpAQCAtMSwyMyArMSwzNiBA
QAotLy8gQ29kZU1pcnJvciBpcyB0aGUgb25seSBnbG9iYWwgdmFyIHdlIGNsYWltCi13aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKKy8vIFRoaXMgaXMgQ29kZU1pcnJvciAoaHR0cDov
L2NvZGVtaXJyb3IubmV0KSwgYSBjb2RlIGVkaXRvcgorLy8gaW1wbGVtZW50ZWQgaW4gSmF2YVNj
cmlwdCBvbiB0b3Agb2YgdGhlIGJyb3dzZXIncyBET00uCisvLworLy8gWW91IGNhbiBmaW5kIHNv
bWUgdGVjaG5pY2FsIGJhY2tncm91bmQgZm9yIHNvbWUgb2YgdGhlIGNvZGUgYmVsb3cKKy8vIGF0
IGh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvYmxvZy8jY20taW50ZXJuYWxzIC4KKworKGZ1bmN0
aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgdHlwZW9mIG1v
ZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKKyAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZCgp
OworICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkg
Ly8gQU1ECisgICAgcmV0dXJuIGRlZmluZShbXSwgbW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBicm93
c2VyIGVudgorICAgIHRoaXMuQ29kZU1pcnJvciA9IG1vZCgpOworfSkoZnVuY3Rpb24oKSB7CiAg
ICJ1c2Ugc3RyaWN0IjsKIAogICAvLyBCUk9XU0VSIFNOSUZGSU5HCiAKLSAgLy8gQ3J1ZGUsIGJ1
dCBuZWNlc3NhcnkgdG8gaGFuZGxlIGEgbnVtYmVyIG9mIGhhcmQtdG8tZmVhdHVyZS1kZXRlY3QK
LSAgLy8gYnVncyBhbmQgYmVoYXZpb3IgZGlmZmVyZW5jZXMuCisgIC8vIEtsdWRnZXMgZm9yIGJ1
Z3MgYW5kIGJlaGF2aW9yIGRpZmZlcmVuY2VzIHRoYXQgY2FuJ3QgYmUgZmVhdHVyZQorICAvLyBk
ZXRlY3RlZCBhcmUgZW5hYmxlZCBiYXNlZCBvbiB1c2VyQWdlbnQgZXRjIHNuaWZmaW5nLgorCiAg
IHZhciBnZWNrbyA9IC9nZWNrb1wvXGQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICAv
LyBJRTExIGN1cnJlbnRseSBkb2Vzbid0IGNvdW50IGFzICdpZScsIHNpbmNlIGl0IGhhcyBhbG1v
c3Qgbm9uZSBvZgotICAvLyB0aGUgc2FtZSBidWdzIGFzIGVhcmxpZXIgdmVyc2lvbnMuIFVzZSBp
ZV9ndDEwIHRvIGhhbmRsZQotICAvLyBpbmNvbXBhdGliaWxpdGllcyBpbiB0aGF0IHZlcnNpb24u
Ci0gIHZhciBpZSA9IC9NU0lFIFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIg
aWVfbHQ4ID0gaWUgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50
LmRvY3VtZW50TW9kZSA8IDgpOwotICB2YXIgaWVfbHQ5ID0gaWUgJiYgKGRvY3VtZW50LmRvY3Vt
ZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDkpOwotICB2YXIgaWVf
Z3QxMCA9IC9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdl
bnQpOworICAvLyBpZV91cHRvTiBtZWFucyBJbnRlcm5ldCBFeHBsb3JlciB2ZXJzaW9uIE4gb3Ig
bG93ZXIKKyAgdmFyIGllX3VwdG8xMCA9IC9NU0lFIFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdl
bnQpOworICB2YXIgaWVfdXB0bzcgPSBpZV91cHRvMTAgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9k
ZSA9PSBudWxsIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDgpOworICB2YXIgaWVfdXB0bzgg
PSBpZV91cHRvMTAgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50
LmRvY3VtZW50TW9kZSA8IDkpOworICB2YXIgaWVfdXB0bzkgPSBpZV91cHRvMTAgJiYgKGRvY3Vt
ZW50LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDEwKTsK
KyAgdmFyIGllXzExdXAgPSAvVHJpZGVudFwvKFs3LTldfFxkezIsfSlcLi8udGVzdChuYXZpZ2F0
b3IudXNlckFnZW50KTsKKyAgdmFyIGllID0gaWVfdXB0bzEwIHx8IGllXzExdXA7CiAgIHZhciB3
ZWJraXQgPSAvV2ViS2l0XC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgIHZhciBxdHdl
YmtpdCA9IHdlYmtpdCAmJiAvUXRcL1xkK1wuXGQrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQp
OwogICB2YXIgY2hyb21lID0gL0Nocm9tZVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwot
ICB2YXIgb3BlcmEgPSAvT3BlcmFcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKKyAgdmFy
IHByZXN0byA9IC9PcGVyYVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogICB2YXIgc2Fm
YXJpID0gL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpOwogICB2YXIga2h0
bWwgPSAvS0hUTUxcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICAgdmFyIG1hY19nZUxp
b24gPSAvTWFjIE9TIFggMVxkXEQoWzctOV18XGRcZClcRC8udGVzdChuYXZpZ2F0b3IudXNlckFn
ZW50KTsKQEAgLTMwLDE1MSArNDMsMTgxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICB2YXIgbWFjID0gaW9zIHx8IC9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTsK
ICAgdmFyIHdpbmRvd3MgPSAvd2luL2kudGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pOwogCi0gIHZh
ciBvcGVyYV92ZXJzaW9uID0gb3BlcmEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVy
c2lvblwvKFxkKlwuXGQqKS8pOwotICBpZiAob3BlcmFfdmVyc2lvbikgb3BlcmFfdmVyc2lvbiA9
IE51bWJlcihvcGVyYV92ZXJzaW9uWzFdKTsKLSAgaWYgKG9wZXJhX3ZlcnNpb24gJiYgb3BlcmFf
dmVyc2lvbiA+PSAxNSkgeyBvcGVyYSA9IGZhbHNlOyB3ZWJraXQgPSB0cnVlOyB9CisgIHZhciBw
cmVzdG9fdmVyc2lvbiA9IHByZXN0byAmJiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9WZXJz
aW9uXC8oXGQqXC5cZCopLyk7CisgIGlmIChwcmVzdG9fdmVyc2lvbikgcHJlc3RvX3ZlcnNpb24g
PSBOdW1iZXIocHJlc3RvX3ZlcnNpb25bMV0pOworICBpZiAocHJlc3RvX3ZlcnNpb24gJiYgcHJl
c3RvX3ZlcnNpb24gPj0gMTUpIHsgcHJlc3RvID0gZmFsc2U7IHdlYmtpdCA9IHRydWU7IH0KICAg
Ly8gU29tZSBicm93c2VycyB1c2UgdGhlIHdyb25nIGV2ZW50IHByb3BlcnRpZXMgdG8gc2lnbmFs
IGNtZC9jdHJsIG9uIE9TIFgKLSAgdmFyIGZsaXBDdHJsQ21kID0gbWFjICYmIChxdHdlYmtpdCB8
fCBvcGVyYSAmJiAob3BlcmFfdmVyc2lvbiA9PSBudWxsIHx8IG9wZXJhX3ZlcnNpb24gPCAxMi4x
MSkpOwotICB2YXIgY2FwdHVyZU1pZGRsZUNsaWNrID0gZ2Vja28gfHwgKGllICYmICFpZV9sdDkp
OworICB2YXIgZmxpcEN0cmxDbWQgPSBtYWMgJiYgKHF0d2Via2l0IHx8IHByZXN0byAmJiAocHJl
c3RvX3ZlcnNpb24gPT0gbnVsbCB8fCBwcmVzdG9fdmVyc2lvbiA8IDEyLjExKSk7CisgIHZhciBj
YXB0dXJlUmlnaHRDbGljayA9IGdlY2tvIHx8IChpZSAmJiAhaWVfdXB0bzgpOwogCi0gIC8vIE9w
dGltaXplIHNvbWUgY29kZSB3aGVuIHRoZXNlIGZlYXR1cmVzIGFyZSBub3QgdXNlZAorICAvLyBP
cHRpbWl6ZSBzb21lIGNvZGUgd2hlbiB0aGVzZSBmZWF0dXJlcyBhcmUgbm90IHVzZWQuCiAgIHZh
ciBzYXdSZWFkT25seVNwYW5zID0gZmFsc2UsIHNhd0NvbGxhcHNlZFNwYW5zID0gZmFsc2U7CiAK
LSAgLy8gQ09OU1RSVUNUT1IKKyAgLy8gRURJVE9SIENPTlNUUlVDVE9SCisKKyAgLy8gQSBDb2Rl
TWlycm9yIGluc3RhbmNlIHJlcHJlc2VudHMgYW4gZWRpdG9yLiBUaGlzIGlzIHRoZSBvYmplY3QK
KyAgLy8gdGhhdCB1c2VyIGNvZGUgaXMgdXN1YWxseSBkZWFsaW5nIHdpdGguCiAKICAgZnVuY3Rp
b24gQ29kZU1pcnJvcihwbGFjZSwgb3B0aW9ucykgewogICAgIGlmICghKHRoaXMgaW5zdGFuY2Vv
ZiBDb2RlTWlycm9yKSkgcmV0dXJuIG5ldyBDb2RlTWlycm9yKHBsYWNlLCBvcHRpb25zKTsKIAog
ICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgIC8vIERldGVy
bWluZSBlZmZlY3RpdmUgb3B0aW9ucyBiYXNlZCBvbiBnaXZlbiB2YWx1ZXMgYW5kIGRlZmF1bHRz
LgotICAgIGZvciAodmFyIG9wdCBpbiBkZWZhdWx0cykgaWYgKCFvcHRpb25zLmhhc093blByb3Bl
cnR5KG9wdCkgJiYgZGVmYXVsdHMuaGFzT3duUHJvcGVydHkob3B0KSkKLSAgICAgIG9wdGlvbnNb
b3B0XSA9IGRlZmF1bHRzW29wdF07CisgICAgY29weU9iaihkZWZhdWx0cywgb3B0aW9ucywgZmFs
c2UpOwogICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhvcHRpb25zKTsKIAotICAgIHZhciBk
b2NTdGFydCA9IHR5cGVvZiBvcHRpb25zLnZhbHVlID09ICJzdHJpbmciID8gMCA6IG9wdGlvbnMu
dmFsdWUuZmlyc3Q7Ci0gICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXkgPSBtYWtlRGlzcGxh
eShwbGFjZSwgZG9jU3RhcnQpOworICAgIHZhciBkb2MgPSBvcHRpb25zLnZhbHVlOworICAgIGlm
ICh0eXBlb2YgZG9jID09ICJzdHJpbmciKSBkb2MgPSBuZXcgRG9jKGRvYywgb3B0aW9ucy5tb2Rl
KTsKKyAgICB0aGlzLmRvYyA9IGRvYzsKKworICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5
ID0gbmV3IERpc3BsYXkocGxhY2UsIGRvYyk7CiAgICAgZGlzcGxheS53cmFwcGVyLkNvZGVNaXJy
b3IgPSB0aGlzOwogICAgIHVwZGF0ZUd1dHRlcnModGhpcyk7Ci0gICAgaWYgKG9wdGlvbnMuYXV0
b2ZvY3VzICYmICFtb2JpbGUpIGZvY3VzSW5wdXQodGhpcyk7Ci0KLSAgICB0aGlzLnN0YXRlID0g
e2tleU1hcHM6IFtdLAotICAgICAgICAgICAgICAgICAgb3ZlcmxheXM6IFtdLAotICAgICAgICAg
ICAgICAgICAgbW9kZUdlbjogMCwKLSAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZTogZmFsc2Us
IGZvY3VzZWQ6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgc3VwcHJlc3NFZGl0czogZmFsc2Us
IHBhc3RlSW5jb21pbmc6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdUZXh0OiBm
YWxzZSwKLSAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogbmV3IERlbGF5ZWQoKX07Ci0KICAg
ICB0aGVtZUNoYW5nZWQodGhpcyk7CiAgICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKQogICAg
ICAgdGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci13cmFwIjsK
KyAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkgZm9jdXNJbnB1dCh0aGlzKTsK
IAotICAgIHZhciBkb2MgPSBvcHRpb25zLnZhbHVlOwotICAgIGlmICh0eXBlb2YgZG9jID09ICJz
dHJpbmciKSBkb2MgPSBuZXcgRG9jKG9wdGlvbnMudmFsdWUsIG9wdGlvbnMubW9kZSk7Ci0gICAg
b3BlcmF0aW9uKHRoaXMsIGF0dGFjaERvYykodGhpcywgZG9jKTsKKyAgICB0aGlzLnN0YXRlID0g
eworICAgICAga2V5TWFwczogW10sICAvLyBzdG9yZXMgbWFwcyBhZGRlZCBieSBhZGRLZXlNYXAK
KyAgICAgIG92ZXJsYXlzOiBbXSwgLy8gaGlnaGxpZ2h0aW5nIG92ZXJsYXlzLCBhcyBhZGRlZCBi
eSBhZGRPdmVybGF5CisgICAgICBtb2RlR2VuOiAwLCAgIC8vIGJ1bXBlZCB3aGVuIG1vZGUvb3Zl
cmxheSBjaGFuZ2VzLCB1c2VkIHRvIGludmFsaWRhdGUgaGlnaGxpZ2h0aW5nIGluZm8KKyAgICAg
IG92ZXJ3cml0ZTogZmFsc2UsIGZvY3VzZWQ6IGZhbHNlLAorICAgICAgc3VwcHJlc3NFZGl0czog
ZmFsc2UsIC8vIHVzZWQgdG8gZGlzYWJsZSBlZGl0aW5nIGR1cmluZyBrZXkgaGFuZGxlcnMgd2hl
biBpbiByZWFkT25seSBtb2RlCisgICAgICBwYXN0ZUluY29taW5nOiBmYWxzZSwgY3V0SW5jb21p
bmc6IGZhbHNlLCAvLyBoZWxwIHJlY29nbml6ZSBwYXN0ZS9jdXQgZWRpdHMgaW4gcmVhZElucHV0
CisgICAgICBkcmFnZ2luZ1RleHQ6IGZhbHNlLAorICAgICAgaGlnaGxpZ2h0OiBuZXcgRGVsYXll
ZCgpIC8vIHN0b3JlcyBoaWdobGlnaHQgd29ya2VyIHRpbWVvdXQKKyAgICB9OwogCiAgICAgLy8g
T3ZlcnJpZGUgbWFnaWMgdGV4dGFyZWEgY29udGVudCByZXN0b3JlIHRoYXQgSUUgc29tZXRpbWVz
IGRvZXMKICAgICAvLyBvbiBvdXIgaGlkZGVuIHRleHRhcmVhIG9uIHJlbG9hZAotICAgIGlmIChp
ZSkgc2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQsIHRoaXMsIHRydWUpLCAyMCk7CisgICAgaWYg
KGllX3VwdG8xMCkgc2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQsIHRoaXMsIHRydWUpLCAyMCk7
CiAKICAgICByZWdpc3RlckV2ZW50SGFuZGxlcnModGhpcyk7Ci0gICAgLy8gSUUgdGhyb3dzIHVu
c3BlY2lmaWVkIGVycm9yIGluIGNlcnRhaW4gY2FzZXMsIHdoZW4KLSAgICAvLyB0cnlpbmcgdG8g
YWNjZXNzIGFjdGl2ZUVsZW1lbnQgYmVmb3JlIG9ubG9hZAotICAgIHZhciBoYXNGb2N1czsgdHJ5
IHsgaGFzRm9jdXMgPSAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBkaXNwbGF5LmlucHV0KTsg
fSBjYXRjaChlKSB7IH0KLSAgICBpZiAoaGFzRm9jdXMgfHwgKG9wdGlvbnMuYXV0b2ZvY3VzICYm
ICFtb2JpbGUpKSBzZXRUaW1lb3V0KGJpbmQob25Gb2N1cywgdGhpcyksIDIwKTsKLSAgICBlbHNl
IG9uQmx1cih0aGlzKTsKIAotICAgIG9wZXJhdGlvbih0aGlzLCBmdW5jdGlvbigpIHsKLSAgICAg
IGZvciAodmFyIG9wdCBpbiBvcHRpb25IYW5kbGVycykKLSAgICAgICAgaWYgKG9wdGlvbkhhbmRs
ZXJzLnByb3BlcnR5SXNFbnVtZXJhYmxlKG9wdCkpCi0gICAgICAgICAgb3B0aW9uSGFuZGxlcnNb
b3B0XSh0aGlzLCBvcHRpb25zW29wdF0sIEluaXQpOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBpbml0SG9va3MubGVuZ3RoOyArK2kpIGluaXRIb29rc1tpXSh0aGlzKTsKLSAgICB9KSgpOwor
ICAgIHZhciBjbSA9IHRoaXM7CisgICAgcnVuSW5PcCh0aGlzLCBmdW5jdGlvbigpIHsKKyAgICAg
IGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKKyAgICAgIGF0dGFjaERvYyhjbSwgZG9jKTsK
KworICAgICAgaWYgKChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSB8fCBhY3RpdmVFbHQo
KSA9PSBkaXNwbGF5LmlucHV0KQorICAgICAgICBzZXRUaW1lb3V0KGJpbmQob25Gb2N1cywgY20p
LCAyMCk7CisgICAgICBlbHNlCisgICAgICAgIG9uQmx1cihjbSk7CisKKyAgICAgIGZvciAodmFy
IG9wdCBpbiBvcHRpb25IYW5kbGVycykgaWYgKG9wdGlvbkhhbmRsZXJzLmhhc093blByb3BlcnR5
KG9wdCkpCisgICAgICAgIG9wdGlvbkhhbmRsZXJzW29wdF0oY20sIG9wdGlvbnNbb3B0XSwgSW5p
dCk7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRIb29rcy5sZW5ndGg7ICsraSkgaW5p
dEhvb2tzW2ldKGNtKTsKKyAgICB9KTsKICAgfQogCiAgIC8vIERJU1BMQVkgQ09OU1RSVUNUT1IK
IAotICBmdW5jdGlvbiBtYWtlRGlzcGxheShwbGFjZSwgZG9jU3RhcnQpIHsKLSAgICB2YXIgZCA9
IHt9OworICAvLyBUaGUgZGlzcGxheSBoYW5kbGVzIHRoZSBET00gaW50ZWdyYXRpb24sIGJvdGgg
Zm9yIGlucHV0IHJlYWRpbmcKKyAgLy8gYW5kIGNvbnRlbnQgZHJhd2luZy4gSXQgaG9sZHMgcmVm
ZXJlbmNlcyB0byBET00gbm9kZXMgYW5kCisgIC8vIGRpc3BsYXktcmVsYXRlZCBzdGF0ZS4KIAot
ICAgIHZhciBpbnB1dCA9IGQuaW5wdXQgPSBlbHQoInRleHRhcmVhIiwgbnVsbCwgbnVsbCwgInBv
c2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91
dGxpbmU6IG5vbmU7IGZvbnQtc2l6ZTogNHB4OyIpOworICBmdW5jdGlvbiBEaXNwbGF5KHBsYWNl
LCBkb2MpIHsKKyAgICB2YXIgZCA9IHRoaXM7CisKKyAgICAvLyBUaGUgc2VtaWhpZGRlbiB0ZXh0
YXJlYSB0aGF0IGlzIGZvY3VzZWQgd2hlbiB0aGUgZWRpdG9yIGlzCisgICAgLy8gZm9jdXNlZCwg
YW5kIHJlY2VpdmVzIGlucHV0LgorICAgIHZhciBpbnB1dCA9IGQuaW5wdXQgPSBlbHQoInRleHRh
cmVhIiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6
IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmUiKTsKKyAgICAvLyBUaGUgdGV4dGFyZWEg
aXMga2VwdCBwb3NpdGlvbmVkIG5lYXIgdGhlIGN1cnNvciB0byBwcmV2ZW50IHRoZQorICAgIC8v
IGZhY3QgdGhhdCBpdCdsbCBiZSBzY3JvbGxlZCBpbnRvIHZpZXcgb24gaW5wdXQgZnJvbSBzY3Jv
bGxpbmcKKyAgICAvLyBvdXIgZmFrZSBjdXJzb3Igb3V0IG9mIHZpZXcuIE9uIHdlYmtpdCwgd2hl
biB3cmFwPW9mZiwgcGFzdGUgaXMKKyAgICAvLyB2ZXJ5IHNsb3cuIFNvIG1ha2UgdGhlIGFyZWEg
d2lkZSBpbnN0ZWFkLgogICAgIGlmICh3ZWJraXQpIGlucHV0LnN0eWxlLndpZHRoID0gIjEwMDBw
eCI7CiAgICAgZWxzZSBpbnB1dC5zZXRBdHRyaWJ1dGUoIndyYXAiLCAib2ZmIik7Ci0gICAgLy8g
aWYgYm9yZGVyOiAwOyAtLSBpT1MgZmFpbHMgdG8gb3BlbiBrZXlib2FyZCAoaXNzdWUgIzEyODcp
CisgICAgLy8gSWYgYm9yZGVyOiAwOyAtLSBpT1MgZmFpbHMgdG8gb3BlbiBrZXlib2FyZCAoaXNz
dWUgIzEyODcpCiAgICAgaWYgKGlvcykgaW5wdXQuc3R5bGUuYm9yZGVyID0gIjFweCBzb2xpZCBi
bGFjayI7CiAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsICJvZmYiKTsgaW5w
dXQuc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsICJvZmYiKTsgaW5wdXQuc2V0QXR0cmli
dXRlKCJzcGVsbGNoZWNrIiwgImZhbHNlIik7CiAKICAgICAvLyBXcmFwcyBhbmQgaGlkZXMgaW5w
dXQgdGV4dGFyZWEKICAgICBkLmlucHV0RGl2ID0gZWx0KCJkaXYiLCBbaW5wdXRdLCBudWxsLCAi
b3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6
IDBweDsiKTsKLSAgICAvLyBUaGUgYWN0dWFsIGZha2Ugc2Nyb2xsYmFycy4KLSAgICBkLnNjcm9s
bGJhckggPSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJoZWlnaHQ6IDFweCIp
XSwgIkNvZGVNaXJyb3ItaHNjcm9sbGJhciIpOwotICAgIGQuc2Nyb2xsYmFyViA9IGVsdCgiZGl2
IiwgW2VsdCgiZGl2IiwgbnVsbCwgbnVsbCwgIndpZHRoOiAxcHgiKV0sICJDb2RlTWlycm9yLXZz
Y3JvbGxiYXIiKTsKKyAgICAvLyBUaGUgZmFrZSBzY3JvbGxiYXIgZWxlbWVudHMuCisgICAgZC5z
Y3JvbGxiYXJIID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBudWxsLCBudWxsLCAiaGVpZ2h0OiAx
MDAlOyBtaW4taGVpZ2h0OiAxcHgiKV0sICJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKTsKKyAgICBk
LnNjcm9sbGJhclYgPSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJtaW4td2lk
dGg6IDFweCIpXSwgIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpOworICAgIC8vIENvdmVycyBib3R0
b20tcmlnaHQgc3F1YXJlIHdoZW4gYm90aCBzY3JvbGxiYXJzIGFyZSBwcmVzZW50LgogICAgIGQu
c2Nyb2xsYmFyRmlsbGVyID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1zY3JvbGxiYXIt
ZmlsbGVyIik7CisgICAgLy8gQ292ZXJzIGJvdHRvbSBvZiBndXR0ZXIgd2hlbiBjb3Zlckd1dHRl
ck5leHRUb1Njcm9sbGJhciBpcyBvbgorICAgIC8vIGFuZCBoIHNjcm9sbGJhciBpcyBwcmVzZW50
LgogICAgIGQuZ3V0dGVyRmlsbGVyID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1ndXR0
ZXItZmlsbGVyIik7Ci0gICAgLy8gRElWcyBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gYW5kIHRo
ZSBhY3R1YWwgY29kZQorICAgIC8vIFdpbGwgY29udGFpbiB0aGUgYWN0dWFsIGNvZGUsIHBvc2l0
aW9uZWQgdG8gY292ZXIgdGhlIHZpZXdwb3J0LgogICAgIGQubGluZURpdiA9IGVsdCgiZGl2Iiwg
bnVsbCwgIkNvZGVNaXJyb3ItY29kZSIpOworICAgIC8vIEVsZW1lbnRzIGFyZSBhZGRlZCB0byB0
aGVzZSB0byByZXByZXNlbnQgc2VsZWN0aW9uIGFuZCBjdXJzb3JzLgogICAgIGQuc2VsZWN0aW9u
RGl2ID0gZWx0KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4
OiAxIik7Ci0gICAgLy8gQmxpbmt5IGN1cnNvciwgYW5kIGVsZW1lbnQgdXNlZCB0byBlbnN1cmUg
Y3Vyc29yIGZpdHMgYXQgdGhlIGVuZCBvZiBhIGxpbmUKLSAgICBkLmN1cnNvciA9IGVsdCgiZGl2
IiwgIlx1MDBhMCIsICJDb2RlTWlycm9yLWN1cnNvciIpOwotICAgIC8vIFNlY29uZGFyeSBjdXJz
b3IsIHNob3duIHdoZW4gb24gYSAnanVtcCcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dAotICAgIGQu
b3RoZXJDdXJzb3IgPSBlbHQoImRpdiIsICJcdTAwYTAiLCAiQ29kZU1pcnJvci1jdXJzb3IgQ29k
ZU1pcnJvci1zZWNvbmRhcnljdXJzb3IiKTsKLSAgICAvLyBVc2VkIHRvIG1lYXN1cmUgdGV4dCBz
aXplCisgICAgZC5jdXJzb3JEaXYgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWN1cnNv
cnMiKTsKKyAgICAvLyBBIHZpc2liaWxpdHk6IGhpZGRlbiBlbGVtZW50IHVzZWQgdG8gZmluZCB0
aGUgc2l6ZSBvZiB0aGluZ3MuCiAgICAgZC5tZWFzdXJlID0gZWx0KCJkaXYiLCBudWxsLCAiQ29k
ZU1pcnJvci1tZWFzdXJlIik7CisgICAgLy8gV2hlbiBsaW5lcyBvdXRzaWRlIG9mIHRoZSB2aWV3
cG9ydCBhcmUgbWVhc3VyZWQsIHRoZXkgYXJlIGRyYXduIGluIHRoaXMuCisgICAgZC5saW5lTWVh
c3VyZSA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItbWVhc3VyZSIpOwogICAgIC8vIFdy
YXBzIGV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyB0byBleGlzdCBpbnNpZGUgdGhlIHZlcnRpY2FsbHkt
cGFkZGVkIGNvb3JkaW5hdGUgc3lzdGVtCi0gICAgZC5saW5lU3BhY2UgPSBlbHQoImRpdiIsIFtk
Lm1lYXN1cmUsIGQuc2VsZWN0aW9uRGl2LCBkLmxpbmVEaXYsIGQuY3Vyc29yLCBkLm90aGVyQ3Vy
c29yXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCAicG9zaXRpb246IHJlbGF0aXZl
OyBvdXRsaW5lOiBub25lIik7Ci0gICAgLy8gTW92ZWQgYXJvdW5kIGl0cyBwYXJlbnQgdG8gY292
ZXIgdmlzaWJsZSB2aWV3CisgICAgZC5saW5lU3BhY2UgPSBlbHQoImRpdiIsIFtkLm1lYXN1cmUs
IGQubGluZU1lYXN1cmUsIGQuc2VsZWN0aW9uRGl2LCBkLmN1cnNvckRpdiwgZC5saW5lRGl2XSwK
KyAgICAgICAgICAgICAgICAgICAgICBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyBvdXRsaW5l
OiBub25lIik7CisgICAgLy8gTW92ZWQgYXJvdW5kIGl0cyBwYXJlbnQgdG8gY292ZXIgdmlzaWJs
ZSB2aWV3LgogICAgIGQubW92ZXIgPSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIFtkLmxpbmVTcGFj
ZV0sICJDb2RlTWlycm9yLWxpbmVzIildLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlIik7Ci0g
ICAgLy8gU2V0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIHRleHQsIGNhdXNlcyBzY3JvbGxpbmcKKyAg
ICAvLyBTZXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgZG9jdW1lbnQsIGFsbG93aW5nIHNjcm9sbGlu
Zy4KICAgICBkLnNpemVyID0gZWx0KCJkaXYiLCBbZC5tb3Zlcl0sICJDb2RlTWlycm9yLXNpemVy
Iik7Ci0gICAgLy8gRCBpcyBuZWVkZWQgYmVjYXVzZSBiZWhhdmlvciBvZiBlbHRzIHdpdGggb3Zl
cmZsb3c6IGF1dG8gYW5kIHBhZGRpbmcgaXMgaW5jb25zaXN0ZW50IGFjcm9zcyBicm93c2Vycwor
ICAgIC8vIEJlaGF2aW9yIG9mIGVsdHMgd2l0aCBvdmVyZmxvdzogYXV0byBhbmQgcGFkZGluZyBp
cworICAgIC8vIGluY29uc2lzdGVudCBhY3Jvc3MgYnJvd3NlcnMuIFRoaXMgaXMgdXNlZCB0byBl
bnN1cmUgdGhlCisgICAgLy8gc2Nyb2xsYWJsZSBhcmVhIGlzIGJpZyBlbm91Z2guCiAgICAgZC5o
ZWlnaHRGb3JjZXIgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7
IGhlaWdodDogIiArIHNjcm9sbGVyQ3V0T2ZmICsgInB4OyB3aWR0aDogMXB4OyIpOwotICAgIC8v
IFdpbGwgY29udGFpbiB0aGUgZ3V0dGVycywgaWYgYW55CisgICAgLy8gV2lsbCBjb250YWluIHRo
ZSBndXR0ZXJzLCBpZiBhbnkuCiAgICAgZC5ndXR0ZXJzID0gZWx0KCJkaXYiLCBudWxsLCAiQ29k
ZU1pcnJvci1ndXR0ZXJzIik7CiAgICAgZC5saW5lR3V0dGVyID0gbnVsbDsKLSAgICAvLyBQcm92
aWRlcyBzY3JvbGxpbmcKKyAgICAvLyBBY3R1YWwgc2Nyb2xsYWJsZSBlbGVtZW50LgogICAgIGQu
c2Nyb2xsZXIgPSBlbHQoImRpdiIsIFtkLnNpemVyLCBkLmhlaWdodEZvcmNlciwgZC5ndXR0ZXJz
XSwgIkNvZGVNaXJyb3Itc2Nyb2xsIik7CiAgICAgZC5zY3JvbGxlci5zZXRBdHRyaWJ1dGUoInRh
YkluZGV4IiwgIi0xIik7CiAgICAgLy8gVGhlIGVsZW1lbnQgaW4gd2hpY2ggdGhlIGVkaXRvciBs
aXZlcy4KICAgICBkLndyYXBwZXIgPSBlbHQoImRpdiIsIFtkLmlucHV0RGl2LCBkLnNjcm9sbGJh
ckgsIGQuc2Nyb2xsYmFyViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNjcm9sbGJh
ckZpbGxlciwgZC5ndXR0ZXJGaWxsZXIsIGQuc2Nyb2xsZXJdLCAiQ29kZU1pcnJvciIpOwotICAg
IC8vIFdvcmsgYXJvdW5kIElFNyB6LWluZGV4IGJ1ZwotICAgIGlmIChpZV9sdDgpIHsgZC5ndXR0
ZXJzLnN0eWxlLnpJbmRleCA9IC0xOyBkLnNjcm9sbGVyLnN0eWxlLnBhZGRpbmdSaWdodCA9IDA7
IH0KLSAgICBpZiAocGxhY2UuYXBwZW5kQ2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKGQud3JhcHBl
cik7IGVsc2UgcGxhY2UoZC53cmFwcGVyKTsKIAorICAgIC8vIFdvcmsgYXJvdW5kIElFNyB6LWlu
ZGV4IGJ1ZyAobm90IHBlcmZlY3QsIGhlbmNlIElFNyBub3QgcmVhbGx5IGJlaW5nIHN1cHBvcnRl
ZCkKKyAgICBpZiAoaWVfdXB0bzcpIHsgZC5ndXR0ZXJzLnN0eWxlLnpJbmRleCA9IC0xOyBkLnNj
cm9sbGVyLnN0eWxlLnBhZGRpbmdSaWdodCA9IDA7IH0KICAgICAvLyBOZWVkZWQgdG8gaGlkZSBi
aWcgYmx1ZSBibGlua2luZyBjdXJzb3Igb24gTW9iaWxlIFNhZmFyaQogICAgIGlmIChpb3MpIGlu
cHV0LnN0eWxlLndpZHRoID0gIjBweCI7CiAgICAgaWYgKCF3ZWJraXQpIGQuc2Nyb2xsZXIuZHJh
Z2dhYmxlID0gdHJ1ZTsKICAgICAvLyBOZWVkZWQgdG8gaGFuZGxlIFRhYiBrZXkgaW4gS0hUTUwK
ICAgICBpZiAoa2h0bWwpIHsgZC5pbnB1dERpdi5zdHlsZS5oZWlnaHQgPSAiMXB4IjsgZC5pbnB1
dERpdi5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7IH0KICAgICAvLyBOZWVkIHRvIHNldCBh
IG1pbmltdW0gd2lkdGggdG8gc2VlIHRoZSBzY3JvbGxiYXIgb24gSUU3IChidXQgbXVzdCBub3Qg
c2V0IGl0IG9uIElFOCkuCi0gICAgZWxzZSBpZiAoaWVfbHQ4KSBkLnNjcm9sbGJhckguc3R5bGUu
bWluV2lkdGggPSBkLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGggPSAiMThweCI7Ci0KLSAgICAv
LyBDdXJyZW50IHZpc2libGUgcmFuZ2UgKG1heSBiZSBiaWdnZXIgdGhhbiB0aGUgdmlldyB3aW5k
b3cpLgotICAgIGQudmlld09mZnNldCA9IGQubGFzdFNpemVDID0gMDsKLSAgICBkLnNob3dpbmdG
cm9tID0gZC5zaG93aW5nVG8gPSBkb2NTdGFydDsKKyAgICBpZiAoaWVfdXB0bzcpIGQuc2Nyb2xs
YmFySC5zdHlsZS5taW5IZWlnaHQgPSBkLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGggPSAiMThw
eCI7CisKKyAgICBpZiAocGxhY2UuYXBwZW5kQ2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKGQud3Jh
cHBlcik7CisgICAgZWxzZSBwbGFjZShkLndyYXBwZXIpOworCisgICAgLy8gQ3VycmVudCByZW5k
ZXJlZCByYW5nZSAobWF5IGJlIGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuCisgICAgZC52
aWV3RnJvbSA9IGQudmlld1RvID0gZG9jLmZpcnN0OworICAgIC8vIEluZm9ybWF0aW9uIGFib3V0
IHRoZSByZW5kZXJlZCBsaW5lcy4KKyAgICBkLnZpZXcgPSBbXTsKKyAgICAvLyBIb2xkcyBpbmZv
IGFib3V0IGEgc2luZ2xlIHJlbmRlcmVkIGxpbmUgd2hlbiBpdCB3YXMgcmVuZGVyZWQKKyAgICAv
LyBmb3IgbWVhc3VyZW1lbnQsIHdoaWxlIG5vdCBpbiB2aWV3LgorICAgIGQuZXh0ZXJuYWxNZWFz
dXJlZCA9IG51bGw7CisgICAgLy8gRW1wdHkgc3BhY2UgKGluIHBpeGVscykgYWJvdmUgdGhlIHZp
ZXcKKyAgICBkLnZpZXdPZmZzZXQgPSAwOworICAgIGQubGFzdFNpemVDID0gMDsKKyAgICBkLnVw
ZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDsKIAogICAgIC8vIFVzZWQgdG8gb25seSByZXNpemUgdGhl
IGxpbmUgbnVtYmVyIGd1dHRlciB3aGVuIG5lY2Vzc2FyeSAod2hlbgogICAgIC8vIHRoZSBhbW91
bnQgb2YgbGluZXMgY3Jvc3NlcyBhIGJvdW5kYXJ5IHRoYXQgbWFrZXMgaXRzIHdpZHRoIGNoYW5n
ZSkKICAgICBkLmxpbmVOdW1XaWR0aCA9IGQubGluZU51bUlubmVyV2lkdGggPSBkLmxpbmVOdW1D
aGFycyA9IG51bGw7CiAgICAgLy8gU2VlIHJlYWRJbnB1dCBhbmQgcmVzZXRJbnB1dAogICAgIGQu
cHJldklucHV0ID0gIiI7Ci0gICAgLy8gU2V0IHRvIHRydWUgd2hlbiBhIG5vbi1ob3Jpem9udGFs
LXNjcm9sbGluZyB3aWRnZXQgaXMgYWRkZWQuIEFzCi0gICAgLy8gYW4gb3B0aW1pemF0aW9uLCB3
aWRnZXQgYWxpZ25pbmcgaXMgc2tpcHBlZCB3aGVuIGQgaXMgZmFsc2UuCisgICAgLy8gU2V0IHRv
IHRydWUgd2hlbiBhIG5vbi1ob3Jpem9udGFsLXNjcm9sbGluZyBsaW5lIHdpZGdldCBpcworICAg
IC8vIGFkZGVkLiBBcyBhbiBvcHRpbWl6YXRpb24sIGxpbmUgd2lkZ2V0IGFsaWduaW5nIGlzIHNr
aXBwZWQgd2hlbgorICAgIC8vIHRoaXMgaXMgZmFsc2UuCiAgICAgZC5hbGlnbldpZGdldHMgPSBm
YWxzZTsKLSAgICAvLyBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgd2UgY3VycmVudGx5IGV4
cGVjdCBpbnB1dCB0byBhcHBlYXIKLSAgICAvLyAoYWZ0ZXIgc29tZSBldmVudCBsaWtlICdrZXlw
cmVzcycgb3IgJ2lucHV0JykgYW5kIGFyZSBwb2xsaW5nCi0gICAgLy8gaW50ZW5zaXZlbHkuCisg
ICAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGV4cGVjdCBpbnB1dCB0byBhcHBl
YXIgcmVhbCBzb29uCisgICAgLy8gbm93IChhZnRlciBzb21lIGV2ZW50IGxpa2UgJ2tleXByZXNz
JyBvciAnaW5wdXQnKSBhbmQgYXJlCisgICAgLy8gcG9sbGluZyBpbnRlbnNpdmVseS4KICAgICBk
LnBvbGxpbmdGYXN0ID0gZmFsc2U7CiAgICAgLy8gU2VsZi1yZXNldHRpbmcgdGltZW91dCBmb3Ig
dGhlIHBvbGxlcgogICAgIGQucG9sbCA9IG5ldyBEZWxheWVkKCk7CiAKLSAgICBkLmNhY2hlZENo
YXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IG51bGw7Ci0gICAgZC5tZWFzdXJlTGluZUNh
Y2hlID0gW107Ci0gICAgZC5tZWFzdXJlTGluZUNhY2hlUG9zID0gMDsKKyAgICBkLmNhY2hlZENo
YXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQuY2FjaGVkUGFkZGluZ0ggPSBudWxsOwog
CiAgICAgLy8gVHJhY2tzIHdoZW4gcmVzZXRJbnB1dCBoYXMgcHVudGVkIHRvIGp1c3QgcHV0dGlu
ZyBhIHNob3J0Ci0gICAgLy8gc3RyaW5nIGluc3RlYWQgb2YgdGhlIChsYXJnZSkgc2VsZWN0aW9u
LgorICAgIC8vIHN0cmluZyBpbnRvIHRoZSB0ZXh0YXJlYSBpbnN0ZWFkIG9mIHRoZSBmdWxsIHNl
bGVjdGlvbi4KICAgICBkLmluYWNjdXJhdGVTZWxlY3Rpb24gPSBmYWxzZTsKIAogICAgIC8vIFRy
YWNrcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCBzbyB0aGF0IHRoZSBob3Jpem9udGFsIHNjcm9s
bGJhcgpAQCAtMTg2LDcgKzIyOSw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgIC8vIFVzZWQgZm9yIG1lYXN1cmluZyB3aGVlbCBzY3JvbGxpbmcgZ3JhbnVsYXJpdHkK
ICAgICBkLndoZWVsRFggPSBkLndoZWVsRFkgPSBkLndoZWVsU3RhcnRYID0gZC53aGVlbFN0YXJ0
WSA9IG51bGw7CiAKLSAgICByZXR1cm4gZDsKKyAgICAvLyBUcnVlIHdoZW4gc2hpZnQgaXMgaGVs
ZCBkb3duLgorICAgIGQuc2hpZnQgPSBmYWxzZTsKICAgfQogCiAgIC8vIFNUQVRFIFVQREFURVMK
QEAgLTE5NSw2ICsyMzksMTAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAK
ICAgZnVuY3Rpb24gbG9hZE1vZGUoY20pIHsKICAgICBjbS5kb2MubW9kZSA9IENvZGVNaXJyb3Iu
Z2V0TW9kZShjbS5vcHRpb25zLCBjbS5kb2MubW9kZU9wdGlvbik7CisgICAgcmVzZXRNb2RlU3Rh
dGUoY20pOworICB9CisKKyAgZnVuY3Rpb24gcmVzZXRNb2RlU3RhdGUoY20pIHsKICAgICBjbS5k
b2MuaXRlcihmdW5jdGlvbihsaW5lKSB7CiAgICAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSBsaW5l
LnN0YXRlQWZ0ZXIgPSBudWxsOwogICAgICAgaWYgKGxpbmUuc3R5bGVzKSBsaW5lLnN0eWxlcyA9
IG51bGw7CkBAIC0yMDcsMTEgKzI1NSwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKIAogICBmdW5jdGlvbiB3cmFwcGluZ0NoYW5nZWQoY20pIHsKICAgICBpZiAoY20ub3B0
aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUg
Kz0gIiBDb2RlTWlycm9yLXdyYXAiOworICAgICAgYWRkQ2xhc3MoY20uZGlzcGxheS53cmFwcGVy
LCAiQ29kZU1pcnJvci13cmFwIik7CiAgICAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldp
ZHRoID0gIiI7CiAgICAgfSBlbHNlIHsKLSAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05h
bWUgPSBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdy
YXAiLCAiIik7Ci0gICAgICBjb21wdXRlTWF4TGVuZ3RoKGNtKTsKKyAgICAgIHJtQ2xhc3MoY20u
ZGlzcGxheS53cmFwcGVyLCAiQ29kZU1pcnJvci13cmFwIik7CisgICAgICBmaW5kTWF4TGluZShj
bSk7CiAgICAgfQogICAgIGVzdGltYXRlTGluZUhlaWdodHMoY20pOwogICAgIHJlZ0NoYW5nZShj
bSk7CkBAIC0yMTksMTYgKzI2NywyNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dXBkYXRlU2Nyb2xsYmFycyhjbSk7fSwgMTAw
KTsKICAgfQogCisgIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGVzdGltYXRlcyB0aGUgaGVp
Z2h0IG9mIGEgbGluZSwgdG8gdXNlIGFzCisgIC8vIGZpcnN0IGFwcHJveGltYXRpb24gdW50aWwg
dGhlIGxpbmUgYmVjb21lcyB2aXNpYmxlIChhbmQgaXMgdGh1cworICAvLyBwcm9wZXJseSBtZWFz
dXJhYmxlKS4KICAgZnVuY3Rpb24gZXN0aW1hdGVIZWlnaHQoY20pIHsKICAgICB2YXIgdGggPSB0
ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpLCB3cmFwcGluZyA9IGNtLm9wdGlvbnMubGluZVdyYXBwaW5n
OwogICAgIHZhciBwZXJMaW5lID0gd3JhcHBpbmcgJiYgTWF0aC5tYXgoNSwgY20uZGlzcGxheS5z
Y3JvbGxlci5jbGllbnRXaWR0aCAvIGNoYXJXaWR0aChjbS5kaXNwbGF5KSAtIDMpOwogICAgIHJl
dHVybiBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAobGluZUlzSGlkZGVuKGNtLmRvYywgbGlu
ZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgICAgZWxzZSBpZiAod3JhcHBpbmcpCi0gICAgICAg
IHJldHVybiAoTWF0aC5jZWlsKGxpbmUudGV4dC5sZW5ndGggLyBwZXJMaW5lKSB8fCAxKSAqIHRo
OworICAgICAgaWYgKGxpbmVJc0hpZGRlbihjbS5kb2MsIGxpbmUpKSByZXR1cm4gMDsKKworICAg
ICAgdmFyIHdpZGdldHNIZWlnaHQgPSAwOworICAgICAgaWYgKGxpbmUud2lkZ2V0cykgZm9yICh2
YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGxp
bmUud2lkZ2V0c1tpXS5oZWlnaHQpIHdpZGdldHNIZWlnaHQgKz0gbGluZS53aWRnZXRzW2ldLmhl
aWdodDsKKyAgICAgIH0KKworICAgICAgaWYgKHdyYXBwaW5nKQorICAgICAgICByZXR1cm4gd2lk
Z2V0c0hlaWdodCArIChNYXRoLmNlaWwobGluZS50ZXh0Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDEp
ICogdGg7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiB0aDsKKyAgICAgICAgcmV0dXJuIHdp
ZGdldHNIZWlnaHQgKyB0aDsKICAgICB9OwogICB9CiAKQEAgLTI0NCw3ICszMDAsNiBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB2YXIgbWFwID0ga2V5TWFwW2NtLm9w
dGlvbnMua2V5TWFwXSwgc3R5bGUgPSBtYXAuc3R5bGU7CiAgICAgY20uZGlzcGxheS53cmFwcGVy
LmNsYXNzTmFtZSA9IGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20t
a2V5bWFwLVxTKy9nLCAiIikgKwogICAgICAgKHN0eWxlID8gIiBjbS1rZXltYXAtIiArIHN0eWxl
IDogIiIpOwotICAgIGNtLnN0YXRlLmRpc2FibGVJbnB1dCA9IG1hcC5kaXNhYmxlSW5wdXQ7CiAg
IH0KIAogICBmdW5jdGlvbiB0aGVtZUNoYW5nZWQoY20pIHsKQEAgLTI1OSw2ICszMTQsOCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCl7YWxpZ25Ib3Jpem9udGFsbHkoY20pO30sIDIwKTsKICAgfQogCisgIC8vIFJlYnVpbGQgdGhl
IGd1dHRlciBlbGVtZW50cywgZW5zdXJlIHRoZSBtYXJnaW4gdG8gdGhlIGxlZnQgb2YgdGhlCisg
IC8vIGNvZGUgbWF0Y2hlcyB0aGVpciB3aWR0aC4KICAgZnVuY3Rpb24gdXBkYXRlR3V0dGVycyhj
bSkgewogICAgIHZhciBndXR0ZXJzID0gY20uZGlzcGxheS5ndXR0ZXJzLCBzcGVjcyA9IGNtLm9w
dGlvbnMuZ3V0dGVyczsKICAgICByZW1vdmVDaGlsZHJlbihndXR0ZXJzKTsKQEAgLTI3MSwzMyAr
MzI4LDQ0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgfQogICAg
IH0KICAgICBndXR0ZXJzLnN0eWxlLmRpc3BsYXkgPSBpID8gIiIgOiAibm9uZSI7CisgICAgdXBk
YXRlR3V0dGVyU3BhY2UoY20pOworICB9CisKKyAgZnVuY3Rpb24gdXBkYXRlR3V0dGVyU3BhY2Uo
Y20pIHsKKyAgICB2YXIgd2lkdGggPSBjbS5kaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7Cisg
ICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0ID0gd2lkdGggKyAicHgiOworICAg
IGNtLmRpc3BsYXkuc2Nyb2xsYmFySC5zdHlsZS5sZWZ0ID0gY20ub3B0aW9ucy5maXhlZEd1dHRl
ciA/IHdpZHRoICsgInB4IiA6IDA7CiAgIH0KIAotICBmdW5jdGlvbiBsaW5lTGVuZ3RoKGRvYywg
bGluZSkgeworICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEgbGluZSwgdGFr
aW5nIGludG8gYWNjb3VudAorICAvLyBjb2xsYXBzZWQgcmFuZ2VzIChzZWUgbWFya1RleHQpIHRo
YXQgbWlnaHQgaGlkZSBwYXJ0cywgYW5kIGpvaW4KKyAgLy8gb3RoZXIgbGluZXMgb250byBpdC4K
KyAgZnVuY3Rpb24gbGluZUxlbmd0aChsaW5lKSB7CiAgICAgaWYgKGxpbmUuaGVpZ2h0ID09IDAp
IHJldHVybiAwOwogICAgIHZhciBsZW4gPSBsaW5lLnRleHQubGVuZ3RoLCBtZXJnZWQsIGN1ciA9
IGxpbmU7CiAgICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdFN0YXJ0KGN1cikpIHsK
LSAgICAgIHZhciBmb3VuZCA9IG1lcmdlZC5maW5kKCk7Ci0gICAgICBjdXIgPSBnZXRMaW5lKGRv
YywgZm91bmQuZnJvbS5saW5lKTsKKyAgICAgIHZhciBmb3VuZCA9IG1lcmdlZC5maW5kKDAsIHRy
dWUpOworICAgICAgY3VyID0gZm91bmQuZnJvbS5saW5lOwogICAgICAgbGVuICs9IGZvdW5kLmZy
b20uY2ggLSBmb3VuZC50by5jaDsKICAgICB9CiAgICAgY3VyID0gbGluZTsKICAgICB3aGlsZSAo
bWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGN1cikpIHsKLSAgICAgIHZhciBmb3VuZCA9IG1l
cmdlZC5maW5kKCk7CisgICAgICB2YXIgZm91bmQgPSBtZXJnZWQuZmluZCgwLCB0cnVlKTsKICAg
ICAgIGxlbiAtPSBjdXIudGV4dC5sZW5ndGggLSBmb3VuZC5mcm9tLmNoOwotICAgICAgY3VyID0g
Z2V0TGluZShkb2MsIGZvdW5kLnRvLmxpbmUpOworICAgICAgY3VyID0gZm91bmQudG8ubGluZTsK
ICAgICAgIGxlbiArPSBjdXIudGV4dC5sZW5ndGggLSBmb3VuZC50by5jaDsKICAgICB9CiAgICAg
cmV0dXJuIGxlbjsKICAgfQogCi0gIGZ1bmN0aW9uIGNvbXB1dGVNYXhMZW5ndGgoY20pIHsKKyAg
Ly8gRmluZCB0aGUgbG9uZ2VzdCBsaW5lIGluIHRoZSBkb2N1bWVudC4KKyAgZnVuY3Rpb24gZmlu
ZE1heExpbmUoY20pIHsKICAgICB2YXIgZCA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKICAg
ICBkLm1heExpbmUgPSBnZXRMaW5lKGRvYywgZG9jLmZpcnN0KTsKLSAgICBkLm1heExpbmVMZW5n
dGggPSBsaW5lTGVuZ3RoKGRvYywgZC5tYXhMaW5lKTsKKyAgICBkLm1heExpbmVMZW5ndGggPSBs
aW5lTGVuZ3RoKGQubWF4TGluZSk7CiAgICAgZC5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7CiAgICAg
ZG9jLml0ZXIoZnVuY3Rpb24obGluZSkgewotICAgICAgdmFyIGxlbiA9IGxpbmVMZW5ndGgoZG9j
LCBsaW5lKTsKKyAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUpOwogICAgICAgaWYgKGxl
biA+IGQubWF4TGluZUxlbmd0aCkgewogICAgICAgICBkLm1heExpbmVMZW5ndGggPSBsZW47CiAg
ICAgICAgIGQubWF4TGluZSA9IGxpbmU7CkBAIC0zMTksMjEgKzM4NywzMyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAvLyBTQ1JPTExCQVJTCiAKKyAgLy8gUHJlcGFy
ZSBET00gcmVhZHMgbmVlZGVkIHRvIHVwZGF0ZSB0aGUgc2Nyb2xsYmFycy4gRG9uZSBpbiBvbmUK
KyAgLy8gc2hvdCB0byBtaW5pbWl6ZSB1cGRhdGUvbWVhc3VyZSByb3VuZHRyaXBzLgorICBmdW5j
dGlvbiBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSkgeworICAgIHZhciBzY3JvbGwgPSBjbS5kaXNw
bGF5LnNjcm9sbGVyOworICAgIHJldHVybiB7CisgICAgICBjbGllbnRIZWlnaHQ6IHNjcm9sbC5j
bGllbnRIZWlnaHQsCisgICAgICBiYXJIZWlnaHQ6IGNtLmRpc3BsYXkuc2Nyb2xsYmFyVi5jbGll
bnRIZWlnaHQsCisgICAgICBzY3JvbGxXaWR0aDogc2Nyb2xsLnNjcm9sbFdpZHRoLCBjbGllbnRX
aWR0aDogc2Nyb2xsLmNsaWVudFdpZHRoLAorICAgICAgYmFyV2lkdGg6IGNtLmRpc3BsYXkuc2Ny
b2xsYmFySC5jbGllbnRXaWR0aCwKKyAgICAgIGRvY0hlaWdodDogTWF0aC5yb3VuZChjbS5kb2Mu
aGVpZ2h0ICsgcGFkZGluZ1ZlcnQoY20uZGlzcGxheSkpCisgICAgfTsKKyAgfQorCiAgIC8vIFJl
LXN5bmNocm9uaXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2Yg
dGhlCi0gIC8vIGNvbnRlbnQuIE9wdGlvbmFsbHkgZm9yY2UgYSBzY3JvbGxUb3AuCi0gIGZ1bmN0
aW9uIHVwZGF0ZVNjcm9sbGJhcnMoY20pIHsKLSAgICB2YXIgZCA9IGNtLmRpc3BsYXksIGRvY0hl
aWdodCA9IGNtLmRvYy5oZWlnaHQ7Ci0gICAgdmFyIHRvdGFsSGVpZ2h0ID0gZG9jSGVpZ2h0ICsg
cGFkZGluZ1ZlcnQoZCk7Ci0gICAgZC5zaXplci5zdHlsZS5taW5IZWlnaHQgPSBkLmhlaWdodEZv
cmNlci5zdHlsZS50b3AgPSB0b3RhbEhlaWdodCArICJweCI7Ci0gICAgZC5ndXR0ZXJzLnN0eWxl
LmhlaWdodCA9IE1hdGgubWF4KHRvdGFsSGVpZ2h0LCBkLnNjcm9sbGVyLmNsaWVudEhlaWdodCAt
IHNjcm9sbGVyQ3V0T2ZmKSArICJweCI7Ci0gICAgdmFyIHNjcm9sbEhlaWdodCA9IE1hdGgubWF4
KHRvdGFsSGVpZ2h0LCBkLnNjcm9sbGVyLnNjcm9sbEhlaWdodCk7Ci0gICAgdmFyIG5lZWRzSCA9
IGQuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggPiAoZC5zY3JvbGxlci5jbGllbnRXaWR0aCArIDEpOwot
ICAgIHZhciBuZWVkc1YgPSBzY3JvbGxIZWlnaHQgPiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQg
KyAxKTsKKyAgLy8gY29udGVudC4KKyAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsYmFycyhjbSwgbWVh
c3VyZSkgeworICAgIGlmICghbWVhc3VyZSkgbWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJz
KGNtKTsKKyAgICB2YXIgZCA9IGNtLmRpc3BsYXk7CisgICAgdmFyIHNjcm9sbEhlaWdodCA9IG1l
YXN1cmUuZG9jSGVpZ2h0ICsgc2Nyb2xsZXJDdXRPZmY7CisgICAgdmFyIG5lZWRzSCA9IG1lYXN1
cmUuc2Nyb2xsV2lkdGggPiBtZWFzdXJlLmNsaWVudFdpZHRoOworICAgIHZhciBuZWVkc1YgPSBz
Y3JvbGxIZWlnaHQgPiBtZWFzdXJlLmNsaWVudEhlaWdodDsKICAgICBpZiAobmVlZHNWKSB7CiAg
ICAgICBkLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICBkLnNjcm9s
bGJhclYuc3R5bGUuYm90dG9tID0gbmVlZHNIID8gc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSAr
ICJweCIgOiAiMCI7CisgICAgICAvLyBBIGJ1ZyBpbiBJRTggY2FuIGNhdXNlIHRoaXMgdmFsdWUg
dG8gYmUgbmVnYXRpdmUsIHNvIGd1YXJkIGl0LgogICAgICAgZC5zY3JvbGxiYXJWLmZpcnN0Q2hp
bGQuc3R5bGUuaGVpZ2h0ID0KLSAgICAgICAgKHNjcm9sbEhlaWdodCAtIGQuc2Nyb2xsZXIuY2xp
ZW50SGVpZ2h0ICsgZC5zY3JvbGxiYXJWLmNsaWVudEhlaWdodCkgKyAicHgiOworICAgICAgICBN
YXRoLm1heCgwLCBzY3JvbGxIZWlnaHQgLSBtZWFzdXJlLmNsaWVudEhlaWdodCArIChtZWFzdXJl
LmJhckhlaWdodCB8fCBkLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KSkgKyAicHgiOwogICAgIH0g
ZWxzZSB7CiAgICAgICBkLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgZC5z
Y3JvbGxiYXJWLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0gIjAiOwpAQCAtMzQyLDcgKzQyMiw3
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZC5zY3JvbGxiYXJI
LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgZC5zY3JvbGxiYXJILnN0eWxlLnJpZ2h0
ID0gbmVlZHNWID8gc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSArICJweCIgOiAiMCI7CiAgICAg
ICBkLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aCA9Ci0gICAgICAgIChkLnNjcm9s
bGVyLnNjcm9sbFdpZHRoIC0gZC5zY3JvbGxlci5jbGllbnRXaWR0aCArIGQuc2Nyb2xsYmFySC5j
bGllbnRXaWR0aCkgKyAicHgiOworICAgICAgICAobWVhc3VyZS5zY3JvbGxXaWR0aCAtIG1lYXN1
cmUuY2xpZW50V2lkdGggKyAobWVhc3VyZS5iYXJXaWR0aCB8fCBkLnNjcm9sbGJhckguY2xpZW50
V2lkdGgpKSArICJweCI7CiAgICAgfSBlbHNlIHsKICAgICAgIGQuc2Nyb2xsYmFySC5zdHlsZS5k
aXNwbGF5ID0gIiI7CiAgICAgICBkLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aCA9
ICIwIjsKQEAgLTM1OSwzMyArNDM5LDYxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogCiAgICAgaWYgKG1hY19nZUxpb24gJiYgc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSA9
PT0gMCkgewogICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoID0gZC5zY3JvbGxiYXJI
LnN0eWxlLm1pbkhlaWdodCA9IG1hY19nZU1vdW50YWluTGlvbiA/ICIxOHB4IiA6ICIxMnB4IjsK
LSAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5wb2ludGVyRXZlbnRzID0gZC5zY3JvbGxiYXJILnN0
eWxlLnBvaW50ZXJFdmVudHMgPSAibm9uZSI7CisgICAgICB2YXIgYmFyTW91c2VEb3duID0gZnVu
Y3Rpb24oZSkgeworICAgICAgICBpZiAoZV90YXJnZXQoZSkgIT0gZC5zY3JvbGxiYXJWICYmIGVf
dGFyZ2V0KGUpICE9IGQuc2Nyb2xsYmFySCkKKyAgICAgICAgICBvcGVyYXRpb24oY20sIG9uTW91
c2VEb3duKShlKTsKKyAgICAgIH07CisgICAgICBvbihkLnNjcm9sbGJhclYsICJtb3VzZWRvd24i
LCBiYXJNb3VzZURvd24pOworICAgICAgb24oZC5zY3JvbGxiYXJILCAibW91c2Vkb3duIiwgYmFy
TW91c2VEb3duKTsKICAgICB9CiAgIH0KIAorICAvLyBDb21wdXRlIHRoZSBsaW5lcyB0aGF0IGFy
ZSB2aXNpYmxlIGluIGEgZ2l2ZW4gdmlld3BvcnQgKGRlZmF1bHRzCisgIC8vIHRoZSB0aGUgY3Vy
cmVudCBzY3JvbGwgcG9zaXRpb24pLiB2aWV3UG9ydCBtYXkgY29udGFpbiB0b3AsCisgIC8vIGhl
aWdodCwgYW5kIGVuc3VyZSAoc2VlIG9wLnNjcm9sbFRvUG9zKSBwcm9wZXJ0aWVzLgogICBmdW5j
dGlvbiB2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jLCB2aWV3UG9ydCkgewotICAgIHZhciB0b3Ag
PSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCwgaGVpZ2h0ID0gZGlzcGxheS53cmFwcGVyLmNs
aWVudEhlaWdodDsKLSAgICBpZiAodHlwZW9mIHZpZXdQb3J0ID09ICJudW1iZXIiKSB0b3AgPSB2
aWV3UG9ydDsKLSAgICBlbHNlIGlmICh2aWV3UG9ydCkge3RvcCA9IHZpZXdQb3J0LnRvcDsgaGVp
Z2h0ID0gdmlld1BvcnQuYm90dG9tIC0gdmlld1BvcnQudG9wO30KKyAgICB2YXIgdG9wID0gdmll
d1BvcnQgJiYgdmlld1BvcnQudG9wICE9IG51bGwgPyB2aWV3UG9ydC50b3AgOiBkaXNwbGF5LnNj
cm9sbGVyLnNjcm9sbFRvcDsKICAgICB0b3AgPSBNYXRoLmZsb29yKHRvcCAtIHBhZGRpbmdUb3Ao
ZGlzcGxheSkpOwotICAgIHZhciBib3R0b20gPSBNYXRoLmNlaWwodG9wICsgaGVpZ2h0KTsKLSAg
ICByZXR1cm4ge2Zyb206IGxpbmVBdEhlaWdodChkb2MsIHRvcCksIHRvOiBsaW5lQXRIZWlnaHQo
ZG9jLCBib3R0b20pfTsKKyAgICB2YXIgYm90dG9tID0gdmlld1BvcnQgJiYgdmlld1BvcnQuYm90
dG9tICE9IG51bGwgPyB2aWV3UG9ydC5ib3R0b20gOiB0b3AgKyBkaXNwbGF5LndyYXBwZXIuY2xp
ZW50SGVpZ2h0OworCisgICAgdmFyIGZyb20gPSBsaW5lQXRIZWlnaHQoZG9jLCB0b3ApLCB0byA9
IGxpbmVBdEhlaWdodChkb2MsIGJvdHRvbSk7CisgICAgLy8gRW5zdXJlIGlzIGEge2Zyb206IHts
aW5lLCBjaH0sIHRvOiB7bGluZSwgY2h9fSBvYmplY3QsIGFuZAorICAgIC8vIGZvcmNlcyB0aG9z
ZSBsaW5lcyBpbnRvIHRoZSB2aWV3cG9ydCAoaWYgcG9zc2libGUpLgorICAgIGlmICh2aWV3UG9y
dCAmJiB2aWV3UG9ydC5lbnN1cmUpIHsKKyAgICAgIHZhciBlbnN1cmVGcm9tID0gdmlld1BvcnQu
ZW5zdXJlLmZyb20ubGluZSwgZW5zdXJlVG8gPSB2aWV3UG9ydC5lbnN1cmUudG8ubGluZTsKKyAg
ICAgIGlmIChlbnN1cmVGcm9tIDwgZnJvbSkKKyAgICAgICAgcmV0dXJuIHtmcm9tOiBlbnN1cmVG
cm9tLAorICAgICAgICAgICAgICAgIHRvOiBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRBdExpbmUo
Z2V0TGluZShkb2MsIGVuc3VyZUZyb20pKSArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQp
fTsKKyAgICAgIGlmIChNYXRoLm1pbihlbnN1cmVUbywgZG9jLmxhc3RMaW5lKCkpID49IHRvKQor
ICAgICAgICByZXR1cm4ge2Zyb206IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRM
aW5lKGRvYywgZW5zdXJlVG8pKSAtIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQpLAorICAg
ICAgICAgICAgICAgIHRvOiBlbnN1cmVUb307CisgICAgfQorICAgIHJldHVybiB7ZnJvbTogZnJv
bSwgdG86IHRvfTsKICAgfQogCiAgIC8vIExJTkUgTlVNQkVSUwogCisgIC8vIFJlLWFsaWduIGxp
bmUgbnVtYmVycyBhbmQgZ3V0dGVyIG1hcmtzIHRvIGNvbXBlbnNhdGUgZm9yCisgIC8vIGhvcml6
b250YWwgc2Nyb2xsaW5nLgogICBmdW5jdGlvbiBhbGlnbkhvcml6b250YWxseShjbSkgewotICAg
IHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXks
IHZpZXcgPSBkaXNwbGF5LnZpZXc7CiAgICAgaWYgKCFkaXNwbGF5LmFsaWduV2lkZ2V0cyAmJiAo
IWRpc3BsYXkuZ3V0dGVycy5maXJzdENoaWxkIHx8ICFjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSkg
cmV0dXJuOwogICAgIHZhciBjb21wID0gY29tcGVuc2F0ZUZvckhTY3JvbGwoZGlzcGxheSkgLSBk
aXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgKyBjbS5kb2Muc2Nyb2xsTGVmdDsKLSAgICB2YXIg
Z3V0dGVyVyA9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCwgbCA9IGNvbXAgKyAicHgiOwot
ICAgIGZvciAodmFyIG4gPSBkaXNwbGF5LmxpbmVEaXYuZmlyc3RDaGlsZDsgbjsgbiA9IG4ubmV4
dFNpYmxpbmcpIGlmIChuLmFsaWduYWJsZSkgewotICAgICAgZm9yICh2YXIgaSA9IDAsIGEgPSBu
LmFsaWduYWJsZTsgaSA8IGEubGVuZ3RoOyArK2kpIGFbaV0uc3R5bGUubGVmdCA9IGw7CisgICAg
dmFyIGd1dHRlclcgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGgsIGxlZnQgPSBjb21wICsg
InB4IjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIGlmICghdmll
d1tpXS5oaWRkZW4pIHsKKyAgICAgIGlmIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyICYmIHZpZXdb
aV0uZ3V0dGVyKQorICAgICAgICB2aWV3W2ldLmd1dHRlci5zdHlsZS5sZWZ0ID0gbGVmdDsKKyAg
ICAgIHZhciBhbGlnbiA9IHZpZXdbaV0uYWxpZ25hYmxlOworICAgICAgaWYgKGFsaWduKSBmb3Ig
KHZhciBqID0gMDsgaiA8IGFsaWduLmxlbmd0aDsgaisrKQorICAgICAgICBhbGlnbltqXS5zdHls
ZS5sZWZ0ID0gbGVmdDsKICAgICB9CiAgICAgaWYgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpCiAg
ICAgICBkaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdCA9IChjb21wICsgZ3V0dGVyVykgKyAicHgi
OwogICB9CiAKKyAgLy8gVXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgbGluZSBudW1iZXIgZ3V0dGVy
IGlzIHN0aWxsIHRoZSByaWdodAorICAvLyBzaXplIGZvciB0aGUgY3VycmVudCBkb2N1bWVudCBz
aXplLiBSZXR1cm5zIHRydWUgd2hlbiBhbiB1cGRhdGUKKyAgLy8gaXMgbmVlZGVkLgogICBmdW5j
dGlvbiBtYXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0aChjbSkgewogICAgIGlmICghY20ub3B0aW9u
cy5saW5lTnVtYmVycykgcmV0dXJuIGZhbHNlOwogICAgIHZhciBkb2MgPSBjbS5kb2MsIGxhc3Qg
PSBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSksIGRp
c3BsYXkgPSBjbS5kaXNwbGF5OwpAQCAtMzk4LDYgKzUwNiw3IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgICAgZGlzcGxheS5saW5lTnVtV2lkdGggPSBkaXNwbGF5Lmxp
bmVOdW1Jbm5lcldpZHRoICsgcGFkZGluZzsKICAgICAgIGRpc3BsYXkubGluZU51bUNoYXJzID0g
ZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA/IGxhc3QubGVuZ3RoIDogLTE7CiAgICAgICBkaXNw
bGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSBkaXNwbGF5LmxpbmVOdW1XaWR0aCArICJweCI7
CisgICAgICB1cGRhdGVHdXR0ZXJTcGFjZShjbSk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDA2LDE5MSArNTE1LDE5MyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24gbGluZU51bWJlckZvcihvcHRpb25zLCBp
KSB7CiAgICAgcmV0dXJuIFN0cmluZyhvcHRpb25zLmxpbmVOdW1iZXJGb3JtYXR0ZXIoaSArIG9w
dGlvbnMuZmlyc3RMaW5lTnVtYmVyKSk7CiAgIH0KKworICAvLyBDb21wdXRlcyBkaXNwbGF5LnNj
cm9sbGVyLnNjcm9sbExlZnQgKyBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGgsCisgIC8vIGJ1
dCB1c2luZyBnZXRCb3VuZGluZ0NsaWVudFJlY3QgdG8gZ2V0IGEgc3ViLXBpeGVsLWFjY3VyYXRl
CisgIC8vIHJlc3VsdC4KICAgZnVuY3Rpb24gY29tcGVuc2F0ZUZvckhTY3JvbGwoZGlzcGxheSkg
ewotICAgIHJldHVybiBnZXRSZWN0KGRpc3BsYXkuc2Nyb2xsZXIpLmxlZnQgLSBnZXRSZWN0KGRp
c3BsYXkuc2l6ZXIpLmxlZnQ7CisgICAgcmV0dXJuIGRpc3BsYXkuc2Nyb2xsZXIuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCkubGVmdCAtIGRpc3BsYXkuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCkubGVmdDsKICAgfQogCiAgIC8vIERJU1BMQVkgRFJBV0lORwogCi0gIGZ1bmN0aW9uIHVwZGF0
ZURpc3BsYXkoY20sIGNoYW5nZXMsIHZpZXdQb3J0LCBmb3JjZWQpIHsKLSAgICB2YXIgb2xkRnJv
bSA9IGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20sIG9sZFRvID0gY20uZGlzcGxheS5zaG93aW5nVG8s
IHVwZGF0ZWQ7CisgIC8vIFVwZGF0ZXMgdGhlIGRpc3BsYXksIHNlbGVjdGlvbiwgYW5kIHNjcm9s
bGJhcnMsIHVzaW5nIHRoZQorICAvLyBpbmZvcm1hdGlvbiBpbiBkaXNwbGF5LnZpZXcgdG8gZmlu
ZCBvdXQgd2hpY2ggbm9kZXMgYXJlIG5vIGxvbmdlcgorICAvLyB1cC10by1kYXRlLiBUcmllcyB0
byBiYWlsIG91dCBlYXJseSB3aGVuIG5vIGNoYW5nZXMgYXJlIG5lZWRlZCwKKyAgLy8gdW5sZXNz
IGZvcmNlZCBpcyB0cnVlLgorICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gYWN0dWFsIHVwZGF0ZSBo
YXBwZW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5KGNtLCB2
aWV3UG9ydCwgZm9yY2VkKSB7CisgICAgdmFyIG9sZEZyb20gPSBjbS5kaXNwbGF5LnZpZXdGcm9t
LCBvbGRUbyA9IGNtLmRpc3BsYXkudmlld1RvLCB1cGRhdGVkOwogICAgIHZhciB2aXNpYmxlID0g
dmlzaWJsZUxpbmVzKGNtLmRpc3BsYXksIGNtLmRvYywgdmlld1BvcnQpOwogICAgIGZvciAodmFy
IGZpcnN0ID0gdHJ1ZTs7IGZpcnN0ID0gZmFsc2UpIHsKICAgICAgIHZhciBvbGRXaWR0aCA9IGNt
LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg7Ci0gICAgICBpZiAoIXVwZGF0ZURpc3BsYXlJ
bm5lcihjbSwgY2hhbmdlcywgdmlzaWJsZSwgZm9yY2VkKSkgYnJlYWs7CisgICAgICBpZiAoIXVw
ZGF0ZURpc3BsYXlJbm5lcihjbSwgdmlzaWJsZSwgZm9yY2VkKSkgYnJlYWs7CiAgICAgICB1cGRh
dGVkID0gdHJ1ZTsKLSAgICAgIGNoYW5nZXMgPSBbXTsKKworICAgICAgLy8gSWYgdGhlIG1heCBs
aW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQsIG1lYXN1cmUgaXQsCisgICAg
ICAvLyBhbmQgZW5zdXJlIHRoZSBkb2N1bWVudCdzIHdpZHRoIG1hdGNoZXMgaXQuCisgICAgICBp
ZiAoY20uZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcp
CisgICAgICAgIGFkanVzdENvbnRlbnRXaWR0aChjbSk7CisKKyAgICAgIHZhciBiYXJNZWFzdXJl
ID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOwogICAgICAgdXBkYXRlU2VsZWN0aW9uKGNtKTsK
LSAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20pOworICAgICAgc2V0RG9jdW1lbnRIZWlnaHQoY20s
IGJhck1lYXN1cmUpOworICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwgYmFyTWVhc3VyZSk7Cisg
ICAgICBpZiAod2Via2l0ICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nKQorICAgICAgICBjaGVj
a0ZvcldlYmtpdFdpZHRoQnVnKGNtLCBiYXJNZWFzdXJlKTsgLy8gKElzc3VlICMyNDIwKQogICAg
ICAgaWYgKGZpcnN0ICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIG9sZFdpZHRoICE9IGNt
LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpIHsKICAgICAgICAgZm9yY2VkID0gdHJ1ZTsK
ICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAgICAgICBmb3JjZWQgPSBmYWxzZTsKIAotICAg
ICAgLy8gQ2xpcCBmb3JjZWQgdmlld3BvcnQgdG8gYWN0dWFsIHNjcm9sbGFibGUgYXJlYQotICAg
ICAgaWYgKHZpZXdQb3J0KQotICAgICAgICB2aWV3UG9ydCA9IE1hdGgubWluKGNtLmRpc3BsYXku
c2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZpZXdQb3J0ID09ICJudW1iZXIi
ID8gdmlld1BvcnQgOiB2aWV3UG9ydC50b3ApOworICAgICAgLy8gQ2xpcCBmb3JjZWQgdmlld3Bv
cnQgdG8gYWN0dWFsIHNjcm9sbGFibGUgYXJlYS4KKyAgICAgIGlmICh2aWV3UG9ydCAmJiB2aWV3
UG9ydC50b3AgIT0gbnVsbCkKKyAgICAgICAgdmlld1BvcnQgPSB7dG9wOiBNYXRoLm1pbihiYXJN
ZWFzdXJlLmRvY0hlaWdodCAtIHNjcm9sbGVyQ3V0T2ZmIC0gYmFyTWVhc3VyZS5jbGllbnRIZWln
aHQsIHZpZXdQb3J0LnRvcCl9OworICAgICAgLy8gVXBkYXRlZCBsaW5lIGhlaWdodHMgbWlnaHQg
cmVzdWx0IGluIHRoZSBkcmF3biBhcmVhIG5vdAorICAgICAgLy8gYWN0dWFsbHkgY292ZXJpbmcg
dGhlIHZpZXdwb3J0LiBLZWVwIGxvb3BpbmcgdW50aWwgaXQgZG9lcy4KICAgICAgIHZpc2libGUg
PSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3UG9ydCk7Ci0gICAgICBpZiAo
dmlzaWJsZS5mcm9tID49IGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20gJiYgdmlzaWJsZS50byA8PSBj
bS5kaXNwbGF5LnNob3dpbmdUbykKKyAgICAgIGlmICh2aXNpYmxlLmZyb20gPj0gY20uZGlzcGxh
eS52aWV3RnJvbSAmJiB2aXNpYmxlLnRvIDw9IGNtLmRpc3BsYXkudmlld1RvKQogICAgICAgICBi
cmVhazsKICAgICB9CiAKKyAgICBjbS5kaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDsK
ICAgICBpZiAodXBkYXRlZCkgewogICAgICAgc2lnbmFsTGF0ZXIoY20sICJ1cGRhdGUiLCBjbSk7
Ci0gICAgICBpZiAoY20uZGlzcGxheS5zaG93aW5nRnJvbSAhPSBvbGRGcm9tIHx8IGNtLmRpc3Bs
YXkuc2hvd2luZ1RvICE9IG9sZFRvKQotICAgICAgICBzaWduYWxMYXRlcihjbSwgInZpZXdwb3J0
Q2hhbmdlIiwgY20sIGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20sIGNtLmRpc3BsYXkuc2hvd2luZ1Rv
KTsKKyAgICAgIGlmIChjbS5kaXNwbGF5LnZpZXdGcm9tICE9IG9sZEZyb20gfHwgY20uZGlzcGxh
eS52aWV3VG8gIT0gb2xkVG8pCisgICAgICAgIHNpZ25hbExhdGVyKGNtLCAidmlld3BvcnRDaGFu
Z2UiLCBjbSwgY20uZGlzcGxheS52aWV3RnJvbSwgY20uZGlzcGxheS52aWV3VG8pOwogICAgIH0K
ICAgICByZXR1cm4gdXBkYXRlZDsKICAgfQogCi0gIC8vIFVzZXMgYSBzZXQgb2YgY2hhbmdlcyBw
bHVzIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiB0bwotICAvLyBkZXRlcm1pbmUgd2hpY2gg
RE9NIHVwZGF0ZXMgaGF2ZSB0byBiZSBtYWRlLCBhbmQgbWFrZXMgdGhlCi0gIC8vIHVwZGF0ZXMu
Ci0gIGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXlJbm5lcihjbSwgY2hhbmdlcywgdmlzaWJsZSwgZm9y
Y2VkKSB7CisgIC8vIERvZXMgdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0aGUgbGluZSBkaXNwbGF5
LiBCYWlscyBvdXQKKyAgLy8gKHJldHVybmluZyBmYWxzZSkgd2hlbiB0aGVyZSBpcyBub3RoaW5n
IHRvIGJlIGRvbmUgYW5kIGZvcmNlZCBpcworICAvLyBmYWxzZS4KKyAgZnVuY3Rpb24gdXBkYXRl
RGlzcGxheUlubmVyKGNtLCB2aXNpYmxlLCBmb3JjZWQpIHsKICAgICB2YXIgZGlzcGxheSA9IGNt
LmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKLSAgICBpZiAoIWRpc3BsYXkud3JhcHBlci5jbGllbnRX
aWR0aCkgewotICAgICAgZGlzcGxheS5zaG93aW5nRnJvbSA9IGRpc3BsYXkuc2hvd2luZ1RvID0g
ZG9jLmZpcnN0OwotICAgICAgZGlzcGxheS52aWV3T2Zmc2V0ID0gMDsKKyAgICBpZiAoIWRpc3Bs
YXkud3JhcHBlci5vZmZzZXRXaWR0aCkgeworICAgICAgcmVzZXRWaWV3KGNtKTsKICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICAvLyBCYWlsIG91dCBpZiB0aGUgdmlzaWJsZSBhcmVhIGlzIGFs
cmVhZHkgcmVuZGVyZWQgYW5kIG5vdGhpbmcgY2hhbmdlZC4KLSAgICBpZiAoIWZvcmNlZCAmJiBj
aGFuZ2VzLmxlbmd0aCA9PSAwICYmCi0gICAgICAgIHZpc2libGUuZnJvbSA+IGRpc3BsYXkuc2hv
d2luZ0Zyb20gJiYgdmlzaWJsZS50byA8IGRpc3BsYXkuc2hvd2luZ1RvKQorICAgIGlmICghZm9y
Y2VkICYmIHZpc2libGUuZnJvbSA+PSBkaXNwbGF5LnZpZXdGcm9tICYmIHZpc2libGUudG8gPD0g
ZGlzcGxheS52aWV3VG8gJiYKKyAgICAgICAgY291bnREaXJ0eVZpZXcoY20pID09IDApCiAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgoY20pKQotICAg
ICAgY2hhbmdlcyA9IFt7ZnJvbTogZG9jLmZpcnN0LCB0bzogZG9jLmZpcnN0ICsgZG9jLnNpemV9
XTsKLSAgICB2YXIgZ3V0dGVyVyA9IGRpc3BsYXkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdCA9IGRp
c3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCArICJweCI7Ci0gICAgZGlzcGxheS5zY3JvbGxiYXJI
LnN0eWxlLmxlZnQgPSBjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8gZ3V0dGVyVyA6ICIwIjsKLQot
ICAgIC8vIFVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxpbmVzIG5lZWQgdGhlaXIgbGluZSBudW1i
ZXJzIHVwZGF0ZWQKLSAgICB2YXIgcG9zaXRpb25zQ2hhbmdlZEZyb20gPSBJbmZpbml0eTsKLSAg
ICBpZiAoY20ub3B0aW9ucy5saW5lTnVtYmVycykKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y2hhbmdlcy5sZW5ndGg7ICsraSkKLSAgICAgICAgaWYgKGNoYW5nZXNbaV0uZGlmZiAmJiBjaGFu
Z2VzW2ldLmZyb20gPCBwb3NpdGlvbnNDaGFuZ2VkRnJvbSkgeyBwb3NpdGlvbnNDaGFuZ2VkRnJv
bSA9IGNoYW5nZXNbaV0uZnJvbTsgfQorICAgICAgcmVzZXRWaWV3KGNtKTsKKyAgICB2YXIgZGlt
cyA9IGdldERpbWVuc2lvbnMoY20pOwogCisgICAgLy8gQ29tcHV0ZSBhIHN1aXRhYmxlIG5ldyB2
aWV3cG9ydCAoZnJvbSAmIHRvKQogICAgIHZhciBlbmQgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZTsK
ICAgICB2YXIgZnJvbSA9IE1hdGgubWF4KHZpc2libGUuZnJvbSAtIGNtLm9wdGlvbnMudmlld3Bv
cnRNYXJnaW4sIGRvYy5maXJzdCk7CiAgICAgdmFyIHRvID0gTWF0aC5taW4oZW5kLCB2aXNpYmxl
LnRvICsgY20ub3B0aW9ucy52aWV3cG9ydE1hcmdpbik7Ci0gICAgaWYgKGRpc3BsYXkuc2hvd2lu
Z0Zyb20gPCBmcm9tICYmIGZyb20gLSBkaXNwbGF5LnNob3dpbmdGcm9tIDwgMjApIGZyb20gPSBN
YXRoLm1heChkb2MuZmlyc3QsIGRpc3BsYXkuc2hvd2luZ0Zyb20pOwotICAgIGlmIChkaXNwbGF5
LnNob3dpbmdUbyA+IHRvICYmIGRpc3BsYXkuc2hvd2luZ1RvIC0gdG8gPCAyMCkgdG8gPSBNYXRo
Lm1pbihlbmQsIGRpc3BsYXkuc2hvd2luZ1RvKTsKKyAgICBpZiAoZGlzcGxheS52aWV3RnJvbSA8
IGZyb20gJiYgZnJvbSAtIGRpc3BsYXkudmlld0Zyb20gPCAyMCkgZnJvbSA9IE1hdGgubWF4KGRv
Yy5maXJzdCwgZGlzcGxheS52aWV3RnJvbSk7CisgICAgaWYgKGRpc3BsYXkudmlld1RvID4gdG8g
JiYgZGlzcGxheS52aWV3VG8gLSB0byA8IDIwKSB0byA9IE1hdGgubWluKGVuZCwgZGlzcGxheS52
aWV3VG8pOwogICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucykgewotICAgICAgZnJvbSA9IGxpbmVO
byh2aXN1YWxMaW5lKGRvYywgZ2V0TGluZShkb2MsIGZyb20pKSk7Ci0gICAgICB3aGlsZSAodG8g
PCBlbmQgJiYgbGluZUlzSGlkZGVuKGRvYywgZ2V0TGluZShkb2MsIHRvKSkpICsrdG87Ci0gICAg
fQotCi0gICAgLy8gQ3JlYXRlIGEgcmFuZ2Ugb2YgdGhlb3JldGljYWxseSBpbnRhY3QgbGluZXMs
IGFuZCBwdW5jaCBob2xlcwotICAgIC8vIGluIHRoYXQgdXNpbmcgdGhlIGNoYW5nZSBpbmZvLgot
ICAgIHZhciBpbnRhY3QgPSBbe2Zyb206IE1hdGgubWF4KGRpc3BsYXkuc2hvd2luZ0Zyb20sIGRv
Yy5maXJzdCksCi0gICAgICAgICAgICAgICAgICAgdG86IE1hdGgubWluKGRpc3BsYXkuc2hvd2lu
Z1RvLCBlbmQpfV07Ci0gICAgaWYgKGludGFjdFswXS5mcm9tID49IGludGFjdFswXS50bykgaW50
YWN0ID0gW107Ci0gICAgZWxzZSBpbnRhY3QgPSBjb21wdXRlSW50YWN0KGludGFjdCwgY2hhbmdl
cyk7Ci0gICAgLy8gV2hlbiBtZXJnZWQgbGluZXMgYXJlIHByZXNlbnQsIHdlIG1pZ2h0IGhhdmUg
dG8gcmVkdWNlIHRoZQotICAgIC8vIGludGFjdCByYW5nZXMgYmVjYXVzZSBjaGFuZ2VzIGluIGNv
bnRpbnVlZCBmcmFnbWVudHMgb2YgdGhlCi0gICAgLy8gaW50YWN0IGxpbmVzIGRvIHJlcXVpcmUg
dGhlIGxpbmVzIHRvIGJlIHJlZHJhd24uCi0gICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zKQotICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRhY3QubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFy
IHJhbmdlID0gaW50YWN0W2ldLCBtZXJnZWQ7Ci0gICAgICAgIHdoaWxlIChtZXJnZWQgPSBjb2xs
YXBzZWRTcGFuQXRFbmQoZ2V0TGluZShkb2MsIHJhbmdlLnRvIC0gMSkpKSB7Ci0gICAgICAgICAg
dmFyIG5ld1RvID0gbWVyZ2VkLmZpbmQoKS5mcm9tLmxpbmU7Ci0gICAgICAgICAgaWYgKG5ld1Rv
ID4gcmFuZ2UuZnJvbSkgcmFuZ2UudG8gPSBuZXdUbzsKLSAgICAgICAgICBlbHNlIHsgaW50YWN0
LnNwbGljZShpLS0sIDEpOyBicmVhazsgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAvLyBD
bGlwIG9mZiB0aGUgcGFydHMgdGhhdCB3b24ndCBiZSB2aXNpYmxlCi0gICAgdmFyIGludGFjdExp
bmVzID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGludGFjdC5sZW5ndGg7ICsraSkgewot
ICAgICAgdmFyIHJhbmdlID0gaW50YWN0W2ldOwotICAgICAgaWYgKHJhbmdlLmZyb20gPCBmcm9t
KSByYW5nZS5mcm9tID0gZnJvbTsKLSAgICAgIGlmIChyYW5nZS50byA+IHRvKSByYW5nZS50byA9
IHRvOwotICAgICAgaWYgKHJhbmdlLmZyb20gPj0gcmFuZ2UudG8pIGludGFjdC5zcGxpY2UoaS0t
LCAxKTsKLSAgICAgIGVsc2UgaW50YWN0TGluZXMgKz0gcmFuZ2UudG8gLSByYW5nZS5mcm9tOwot
ICAgIH0KLSAgICBpZiAoIWZvcmNlZCAmJiBpbnRhY3RMaW5lcyA9PSB0byAtIGZyb20gJiYgZnJv
bSA9PSBkaXNwbGF5LnNob3dpbmdGcm9tICYmIHRvID09IGRpc3BsYXkuc2hvd2luZ1RvKSB7Ci0g
ICAgICB1cGRhdGVWaWV3T2Zmc2V0KGNtKTsKLSAgICAgIHJldHVybjsKKyAgICAgIGZyb20gPSB2
aXN1YWxMaW5lTm8oY20uZG9jLCBmcm9tKTsKKyAgICAgIHRvID0gdmlzdWFsTGluZUVuZE5vKGNt
LmRvYywgdG8pOwogICAgIH0KLSAgICBpbnRhY3Quc29ydChmdW5jdGlvbihhLCBiKSB7cmV0dXJu
IGEuZnJvbSAtIGIuZnJvbTt9KTsKIAotICAgIC8vIEF2b2lkIGNyYXNoaW5nIG9uIElFJ3MgInVu
c3BlY2lmaWVkIGVycm9yIiB3aGVuIGluIGlmcmFtZXMKLSAgICB0cnkgewotICAgICAgdmFyIGZv
Y3VzZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OwotICAgIH0gY2F0Y2goZSkge30KLSAgICBp
ZiAoaW50YWN0TGluZXMgPCAodG8gLSBmcm9tKSAqIC43KSBkaXNwbGF5LmxpbmVEaXYuc3R5bGUu
ZGlzcGxheSA9ICJub25lIjsKLSAgICBwYXRjaERpc3BsYXkoY20sIGZyb20sIHRvLCBpbnRhY3Qs
IHBvc2l0aW9uc0NoYW5nZWRGcm9tKTsKLSAgICBkaXNwbGF5LmxpbmVEaXYuc3R5bGUuZGlzcGxh
eSA9ICIiOwotICAgIGlmIChmb2N1c2VkICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT0gZm9j
dXNlZCAmJiBmb2N1c2VkLm9mZnNldEhlaWdodCkgZm9jdXNlZC5mb2N1cygpOwotCi0gICAgdmFy
IGRpZmZlcmVudCA9IGZyb20gIT0gZGlzcGxheS5zaG93aW5nRnJvbSB8fCB0byAhPSBkaXNwbGF5
LnNob3dpbmdUbyB8fAorICAgIHZhciBkaWZmZXJlbnQgPSBmcm9tICE9IGRpc3BsYXkudmlld0Zy
b20gfHwgdG8gIT0gZGlzcGxheS52aWV3VG8gfHwKICAgICAgIGRpc3BsYXkubGFzdFNpemVDICE9
IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7Ci0gICAgLy8gVGhpcyBpcyBqdXN0IGEgYm9n
dXMgZm9ybXVsYSB0aGF0IGRldGVjdHMgd2hlbiB0aGUgZWRpdG9yIGlzCi0gICAgLy8gcmVzaXpl
ZCBvciB0aGUgZm9udCBzaXplIGNoYW5nZXMuCisgICAgYWRqdXN0VmlldyhjbSwgZnJvbSwgdG8p
OworCisgICAgZGlzcGxheS52aWV3T2Zmc2V0ID0gaGVpZ2h0QXRMaW5lKGdldExpbmUoY20uZG9j
LCBkaXNwbGF5LnZpZXdGcm9tKSk7CisgICAgLy8gUG9zaXRpb24gdGhlIG1vdmVyIGRpdiB0byBh
bGlnbiB3aXRoIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbgorICAgIGNtLmRpc3BsYXkubW92
ZXIuc3R5bGUudG9wID0gZGlzcGxheS52aWV3T2Zmc2V0ICsgInB4IjsKKworICAgIHZhciB0b1Vw
ZGF0ZSA9IGNvdW50RGlydHlWaWV3KGNtKTsKKyAgICBpZiAoIWRpZmZlcmVudCAmJiB0b1VwZGF0
ZSA9PSAwICYmICFmb3JjZWQpIHJldHVybjsKKworICAgIC8vIEZvciBiaWcgY2hhbmdlcywgd2Ug
aGlkZSB0aGUgZW5jbG9zaW5nIGVsZW1lbnQgZHVyaW5nIHRoZQorICAgIC8vIHVwZGF0ZSwgc2lu
Y2UgdGhhdCBzcGVlZHMgdXAgdGhlIG9wZXJhdGlvbnMgb24gbW9zdCBicm93c2Vycy4KKyAgICB2
YXIgZm9jdXNlZCA9IGFjdGl2ZUVsdCgpOworICAgIGlmICh0b1VwZGF0ZSA+IDQpIGRpc3BsYXku
bGluZURpdi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgIHBhdGNoRGlzcGxheShjbSwgZGlz
cGxheS51cGRhdGVMaW5lTnVtYmVycywgZGltcyk7CisgICAgaWYgKHRvVXBkYXRlID4gNCkgZGlz
cGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAvLyBUaGVyZSBtaWdodCBoYXZl
IGJlZW4gYSB3aWRnZXQgd2l0aCBhIGZvY3VzZWQgZWxlbWVudCB0aGF0IGdvdAorICAgIC8vIGhp
ZGRlbiBvciB1cGRhdGVkLCBpZiBzbyByZS1mb2N1cyBpdC4KKyAgICBpZiAoZm9jdXNlZCAmJiBh
Y3RpdmVFbHQoKSAhPSBmb2N1c2VkICYmIGZvY3VzZWQub2Zmc2V0SGVpZ2h0KSBmb2N1c2VkLmZv
Y3VzKCk7CisKKyAgICAvLyBQcmV2ZW50IHNlbGVjdGlvbiBhbmQgY3Vyc29ycyBmcm9tIGludGVy
ZmVyaW5nIHdpdGggdGhlIHNjcm9sbAorICAgIC8vIHdpZHRoLgorICAgIHJlbW92ZUNoaWxkcmVu
KGRpc3BsYXkuY3Vyc29yRGl2KTsKKyAgICByZW1vdmVDaGlsZHJlbihkaXNwbGF5LnNlbGVjdGlv
bkRpdik7CisKICAgICBpZiAoZGlmZmVyZW50KSB7CiAgICAgICBkaXNwbGF5Lmxhc3RTaXplQyA9
IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAgICBzdGFydFdvcmtlcihjbSwgNDAw
KTsKICAgICB9Ci0gICAgZGlzcGxheS5zaG93aW5nRnJvbSA9IGZyb207IGRpc3BsYXkuc2hvd2lu
Z1RvID0gdG87CiAKICAgICB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7Ci0gICAgdXBkYXRl
Vmlld09mZnNldChjbSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCisgIGZ1bmN0aW9uIGFk
anVzdENvbnRlbnRXaWR0aChjbSkgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAg
ICB2YXIgd2lkdGggPSBtZWFzdXJlQ2hhcihjbSwgZGlzcGxheS5tYXhMaW5lLCBkaXNwbGF5Lm1h
eExpbmUudGV4dC5sZW5ndGgpLmxlZnQ7CisgICAgZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IGZh
bHNlOworICAgIHZhciBtaW5XaWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoICsgMyk7CisgICAgdmFy
IG1heFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBt
aW5XaWR0aCArIHNjcm9sbGVyQ3V0T2ZmIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCk7
CisgICAgZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoICsgInB4IjsKKyAg
ICBpZiAobWF4U2Nyb2xsTGVmdCA8IGNtLmRvYy5zY3JvbGxMZWZ0KQorICAgICAgc2V0U2Nyb2xs
TGVmdChjbSwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0LCBtYXhTY3JvbGxM
ZWZ0KSwgdHJ1ZSk7CisgIH0KKworICBmdW5jdGlvbiBzZXREb2N1bWVudEhlaWdodChjbSwgbWVh
c3VyZSkgeworICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gY20uZGlzcGxh
eS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gbWVhc3VyZS5kb2NIZWlnaHQgKyAicHgiOworICAg
IGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heChtZWFzdXJlLmRvY0hl
aWdodCwgbWVhc3VyZS5jbGllbnRIZWlnaHQgLSBzY3JvbGxlckN1dE9mZikgKyAicHgiOworICB9
CisKKworICBmdW5jdGlvbiBjaGVja0ZvcldlYmtpdFdpZHRoQnVnKGNtLCBtZWFzdXJlKSB7Cisg
ICAgLy8gV29yayBhcm91bmQgV2Via2l0IGJ1ZyB3aGVyZSBpdCBzb21ldGltZXMgcmVzZXJ2ZXMg
c3BhY2UgZm9yIGEKKyAgICAvLyBub24tZXhpc3RpbmcgcGhhbnRvbSBzY3JvbGxiYXIgaW4gdGhl
IHNjcm9sbGVyIChJc3N1ZSAjMjQyMCkKKyAgICBpZiAoY20uZGlzcGxheS5zaXplci5vZmZzZXRX
aWR0aCArIGNtLmRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCA8IGNtLmRpc3BsYXkuc2Nyb2xs
ZXIuY2xpZW50V2lkdGggLSAxKSB7CisgICAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhl
aWdodCA9IGNtLmRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9ICIwcHgiOworICAgICAg
Y20uZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgInB4
IjsKKyAgICB9CisgIH0KKworICAvLyBSZWFkIHRoZSBhY3R1YWwgaGVpZ2h0cyBvZiB0aGUgcmVu
ZGVyZWQgbGluZXMsIGFuZCB1cGRhdGUgdGhlaXIKKyAgLy8gc3RvcmVkIGhlaWdodHMgdG8gbWF0
Y2guCiAgIGZ1bmN0aW9uIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKSB7CiAgICAgdmFyIGRp
c3BsYXkgPSBjbS5kaXNwbGF5OwogICAgIHZhciBwcmV2Qm90dG9tID0gZGlzcGxheS5saW5lRGl2
Lm9mZnNldFRvcDsKLSAgICBmb3IgKHZhciBub2RlID0gZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hp
bGQsIGhlaWdodDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIGlmIChub2RlLmxpbmVP
YmopIHsKLSAgICAgIGlmIChpZV9sdDgpIHsKLSAgICAgICAgdmFyIGJvdCA9IG5vZGUub2Zmc2V0
VG9wICsgbm9kZS5vZmZzZXRIZWlnaHQ7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwbGF5
LnZpZXcubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBjdXIgPSBkaXNwbGF5LnZpZXdbaV0sIGhl
aWdodDsKKyAgICAgIGlmIChjdXIuaGlkZGVuKSBjb250aW51ZTsKKyAgICAgIGlmIChpZV91cHRv
NykgeworICAgICAgICB2YXIgYm90ID0gY3VyLm5vZGUub2Zmc2V0VG9wICsgY3VyLm5vZGUub2Zm
c2V0SGVpZ2h0OwogICAgICAgICBoZWlnaHQgPSBib3QgLSBwcmV2Qm90dG9tOwogICAgICAgICBw
cmV2Qm90dG9tID0gYm90OwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIGJveCA9IGdldFJl
Y3Qobm9kZSk7CisgICAgICAgIHZhciBib3ggPSBjdXIubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKTsKICAgICAgICAgaGVpZ2h0ID0gYm94LmJvdHRvbSAtIGJveC50b3A7CiAgICAgICB9Ci0g
ICAgICB2YXIgZGlmZiA9IG5vZGUubGluZU9iai5oZWlnaHQgLSBoZWlnaHQ7CisgICAgICB2YXIg
ZGlmZiA9IGN1ci5saW5lLmhlaWdodCAtIGhlaWdodDsKICAgICAgIGlmIChoZWlnaHQgPCAyKSBo
ZWlnaHQgPSB0ZXh0SGVpZ2h0KGRpc3BsYXkpOwogICAgICAgaWYgKGRpZmYgPiAuMDAxIHx8IGRp
ZmYgPCAtLjAwMSkgewotICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KG5vZGUubGluZU9iaiwgaGVp
Z2h0KTsKLSAgICAgICAgdmFyIHdpZGdldHMgPSBub2RlLmxpbmVPYmoud2lkZ2V0czsKLSAgICAg
ICAgaWYgKHdpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkZ2V0cy5sZW5ndGg7ICsraSkK
LSAgICAgICAgICB3aWRnZXRzW2ldLmhlaWdodCA9IHdpZGdldHNbaV0ubm9kZS5vZmZzZXRIZWln
aHQ7CisgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQoY3VyLmxpbmUsIGhlaWdodCk7CisgICAgICAg
IHVwZGF0ZVdpZGdldEhlaWdodChjdXIubGluZSk7CisgICAgICAgIGlmIChjdXIucmVzdCkgZm9y
ICh2YXIgaiA9IDA7IGogPCBjdXIucmVzdC5sZW5ndGg7IGorKykKKyAgICAgICAgICB1cGRhdGVX
aWRnZXRIZWlnaHQoY3VyLnJlc3Rbal0pOwogICAgICAgfQogICAgIH0KICAgfQogCi0gIGZ1bmN0
aW9uIHVwZGF0ZVZpZXdPZmZzZXQoY20pIHsKLSAgICB2YXIgb2ZmID0gY20uZGlzcGxheS52aWV3
T2Zmc2V0ID0gaGVpZ2h0QXRMaW5lKGNtLCBnZXRMaW5lKGNtLmRvYywgY20uZGlzcGxheS5zaG93
aW5nRnJvbSkpOwotICAgIC8vIFBvc2l0aW9uIHRoZSBtb3ZlciBkaXYgdG8gYWxpZ24gd2l0aCB0
aGUgY3VycmVudCB2aXJ0dWFsIHNjcm9sbCBwb3NpdGlvbgotICAgIGNtLmRpc3BsYXkubW92ZXIu
c3R5bGUudG9wID0gb2ZmICsgInB4IjsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvbXB1dGVJbnRhY3Qo
aW50YWN0LCBjaGFuZ2VzKSB7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGFuZ2VzLmxlbmd0
aCB8fCAwOyBpIDwgbDsgKytpKSB7Ci0gICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXSwgaW50
YWN0MiA9IFtdLCBkaWZmID0gY2hhbmdlLmRpZmYgfHwgMDsKLSAgICAgIGZvciAodmFyIGogPSAw
LCBsMiA9IGludGFjdC5sZW5ndGg7IGogPCBsMjsgKytqKSB7Ci0gICAgICAgIHZhciByYW5nZSA9
IGludGFjdFtqXTsKLSAgICAgICAgaWYgKGNoYW5nZS50byA8PSByYW5nZS5mcm9tICYmIGNoYW5n
ZS5kaWZmKSB7Ci0gICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiByYW5nZS5mcm9tICsgZGlm
ZiwgdG86IHJhbmdlLnRvICsgZGlmZn0pOwotICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZS50byA8
PSByYW5nZS5mcm9tIHx8IGNoYW5nZS5mcm9tID49IHJhbmdlLnRvKSB7Ci0gICAgICAgICAgaW50
YWN0Mi5wdXNoKHJhbmdlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoY2hhbmdl
LmZyb20gPiByYW5nZS5mcm9tKQotICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiByYW5n
ZS5mcm9tLCB0bzogY2hhbmdlLmZyb219KTsKLSAgICAgICAgICBpZiAoY2hhbmdlLnRvIDwgcmFu
Z2UudG8pCi0gICAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206IGNoYW5nZS50byArIGRpZmYs
IHRvOiByYW5nZS50byArIGRpZmZ9KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaW50YWN0
ID0gaW50YWN0MjsKLSAgICB9Ci0gICAgcmV0dXJuIGludGFjdDsKKyAgLy8gUmVhZCBhbmQgc3Rv
cmUgdGhlIGhlaWdodCBvZiBsaW5lIHdpZGdldHMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAvLyBn
aXZlbiBsaW5lLgorICBmdW5jdGlvbiB1cGRhdGVXaWRnZXRIZWlnaHQobGluZSkgeworICAgIGlm
IChsaW5lLndpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsg
KytpKQorICAgICAgbGluZS53aWRnZXRzW2ldLmhlaWdodCA9IGxpbmUud2lkZ2V0c1tpXS5ub2Rl
Lm9mZnNldEhlaWdodDsKICAgfQogCisgIC8vIERvIGEgYnVsay1yZWFkIG9mIHRoZSBET00gcG9z
aXRpb25zIGFuZCBzaXplcyBuZWVkZWQgdG8gZHJhdyB0aGUKKyAgLy8gdmlldywgc28gdGhhdCB3
ZSBkb24ndCBpbnRlcmxlYXZlIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIERPTS4KICAgZnVu
Y3Rpb24gZ2V0RGltZW5zaW9ucyhjbSkgewogICAgIHZhciBkID0gY20uZGlzcGxheSwgbGVmdCA9
IHt9LCB3aWR0aCA9IHt9OwogICAgIGZvciAodmFyIG4gPSBkLmd1dHRlcnMuZmlyc3RDaGlsZCwg
aSA9IDA7IG47IG4gPSBuLm5leHRTaWJsaW5nLCArK2kpIHsKQEAgLTYwNCwxNTQgKzcxNSwyMDcg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB3cmFwcGVy
V2lkdGg6IGQud3JhcHBlci5jbGllbnRXaWR0aH07CiAgIH0KIAotICBmdW5jdGlvbiBwYXRjaERp
c3BsYXkoY20sIGZyb20sIHRvLCBpbnRhY3QsIHVwZGF0ZU51bWJlcnNGcm9tKSB7Ci0gICAgdmFy
IGRpbXMgPSBnZXREaW1lbnNpb25zKGNtKTsKKyAgLy8gU3luYyB0aGUgYWN0dWFsIGRpc3BsYXkg
RE9NIHN0cnVjdHVyZSB3aXRoIGRpc3BsYXkudmlldywgcmVtb3ZpbmcKKyAgLy8gbm9kZXMgZm9y
IGxpbmVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB2aWV3LCBhbmQgY3JlYXRpbmcgdGhlIG9uZXMK
KyAgLy8gdGhhdCBhcmUgbm90IHRoZXJlIHlldCwgYW5kIHVwZGF0aW5nIHRoZSBvbmVzIHRoYXQg
YXJlIG91dCBvZgorICAvLyBkYXRlLgorICBmdW5jdGlvbiBwYXRjaERpc3BsYXkoY20sIHVwZGF0
ZU51bWJlcnNGcm9tLCBkaW1zKSB7CiAgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBsaW5l
TnVtYmVycyA9IGNtLm9wdGlvbnMubGluZU51bWJlcnM7Ci0gICAgaWYgKCFpbnRhY3QubGVuZ3Ro
ICYmICghd2Via2l0IHx8ICFjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCkpCi0gICAgICBy
ZW1vdmVDaGlsZHJlbihkaXNwbGF5LmxpbmVEaXYpOwogICAgIHZhciBjb250YWluZXIgPSBkaXNw
bGF5LmxpbmVEaXYsIGN1ciA9IGNvbnRhaW5lci5maXJzdENoaWxkOwogCiAgICAgZnVuY3Rpb24g
cm0obm9kZSkgewogICAgICAgdmFyIG5leHQgPSBub2RlLm5leHRTaWJsaW5nOwotICAgICAgaWYg
KHdlYmtpdCAmJiBtYWMgJiYgY20uZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQgPT0gbm9kZSkg
eworICAgICAgLy8gV29ya3MgYXJvdW5kIGEgdGhyb3ctc2Nyb2xsIGJ1ZyBpbiBPUyBYIFdlYmtp
dAorICAgICAgaWYgKHdlYmtpdCAmJiBtYWMgJiYgY20uZGlzcGxheS5jdXJyZW50V2hlZWxUYXJn
ZXQgPT0gbm9kZSkKICAgICAgICAgbm9kZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAg
ICBub2RlLmxpbmVPYmogPSBudWxsOwotICAgICAgfSBlbHNlIHsKKyAgICAgIGVsc2UKICAgICAg
ICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOwotICAgICAgfQogICAgICAgcmV0
dXJuIG5leHQ7CiAgICAgfQogCi0gICAgdmFyIG5leHRJbnRhY3QgPSBpbnRhY3Quc2hpZnQoKSwg
bGluZU4gPSBmcm9tOwotICAgIGNtLmRvYy5pdGVyKGZyb20sIHRvLCBmdW5jdGlvbihsaW5lKSB7
Ci0gICAgICBpZiAobmV4dEludGFjdCAmJiBuZXh0SW50YWN0LnRvID09IGxpbmVOKSBuZXh0SW50
YWN0ID0gaW50YWN0LnNoaWZ0KCk7Ci0gICAgICBpZiAobGluZUlzSGlkZGVuKGNtLmRvYywgbGlu
ZSkpIHsKLSAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ICE9IDApIHVwZGF0ZUxpbmVIZWlnaHQobGlu
ZSwgMCk7Ci0gICAgICAgIGlmIChsaW5lLndpZGdldHMgJiYgY3VyICYmIGN1ci5wcmV2aW91c1Np
YmxpbmcpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgdmFyIHcgPSBsaW5lLndpZGdldHNbaV07Ci0gICAgICAgICAgaWYgKHcuc2hvd0lm
SGlkZGVuKSB7Ci0gICAgICAgICAgICB2YXIgcHJldiA9IGN1ci5wcmV2aW91c1NpYmxpbmc7Ci0g
ICAgICAgICAgICBpZiAoL3ByZS9pLnRlc3QocHJldi5ub2RlTmFtZSkpIHsKLSAgICAgICAgICAg
ICAgdmFyIHdyYXAgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmUi
KTsKLSAgICAgICAgICAgICAgcHJldi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh3cmFwLCBwcmV2
KTsKLSAgICAgICAgICAgICAgd3JhcC5hcHBlbmRDaGlsZChwcmV2KTsKLSAgICAgICAgICAgICAg
cHJldiA9IHdyYXA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgd25vZGUgPSBwcmV2
LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW3cubm9kZV0sICJDb2RlTWlycm9yLWxpbmV3aWRnZXQi
KSk7Ci0gICAgICAgICAgICBpZiAoIXcuaGFuZGxlTW91c2VFdmVudHMpIHdub2RlLmlnbm9yZUV2
ZW50cyA9IHRydWU7Ci0gICAgICAgICAgICBwb3NpdGlvbkxpbmVXaWRnZXQodywgd25vZGUsIHBy
ZXYsIGRpbXMpOwotICAgICAgICAgIH0KKyAgICB2YXIgdmlldyA9IGRpc3BsYXkudmlldywgbGlu
ZU4gPSBkaXNwbGF5LnZpZXdGcm9tOworICAgIC8vIExvb3Agb3ZlciB0aGUgZWxlbWVudHMgaW4g
dGhlIHZpZXcsIHN5bmNpbmcgY3VyICh0aGUgRE9NIG5vZGVzCisgICAgLy8gaW4gZGlzcGxheS5s
aW5lRGl2KSB3aXRoIHRoZSB2aWV3IGFzIHdlIGdvLgorICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dmlldy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIGxpbmVWaWV3ID0gdmlld1tpXTsKKyAgICAg
IGlmIChsaW5lVmlldy5oaWRkZW4pIHsKKyAgICAgIH0gZWxzZSBpZiAoIWxpbmVWaWV3Lm5vZGUp
IHsgLy8gTm90IGRyYXduIHlldAorICAgICAgICB2YXIgbm9kZSA9IGJ1aWxkTGluZUVsZW1lbnQo
Y20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7CisgICAgICAgIGNvbnRhaW5lci5pbnNlcnRCZWZv
cmUobm9kZSwgY3VyKTsKKyAgICAgIH0gZWxzZSB7IC8vIEFscmVhZHkgZHJhd24KKyAgICAgICAg
d2hpbGUgKGN1ciAhPSBsaW5lVmlldy5ub2RlKSBjdXIgPSBybShjdXIpOworICAgICAgICB2YXIg
dXBkYXRlTnVtYmVyID0gbGluZU51bWJlcnMgJiYgdXBkYXRlTnVtYmVyc0Zyb20gIT0gbnVsbCAm
JgorICAgICAgICAgIHVwZGF0ZU51bWJlcnNGcm9tIDw9IGxpbmVOICYmIGxpbmVWaWV3LmxpbmVO
dW1iZXI7CisgICAgICAgIGlmIChsaW5lVmlldy5jaGFuZ2VzKSB7CisgICAgICAgICAgaWYgKGlu
ZGV4T2YobGluZVZpZXcuY2hhbmdlcywgImd1dHRlciIpID4gLTEpIHVwZGF0ZU51bWJlciA9IGZh
bHNlOworICAgICAgICAgIHVwZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCBsaW5lVmlldywgbGluZU4s
IGRpbXMpOwogICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKG5leHRJbnRhY3QgJiYgbmV4dElu
dGFjdC5mcm9tIDw9IGxpbmVOICYmIG5leHRJbnRhY3QudG8gPiBsaW5lTikgewotICAgICAgICAv
LyBUaGlzIGxpbmUgaXMgaW50YWN0LiBTa2lwIHRvIHRoZSBhY3R1YWwgbm9kZS4gVXBkYXRlIGl0
cwotICAgICAgICAvLyBsaW5lIG51bWJlciBpZiBuZWVkZWQuCi0gICAgICAgIHdoaWxlIChjdXIu
bGluZU9iaiAhPSBsaW5lKSBjdXIgPSBybShjdXIpOwotICAgICAgICBpZiAobGluZU51bWJlcnMg
JiYgdXBkYXRlTnVtYmVyc0Zyb20gPD0gbGluZU4gJiYgY3VyLmxpbmVOdW1iZXIpCi0gICAgICAg
ICAgc2V0VGV4dENvbnRlbnQoY3VyLmxpbmVOdW1iZXIsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9u
cywgbGluZU4pKTsKLSAgICAgICAgY3VyID0gY3VyLm5leHRTaWJsaW5nOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gRm9yIGxpbmVzIHdpdGggd2lkZ2V0cywgbWFrZSBhbiBhdHRlbXB0IHRv
IGZpbmQgYW5kIHJldXNlCi0gICAgICAgIC8vIHRoZSBleGlzdGluZyBlbGVtZW50LCBzbyB0aGF0
IHdpZGdldHMgYXJlbid0IG5lZWRsZXNzbHkKLSAgICAgICAgLy8gcmVtb3ZlZCBhbmQgcmUtaW5z
ZXJ0ZWQgaW50byB0aGUgZG9tCi0gICAgICAgIGlmIChsaW5lLndpZGdldHMpIGZvciAodmFyIGog
PSAwLCBzZWFyY2ggPSBjdXIsIHJldXNlOyBzZWFyY2ggJiYgaiA8IDIwOyArK2osIHNlYXJjaCA9
IHNlYXJjaC5uZXh0U2libGluZykKLSAgICAgICAgICBpZiAoc2VhcmNoLmxpbmVPYmogPT0gbGlu
ZSAmJiAvZGl2L2kudGVzdChzZWFyY2gubm9kZU5hbWUpKSB7IHJldXNlID0gc2VhcmNoOyBicmVh
azsgfQotICAgICAgICAvLyBUaGlzIGxpbmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLgotICAgICAg
ICB2YXIgbGluZU5vZGUgPSBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lLCBsaW5lTiwgZGltcywg
cmV1c2UpOwotICAgICAgICBpZiAobGluZU5vZGUgIT0gcmV1c2UpIHsKLSAgICAgICAgICBjb250
YWluZXIuaW5zZXJ0QmVmb3JlKGxpbmVOb2RlLCBjdXIpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIHdoaWxlIChjdXIgIT0gcmV1c2UpIGN1ciA9IHJtKGN1cik7Ci0gICAgICAgICAgY3Vy
ID0gY3VyLm5leHRTaWJsaW5nOworICAgICAgICBpZiAodXBkYXRlTnVtYmVyKSB7CisgICAgICAg
ICAgcmVtb3ZlQ2hpbGRyZW4obGluZVZpZXcubGluZU51bWJlcik7CisgICAgICAgICAgbGluZVZp
ZXcubGluZU51bWJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lTnVt
YmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVOKSkpOwogICAgICAgICB9Ci0KLSAgICAgICAgbGluZU5v
ZGUubGluZU9iaiA9IGxpbmU7CisgICAgICAgIGN1ciA9IGxpbmVWaWV3Lm5vZGUubmV4dFNpYmxp
bmc7CiAgICAgICB9Ci0gICAgICArK2xpbmVOOwotICAgIH0pOworICAgICAgbGluZU4gKz0gbGlu
ZVZpZXcuc2l6ZTsKKyAgICB9CiAgICAgd2hpbGUgKGN1cikgY3VyID0gcm0oY3VyKTsKICAgfQog
Ci0gIGZ1bmN0aW9uIGJ1aWxkTGluZUVsZW1lbnQoY20sIGxpbmUsIGxpbmVObywgZGltcywgcmV1
c2UpIHsKLSAgICB2YXIgYnVpbHQgPSBidWlsZExpbmVDb250ZW50KGNtLCBsaW5lKSwgbGluZUVs
ZW1lbnQgPSBidWlsdC5wcmU7Ci0gICAgdmFyIG1hcmtlcnMgPSBsaW5lLmd1dHRlck1hcmtlcnMs
IGRpc3BsYXkgPSBjbS5kaXNwbGF5LCB3cmFwOwotCi0gICAgdmFyIGJnQ2xhc3MgPSBidWlsdC5i
Z0NsYXNzID8gYnVpbHQuYmdDbGFzcyArICIgIiArIChsaW5lLmJnQ2xhc3MgfHwgIiIpIDogbGlu
ZS5iZ0NsYXNzOwotICAgIGlmICghY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiAhbWFya2VycyAm
JiAhYmdDbGFzcyAmJiAhbGluZS53cmFwQ2xhc3MgJiYgIWxpbmUud2lkZ2V0cykKLSAgICAgIHJl
dHVybiBsaW5lRWxlbWVudDsKKyAgLy8gV2hlbiBhbiBhc3BlY3Qgb2YgYSBsaW5lIGNoYW5nZXMs
IGEgc3RyaW5nIGlzIGFkZGVkIHRvCisgIC8vIGxpbmVWaWV3LmNoYW5nZXMuIFRoaXMgdXBkYXRl
cyB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgbGluZSdzCisgIC8vIERPTSBzdHJ1Y3R1cmUuCisg
IGZ1bmN0aW9uIHVwZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMp
IHsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmVWaWV3LmNoYW5nZXMubGVuZ3RoOyBqKysp
IHsKKyAgICAgIHZhciB0eXBlID0gbGluZVZpZXcuY2hhbmdlc1tqXTsKKyAgICAgIGlmICh0eXBl
ID09ICJ0ZXh0IikgdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KTsKKyAgICAgIGVsc2UgaWYg
KHR5cGUgPT0gImd1dHRlciIpIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwg
ZGltcyk7CisgICAgICBlbHNlIGlmICh0eXBlID09ICJjbGFzcyIpIHVwZGF0ZUxpbmVDbGFzc2Vz
KGxpbmVWaWV3KTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIndpZGdldCIpIHVwZGF0ZUxpbmVX
aWRnZXRzKGxpbmVWaWV3LCBkaW1zKTsKKyAgICB9CisgICAgbGluZVZpZXcuY2hhbmdlcyA9IG51
bGw7CisgIH0KIAotICAgIC8vIExpbmVzIHdpdGggZ3V0dGVyIGVsZW1lbnRzLCB3aWRnZXRzIG9y
IGEgYmFja2dyb3VuZCBjbGFzcyBuZWVkCi0gICAgLy8gdG8gYmUgd3JhcHBlZCBhZ2FpbiwgYW5k
IGhhdmUgdGhlIGV4dHJhIGVsZW1lbnRzIGFkZGVkIHRvIHRoZQotICAgIC8vIHdyYXBwZXIgZGl2
CisgIC8vIExpbmVzIHdpdGggZ3V0dGVyIGVsZW1lbnRzLCB3aWRnZXRzIG9yIGEgYmFja2dyb3Vu
ZCBjbGFzcyBuZWVkIHRvCisgIC8vIGJlIHdyYXBwZWQsIGFuZCBoYXZlIHRoZSBleHRyYSBlbGVt
ZW50cyBhZGRlZCB0byB0aGUgd3JhcHBlciBkaXYKKyAgZnVuY3Rpb24gZW5zdXJlTGluZVdyYXBw
ZWQobGluZVZpZXcpIHsKKyAgICBpZiAobGluZVZpZXcubm9kZSA9PSBsaW5lVmlldy50ZXh0KSB7
CisgICAgICBsaW5lVmlldy5ub2RlID0gZWx0KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246
IHJlbGF0aXZlIik7CisgICAgICBpZiAobGluZVZpZXcudGV4dC5wYXJlbnROb2RlKQorICAgICAg
ICBsaW5lVmlldy50ZXh0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGxpbmVWaWV3Lm5vZGUsIGxp
bmVWaWV3LnRleHQpOworICAgICAgbGluZVZpZXcubm9kZS5hcHBlbmRDaGlsZChsaW5lVmlldy50
ZXh0KTsKKyAgICAgIGlmIChpZV91cHRvNykgbGluZVZpZXcubm9kZS5zdHlsZS56SW5kZXggPSAy
OworICAgIH0KKyAgICByZXR1cm4gbGluZVZpZXcubm9kZTsKKyAgfQogCi0gICAgaWYgKHJldXNl
KSB7Ci0gICAgICByZXVzZS5hbGlnbmFibGUgPSBudWxsOwotICAgICAgdmFyIGlzT2sgPSB0cnVl
LCB3aWRnZXRzU2VlbiA9IDAsIGluc2VydEJlZm9yZSA9IG51bGw7Ci0gICAgICBmb3IgKHZhciBu
ID0gcmV1c2UuZmlyc3RDaGlsZCwgbmV4dDsgbjsgbiA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9
IG4ubmV4dFNpYmxpbmc7Ci0gICAgICAgIGlmICghL1xiQ29kZU1pcnJvci1saW5ld2lkZ2V0XGIv
LnRlc3Qobi5jbGFzc05hbWUpKSB7Ci0gICAgICAgICAgcmV1c2UucmVtb3ZlQ2hpbGQobik7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdl
dHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciB3aWRnZXQgPSBsaW5lLndpZGdldHNb
aV07Ci0gICAgICAgICAgICBpZiAod2lkZ2V0Lm5vZGUgPT0gbi5maXJzdENoaWxkKSB7Ci0gICAg
ICAgICAgICAgIGlmICghd2lkZ2V0LmFib3ZlICYmICFpbnNlcnRCZWZvcmUpIGluc2VydEJlZm9y
ZSA9IG47Ci0gICAgICAgICAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3aWRnZXQsIG4sIHJldXNl
LCBkaW1zKTsKLSAgICAgICAgICAgICAgKyt3aWRnZXRzU2VlbjsKLSAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChpID09IGxpbmUu
d2lkZ2V0cy5sZW5ndGgpIHsgaXNPayA9IGZhbHNlOyBicmVhazsgfQotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICByZXVzZS5pbnNlcnRCZWZvcmUobGluZUVsZW1lbnQsIGluc2VydEJlZm9yZSk7
Ci0gICAgICBpZiAoaXNPayAmJiB3aWRnZXRzU2VlbiA9PSBsaW5lLndpZGdldHMubGVuZ3RoKSB7
Ci0gICAgICAgIHdyYXAgPSByZXVzZTsKLSAgICAgICAgcmV1c2UuY2xhc3NOYW1lID0gbGluZS53
cmFwQ2xhc3MgfHwgIiI7Ci0gICAgICB9CisgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVCYWNrZ3JvdW5k
KGxpbmVWaWV3KSB7CisgICAgdmFyIGNscyA9IGxpbmVWaWV3LmJnQ2xhc3MgPyBsaW5lVmlldy5i
Z0NsYXNzICsgIiAiICsgKGxpbmVWaWV3LmxpbmUuYmdDbGFzcyB8fCAiIikgOiBsaW5lVmlldy5s
aW5lLmJnQ2xhc3M7CisgICAgaWYgKGNscykgY2xzICs9ICIgQ29kZU1pcnJvci1saW5lYmFja2dy
b3VuZCI7CisgICAgaWYgKGxpbmVWaWV3LmJhY2tncm91bmQpIHsKKyAgICAgIGlmIChjbHMpIGxp
bmVWaWV3LmJhY2tncm91bmQuY2xhc3NOYW1lID0gY2xzOworICAgICAgZWxzZSB7IGxpbmVWaWV3
LmJhY2tncm91bmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5iYWNrZ3JvdW5kKTsg
bGluZVZpZXcuYmFja2dyb3VuZCA9IG51bGw7IH0KKyAgICB9IGVsc2UgaWYgKGNscykgeworICAg
ICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7CisgICAgICBsaW5lVmll
dy5iYWNrZ3JvdW5kID0gd3JhcC5pbnNlcnRCZWZvcmUoZWx0KCJkaXYiLCBudWxsLCBjbHMpLCB3
cmFwLmZpcnN0Q2hpbGQpOwogICAgIH0KLSAgICBpZiAoIXdyYXApIHsKLSAgICAgIHdyYXAgPSBl
bHQoImRpdiIsIG51bGwsIGxpbmUud3JhcENsYXNzLCAicG9zaXRpb246IHJlbGF0aXZlIik7Ci0g
ICAgICB3cmFwLmFwcGVuZENoaWxkKGxpbmVFbGVtZW50KTsKKyAgfQorCisgIC8vIFdyYXBwZXIg
YXJvdW5kIGJ1aWxkTGluZUNvbnRlbnQgd2hpY2ggd2lsbCByZXVzZSB0aGUgc3RydWN0dXJlCisg
IC8vIGluIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCB3aGVuIHBvc3NpYmxlLgorICBmdW5jdGlv
biBnZXRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpIHsKKyAgICB2YXIgZXh0ID0gY20uZGlzcGxh
eS5leHRlcm5hbE1lYXN1cmVkOworICAgIGlmIChleHQgJiYgZXh0LmxpbmUgPT0gbGluZVZpZXcu
bGluZSkgeworICAgICAgY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbnVsbDsKKyAgICAg
IGxpbmVWaWV3Lm1lYXN1cmUgPSBleHQubWVhc3VyZTsKKyAgICAgIHJldHVybiBleHQuYnVpbHQ7
CiAgICAgfQotICAgIC8vIEtsdWRnZSB0byBtYWtlIHN1cmUgdGhlIHN0eWxlZCBlbGVtZW50IGxp
ZXMgYmVoaW5kIHRoZSBzZWxlY3Rpb24gKGJ5IHotaW5kZXgpCi0gICAgaWYgKGJnQ2xhc3MpCi0g
ICAgICB3cmFwLmluc2VydEJlZm9yZShlbHQoImRpdiIsIG51bGwsIGJnQ2xhc3MgKyAiIENvZGVN
aXJyb3ItbGluZWJhY2tncm91bmQiKSwgd3JhcC5maXJzdENoaWxkKTsKKyAgICByZXR1cm4gYnVp
bGRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpOworICB9CisKKyAgLy8gUmVkcmF3IHRoZSBsaW5l
J3MgdGV4dC4gSW50ZXJhY3RzIHdpdGggdGhlIGJhY2tncm91bmQgYW5kIHRleHQKKyAgLy8gY2xh
c3NlcyBiZWNhdXNlIHRoZSBtb2RlIG1heSBvdXRwdXQgdG9rZW5zIHRoYXQgaW5mbHVlbmNlIHRo
ZXNlCisgIC8vIGNsYXNzZXMuCisgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVUZXh0KGNtLCBsaW5lVmll
dykgeworICAgIHZhciBjbHMgPSBsaW5lVmlldy50ZXh0LmNsYXNzTmFtZTsKKyAgICB2YXIgYnVp
bHQgPSBnZXRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpOworICAgIGlmIChsaW5lVmlldy50ZXh0
ID09IGxpbmVWaWV3Lm5vZGUpIGxpbmVWaWV3Lm5vZGUgPSBidWlsdC5wcmU7CisgICAgbGluZVZp
ZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChidWlsdC5wcmUsIGxpbmVWaWV3LnRleHQp
OworICAgIGxpbmVWaWV3LnRleHQgPSBidWlsdC5wcmU7CisgICAgaWYgKGJ1aWx0LmJnQ2xhc3Mg
IT0gbGluZVZpZXcuYmdDbGFzcyB8fCBidWlsdC50ZXh0Q2xhc3MgIT0gbGluZVZpZXcudGV4dENs
YXNzKSB7CisgICAgICBsaW5lVmlldy5iZ0NsYXNzID0gYnVpbHQuYmdDbGFzczsKKyAgICAgIGxp
bmVWaWV3LnRleHRDbGFzcyA9IGJ1aWx0LnRleHRDbGFzczsKKyAgICAgIHVwZGF0ZUxpbmVDbGFz
c2VzKGxpbmVWaWV3KTsKKyAgICB9IGVsc2UgaWYgKGNscykgeworICAgICAgbGluZVZpZXcudGV4
dC5jbGFzc05hbWUgPSBjbHM7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gdXBkYXRlTGluZUNs
YXNzZXMobGluZVZpZXcpIHsKKyAgICB1cGRhdGVMaW5lQmFja2dyb3VuZChsaW5lVmlldyk7Cisg
ICAgaWYgKGxpbmVWaWV3LmxpbmUud3JhcENsYXNzKQorICAgICAgZW5zdXJlTGluZVdyYXBwZWQo
bGluZVZpZXcpLmNsYXNzTmFtZSA9IGxpbmVWaWV3LmxpbmUud3JhcENsYXNzOworICAgIGVsc2Ug
aWYgKGxpbmVWaWV3Lm5vZGUgIT0gbGluZVZpZXcudGV4dCkKKyAgICAgIGxpbmVWaWV3Lm5vZGUu
Y2xhc3NOYW1lID0gIiI7CisgICAgdmFyIHRleHRDbGFzcyA9IGxpbmVWaWV3LnRleHRDbGFzcyA/
IGxpbmVWaWV3LnRleHRDbGFzcyArICIgIiArIChsaW5lVmlldy5saW5lLnRleHRDbGFzcyB8fCAi
IikgOiBsaW5lVmlldy5saW5lLnRleHRDbGFzczsKKyAgICBsaW5lVmlldy50ZXh0LmNsYXNzTmFt
ZSA9IHRleHRDbGFzcyB8fCAiIjsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVHdXR0ZXIo
Y20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykgeworICAgIGlmIChsaW5lVmlldy5ndXR0ZXIpIHsK
KyAgICAgIGxpbmVWaWV3Lm5vZGUucmVtb3ZlQ2hpbGQobGluZVZpZXcuZ3V0dGVyKTsKKyAgICAg
IGxpbmVWaWV3Lmd1dHRlciA9IG51bGw7CisgICAgfQorICAgIHZhciBtYXJrZXJzID0gbGluZVZp
ZXcubGluZS5ndXR0ZXJNYXJrZXJzOwogICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8
IG1hcmtlcnMpIHsKLSAgICAgIHZhciBndXR0ZXJXcmFwID0gd3JhcC5pbnNlcnRCZWZvcmUoZWx0
KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiICsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbS5vcHRpb25zLmZpeGVk
R3V0dGVyID8gZGltcy5maXhlZFBvcyA6IC1kaW1zLmd1dHRlclRvdGFsV2lkdGgpICsgInB4Iiks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAuZmlyc3RDaGls
ZCk7Ci0gICAgICBpZiAoY20ub3B0aW9ucy5maXhlZEd1dHRlcikgKHdyYXAuYWxpZ25hYmxlIHx8
ICh3cmFwLmFsaWduYWJsZSA9IFtdKSkucHVzaChndXR0ZXJXcmFwKTsKKyAgICAgIHZhciB3cmFw
ID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpOworICAgICAgdmFyIGd1dHRlcldyYXAgPSBs
aW5lVmlldy5ndXR0ZXIgPQorICAgICAgICB3cmFwLmluc2VydEJlZm9yZShlbHQoImRpdiIsIG51
bGwsICJDb2RlTWlycm9yLWd1dHRlci13cmFwcGVyIiwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVm
dDogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY20ub3B0aW9ucy5maXhlZEd1
dHRlciA/IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArICJweCIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlldy50ZXh0KTsKICAgICAgIGlmIChjbS5v
cHRpb25zLmxpbmVOdW1iZXJzICYmICghbWFya2VycyB8fCAhbWFya2Vyc1siQ29kZU1pcnJvci1s
aW5lbnVtYmVycyJdKSkKLSAgICAgICAgd3JhcC5saW5lTnVtYmVyID0gZ3V0dGVyV3JhcC5hcHBl
bmRDaGlsZCgKLSAgICAgICAgICBlbHQoImRpdiIsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywg
bGluZU5vKSwKKyAgICAgICAgbGluZVZpZXcubGluZU51bWJlciA9IGd1dHRlcldyYXAuYXBwZW5k
Q2hpbGQoCisgICAgICAgICAgZWx0KCJkaXYiLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxp
bmVOKSwKICAgICAgICAgICAgICAgIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1
dHRlci1lbHQiLAogICAgICAgICAgICAgICAibGVmdDogIiArIGRpbXMuZ3V0dGVyTGVmdFsiQ29k
ZU1pcnJvci1saW5lbnVtYmVycyJdICsgInB4OyB3aWR0aDogIgotICAgICAgICAgICAgICArIGRp
c3BsYXkubGluZU51bUlubmVyV2lkdGggKyAicHgiKSk7Ci0gICAgICBpZiAobWFya2VycykKLSAg
ICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2sp
IHsKLSAgICAgICAgICB2YXIgaWQgPSBjbS5vcHRpb25zLmd1dHRlcnNba10sIGZvdW5kID0gbWFy
a2Vycy5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgbWFya2Vyc1tpZF07Ci0gICAgICAgICAgaWYgKGZv
dW5kKQotICAgICAgICAgICAgZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZChlbHQoImRpdiIsIFtmb3Vu
ZF0sICJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCAibGVmdDogIiArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaW1zLmd1dHRlckxlZnRbaWRdICsgInB4OyB3aWR0aDog
IiArIGRpbXMuZ3V0dGVyV2lkdGhbaWRdICsgInB4IikpOwotICAgICAgICB9CisgICAgICAgICAg
ICAgICsgY20uZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCArICJweCIpKTsKKyAgICAgIGlmICht
YXJrZXJzKSBmb3IgKHZhciBrID0gMDsgayA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsr
aykgeworICAgICAgICB2YXIgaWQgPSBjbS5vcHRpb25zLmd1dHRlcnNba10sIGZvdW5kID0gbWFy
a2Vycy5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgbWFya2Vyc1tpZF07CisgICAgICAgIGlmIChmb3Vu
ZCkKKyAgICAgICAgICBndXR0ZXJXcmFwLmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW2ZvdW5kXSwg
IkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsICJsZWZ0OiAiICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaW1zLmd1dHRlckxlZnRbaWRdICsgInB4OyB3aWR0aDogIiArIGRp
bXMuZ3V0dGVyV2lkdGhbaWRdICsgInB4IikpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1
bmN0aW9uIHVwZGF0ZUxpbmVXaWRnZXRzKGxpbmVWaWV3LCBkaW1zKSB7CisgICAgaWYgKGxpbmVW
aWV3LmFsaWduYWJsZSkgbGluZVZpZXcuYWxpZ25hYmxlID0gbnVsbDsKKyAgICBmb3IgKHZhciBu
b2RlID0gbGluZVZpZXcubm9kZS5maXJzdENoaWxkLCBuZXh0OyBub2RlOyBub2RlID0gbmV4dCkg
eworICAgICAgdmFyIG5leHQgPSBub2RlLm5leHRTaWJsaW5nOworICAgICAgaWYgKG5vZGUuY2xh
c3NOYW1lID09ICJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKQorICAgICAgICBsaW5lVmlldy5ub2Rl
LnJlbW92ZUNoaWxkKG5vZGUpOwogICAgIH0KLSAgICBpZiAoaWVfbHQ4KSB3cmFwLnN0eWxlLnpJ
bmRleCA9IDI7Ci0gICAgaWYgKGxpbmUud2lkZ2V0cyAmJiB3cmFwICE9IHJldXNlKSBmb3IgKHZh
ciBpID0gMCwgd3MgPSBsaW5lLndpZGdldHM7IGkgPCB3cy5sZW5ndGg7ICsraSkgeworICAgIGlu
c2VydExpbmVXaWRnZXRzKGxpbmVWaWV3LCBkaW1zKTsKKyAgfQorCisgIC8vIEJ1aWxkIGEgbGlu
ZSdzIERPTSByZXByZXNlbnRhdGlvbiBmcm9tIHNjcmF0Y2gKKyAgZnVuY3Rpb24gYnVpbGRMaW5l
RWxlbWVudChjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKSB7CisgICAgdmFyIGJ1aWx0ID0gZ2V0
TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KTsKKyAgICBsaW5lVmlldy50ZXh0ID0gbGluZVZpZXcu
bm9kZSA9IGJ1aWx0LnByZTsKKyAgICBpZiAoYnVpbHQuYmdDbGFzcykgbGluZVZpZXcuYmdDbGFz
cyA9IGJ1aWx0LmJnQ2xhc3M7CisgICAgaWYgKGJ1aWx0LnRleHRDbGFzcykgbGluZVZpZXcudGV4
dENsYXNzID0gYnVpbHQudGV4dENsYXNzOworCisgICAgdXBkYXRlTGluZUNsYXNzZXMobGluZVZp
ZXcpOworICAgIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7Cisg
ICAgaW5zZXJ0TGluZVdpZGdldHMobGluZVZpZXcsIGRpbXMpOworICAgIHJldHVybiBsaW5lVmll
dy5ub2RlOworICB9CisKKyAgLy8gQSBsaW5lVmlldyBtYXkgY29udGFpbiBtdWx0aXBsZSBsb2dp
Y2FsIGxpbmVzICh3aGVuIG1lcmdlZCBieQorICAvLyBjb2xsYXBzZWQgc3BhbnMpLiBUaGUgd2lk
Z2V0cyBmb3IgYWxsIG9mIHRoZW0gbmVlZCB0byBiZSBkcmF3bi4KKyAgZnVuY3Rpb24gaW5zZXJ0
TGluZVdpZGdldHMobGluZVZpZXcsIGRpbXMpIHsKKyAgICBpbnNlcnRMaW5lV2lkZ2V0c0Zvcihs
aW5lVmlldy5saW5lLCBsaW5lVmlldywgZGltcywgdHJ1ZSk7CisgICAgaWYgKGxpbmVWaWV3LnJl
c3QpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKykKKyAgICAg
IGluc2VydExpbmVXaWRnZXRzRm9yKGxpbmVWaWV3LnJlc3RbaV0sIGxpbmVWaWV3LCBkaW1zLCBm
YWxzZSk7CisgIH0KKworICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihsaW5lLCBsaW5l
VmlldywgZGltcywgYWxsb3dBYm92ZSkgeworICAgIGlmICghbGluZS53aWRnZXRzKSByZXR1cm47
CisgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7CisgICAgZm9yICh2
YXIgaSA9IDAsIHdzID0gbGluZS53aWRnZXRzOyBpIDwgd3MubGVuZ3RoOyArK2kpIHsKICAgICAg
IHZhciB3aWRnZXQgPSB3c1tpXSwgbm9kZSA9IGVsdCgiZGl2IiwgW3dpZGdldC5ub2RlXSwgIkNv
ZGVNaXJyb3ItbGluZXdpZGdldCIpOwogICAgICAgaWYgKCF3aWRnZXQuaGFuZGxlTW91c2VFdmVu
dHMpIG5vZGUuaWdub3JlRXZlbnRzID0gdHJ1ZTsKLSAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3
aWRnZXQsIG5vZGUsIHdyYXAsIGRpbXMpOwotICAgICAgaWYgKHdpZGdldC5hYm92ZSkKLSAgICAg
ICAgd3JhcC5pbnNlcnRCZWZvcmUobm9kZSwgY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiBsaW5l
LmhlaWdodCAhPSAwID8gZ3V0dGVyV3JhcCA6IGxpbmVFbGVtZW50KTsKKyAgICAgIHBvc2l0aW9u
TGluZVdpZGdldCh3aWRnZXQsIG5vZGUsIGxpbmVWaWV3LCBkaW1zKTsKKyAgICAgIGlmIChhbGxv
d0Fib3ZlICYmIHdpZGdldC5hYm92ZSkKKyAgICAgICAgd3JhcC5pbnNlcnRCZWZvcmUobm9kZSwg
bGluZVZpZXcuZ3V0dGVyIHx8IGxpbmVWaWV3LnRleHQpOwogICAgICAgZWxzZQogICAgICAgICB3
cmFwLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgc2lnbmFsTGF0ZXIod2lkZ2V0LCAicmVkcmF3
Iik7CiAgICAgfQotICAgIHJldHVybiB3cmFwOwogICB9CiAKLSAgZnVuY3Rpb24gcG9zaXRpb25M
aW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgd3JhcCwgZGltcykgeworICBmdW5jdGlvbiBwb3NpdGlv
bkxpbmVXaWRnZXQod2lkZ2V0LCBub2RlLCBsaW5lVmlldywgZGltcykgewogICAgIGlmICh3aWRn
ZXQubm9IU2Nyb2xsKSB7Ci0gICAgICAod3JhcC5hbGlnbmFibGUgfHwgKHdyYXAuYWxpZ25hYmxl
ID0gW10pKS5wdXNoKG5vZGUpOworICAgICAgKGxpbmVWaWV3LmFsaWduYWJsZSB8fCAobGluZVZp
ZXcuYWxpZ25hYmxlID0gW10pKS5wdXNoKG5vZGUpOwogICAgICAgdmFyIHdpZHRoID0gZGltcy53
cmFwcGVyV2lkdGg7CiAgICAgICBub2RlLnN0eWxlLmxlZnQgPSBkaW1zLmZpeGVkUG9zICsgInB4
IjsKICAgICAgIGlmICghd2lkZ2V0LmNvdmVyR3V0dGVyKSB7CkBAIC03NjcsNTcgKzkzMSwzNzAg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CiAKKyAgLy8g
UE9TSVRJT04gT0JKRUNUCisKKyAgLy8gQSBQb3MgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBvc2l0
aW9uIHdpdGhpbiB0aGUgdGV4dC4KKyAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9zID0gZnVuY3Rp
b24obGluZSwgY2gpIHsKKyAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUG9zKSkgcmV0dXJuIG5l
dyBQb3MobGluZSwgY2gpOworICAgIHRoaXMubGluZSA9IGxpbmU7IHRoaXMuY2ggPSBjaDsKKyAg
fTsKKworICAvLyBDb21wYXJlIHR3byBwb3NpdGlvbnMsIHJldHVybiAwIGlmIHRoZXkgYXJlIHRo
ZSBzYW1lLCBhIG5lZ2F0aXZlCisgIC8vIG51bWJlciB3aGVuIGEgaXMgbGVzcywgYW5kIGEgcG9z
aXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgdmFyIGNtcCA9IENvZGVNaXJyb3IuY21wUG9zID0g
ZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYS5saW5lIC0gYi5saW5lIHx8IGEuY2ggLSBiLmNoOyB9
OworCisgIGZ1bmN0aW9uIGNvcHlQb3MoeCkge3JldHVybiBQb3MoeC5saW5lLCB4LmNoKTt9Cisg
IGZ1bmN0aW9uIG1heFBvcyhhLCBiKSB7IHJldHVybiBjbXAoYSwgYikgPCAwID8gYiA6IGE7IH0K
KyAgZnVuY3Rpb24gbWluUG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBhIDogYjsg
fQorCiAgIC8vIFNFTEVDVElPTiAvIENVUlNPUgogCisgIC8vIFNlbGVjdGlvbiBvYmplY3RzIGFy
ZSBpbW11dGFibGUuIEEgbmV3IG9uZSBpcyBjcmVhdGVkIGV2ZXJ5IHRpbWUKKyAgLy8gdGhlIHNl
bGVjdGlvbiBjaGFuZ2VzLiBBIHNlbGVjdGlvbiBpcyBvbmUgb3IgbW9yZSBub24tb3ZlcmxhcHBp
bmcKKyAgLy8gKGFuZCBub24tdG91Y2hpbmcpIHJhbmdlcywgc29ydGVkLCBhbmQgYW4gaW50ZWdl
ciB0aGF0IGluZGljYXRlcworICAvLyB3aGljaCBvbmUgaXMgdGhlIHByaW1hcnkgc2VsZWN0aW9u
ICh0aGUgb25lIHRoYXQncyBzY3JvbGxlZCBpbnRvCisgIC8vIHZpZXcsIHRoYXQgZ2V0Q3Vyc29y
IHJldHVybnMsIGV0YykuCisgIGZ1bmN0aW9uIFNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleCkg
eworICAgIHRoaXMucmFuZ2VzID0gcmFuZ2VzOworICAgIHRoaXMucHJpbUluZGV4ID0gcHJpbUlu
ZGV4OworICB9CisKKyAgU2VsZWN0aW9uLnByb3RvdHlwZSA9IHsKKyAgICBwcmltYXJ5OiBmdW5j
dGlvbigpIHsgcmV0dXJuIHRoaXMucmFuZ2VzW3RoaXMucHJpbUluZGV4XTsgfSwKKyAgICBlcXVh
bHM6IGZ1bmN0aW9uKG90aGVyKSB7CisgICAgICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuIHRy
dWU7CisgICAgICBpZiAob3RoZXIucHJpbUluZGV4ICE9IHRoaXMucHJpbUluZGV4IHx8IG90aGVy
LnJhbmdlcy5sZW5ndGggIT0gdGhpcy5yYW5nZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CisgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
IHZhciBoZXJlID0gdGhpcy5yYW5nZXNbaV0sIHRoZXJlID0gb3RoZXIucmFuZ2VzW2ldOworICAg
ICAgICBpZiAoY21wKGhlcmUuYW5jaG9yLCB0aGVyZS5hbmNob3IpICE9IDAgfHwgY21wKGhlcmUu
aGVhZCwgdGhlcmUuaGVhZCkgIT0gMCkgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSwKKyAgICBkZWVwQ29weTogZnVuY3Rpb24oKSB7CisgICAgICBmb3Ig
KHZhciBvdXQgPSBbXSwgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKykKKyAgICAg
ICAgb3V0W2ldID0gbmV3IFJhbmdlKGNvcHlQb3ModGhpcy5yYW5nZXNbaV0uYW5jaG9yKSwgY29w
eVBvcyh0aGlzLnJhbmdlc1tpXS5oZWFkKSk7CisgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihv
dXQsIHRoaXMucHJpbUluZGV4KTsKKyAgICB9LAorICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5j
dGlvbigpIHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBp
KyspCisgICAgICAgIGlmICghdGhpcy5yYW5nZXNbaV0uZW1wdHkoKSkgcmV0dXJuIHRydWU7Cisg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKyAgICBjb250YWluczogZnVuY3Rpb24ocG9zLCBl
bmQpIHsKKyAgICAgIGlmICghZW5kKSBlbmQgPSBwb3M7CisgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMu
cmFuZ2VzW2ldOworICAgICAgICBpZiAoY21wKGVuZCwgcmFuZ2UuZnJvbSgpKSA+PSAwICYmIGNt
cChwb3MsIHJhbmdlLnRvKCkpIDw9IDApCisgICAgICAgICAgcmV0dXJuIGk7CisgICAgICB9Cisg
ICAgICByZXR1cm4gLTE7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIFJhbmdlKGFuY2hvciwg
aGVhZCkgeworICAgIHRoaXMuYW5jaG9yID0gYW5jaG9yOyB0aGlzLmhlYWQgPSBoZWFkOworICB9
CisKKyAgUmFuZ2UucHJvdG90eXBlID0geworICAgIGZyb206IGZ1bmN0aW9uKCkgeyByZXR1cm4g
bWluUG9zKHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpOyB9LAorICAgIHRvOiBmdW5jdGlvbigpIHsg
cmV0dXJuIG1heFBvcyh0aGlzLmFuY2hvciwgdGhpcy5oZWFkKTsgfSwKKyAgICBlbXB0eTogZnVu
Y3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5oZWFkLmxpbmUgPT0gdGhpcy5hbmNob3IubGlu
ZSAmJiB0aGlzLmhlYWQuY2ggPT0gdGhpcy5hbmNob3IuY2g7CisgICAgfQorICB9OworCisgIC8v
IFRha2UgYW4gdW5zb3J0ZWQsIHBvdGVudGlhbGx5IG92ZXJsYXBwaW5nIHNldCBvZiByYW5nZXMs
IGFuZAorICAvLyBidWlsZCBhIHNlbGVjdGlvbiBvdXQgb2YgaXQuICdDb25zdW1lcycgcmFuZ2Vz
IGFycmF5IChtb2RpZnlpbmcKKyAgLy8gaXQpLgorICBmdW5jdGlvbiBub3JtYWxpemVTZWxlY3Rp
b24ocmFuZ2VzLCBwcmltSW5kZXgpIHsKKyAgICB2YXIgcHJpbSA9IHJhbmdlc1twcmltSW5kZXhd
OworICAgIHJhbmdlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGNtcChhLmZyb20oKSwg
Yi5mcm9tKCkpOyB9KTsKKyAgICBwcmltSW5kZXggPSBpbmRleE9mKHJhbmdlcywgcHJpbSk7Cisg
ICAgZm9yICh2YXIgaSA9IDE7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBj
dXIgPSByYW5nZXNbaV0sIHByZXYgPSByYW5nZXNbaSAtIDFdOworICAgICAgaWYgKGNtcChwcmV2
LnRvKCksIGN1ci5mcm9tKCkpID49IDApIHsKKyAgICAgICAgdmFyIGZyb20gPSBtaW5Qb3MocHJl
di5mcm9tKCksIGN1ci5mcm9tKCkpLCB0byA9IG1heFBvcyhwcmV2LnRvKCksIGN1ci50bygpKTsK
KyAgICAgICAgdmFyIGludiA9IHByZXYuZW1wdHkoKSA/IGN1ci5mcm9tKCkgPT0gY3VyLmhlYWQg
OiBwcmV2LmZyb20oKSA9PSBwcmV2LmhlYWQ7CisgICAgICAgIGlmIChpIDw9IHByaW1JbmRleCkg
LS1wcmltSW5kZXg7CisgICAgICAgIHJhbmdlcy5zcGxpY2UoLS1pLCAyLCBuZXcgUmFuZ2UoaW52
ID8gdG8gOiBmcm9tLCBpbnYgPyBmcm9tIDogdG8pKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIG5ldyBTZWxlY3Rpb24ocmFuZ2VzLCBwcmltSW5kZXgpOworICB9CisKKyAgZnVuY3Rpb24g
c2ltcGxlU2VsZWN0aW9uKGFuY2hvciwgaGVhZCkgeworICAgIHJldHVybiBuZXcgU2VsZWN0aW9u
KFtuZXcgUmFuZ2UoYW5jaG9yLCBoZWFkIHx8IGFuY2hvcildLCAwKTsKKyAgfQorCisgIC8vIE1v
c3Qgb2YgdGhlIGV4dGVybmFsIEFQSSBjbGlwcyBnaXZlbiBwb3NpdGlvbnMgdG8gbWFrZSBzdXJl
IHRoZXkKKyAgLy8gYWN0dWFsbHkgZXhpc3Qgd2l0aGluIHRoZSBkb2N1bWVudC4KKyAgZnVuY3Rp
b24gY2xpcExpbmUoZG9jLCBuKSB7cmV0dXJuIE1hdGgubWF4KGRvYy5maXJzdCwgTWF0aC5taW4o
biwgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSk7fQorICBmdW5jdGlvbiBjbGlwUG9zKGRvYywg
cG9zKSB7CisgICAgaWYgKHBvcy5saW5lIDwgZG9jLmZpcnN0KSByZXR1cm4gUG9zKGRvYy5maXJz
dCwgMCk7CisgICAgdmFyIGxhc3QgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE7CisgICAgaWYg
KHBvcy5saW5lID4gbGFzdCkgcmV0dXJuIFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4
dC5sZW5ndGgpOworICAgIHJldHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywgcG9zLmxp
bmUpLnRleHQubGVuZ3RoKTsKKyAgfQorICBmdW5jdGlvbiBjbGlwVG9MZW4ocG9zLCBsaW5lbGVu
KSB7CisgICAgdmFyIGNoID0gcG9zLmNoOworICAgIGlmIChjaCA9PSBudWxsIHx8IGNoID4gbGlu
ZWxlbikgcmV0dXJuIFBvcyhwb3MubGluZSwgbGluZWxlbik7CisgICAgZWxzZSBpZiAoY2ggPCAw
KSByZXR1cm4gUG9zKHBvcy5saW5lLCAwKTsKKyAgICBlbHNlIHJldHVybiBwb3M7CisgIH0KKyAg
ZnVuY3Rpb24gaXNMaW5lKGRvYywgbCkge3JldHVybiBsID49IGRvYy5maXJzdCAmJiBsIDwgZG9j
LmZpcnN0ICsgZG9jLnNpemU7fQorICBmdW5jdGlvbiBjbGlwUG9zQXJyYXkoZG9jLCBhcnJheSkg
eworICAgIGZvciAodmFyIG91dCA9IFtdLCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSBv
dXRbaV0gPSBjbGlwUG9zKGRvYywgYXJyYXlbaV0pOworICAgIHJldHVybiBvdXQ7CisgIH0KKwor
ICAvLyBTRUxFQ1RJT04gVVBEQVRFUworCisgIC8vIFRoZSAnc2Nyb2xsJyBwYXJhbWV0ZXIgZ2l2
ZW4gdG8gbWFueSBvZiB0aGVzZSBpbmRpY2F0ZWQgd2hldGhlcgorICAvLyB0aGUgbmV3IGN1cnNv
ciBwb3NpdGlvbiBzaG91bGQgYmUgc2Nyb2xsZWQgaW50byB2aWV3IGFmdGVyCisgIC8vIG1vZGlm
eWluZyB0aGUgc2VsZWN0aW9uLgorCisgIC8vIElmIHNoaWZ0IGlzIGhlbGQgb3IgdGhlIGV4dGVu
ZCBmbGFnIGlzIHNldCwgZXh0ZW5kcyBhIHJhbmdlIHRvCisgIC8vIGluY2x1ZGUgYSBnaXZlbiBw
b3NpdGlvbiAoYW5kIG9wdGlvbmFsbHkgYSBzZWNvbmQgcG9zaXRpb24pLgorICAvLyBPdGhlcndp
c2UsIHNpbXBseSByZXR1cm5zIHRoZSByYW5nZSBiZXR3ZWVuIHRoZSBnaXZlbiBwb3NpdGlvbnMu
CisgIC8vIFVzZWQgZm9yIGN1cnNvciBtb3Rpb24gYW5kIHN1Y2guCisgIGZ1bmN0aW9uIGV4dGVu
ZFJhbmdlKGRvYywgcmFuZ2UsIGhlYWQsIG90aGVyKSB7CisgICAgaWYgKGRvYy5jbSAmJiBkb2Mu
Y20uZGlzcGxheS5zaGlmdCB8fCBkb2MuZXh0ZW5kKSB7CisgICAgICB2YXIgYW5jaG9yID0gcmFu
Z2UuYW5jaG9yOworICAgICAgaWYgKG90aGVyKSB7CisgICAgICAgIHZhciBwb3NCZWZvcmUgPSBj
bXAoaGVhZCwgYW5jaG9yKSA8IDA7CisgICAgICAgIGlmIChwb3NCZWZvcmUgIT0gKGNtcChvdGhl
ciwgYW5jaG9yKSA8IDApKSB7CisgICAgICAgICAgYW5jaG9yID0gaGVhZDsKKyAgICAgICAgICBo
ZWFkID0gb3RoZXI7CisgICAgICAgIH0gZWxzZSBpZiAocG9zQmVmb3JlICE9IChjbXAoaGVhZCwg
b3RoZXIpIDwgMCkpIHsKKyAgICAgICAgICBoZWFkID0gb3RoZXI7CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICAgIHJldHVybiBuZXcgUmFuZ2UoYW5jaG9yLCBoZWFkKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgcmV0dXJuIG5ldyBSYW5nZShvdGhlciB8fCBoZWFkLCBoZWFkKTsKKyAgICB9CisgIH0K
KworICAvLyBFeHRlbmQgdGhlIHByaW1hcnkgc2VsZWN0aW9uIHJhbmdlLCBkaXNjYXJkIHRoZSBy
ZXN0LgorICBmdW5jdGlvbiBleHRlbmRTZWxlY3Rpb24oZG9jLCBoZWFkLCBvdGhlciwgb3B0aW9u
cykgeworICAgIHNldFNlbGVjdGlvbihkb2MsIG5ldyBTZWxlY3Rpb24oW2V4dGVuZFJhbmdlKGRv
YywgZG9jLnNlbC5wcmltYXJ5KCksIGhlYWQsIG90aGVyKV0sIDApLCBvcHRpb25zKTsKKyAgfQor
CisgIC8vIEV4dGVuZCBhbGwgc2VsZWN0aW9ucyAocG9zIGlzIGFuIGFycmF5IG9mIHNlbGVjdGlv
bnMgd2l0aCBsZW5ndGgKKyAgLy8gZXF1YWwgdGhlIG51bWJlciBvZiBzZWxlY3Rpb25zKQorICBm
dW5jdGlvbiBleHRlbmRTZWxlY3Rpb25zKGRvYywgaGVhZHMsIG9wdGlvbnMpIHsKKyAgICBmb3Ig
KHZhciBvdXQgPSBbXSwgaSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykKKyAg
ICAgIG91dFtpXSA9IGV4dGVuZFJhbmdlKGRvYywgZG9jLnNlbC5yYW5nZXNbaV0sIGhlYWRzW2ld
LCBudWxsKTsKKyAgICB2YXIgbmV3U2VsID0gbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgZG9jLnNl
bC5wcmltSW5kZXgpOworICAgIHNldFNlbGVjdGlvbihkb2MsIG5ld1NlbCwgb3B0aW9ucyk7Cisg
IH0KKworICAvLyBVcGRhdGVzIGEgc2luZ2xlIHJhbmdlIGluIHRoZSBzZWxlY3Rpb24uCisgIGZ1
bmN0aW9uIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpLCByYW5nZSwgb3B0aW9ucykgeworICAg
IHZhciByYW5nZXMgPSBkb2Muc2VsLnJhbmdlcy5zbGljZSgwKTsKKyAgICByYW5nZXNbaV0gPSBy
YW5nZTsKKyAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLCBk
b2Muc2VsLnByaW1JbmRleCksIG9wdGlvbnMpOworICB9CisKKyAgLy8gUmVzZXQgdGhlIHNlbGVj
dGlvbiB0byBhIHNpbmdsZSByYW5nZS4KKyAgZnVuY3Rpb24gc2V0U2ltcGxlU2VsZWN0aW9uKGRv
YywgYW5jaG9yLCBoZWFkLCBvcHRpb25zKSB7CisgICAgc2V0U2VsZWN0aW9uKGRvYywgc2ltcGxl
U2VsZWN0aW9uKGFuY2hvciwgaGVhZCksIG9wdGlvbnMpOworICB9CisKKyAgLy8gR2l2ZSBiZWZv
cmVTZWxlY3Rpb25DaGFuZ2UgaGFuZGxlcnMgYSBjaGFuZ2UgdG8gaW5mbHVlbmNlIGEKKyAgLy8g
c2VsZWN0aW9uIHVwZGF0ZS4KKyAgZnVuY3Rpb24gZmlsdGVyU2VsZWN0aW9uQ2hhbmdlKGRvYywg
c2VsKSB7CisgICAgdmFyIG9iaiA9IHsKKyAgICAgIHJhbmdlczogc2VsLnJhbmdlcywKKyAgICAg
IHVwZGF0ZTogZnVuY3Rpb24ocmFuZ2VzKSB7CisgICAgICAgIHRoaXMucmFuZ2VzID0gW107Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKQorICAgICAgICAg
IHRoaXMucmFuZ2VzW2ldID0gbmV3IFJhbmdlKGNsaXBQb3MoZG9jLCByYW5nZXNbaV0uYW5jaG9y
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9zKGRvYywgcmFu
Z2VzW2ldLmhlYWQpKTsKKyAgICAgIH0KKyAgICB9OworICAgIHNpZ25hbChkb2MsICJiZWZvcmVT
ZWxlY3Rpb25DaGFuZ2UiLCBkb2MsIG9iaik7CisgICAgaWYgKGRvYy5jbSkgc2lnbmFsKGRvYy5j
bSwgImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsIGRvYy5jbSwgb2JqKTsKKyAgICBpZiAob2JqLnJh
bmdlcyAhPSBzZWwucmFuZ2VzKSByZXR1cm4gbm9ybWFsaXplU2VsZWN0aW9uKG9iai5yYW5nZXMs
IG9iai5yYW5nZXMubGVuZ3RoIC0gMSk7CisgICAgZWxzZSByZXR1cm4gc2VsOworICB9CisKKyAg
ZnVuY3Rpb24gc2V0U2VsZWN0aW9uUmVwbGFjZUhpc3RvcnkoZG9jLCBzZWwsIG9wdGlvbnMpIHsK
KyAgICB2YXIgZG9uZSA9IGRvYy5oaXN0b3J5LmRvbmUsIGxhc3QgPSBsc3QoZG9uZSk7CisgICAg
aWYgKGxhc3QgJiYgbGFzdC5yYW5nZXMpIHsKKyAgICAgIGRvbmVbZG9uZS5sZW5ndGggLSAxXSA9
IHNlbDsKKyAgICAgIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbCwgb3B0aW9ucyk7CisgICAg
fSBlbHNlIHsKKyAgICAgIHNldFNlbGVjdGlvbihkb2MsIHNlbCwgb3B0aW9ucyk7CisgICAgfQor
ICB9CisKKyAgLy8gU2V0IGEgbmV3IHNlbGVjdGlvbi4KKyAgZnVuY3Rpb24gc2V0U2VsZWN0aW9u
KGRvYywgc2VsLCBvcHRpb25zKSB7CisgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmlnaW4g
JiYgZG9jLmNtKSBkb2MuY20uY3VyT3Aub3JpZ2luID0gb3B0aW9ucy5vcmlnaW47CisgICAgc2V0
U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRpb25zKTsKKyAgICBhZGRTZWxlY3Rpb25Ub0hp
c3RvcnkoZG9jLCBkb2Muc2VsLCBkb2MuY20gPyBkb2MuY20uY3VyT3AuaWQgOiBOYU4sIG9wdGlv
bnMpOworICB9CisKKyAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRp
b25zKSB7CisgICAgaWYgKGhhc0hhbmRsZXIoZG9jLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikg
fHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikp
CisgICAgICBzZWwgPSBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBzZWwpOworCisgICAgdmFy
IGJpYXMgPSBjbXAoc2VsLnByaW1hcnkoKS5oZWFkLCBkb2Muc2VsLnByaW1hcnkoKS5oZWFkKSA8
IDAgPyAtMSA6IDE7CisgICAgc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBza2lwQXRvbWljSW5TZWxl
Y3Rpb24oZG9jLCBzZWwsIGJpYXMsIHRydWUpKTsKKworICAgIGlmICghKG9wdGlvbnMgJiYgb3B0
aW9ucy5zY3JvbGwgPT09IGZhbHNlKSAmJiBkb2MuY20pCisgICAgICBlbnN1cmVDdXJzb3JWaXNp
YmxlKGRvYy5jbSk7CisgIH0KKworICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25Jbm5lcihkb2MsIHNl
bCkgeworICAgIGlmIChzZWwuZXF1YWxzKGRvYy5zZWwpKSByZXR1cm47CisKKyAgICBkb2Muc2Vs
ID0gc2VsOworCisgICAgaWYgKGRvYy5jbSkKKyAgICAgIGRvYy5jbS5jdXJPcC51cGRhdGVJbnB1
dCA9IGRvYy5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0KKyAgICAgICAgZG9jLmNtLmN1ck9w
LmN1cnNvckFjdGl2aXR5ID0gdHJ1ZTsKKyAgICBzaWduYWxMYXRlcihkb2MsICJjdXJzb3JBY3Rp
dml0eSIsIGRvYyk7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc2VsZWN0aW9uIGRvZXMg
bm90IHBhcnRpYWxseSBzZWxlY3QgYW55IGF0b21pYworICAvLyBtYXJrZWQgcmFuZ2VzLgorICBm
dW5jdGlvbiByZUNoZWNrU2VsZWN0aW9uKGRvYykgeworICAgIHNldFNlbGVjdGlvbklubmVyKGRv
Yywgc2tpcEF0b21pY0luU2VsZWN0aW9uKGRvYywgZG9jLnNlbCwgbnVsbCwgZmFsc2UpLCBzZWxf
ZG9udFNjcm9sbCk7CisgIH0KKworICAvLyBSZXR1cm4gYSBzZWxlY3Rpb24gdGhhdCBkb2VzIG5v
dCBwYXJ0aWFsbHkgc2VsZWN0IGFueSBhdG9taWMKKyAgLy8gcmFuZ2VzLgorICBmdW5jdGlvbiBz
a2lwQXRvbWljSW5TZWxlY3Rpb24oZG9jLCBzZWwsIGJpYXMsIG1heUNsZWFyKSB7CisgICAgdmFy
IG91dDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsK
KyAgICAgIHZhciByYW5nZSA9IHNlbC5yYW5nZXNbaV07CisgICAgICB2YXIgbmV3QW5jaG9yID0g
c2tpcEF0b21pYyhkb2MsIHJhbmdlLmFuY2hvciwgYmlhcywgbWF5Q2xlYXIpOworICAgICAgdmFy
IG5ld0hlYWQgPSBza2lwQXRvbWljKGRvYywgcmFuZ2UuaGVhZCwgYmlhcywgbWF5Q2xlYXIpOwor
ICAgICAgaWYgKG91dCB8fCBuZXdBbmNob3IgIT0gcmFuZ2UuYW5jaG9yIHx8IG5ld0hlYWQgIT0g
cmFuZ2UuaGVhZCkgeworICAgICAgICBpZiAoIW91dCkgb3V0ID0gc2VsLnJhbmdlcy5zbGljZSgw
LCBpKTsKKyAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKG5ld0FuY2hvciwgbmV3SGVhZCk7Cisg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBvdXQgPyBub3JtYWxpemVTZWxlY3Rpb24ob3V0LCBz
ZWwucHJpbUluZGV4KSA6IHNlbDsKKyAgfQorCisgIC8vIEVuc3VyZSBhIGdpdmVuIHBvc2l0aW9u
IGlzIG5vdCBpbnNpZGUgYW4gYXRvbWljIHJhbmdlLgorICBmdW5jdGlvbiBza2lwQXRvbWljKGRv
YywgcG9zLCBiaWFzLCBtYXlDbGVhcikgeworICAgIHZhciBmbGlwcGVkID0gZmFsc2UsIGN1clBv
cyA9IHBvczsKKyAgICB2YXIgZGlyID0gYmlhcyB8fCAxOworICAgIGRvYy5jYW50RWRpdCA9IGZh
bHNlOworICAgIHNlYXJjaDogZm9yICg7OykgeworICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRv
YywgY3VyUG9zLmxpbmUpOworICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIHsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgdmFyIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXSwgbSA9IHNwLm1hcmtlcjsKKyAgICAg
ICAgICBpZiAoKHNwLmZyb20gPT0gbnVsbCB8fCAobS5pbmNsdXNpdmVMZWZ0ID8gc3AuZnJvbSA8
PSBjdXJQb3MuY2ggOiBzcC5mcm9tIDwgY3VyUG9zLmNoKSkgJiYKKyAgICAgICAgICAgICAgKHNw
LnRvID09IG51bGwgfHwgKG0uaW5jbHVzaXZlUmlnaHQgPyBzcC50byA+PSBjdXJQb3MuY2ggOiBz
cC50byA+IGN1clBvcy5jaCkpKSB7CisgICAgICAgICAgICBpZiAobWF5Q2xlYXIpIHsKKyAgICAg
ICAgICAgICAgc2lnbmFsKG0sICJiZWZvcmVDdXJzb3JFbnRlciIpOworICAgICAgICAgICAgICBp
ZiAobS5leHBsaWNpdGx5Q2xlYXJlZCkgeworICAgICAgICAgICAgICAgIGlmICghbGluZS5tYXJr
ZWRTcGFucykgYnJlYWs7CisgICAgICAgICAgICAgICAgZWxzZSB7LS1pOyBjb250aW51ZTt9Cisg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbS5hdG9taWMp
IGNvbnRpbnVlOworICAgICAgICAgICAgdmFyIG5ld1BvcyA9IG0uZmluZChkaXIgPCAwID8gLTEg
OiAxKTsKKyAgICAgICAgICAgIGlmIChjbXAobmV3UG9zLCBjdXJQb3MpID09IDApIHsKKyAgICAg
ICAgICAgICAgbmV3UG9zLmNoICs9IGRpcjsKKyAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5jaCA8
IDApIHsKKyAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUgPiBkb2MuZmlyc3QpIG5ld1Bv
cyA9IGNsaXBQb3MoZG9jLCBQb3MobmV3UG9zLmxpbmUgLSAxKSk7CisgICAgICAgICAgICAgICAg
ZWxzZSBuZXdQb3MgPSBudWxsOworICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld1Bvcy5jaCA+
IGxpbmUudGV4dC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUgPCBk
b2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpIG5ld1BvcyA9IFBvcyhuZXdQb3MubGluZSArIDEsIDAp
OworICAgICAgICAgICAgICAgIGVsc2UgbmV3UG9zID0gbnVsbDsKKyAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICBpZiAoIW5ld1BvcykgeworICAgICAgICAgICAgICAgIGlmIChmbGlwcGVk
KSB7CisgICAgICAgICAgICAgICAgICAvLyBEcml2ZW4gaW4gYSBjb3JuZXIgLS0gbm8gdmFsaWQg
Y3Vyc29yIHBvc2l0aW9uIGZvdW5kIGF0IGFsbAorICAgICAgICAgICAgICAgICAgLy8gLS0gdHJ5
IGFnYWluICp3aXRoKiBjbGVhcmluZywgaWYgd2UgZGlkbid0IGFscmVhZHkKKyAgICAgICAgICAg
ICAgICAgIGlmICghbWF5Q2xlYXIpIHJldHVybiBza2lwQXRvbWljKGRvYywgcG9zLCBiaWFzLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdHVybiBvZmYgZWRpdGluZyB1
bnRpbCBmdXJ0aGVyIG5vdGljZSwgYW5kIHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGRvYworICAg
ICAgICAgICAgICAgICAgZG9jLmNhbnRFZGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIHJl
dHVybiBQb3MoZG9jLmZpcnN0LCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZmxpcHBlZCA9IHRydWU7IG5ld1BvcyA9IHBvczsgZGlyID0gLWRpcjsKKyAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VyUG9zID0gbmV3UG9zOworICAgICAg
ICAgICAgY29udGludWUgc2VhcmNoOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQor
ICAgICAgcmV0dXJuIGN1clBvczsKKyAgICB9CisgIH0KKworICAvLyBTRUxFQ1RJT04gRFJBV0lO
RworCisgIC8vIFJlZHJhdyB0aGUgc2VsZWN0aW9uIGFuZC9vciBjdXJzb3IKICAgZnVuY3Rpb24g
dXBkYXRlU2VsZWN0aW9uKGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAg
IHZhciBjb2xsYXBzZWQgPSBwb3NFcShjbS5kb2Muc2VsLmZyb20sIGNtLmRvYy5zZWwudG8pOwot
ICAgIGlmIChjb2xsYXBzZWQgfHwgY20ub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZykK
LSAgICAgIHVwZGF0ZVNlbGVjdGlvbkN1cnNvcihjbSk7Ci0gICAgZWxzZQotICAgICAgZGlzcGxh
eS5jdXJzb3Iuc3R5bGUuZGlzcGxheSA9IGRpc3BsYXkub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxh
eSA9ICJub25lIjsKLSAgICBpZiAoIWNvbGxhcHNlZCkKLSAgICAgIHVwZGF0ZVNlbGVjdGlvblJh
bmdlKGNtKTsKLSAgICBlbHNlCi0gICAgICBkaXNwbGF5LnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNw
bGF5ID0gIm5vbmUiOworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9j
OworICAgIHZhciBjdXJGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo
KTsKKyAgICB2YXIgc2VsRnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50
KCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsr
KSB7CisgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTsKKyAgICAgIHZhciBjb2xs
YXBzZWQgPSByYW5nZS5lbXB0eSgpOworICAgICAgaWYgKGNvbGxhcHNlZCB8fCBjbS5vcHRpb25z
LnNob3dDdXJzb3JXaGVuU2VsZWN0aW5nKQorICAgICAgICBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNt
LCByYW5nZSwgY3VyRnJhZ21lbnQpOworICAgICAgaWYgKCFjb2xsYXBzZWQpCisgICAgICAgIGRy
YXdTZWxlY3Rpb25SYW5nZShjbSwgcmFuZ2UsIHNlbEZyYWdtZW50KTsKKyAgICB9CiAKICAgICAv
LyBNb3ZlIHRoZSBoaWRkZW4gdGV4dGFyZWEgbmVhciB0aGUgY3Vyc29yIHRvIHByZXZlbnQgc2Ny
b2xsaW5nIGFydGlmYWN0cwogICAgIGlmIChjbS5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3Ip
IHsKLSAgICAgIHZhciBoZWFkUG9zID0gY3Vyc29yQ29vcmRzKGNtLCBjbS5kb2Muc2VsLmhlYWQs
ICJkaXYiKTsKLSAgICAgIHZhciB3cmFwT2ZmID0gZ2V0UmVjdChkaXNwbGF5LndyYXBwZXIpLCBs
aW5lT2ZmID0gZ2V0UmVjdChkaXNwbGF5LmxpbmVEaXYpOwotICAgICAgZGlzcGxheS5pbnB1dERp
di5zdHlsZS50b3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50
SGVpZ2h0IC0gMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlYWRQb3MudG9wICsgbGluZU9mZi50b3AgLSB3cmFwT2ZmLnRvcCkpICsg
InB4IjsKLSAgICAgIGRpc3BsYXkuaW5wdXREaXYuc3R5bGUubGVmdCA9IE1hdGgubWF4KDAsIE1h
dGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCAtIDEwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBvcy5sZWZ0ICsg
bGluZU9mZi5sZWZ0IC0gd3JhcE9mZi5sZWZ0KSkgKyAicHgiOworICAgICAgdmFyIGhlYWRQb3Mg
PSBjdXJzb3JDb29yZHMoY20sIGRvYy5zZWwucHJpbWFyeSgpLmhlYWQsICJkaXYiKTsKKyAgICAg
IHZhciB3cmFwT2ZmID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBs
aW5lT2ZmID0gZGlzcGxheS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAg
dmFyIHRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWln
aHQgLSAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLnRv
cCArIGxpbmVPZmYudG9wIC0gd3JhcE9mZi50b3ApKTsKKyAgICAgIHZhciBsZWZ0ID0gTWF0aC5t
YXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MubGVmdCArIGxpbmVPZmYubGVm
dCAtIHdyYXBPZmYubGVmdCkpOworICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3AgPSB0
b3AgKyAicHgiOworICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS5sZWZ0ID0gbGVmdCArICJw
eCI7CiAgICAgfQorCisgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5jdXJzb3JEaXYs
IGN1ckZyYWdtZW50KTsKKyAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LnNlbGVjdGlv
bkRpdiwgc2VsRnJhZ21lbnQpOwogICB9CiAKLSAgLy8gTm8gc2VsZWN0aW9uLCBwbGFpbiBjdXJz
b3IKLSAgZnVuY3Rpb24gdXBkYXRlU2VsZWN0aW9uQ3Vyc29yKGNtKSB7Ci0gICAgdmFyIGRpc3Bs
YXkgPSBjbS5kaXNwbGF5LCBwb3MgPSBjdXJzb3JDb29yZHMoY20sIGNtLmRvYy5zZWwuaGVhZCwg
ImRpdiIpOwotICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxlLmxlZnQgPSBwb3MubGVmdCArICJweCI7
Ci0gICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUudG9wID0gcG9zLnRvcCArICJweCI7Ci0gICAgZGlz
cGxheS5jdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgoMCwgcG9zLmJvdHRvbSAtIHBvcy50
b3ApICogY20ub3B0aW9ucy5jdXJzb3JIZWlnaHQgKyAicHgiOwotICAgIGRpc3BsYXkuY3Vyc29y
LnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgLy8gRHJhd3MgYSBjdXJzb3IgZm9yIHRoZSBnaXZlbiBy
YW5nZQorICBmdW5jdGlvbiBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCByYW5nZSwgb3V0cHV0KSB7
CisgICAgdmFyIHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgcmFuZ2UuaGVhZCwgImRpdiIpOworCisg
ICAgdmFyIGN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChlbHQoImRpdiIsICJcdTAwYTAiLCAi
Q29kZU1pcnJvci1jdXJzb3IiKSk7CisgICAgY3Vyc29yLnN0eWxlLmxlZnQgPSBwb3MubGVmdCAr
ICJweCI7CisgICAgY3Vyc29yLnN0eWxlLnRvcCA9IHBvcy50b3AgKyAicHgiOworICAgIGN1cnNv
ci5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heCgwLCBwb3MuYm90dG9tIC0gcG9zLnRvcCkgKiBjbS5v
cHRpb25zLmN1cnNvckhlaWdodCArICJweCI7CiAKICAgICBpZiAocG9zLm90aGVyKSB7Ci0gICAg
ICBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGRpc3BsYXku
b3RoZXJDdXJzb3Iuc3R5bGUubGVmdCA9IHBvcy5vdGhlci5sZWZ0ICsgInB4IjsKLSAgICAgIGRp
c3BsYXkub3RoZXJDdXJzb3Iuc3R5bGUudG9wID0gcG9zLm90aGVyLnRvcCArICJweCI7Ci0gICAg
ICBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLmhlaWdodCA9IChwb3Mub3RoZXIuYm90dG9tIC0g
cG9zLm90aGVyLnRvcCkgKiAuODUgKyAicHgiOwotICAgIH0gZWxzZSB7IGRpc3BsYXkub3RoZXJD
dXJzb3Iuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgfQorICAgICAgLy8gU2Vjb25kYXJ5IGN1cnNv
ciwgc2hvd24gd2hlbiBvbiBhICdqdW1wJyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0CisgICAgICB2
YXIgb3RoZXJDdXJzb3IgPSBvdXRwdXQuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCAiXHUwMGEwIiwg
IkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIikpOworICAgICAg
b3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICIiOworICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUu
bGVmdCA9IHBvcy5vdGhlci5sZWZ0ICsgInB4IjsKKyAgICAgIG90aGVyQ3Vyc29yLnN0eWxlLnRv
cCA9IHBvcy5vdGhlci50b3AgKyAicHgiOworICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0
ID0gKHBvcy5vdGhlci5ib3R0b20gLSBwb3Mub3RoZXIudG9wKSAqIC44NSArICJweCI7CisgICAg
fQogICB9CiAKLSAgLy8gSGlnaGxpZ2h0IHNlbGVjdGlvbgotICBmdW5jdGlvbiB1cGRhdGVTZWxl
Y3Rpb25SYW5nZShjbSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20u
ZG9jLCBzZWwgPSBjbS5kb2Muc2VsOworICAvLyBEcmF3cyB0aGUgZ2l2ZW4gcmFuZ2UgYXMgYSBo
aWdobGlnaHRlZCBzZWxlY3Rpb24KKyAgZnVuY3Rpb24gZHJhd1NlbGVjdGlvblJhbmdlKGNtLCBy
YW5nZSwgb3V0cHV0KSB7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5k
b2M7CiAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
OwotICAgIHZhciBjbGllbnRXaWR0aCA9IGRpc3BsYXkubGluZVNwYWNlLm9mZnNldFdpZHRoLCBw
bCA9IHBhZGRpbmdMZWZ0KGNtLmRpc3BsYXkpOworICAgIHZhciBwYWRkaW5nID0gcGFkZGluZ0go
Y20uZGlzcGxheSksIGxlZnRTaWRlID0gcGFkZGluZy5sZWZ0LCByaWdodFNpZGUgPSBkaXNwbGF5
LmxpbmVTcGFjZS5vZmZzZXRXaWR0aCAtIHBhZGRpbmcucmlnaHQ7CiAKICAgICBmdW5jdGlvbiBh
ZGQobGVmdCwgdG9wLCB3aWR0aCwgYm90dG9tKSB7CiAgICAgICBpZiAodG9wIDwgMCkgdG9wID0g
MDsKKyAgICAgIHRvcCA9IE1hdGgucm91bmQodG9wKTsKKyAgICAgIGJvdHRvbSA9IE1hdGgucm91
bmQoYm90dG9tKTsKICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgbnVsbCwg
IkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCAicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiICsgbGVm
dCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB4OyB0b3A6ICIgKyB0b3AgKyAi
cHg7IHdpZHRoOiAiICsgKHdpZHRoID09IG51bGwgPyBjbGllbnRXaWR0aCAtIGxlZnQgOiB3aWR0
aCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweDsgdG9wOiAiICsgdG9wICsg
InB4OyB3aWR0aDogIiArICh3aWR0aCA9PSBudWxsID8gcmlnaHRTaWRlIC0gbGVmdCA6IHdpZHRo
KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB4OyBoZWlnaHQ6ICIgKyAoYm90
dG9tIC0gdG9wKSArICJweCIpKTsKICAgICB9CiAKQEAgLTg0MCw0NCArMTMxNyw0NCBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICBsZWZ0ID0gbGVmdFBvcy5s
ZWZ0OwogICAgICAgICAgIHJpZ2h0ID0gcmlnaHRQb3MucmlnaHQ7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGZyb21BcmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBwbDsKKyAgICAgICAg
aWYgKGZyb21BcmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBsZWZ0U2lkZTsKICAgICAg
ICAgaWYgKHJpZ2h0UG9zLnRvcCAtIGxlZnRQb3MudG9wID4gMykgeyAvLyBEaWZmZXJlbnQgbGlu
ZXMsIGRyYXcgdG9wIHBhcnQKICAgICAgICAgICBhZGQobGVmdCwgbGVmdFBvcy50b3AsIG51bGws
IGxlZnRQb3MuYm90dG9tKTsKLSAgICAgICAgICBsZWZ0ID0gcGw7CisgICAgICAgICAgbGVmdCA9
IGxlZnRTaWRlOwogICAgICAgICAgIGlmIChsZWZ0UG9zLmJvdHRvbSA8IHJpZ2h0UG9zLnRvcCkg
YWRkKGxlZnQsIGxlZnRQb3MuYm90dG9tLCBudWxsLCByaWdodFBvcy50b3ApOwogICAgICAgICB9
Ci0gICAgICAgIGlmICh0b0FyZyA9PSBudWxsICYmIHRvID09IGxpbmVMZW4pIHJpZ2h0ID0gY2xp
ZW50V2lkdGg7CisgICAgICAgIGlmICh0b0FyZyA9PSBudWxsICYmIHRvID09IGxpbmVMZW4pIHJp
Z2h0ID0gcmlnaHRTaWRlOwogICAgICAgICBpZiAoIXN0YXJ0IHx8IGxlZnRQb3MudG9wIDwgc3Rh
cnQudG9wIHx8IGxlZnRQb3MudG9wID09IHN0YXJ0LnRvcCAmJiBsZWZ0UG9zLmxlZnQgPCBzdGFy
dC5sZWZ0KQogICAgICAgICAgIHN0YXJ0ID0gbGVmdFBvczsKICAgICAgICAgaWYgKCFlbmQgfHwg
cmlnaHRQb3MuYm90dG9tID4gZW5kLmJvdHRvbSB8fCByaWdodFBvcy5ib3R0b20gPT0gZW5kLmJv
dHRvbSAmJiByaWdodFBvcy5yaWdodCA+IGVuZC5yaWdodCkKICAgICAgICAgICBlbmQgPSByaWdo
dFBvczsKLSAgICAgICAgaWYgKGxlZnQgPCBwbCArIDEpIGxlZnQgPSBwbDsKKyAgICAgICAgaWYg
KGxlZnQgPCBsZWZ0U2lkZSArIDEpIGxlZnQgPSBsZWZ0U2lkZTsKICAgICAgICAgYWRkKGxlZnQs
IHJpZ2h0UG9zLnRvcCwgcmlnaHQgLSBsZWZ0LCByaWdodFBvcy5ib3R0b20pOwogICAgICAgfSk7
CiAgICAgICByZXR1cm4ge3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9OwogICAgIH0KIAotICAgIGlm
IChzZWwuZnJvbS5saW5lID09IHNlbC50by5saW5lKSB7Ci0gICAgICBkcmF3Rm9yTGluZShzZWwu
ZnJvbS5saW5lLCBzZWwuZnJvbS5jaCwgc2VsLnRvLmNoKTsKKyAgICB2YXIgc0Zyb20gPSByYW5n
ZS5mcm9tKCksIHNUbyA9IHJhbmdlLnRvKCk7CisgICAgaWYgKHNGcm9tLmxpbmUgPT0gc1RvLmxp
bmUpIHsKKyAgICAgIGRyYXdGb3JMaW5lKHNGcm9tLmxpbmUsIHNGcm9tLmNoLCBzVG8uY2gpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgZnJvbUxpbmUgPSBnZXRMaW5lKGRvYywgc2VsLmZyb20u
bGluZSksIHRvTGluZSA9IGdldExpbmUoZG9jLCBzZWwudG8ubGluZSk7Ci0gICAgICB2YXIgc2lu
Z2xlVkxpbmUgPSB2aXN1YWxMaW5lKGRvYywgZnJvbUxpbmUpID09IHZpc3VhbExpbmUoZG9jLCB0
b0xpbmUpOwotICAgICAgdmFyIGxlZnRFbmQgPSBkcmF3Rm9yTGluZShzZWwuZnJvbS5saW5lLCBz
ZWwuZnJvbS5jaCwgc2luZ2xlVkxpbmUgPyBmcm9tTGluZS50ZXh0Lmxlbmd0aCA6IG51bGwpLmVu
ZDsKLSAgICAgIHZhciByaWdodFN0YXJ0ID0gZHJhd0ZvckxpbmUoc2VsLnRvLmxpbmUsIHNpbmds
ZVZMaW5lID8gMCA6IG51bGwsIHNlbC50by5jaCkuc3RhcnQ7CisgICAgICB2YXIgZnJvbUxpbmUg
PSBnZXRMaW5lKGRvYywgc0Zyb20ubGluZSksIHRvTGluZSA9IGdldExpbmUoZG9jLCBzVG8ubGlu
ZSk7CisgICAgICB2YXIgc2luZ2xlVkxpbmUgPSB2aXN1YWxMaW5lKGZyb21MaW5lKSA9PSB2aXN1
YWxMaW5lKHRvTGluZSk7CisgICAgICB2YXIgbGVmdEVuZCA9IGRyYXdGb3JMaW5lKHNGcm9tLmxp
bmUsIHNGcm9tLmNoLCBzaW5nbGVWTGluZSA/IGZyb21MaW5lLnRleHQubGVuZ3RoICsgMSA6IG51
bGwpLmVuZDsKKyAgICAgIHZhciByaWdodFN0YXJ0ID0gZHJhd0ZvckxpbmUoc1RvLmxpbmUsIHNp
bmdsZVZMaW5lID8gMCA6IG51bGwsIHNUby5jaCkuc3RhcnQ7CiAgICAgICBpZiAoc2luZ2xlVkxp
bmUpIHsKICAgICAgICAgaWYgKGxlZnRFbmQudG9wIDwgcmlnaHRTdGFydC50b3AgLSAyKSB7CiAg
ICAgICAgICAgYWRkKGxlZnRFbmQucmlnaHQsIGxlZnRFbmQudG9wLCBudWxsLCBsZWZ0RW5kLmJv
dHRvbSk7Ci0gICAgICAgICAgYWRkKHBsLCByaWdodFN0YXJ0LnRvcCwgcmlnaHRTdGFydC5sZWZ0
LCByaWdodFN0YXJ0LmJvdHRvbSk7CisgICAgICAgICAgYWRkKGxlZnRTaWRlLCByaWdodFN0YXJ0
LnRvcCwgcmlnaHRTdGFydC5sZWZ0LCByaWdodFN0YXJ0LmJvdHRvbSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgYWRkKGxlZnRFbmQucmlnaHQsIGxlZnRFbmQudG9wLCByaWdodFN0YXJ0
LmxlZnQgLSBsZWZ0RW5kLnJpZ2h0LCBsZWZ0RW5kLmJvdHRvbSk7CiAgICAgICAgIH0KICAgICAg
IH0KICAgICAgIGlmIChsZWZ0RW5kLmJvdHRvbSA8IHJpZ2h0U3RhcnQudG9wKQotICAgICAgICBh
ZGQocGwsIGxlZnRFbmQuYm90dG9tLCBudWxsLCByaWdodFN0YXJ0LnRvcCk7CisgICAgICAgIGFk
ZChsZWZ0U2lkZSwgbGVmdEVuZC5ib3R0b20sIG51bGwsIHJpZ2h0U3RhcnQudG9wKTsKICAgICB9
CiAKLSAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LnNlbGVjdGlvbkRpdiwgZnJhZ21l
bnQpOwotICAgIGRpc3BsYXkuc2VsZWN0aW9uRGl2LnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICBv
dXRwdXQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwogICB9CiAKICAgLy8gQ3Vyc29yLWJsaW5raW5n
CkBAIC04ODYsMzcgKzEzNjMsMzggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwogICAgIGNsZWFySW50ZXJ2YWwoZGlzcGxh
eS5ibGlua2VyKTsKICAgICB2YXIgb24gPSB0cnVlOwotICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxl
LnZpc2liaWxpdHkgPSBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLnZpc2liaWxpdHkgPSAiIjsK
KyAgICBkaXNwbGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gIiI7CiAgICAgaWYgKGNt
Lm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlID4gMCkKICAgICAgIGRpc3BsYXkuYmxpbmtlciA9IHNl
dEludGVydmFsKGZ1bmN0aW9uKCkgewotICAgICAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS52aXNp
YmlsaXR5ID0gZGlzcGxheS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gKG9uID0gIW9u
KSA/ICIiIDogImhpZGRlbiI7CisgICAgICAgIGRpc3BsYXkuY3Vyc29yRGl2LnN0eWxlLnZpc2li
aWxpdHkgPSAob24gPSAhb24pID8gIiIgOiAiaGlkZGVuIjsKICAgICAgIH0sIGNtLm9wdGlvbnMu
Y3Vyc29yQmxpbmtSYXRlKTsKICAgfQogCiAgIC8vIEhJR0hMSUdIVCBXT1JLRVIKIAogICBmdW5j
dGlvbiBzdGFydFdvcmtlcihjbSwgdGltZSkgewotICAgIGlmIChjbS5kb2MubW9kZS5zdGFydFN0
YXRlICYmIGNtLmRvYy5mcm9udGllciA8IGNtLmRpc3BsYXkuc2hvd2luZ1RvKQorICAgIGlmIChj
bS5kb2MubW9kZS5zdGFydFN0YXRlICYmIGNtLmRvYy5mcm9udGllciA8IGNtLmRpc3BsYXkudmll
d1RvKQogICAgICAgY20uc3RhdGUuaGlnaGxpZ2h0LnNldCh0aW1lLCBiaW5kKGhpZ2hsaWdodFdv
cmtlciwgY20pKTsKICAgfQogCiAgIGZ1bmN0aW9uIGhpZ2hsaWdodFdvcmtlcihjbSkgewogICAg
IHZhciBkb2MgPSBjbS5kb2M7CiAgICAgaWYgKGRvYy5mcm9udGllciA8IGRvYy5maXJzdCkgZG9j
LmZyb250aWVyID0gZG9jLmZpcnN0OwotICAgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxh
eS5zaG93aW5nVG8pIHJldHVybjsKKyAgICBpZiAoZG9jLmZyb250aWVyID49IGNtLmRpc3BsYXku
dmlld1RvKSByZXR1cm47CiAgICAgdmFyIGVuZCA9ICtuZXcgRGF0ZSArIGNtLm9wdGlvbnMud29y
a1RpbWU7CiAgICAgdmFyIHN0YXRlID0gY29weVN0YXRlKGRvYy5tb2RlLCBnZXRTdGF0ZUJlZm9y
ZShjbSwgZG9jLmZyb250aWVyKSk7Ci0gICAgdmFyIGNoYW5nZWQgPSBbXSwgcHJldkNoYW5nZTsK
LSAgICBkb2MuaXRlcihkb2MuZnJvbnRpZXIsIE1hdGgubWluKGRvYy5maXJzdCArIGRvYy5zaXpl
LCBjbS5kaXNwbGF5LnNob3dpbmdUbyArIDUwMCksIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIGlm
IChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxheS5zaG93aW5nRnJvbSkgeyAvLyBWaXNpYmxlCisK
KyAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKKyAgICBkb2MuaXRlcihkb2MuZnJvbnRpZXIs
IE1hdGgubWluKGRvYy5maXJzdCArIGRvYy5zaXplLCBjbS5kaXNwbGF5LnZpZXdUbyArIDUwMCks
IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxheS52
aWV3RnJvbSkgeyAvLyBWaXNpYmxlCiAgICAgICAgIHZhciBvbGRTdHlsZXMgPSBsaW5lLnN0eWxl
czsKLSAgICAgICAgbGluZS5zdHlsZXMgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBzdGF0ZSwg
dHJ1ZSk7CisgICAgICAgIHZhciBoaWdobGlnaHRlZCA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUs
IHN0YXRlLCB0cnVlKTsKKyAgICAgICAgbGluZS5zdHlsZXMgPSBoaWdobGlnaHRlZC5zdHlsZXM7
CisgICAgICAgIGlmIChoaWdobGlnaHRlZC5jbGFzc2VzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IGhp
Z2hsaWdodGVkLmNsYXNzZXM7CisgICAgICAgIGVsc2UgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSBs
aW5lLnN0eWxlQ2xhc3NlcyA9IG51bGw7CiAgICAgICAgIHZhciBpc2NoYW5nZSA9ICFvbGRTdHls
ZXMgfHwgb2xkU3R5bGVzLmxlbmd0aCAhPSBsaW5lLnN0eWxlcy5sZW5ndGg7CiAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyAhaXNjaGFuZ2UgJiYgaSA8IG9sZFN0eWxlcy5sZW5ndGg7ICsraSkgaXNj
aGFuZ2UgPSBvbGRTdHlsZXNbaV0gIT0gbGluZS5zdHlsZXNbaV07Ci0gICAgICAgIGlmIChpc2No
YW5nZSkgewotICAgICAgICAgIGlmIChwcmV2Q2hhbmdlICYmIHByZXZDaGFuZ2UuZW5kID09IGRv
Yy5mcm9udGllcikgcHJldkNoYW5nZS5lbmQrKzsKLSAgICAgICAgICBlbHNlIGNoYW5nZWQucHVz
aChwcmV2Q2hhbmdlID0ge3N0YXJ0OiBkb2MuZnJvbnRpZXIsIGVuZDogZG9jLmZyb250aWVyICsg
MX0pOwotICAgICAgICB9CisgICAgICAgIGlmIChpc2NoYW5nZSkgcmVnTGluZUNoYW5nZShjbSwg
ZG9jLmZyb250aWVyLCAidGV4dCIpOwogICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb3B5U3Rh
dGUoZG9jLm1vZGUsIHN0YXRlKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHByb2Nlc3NMaW5l
KGNtLCBsaW5lLnRleHQsIHN0YXRlKTsKQEAgLTkyOCwxMSArMTQwNiw3IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIH0KICAg
ICB9KTsKLSAgICBpZiAoY2hhbmdlZC5sZW5ndGgpCi0gICAgICBvcGVyYXRpb24oY20sIGZ1bmN0
aW9uKCkgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZWQubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgcmVnQ2hhbmdlKHRoaXMsIGNoYW5nZWRbaV0uc3RhcnQsIGNoYW5nZWRbaV0u
ZW5kKTsKLSAgICAgIH0pKCk7CisgICAgfSk7CiAgIH0KIAogICAvLyBGaW5kcyB0aGUgbGluZSB0
byBzdGFydCB3aXRoIHdoZW4gc3RhcnRpbmcgYSBwYXJzZS4gVHJpZXMgdG8KQEAgLTk2NCw3ICsx
NDM4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZWxzZSBzdGF0
ZSA9IGNvcHlTdGF0ZShkb2MubW9kZSwgc3RhdGUpOwogICAgIGRvYy5pdGVyKHBvcywgbiwgZnVu
Y3Rpb24obGluZSkgewogICAgICAgcHJvY2Vzc0xpbmUoY20sIGxpbmUudGV4dCwgc3RhdGUpOwot
ICAgICAgdmFyIHNhdmUgPSBwb3MgPT0gbiAtIDEgfHwgcG9zICUgNSA9PSAwIHx8IHBvcyA+PSBk
aXNwbGF5LnNob3dpbmdGcm9tICYmIHBvcyA8IGRpc3BsYXkuc2hvd2luZ1RvOworICAgICAgdmFy
IHNhdmUgPSBwb3MgPT0gbiAtIDEgfHwgcG9zICUgNSA9PSAwIHx8IHBvcyA+PSBkaXNwbGF5LnZp
ZXdGcm9tICYmIHBvcyA8IGRpc3BsYXkudmlld1RvOwogICAgICAgbGluZS5zdGF0ZUFmdGVyID0g
c2F2ZSA/IGNvcHlTdGF0ZShkb2MubW9kZSwgc3RhdGUpIDogbnVsbDsKICAgICAgICsrcG9zOwog
ICAgIH0pOwpAQCAtOTc2LDE4MyArMTQ1MCwyMjIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gcGFkZGluZ1RvcChkaXNwbGF5KSB7cmV0dXJuIGRpc3Bs
YXkubGluZVNwYWNlLm9mZnNldFRvcDt9CiAgIGZ1bmN0aW9uIHBhZGRpbmdWZXJ0KGRpc3BsYXkp
IHtyZXR1cm4gZGlzcGxheS5tb3Zlci5vZmZzZXRIZWlnaHQgLSBkaXNwbGF5LmxpbmVTcGFjZS5v
ZmZzZXRIZWlnaHQ7fQotICBmdW5jdGlvbiBwYWRkaW5nTGVmdChkaXNwbGF5KSB7Ci0gICAgdmFy
IGUgPSByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIGVsdCgicHJlIiwgbnVs
bCwgbnVsbCwgInRleHQtYWxpZ246IGxlZnQiKSkuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgIngi
KSk7Ci0gICAgcmV0dXJuIGUub2Zmc2V0TGVmdDsKLSAgfQotCi0gIGZ1bmN0aW9uIG1lYXN1cmVD
aGFyKGNtLCBsaW5lLCBjaCwgZGF0YSwgYmlhcykgewotICAgIHZhciBkaXIgPSAtMTsKLSAgICBk
YXRhID0gZGF0YSB8fCBtZWFzdXJlTGluZShjbSwgbGluZSk7Ci0gICAgaWYgKGRhdGEuY3J1ZGUp
IHsKLSAgICAgIHZhciBsZWZ0ID0gZGF0YS5sZWZ0ICsgY2ggKiBkYXRhLndpZHRoOwotICAgICAg
cmV0dXJuIHtsZWZ0OiBsZWZ0LCByaWdodDogbGVmdCArIGRhdGEud2lkdGgsIHRvcDogZGF0YS50
b3AsIGJvdHRvbTogZGF0YS5ib3R0b219OwotICAgIH0KLQotICAgIGZvciAodmFyIHBvcyA9IGNo
OzsgcG9zICs9IGRpcikgewotICAgICAgdmFyIHIgPSBkYXRhW3Bvc107Ci0gICAgICBpZiAocikg
YnJlYWs7Ci0gICAgICBpZiAoZGlyIDwgMCAmJiBwb3MgPT0gMCkgZGlyID0gMTsKLSAgICB9Ci0g
ICAgYmlhcyA9IHBvcyA+IGNoID8gImxlZnQiIDogcG9zIDwgY2ggPyAicmlnaHQiIDogYmlhczsK
LSAgICBpZiAoYmlhcyA9PSAibGVmdCIgJiYgci5sZWZ0U2lkZSkgciA9IHIubGVmdFNpZGU7Ci0g
ICAgZWxzZSBpZiAoYmlhcyA9PSAicmlnaHQiICYmIHIucmlnaHRTaWRlKSByID0gci5yaWdodFNp
ZGU7Ci0gICAgcmV0dXJuIHtsZWZ0OiBwb3MgPCBjaCA/IHIucmlnaHQgOiByLmxlZnQsCi0gICAg
ICAgICAgICByaWdodDogcG9zID4gY2ggPyByLmxlZnQgOiByLnJpZ2h0LAotICAgICAgICAgICAg
dG9wOiByLnRvcCwKLSAgICAgICAgICAgIGJvdHRvbTogci5ib3R0b219OwotICB9Ci0KLSAgZnVu
Y3Rpb24gZmluZENhY2hlZE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7Ci0gICAgdmFyIGNhY2hlID0g
Y20uZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2Fj
aGUubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBtZW1vID0gY2FjaGVbaV07Ci0gICAgICBpZiAo
bWVtby50ZXh0ID09IGxpbmUudGV4dCAmJiBtZW1vLm1hcmtlZFNwYW5zID09IGxpbmUubWFya2Vk
U3BhbnMgJiYKLSAgICAgICAgICBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoID09IG1l
bW8ud2lkdGggJiYKLSAgICAgICAgICBtZW1vLmNsYXNzZXMgPT0gbGluZS50ZXh0Q2xhc3MgKyAi
fCIgKyBsaW5lLndyYXBDbGFzcykKLSAgICAgICAgcmV0dXJuIG1lbW87Ci0gICAgfQotICB9Ci0K
LSAgZnVuY3Rpb24gY2xlYXJDYWNoZWRNZWFzdXJlbWVudChjbSwgbGluZSkgewotICAgIHZhciBl
eGlzdHMgPSBmaW5kQ2FjaGVkTWVhc3VyZW1lbnQoY20sIGxpbmUpOwotICAgIGlmIChleGlzdHMp
IGV4aXN0cy50ZXh0ID0gZXhpc3RzLm1lYXN1cmUgPSBleGlzdHMubWFya2VkU3BhbnMgPSBudWxs
OwotICB9Ci0KLSAgZnVuY3Rpb24gbWVhc3VyZUxpbmUoY20sIGxpbmUpIHsKLSAgICAvLyBGaXJz
dCBsb29rIGluIHRoZSBjYWNoZQotICAgIHZhciBjYWNoZWQgPSBmaW5kQ2FjaGVkTWVhc3VyZW1l
bnQoY20sIGxpbmUpOwotICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQubWVhc3VyZTsKLQot
ICAgIC8vIEZhaWxpbmcgdGhhdCwgcmVjb21wdXRlIGFuZCBzdG9yZSByZXN1bHQgaW4gY2FjaGUK
LSAgICB2YXIgbWVhc3VyZSA9IG1lYXN1cmVMaW5lSW5uZXIoY20sIGxpbmUpOwotICAgIHZhciBj
YWNoZSA9IGNtLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZTsKLSAgICB2YXIgbWVtbyA9IHt0ZXh0
OiBsaW5lLnRleHQsIHdpZHRoOiBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLAotICAg
ICAgICAgICAgICAgIG1hcmtlZFNwYW5zOiBsaW5lLm1hcmtlZFNwYW5zLCBtZWFzdXJlOiBtZWFz
dXJlLAotICAgICAgICAgICAgICAgIGNsYXNzZXM6IGxpbmUudGV4dENsYXNzICsgInwiICsgbGlu
ZS53cmFwQ2xhc3N9OwotICAgIGlmIChjYWNoZS5sZW5ndGggPT0gMTYpIGNhY2hlWysrY20uZGlz
cGxheS5tZWFzdXJlTGluZUNhY2hlUG9zICUgMTZdID0gbWVtbzsKLSAgICBlbHNlIGNhY2hlLnB1
c2gobWVtbyk7Ci0gICAgcmV0dXJuIG1lYXN1cmU7Ci0gIH0KLQotICBmdW5jdGlvbiBtZWFzdXJl
TGluZUlubmVyKGNtLCBsaW5lKSB7Ci0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAm
JiBsaW5lLnRleHQubGVuZ3RoID49IGNtLm9wdGlvbnMuY3J1ZGVNZWFzdXJpbmdGcm9tKQotICAg
ICAgcmV0dXJuIGNydWRlbHlNZWFzdXJlTGluZShjbSwgbGluZSk7Ci0KLSAgICB2YXIgZGlzcGxh
eSA9IGNtLmRpc3BsYXksIG1lYXN1cmUgPSBlbXB0eUFycmF5KGxpbmUudGV4dC5sZW5ndGgpOwot
ICAgIHZhciBwcmUgPSBidWlsZExpbmVDb250ZW50KGNtLCBsaW5lLCBtZWFzdXJlLCB0cnVlKS5w
cmU7Ci0KLSAgICAvLyBJRSBkb2VzIG5vdCBjYWNoZSBlbGVtZW50IHBvc2l0aW9ucyBvZiBpbmxp
bmUgZWxlbWVudHMgYmV0d2VlbgotICAgIC8vIGNhbGxzIHRvIGdldEJvdW5kaW5nQ2xpZW50UmVj
dC4gVGhpcyBtYWtlcyB0aGUgbG9vcCBiZWxvdywKLSAgICAvLyB3aGljaCBnYXRoZXJzIHRoZSBw
b3NpdGlvbnMgb2YgYWxsIHRoZSBjaGFyYWN0ZXJzIG9uIHRoZSBsaW5lLAotICAgIC8vIGRvIGFu
IGFtb3VudCBvZiBsYXlvdXQgd29yayBxdWFkcmF0aWMgdG8gdGhlIG51bWJlciBvZgotICAgIC8v
IGNoYXJhY3RlcnMuIFdoZW4gbGluZSB3cmFwcGluZyBpcyBvZmYsIHdlIHRyeSB0byBpbXByb3Zl
IHRoaW5ncwotICAgIC8vIGJ5IGZpcnN0IHN1YmRpdmlkaW5nIHRoZSBsaW5lIGludG8gYSBidW5j
aCBvZiBpbmxpbmUgYmxvY2tzLCBzbwotICAgIC8vIHRoYXQgSUUgY2FuIHJldXNlIG1vc3Qgb2Yg
dGhlIGxheW91dCBpbmZvcm1hdGlvbiBmcm9tIGNhY2hlcwotICAgIC8vIGZvciB0aG9zZSBibG9j
a3MuIFRoaXMgZG9lcyBpbnRlcmZlcmUgd2l0aCBsaW5lIHdyYXBwaW5nLCBzbyBpdAotICAgIC8v
IGRvZXNuJ3Qgd29yayB3aGVuIHdyYXBwaW5nIGlzIG9uLCBidXQgaW4gdGhhdCBjYXNlIHRoZQot
ICAgIC8vIHNpdHVhdGlvbiBpcyBzbGlnaHRseSBiZXR0ZXIsIHNpbmNlIElFIGRvZXMgY2FjaGUg
bGluZS13cmFwcGluZwotICAgIC8vIGluZm9ybWF0aW9uIGFuZCBvbmx5IHJlY29tcHV0ZXMgcGVy
LWxpbmUuCi0gICAgaWYgKGllICYmICFpZV9sdDggJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5n
ICYmIHByZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDEwMCkgewotICAgICAgdmFyIGZyYWdtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgdmFyIGNodW5rID0gMTAs
IG4gPSBwcmUuY2hpbGROb2Rlcy5sZW5ndGg7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgY2h1bmtz
ID0gTWF0aC5jZWlsKG4gLyBjaHVuayk7IGkgPCBjaHVua3M7ICsraSkgewotICAgICAgICB2YXIg
d3JhcCA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgImRpc3BsYXk6IGlubGluZS1ibG9jayIpOwot
ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNodW5rICYmIG47ICsraikgewotICAgICAgICAg
IHdyYXAuYXBwZW5kQ2hpbGQocHJlLmZpcnN0Q2hpbGQpOwotICAgICAgICAgIC0tbjsKKyAgZnVu
Y3Rpb24gcGFkZGluZ0goZGlzcGxheSkgeworICAgIGlmIChkaXNwbGF5LmNhY2hlZFBhZGRpbmdI
KSByZXR1cm4gZGlzcGxheS5jYWNoZWRQYWRkaW5nSDsKKyAgICB2YXIgZSA9IHJlbW92ZUNoaWxk
cmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgZWx0KCJwcmUiLCAieCIpKTsKKyAgICB2YXIgc3R5
bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUp
IDogZS5jdXJyZW50U3R5bGU7CisgICAgcmV0dXJuIGRpc3BsYXkuY2FjaGVkUGFkZGluZ0ggPSB7
bGVmdDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ0xlZnQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJpZ2h0OiBwYXJzZUludChzdHlsZS5wYWRkaW5nUmlnaHQpfTsKKyAg
fQorCisgIC8vIEVuc3VyZSB0aGUgbGluZVZpZXcud3JhcHBpbmcuaGVpZ2h0cyBhcnJheSBpcyBw
b3B1bGF0ZWQuIFRoaXMgaXMKKyAgLy8gYW4gYXJyYXkgb2YgYm90dG9tIG9mZnNldHMgZm9yIHRo
ZSBsaW5lcyB0aGF0IG1ha2UgdXAgYSBkcmF3bgorICAvLyBsaW5lLiBXaGVuIGxpbmVXcmFwcGlu
ZyBpcyBvbiwgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZQorICAvLyBoZWlnaHQuCisgIGZ1
bmN0aW9uIGVuc3VyZUxpbmVIZWlnaHRzKGNtLCBsaW5lVmlldywgcmVjdCkgeworICAgIHZhciB3
cmFwcGluZyA9IGNtLm9wdGlvbnMubGluZVdyYXBwaW5nOworICAgIHZhciBjdXJXaWR0aCA9IHdy
YXBwaW5nICYmIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg7CisgICAgaWYgKCFsaW5l
Vmlldy5tZWFzdXJlLmhlaWdodHMgfHwgd3JhcHBpbmcgJiYgbGluZVZpZXcubWVhc3VyZS53aWR0
aCAhPSBjdXJXaWR0aCkgeworICAgICAgdmFyIGhlaWdodHMgPSBsaW5lVmlldy5tZWFzdXJlLmhl
aWdodHMgPSBbXTsKKyAgICAgIGlmICh3cmFwcGluZykgeworICAgICAgICBsaW5lVmlldy5tZWFz
dXJlLndpZHRoID0gY3VyV2lkdGg7CisgICAgICAgIHZhciByZWN0cyA9IGxpbmVWaWV3LnRleHQu
Zmlyc3RDaGlsZC5nZXRDbGllbnRSZWN0cygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHJlY3RzLmxlbmd0aCAtIDE7IGkrKykgeworICAgICAgICAgIHZhciBjdXIgPSByZWN0c1tpXSwg
bmV4dCA9IHJlY3RzW2kgKyAxXTsKKyAgICAgICAgICBpZiAoTWF0aC5hYnMoY3VyLmJvdHRvbSAt
IG5leHQuYm90dG9tKSA+IDIpCisgICAgICAgICAgICBoZWlnaHRzLnB1c2goKGN1ci5ib3R0b20g
KyBuZXh0LnRvcCkgLyAyIC0gcmVjdC50b3ApOwogICAgICAgICB9Ci0gICAgICAgIGZyYWdtZW50
LmFwcGVuZENoaWxkKHdyYXApOwogICAgICAgfQotICAgICAgcHJlLmFwcGVuZENoaWxkKGZyYWdt
ZW50KTsKLSAgICB9Ci0KLSAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUs
IHByZSk7Ci0KLSAgICB2YXIgb3V0ZXIgPSBnZXRSZWN0KGRpc3BsYXkubGluZURpdik7Ci0gICAg
dmFyIHZyYW5nZXMgPSBbXSwgZGF0YSA9IGVtcHR5QXJyYXkobGluZS50ZXh0Lmxlbmd0aCksIG1h
eEJvdCA9IHByZS5vZmZzZXRIZWlnaHQ7Ci0gICAgLy8gV29yayBhcm91bmQgYW4gSUU3LzggYnVn
IHdoZXJlIGl0IHdpbGwgc29tZXRpbWVzIGhhdmUgcmFuZG9tbHkKLSAgICAvLyByZXBsYWNlZCBv
dXIgcHJlIHdpdGggYSBjbG9uZSBhdCB0aGlzIHBvaW50LgotICAgIGlmIChpZV9sdDkgJiYgZGlz
cGxheS5tZWFzdXJlLmZpcnN0ICE9IHByZSkKLSAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRp
c3BsYXkubWVhc3VyZSwgcHJlKTsKKyAgICAgIGhlaWdodHMucHVzaChyZWN0LmJvdHRvbSAtIHJl
Y3QudG9wKTsKKyAgICB9CisgIH0KKworICAvLyBGaW5kIGEgbGluZSBtYXAgKG1hcHBpbmcgY2hh
cmFjdGVyIG9mZnNldHMgdG8gdGV4dCBub2RlcykgYW5kIGEKKyAgLy8gbWVhc3VyZW1lbnQgY2Fj
aGUgZm9yIHRoZSBnaXZlbiBsaW5lIG51bWJlci4gKEEgbGluZSB2aWV3IG1pZ2h0CisgIC8vIGNv
bnRhaW4gbXVsdGlwbGUgbGluZXMgd2hlbiBjb2xsYXBzZWQgcmFuZ2VzIGFyZSBwcmVzZW50LikK
KyAgZnVuY3Rpb24gbWFwRnJvbUxpbmVWaWV3KGxpbmVWaWV3LCBsaW5lLCBsaW5lTikgeworICAg
IGlmIChsaW5lVmlldy5saW5lID09IGxpbmUpCisgICAgICByZXR1cm4ge21hcDogbGluZVZpZXcu
bWVhc3VyZS5tYXAsIGNhY2hlOiBsaW5lVmlldy5tZWFzdXJlLmNhY2hlfTsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGxpbmVWaWV3LnJlc3QubGVuZ3RoOyBpKyspCisgICAgICBpZiAobGluZVZp
ZXcucmVzdFtpXSA9PSBsaW5lKQorICAgICAgICByZXR1cm4ge21hcDogbGluZVZpZXcubWVhc3Vy
ZS5tYXBzW2ldLCBjYWNoZTogbGluZVZpZXcubWVhc3VyZS5jYWNoZXNbaV19OworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKykKKyAgICAgIGlmIChsaW5l
Tm8obGluZVZpZXcucmVzdFtpXSkgPiBsaW5lTikKKyAgICAgICAgcmV0dXJuIHttYXA6IGxpbmVW
aWV3Lm1lYXN1cmUubWFwc1tpXSwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2ldLCBi
ZWZvcmU6IHRydWV9OworICB9CisKKyAgLy8gUmVuZGVyIGEgbGluZSBpbnRvIHRoZSBoaWRkZW4g
bm9kZSBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQuIFVzZWQKKyAgLy8gd2hlbiBtZWFzdXJlbWVu
dCBpcyBuZWVkZWQgZm9yIGEgbGluZSB0aGF0J3Mgbm90IGluIHRoZSB2aWV3cG9ydC4KKyAgZnVu
Y3Rpb24gdXBkYXRlRXh0ZXJuYWxNZWFzdXJlbWVudChjbSwgbGluZSkgeworICAgIGxpbmUgPSB2
aXN1YWxMaW5lKGxpbmUpOworICAgIHZhciBsaW5lTiA9IGxpbmVObyhsaW5lKTsKKyAgICB2YXIg
dmlldyA9IGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG5ldyBMaW5lVmlldyhjbS5kb2Ms
IGxpbmUsIGxpbmVOKTsKKyAgICB2aWV3LmxpbmVOID0gbGluZU47CisgICAgdmFyIGJ1aWx0ID0g
dmlldy5idWlsdCA9IGJ1aWxkTGluZUNvbnRlbnQoY20sIHZpZXcpOworICAgIHZpZXcudGV4dCA9
IGJ1aWx0LnByZTsKKyAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5LmxpbmVNZWFz
dXJlLCBidWlsdC5wcmUpOworICAgIHJldHVybiB2aWV3OworICB9CisKKyAgLy8gR2V0IGEge3Rv
cCwgYm90dG9tLCBsZWZ0LCByaWdodH0gYm94IChpbiBsaW5lLWxvY2FsIGNvb3JkaW5hdGVzKQor
ICAvLyBmb3IgYSBnaXZlbiBjaGFyYWN0ZXIuCisgIGZ1bmN0aW9uIG1lYXN1cmVDaGFyKGNtLCBs
aW5lLCBjaCwgYmlhcykgeworICAgIHJldHVybiBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVw
YXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmUpLCBjaCwgYmlhcyk7CisgIH0KKworICAvLyBGaW5k
IGEgbGluZSB2aWV3IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLgor
ICBmdW5jdGlvbiBmaW5kVmlld0ZvckxpbmUoY20sIGxpbmVOKSB7CisgICAgaWYgKGxpbmVOID49
IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgbGluZU4gPCBjbS5kaXNwbGF5LnZpZXdUbykKKyAgICAg
IHJldHVybiBjbS5kaXNwbGF5LnZpZXdbZmluZFZpZXdJbmRleChjbSwgbGluZU4pXTsKKyAgICB2
YXIgZXh0ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkOworICAgIGlmIChleHQgJiYgbGlu
ZU4gPj0gZXh0LmxpbmVOICYmIGxpbmVOIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpCisgICAgICBy
ZXR1cm4gZXh0OworICB9CisKKyAgLy8gTWVhc3VyZW1lbnQgY2FuIGJlIHNwbGl0IGluIHR3byBz
dGVwcywgdGhlIHNldC11cCB3b3JrIHRoYXQKKyAgLy8gYXBwbGllcyB0byB0aGUgd2hvbGUgbGlu
ZSwgYW5kIHRoZSBtZWFzdXJlbWVudCBvZiB0aGUgYWN0dWFsCisgIC8vIGNoYXJhY3Rlci4gRnVu
Y3Rpb25zIGxpa2UgY29vcmRzQ2hhciwgdGhhdCBuZWVkIHRvIGRvIGEgbG90IG9mCisgIC8vIG1l
YXN1cmVtZW50cyBpbiBhIHJvdywgY2FuIHRodXMgZW5zdXJlIHRoYXQgdGhlIHNldC11cCB3b3Jr
IGlzCisgIC8vIG9ubHkgZG9uZSBvbmNlLgorICBmdW5jdGlvbiBwcmVwYXJlTWVhc3VyZUZvckxp
bmUoY20sIGxpbmUpIHsKKyAgICB2YXIgbGluZU4gPSBsaW5lTm8obGluZSk7CisgICAgdmFyIHZp
ZXcgPSBmaW5kVmlld0ZvckxpbmUoY20sIGxpbmVOKTsKKyAgICBpZiAodmlldyAmJiAhdmlldy50
ZXh0KQorICAgICAgdmlldyA9IG51bGw7CisgICAgZWxzZSBpZiAodmlldyAmJiB2aWV3LmNoYW5n
ZXMpCisgICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgdmlldywgbGluZU4sIGdldERpbWVu
c2lvbnMoY20pKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICB2aWV3ID0gdXBkYXRlRXh0ZXJuYWxN
ZWFzdXJlbWVudChjbSwgbGluZSk7CisKKyAgICB2YXIgaW5mbyA9IG1hcEZyb21MaW5lVmlldyh2
aWV3LCBsaW5lLCBsaW5lTik7CisgICAgcmV0dXJuIHsKKyAgICAgIGxpbmU6IGxpbmUsIHZpZXc6
IHZpZXcsIHJlY3Q6IG51bGwsCisgICAgICBtYXA6IGluZm8ubWFwLCBjYWNoZTogaW5mby5jYWNo
ZSwgYmVmb3JlOiBpbmZvLmJlZm9yZSwKKyAgICAgIGhhc0hlaWdodHM6IGZhbHNlCisgICAgfTsK
KyAgfQogCi0gICAgZnVuY3Rpb24gbWVhc3VyZVJlY3QocmVjdCkgewotICAgICAgdmFyIHRvcCA9
IHJlY3QudG9wIC0gb3V0ZXIudG9wLCBib3QgPSByZWN0LmJvdHRvbSAtIG91dGVyLnRvcDsKLSAg
ICAgIGlmIChib3QgPiBtYXhCb3QpIGJvdCA9IG1heEJvdDsKLSAgICAgIGlmICh0b3AgPCAwKSB0
b3AgPSAwOwotICAgICAgZm9yICh2YXIgaSA9IHZyYW5nZXMubGVuZ3RoIC0gMjsgaSA+PSAwOyBp
IC09IDIpIHsKLSAgICAgICAgdmFyIHJ0b3AgPSB2cmFuZ2VzW2ldLCByYm90ID0gdnJhbmdlc1tp
KzFdOwotICAgICAgICBpZiAocnRvcCA+IGJvdCB8fCByYm90IDwgdG9wKSBjb250aW51ZTsKLSAg
ICAgICAgaWYgKHJ0b3AgPD0gdG9wICYmIHJib3QgPj0gYm90IHx8Ci0gICAgICAgICAgICB0b3Ag
PD0gcnRvcCAmJiBib3QgPj0gcmJvdCB8fAotICAgICAgICAgICAgTWF0aC5taW4oYm90LCByYm90
KSAtIE1hdGgubWF4KHRvcCwgcnRvcCkgPj0gKGJvdCAtIHRvcCkgPj4gMSkgewotICAgICAgICAg
IHZyYW5nZXNbaV0gPSBNYXRoLm1pbih0b3AsIHJ0b3ApOwotICAgICAgICAgIHZyYW5nZXNbaSsx
XSA9IE1hdGgubWF4KGJvdCwgcmJvdCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAg
Ly8gR2l2ZW4gYSBwcmVwYXJlZCBtZWFzdXJlbWVudCBvYmplY3QsIG1lYXN1cmVzIHRoZSBwb3Np
dGlvbiBvZiBhbgorICAvLyBhY3R1YWwgY2hhcmFjdGVyIChvciBmZXRjaGVzIGl0IGZyb20gdGhl
IGNhY2hlKS4KKyAgZnVuY3Rpb24gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWQsIGNo
LCBiaWFzKSB7CisgICAgaWYgKHByZXBhcmVkLmJlZm9yZSkgY2ggPSAtMTsKKyAgICB2YXIga2V5
ID0gY2ggKyAoYmlhcyB8fCAiIiksIGZvdW5kOworICAgIGlmIChwcmVwYXJlZC5jYWNoZS5oYXNP
d25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICBmb3VuZCA9IHByZXBhcmVkLmNhY2hlW2tleV07Cisg
ICAgfSBlbHNlIHsKKyAgICAgIGlmICghcHJlcGFyZWQucmVjdCkKKyAgICAgICAgcHJlcGFyZWQu
cmVjdCA9IHByZXBhcmVkLnZpZXcudGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAg
IGlmICghcHJlcGFyZWQuaGFzSGVpZ2h0cykgeworICAgICAgICBlbnN1cmVMaW5lSGVpZ2h0cyhj
bSwgcHJlcGFyZWQudmlldywgcHJlcGFyZWQucmVjdCk7CisgICAgICAgIHByZXBhcmVkLmhhc0hl
aWdodHMgPSB0cnVlOwogICAgICAgfQotICAgICAgaWYgKGkgPCAwKSB7IGkgPSB2cmFuZ2VzLmxl
bmd0aDsgdnJhbmdlcy5wdXNoKHRvcCwgYm90KTsgfQotICAgICAgcmV0dXJuIHtsZWZ0OiByZWN0
LmxlZnQgLSBvdXRlci5sZWZ0LAotICAgICAgICAgICAgICByaWdodDogcmVjdC5yaWdodCAtIG91
dGVyLmxlZnQsCi0gICAgICAgICAgICAgIHRvcDogaSwgYm90dG9tOiBudWxsfTsKLSAgICB9Ci0g
ICAgZnVuY3Rpb24gZmluaXNoUmVjdChyZWN0KSB7Ci0gICAgICByZWN0LmJvdHRvbSA9IHZyYW5n
ZXNbcmVjdC50b3ArMV07Ci0gICAgICByZWN0LnRvcCA9IHZyYW5nZXNbcmVjdC50b3BdOwotICAg
IH0KLQotICAgIGZvciAodmFyIGkgPSAwLCBjdXI7IGkgPCBtZWFzdXJlLmxlbmd0aDsgKytpKSBp
ZiAoY3VyID0gbWVhc3VyZVtpXSkgewotICAgICAgdmFyIG5vZGUgPSBjdXIsIHJlY3QgPSBudWxs
OwotICAgICAgLy8gQSB3aWRnZXQgbWlnaHQgd3JhcCwgbmVlZHMgc3BlY2lhbCBjYXJlCi0gICAg
ICBpZiAoL1xiQ29kZU1pcnJvci13aWRnZXRcYi8udGVzdChjdXIuY2xhc3NOYW1lKSAmJiBjdXIu
Z2V0Q2xpZW50UmVjdHMpIHsKLSAgICAgICAgaWYgKGN1ci5maXJzdENoaWxkLm5vZGVUeXBlID09
IDEpIG5vZGUgPSBjdXIuZmlyc3RDaGlsZDsKLSAgICAgICAgdmFyIHJlY3RzID0gbm9kZS5nZXRD
bGllbnRSZWN0cygpOwotICAgICAgICBpZiAocmVjdHMubGVuZ3RoID4gMSkgewotICAgICAgICAg
IHJlY3QgPSBkYXRhW2ldID0gbWVhc3VyZVJlY3QocmVjdHNbMF0pOwotICAgICAgICAgIHJlY3Qu
cmlnaHRTaWRlID0gbWVhc3VyZVJlY3QocmVjdHNbcmVjdHMubGVuZ3RoIC0gMV0pOwotICAgICAg
ICB9CisgICAgICBmb3VuZCA9IG1lYXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwgYmlh
cyk7CisgICAgICBpZiAoIWZvdW5kLmJvZ3VzKSBwcmVwYXJlZC5jYWNoZVtrZXldID0gZm91bmQ7
CisgICAgfQorICAgIHJldHVybiB7bGVmdDogZm91bmQubGVmdCwgcmlnaHQ6IGZvdW5kLnJpZ2h0
LCB0b3A6IGZvdW5kLnRvcCwgYm90dG9tOiBmb3VuZC5ib3R0b219OworICB9CisKKyAgdmFyIG51
bGxSZWN0ID0ge2xlZnQ6IDAsIHJpZ2h0OiAwLCB0b3A6IDAsIGJvdHRvbTogMH07CisKKyAgZnVu
Y3Rpb24gbWVhc3VyZUNoYXJJbm5lcihjbSwgcHJlcGFyZWQsIGNoLCBiaWFzKSB7CisgICAgdmFy
IG1hcCA9IHByZXBhcmVkLm1hcDsKKworICAgIHZhciBub2RlLCBzdGFydCwgZW5kLCBjb2xsYXBz
ZTsKKyAgICAvLyBGaXJzdCwgc2VhcmNoIHRoZSBsaW5lIG1hcCBmb3IgdGhlIHRleHQgbm9kZSBj
b3JyZXNwb25kaW5nIHRvLAorICAgIC8vIG9yIGNsb3Nlc3QgdG8sIHRoZSB0YXJnZXQgY2hhcmFj
dGVyLgorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwLmxlbmd0aDsgaSArPSAzKSB7CisgICAg
ICB2YXIgbVN0YXJ0ID0gbWFwW2ldLCBtRW5kID0gbWFwW2kgKyAxXTsKKyAgICAgIGlmIChjaCA8
IG1TdGFydCkgeworICAgICAgICBzdGFydCA9IDA7IGVuZCA9IDE7CisgICAgICAgIGNvbGxhcHNl
ID0gImxlZnQiOworICAgICAgfSBlbHNlIGlmIChjaCA8IG1FbmQpIHsKKyAgICAgICAgc3RhcnQg
PSBjaCAtIG1TdGFydDsKKyAgICAgICAgZW5kID0gc3RhcnQgKyAxOworICAgICAgfSBlbHNlIGlm
IChpID09IG1hcC5sZW5ndGggLSAzIHx8IGNoID09IG1FbmQgJiYgbWFwW2kgKyAzXSA+IGNoKSB7
CisgICAgICAgIGVuZCA9IG1FbmQgLSBtU3RhcnQ7CisgICAgICAgIHN0YXJ0ID0gZW5kIC0gMTsK
KyAgICAgICAgaWYgKGNoID49IG1FbmQpIGNvbGxhcHNlID0gInJpZ2h0IjsKKyAgICAgIH0KKyAg
ICAgIGlmIChzdGFydCAhPSBudWxsKSB7CisgICAgICAgIG5vZGUgPSBtYXBbaSArIDJdOworICAg
ICAgICBpZiAobVN0YXJ0ID09IG1FbmQgJiYgYmlhcyA9PSAobm9kZS5pbnNlcnRMZWZ0ID8gImxl
ZnQiIDogInJpZ2h0IikpCisgICAgICAgICAgY29sbGFwc2UgPSBiaWFzOworICAgICAgICBpZiAo
YmlhcyA9PSAibGVmdCIgJiYgc3RhcnQgPT0gMCkKKyAgICAgICAgICB3aGlsZSAoaSAmJiBtYXBb
aSAtIDJdID09IG1hcFtpIC0gM10gJiYgbWFwW2kgLSAxXS5pbnNlcnRMZWZ0KSB7CisgICAgICAg
ICAgICBub2RlID0gbWFwWyhpIC09IDMpICsgMl07CisgICAgICAgICAgICBjb2xsYXBzZSA9ICJs
ZWZ0IjsKKyAgICAgICAgICB9CisgICAgICAgIGlmIChiaWFzID09ICJyaWdodCIgJiYgc3RhcnQg
PT0gbUVuZCAtIG1TdGFydCkKKyAgICAgICAgICB3aGlsZSAoaSA8IG1hcC5sZW5ndGggLSAzICYm
IG1hcFtpICsgM10gPT0gbWFwW2kgKyA0XSAmJiAhbWFwW2kgKyA1XS5pbnNlcnRMZWZ0KSB7Cisg
ICAgICAgICAgICBub2RlID0gbWFwWyhpICs9IDMpICsgMl07CisgICAgICAgICAgICBjb2xsYXBz
ZSA9ICJyaWdodCI7CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAgIH0KLSAgICAg
IGlmICghcmVjdCkgcmVjdCA9IGRhdGFbaV0gPSBtZWFzdXJlUmVjdChnZXRSZWN0KG5vZGUpKTsK
LSAgICAgIGlmIChjdXIubWVhc3VyZVJpZ2h0KSByZWN0LnJpZ2h0ID0gZ2V0UmVjdChjdXIubWVh
c3VyZVJpZ2h0KS5sZWZ0OwotICAgICAgaWYgKGN1ci5sZWZ0U2lkZSkgcmVjdC5sZWZ0U2lkZSA9
IG1lYXN1cmVSZWN0KGdldFJlY3QoY3VyLmxlZnRTaWRlKSk7Ci0gICAgfQotICAgIHJlbW92ZUNo
aWxkcmVuKGNtLmRpc3BsYXkubWVhc3VyZSk7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGN1cjsgaSA8
IGRhdGEubGVuZ3RoOyArK2kpIGlmIChjdXIgPSBkYXRhW2ldKSB7Ci0gICAgICBmaW5pc2hSZWN0
KGN1cik7Ci0gICAgICBpZiAoY3VyLmxlZnRTaWRlKSBmaW5pc2hSZWN0KGN1ci5sZWZ0U2lkZSk7
Ci0gICAgICBpZiAoY3VyLnJpZ2h0U2lkZSkgZmluaXNoUmVjdChjdXIucmlnaHRTaWRlKTsKICAg
ICB9Ci0gICAgcmV0dXJuIGRhdGE7Ci0gIH0KIAotICBmdW5jdGlvbiBjcnVkZWx5TWVhc3VyZUxp
bmUoY20sIGxpbmUpIHsKLSAgICB2YXIgY29weSA9IG5ldyBMaW5lKGxpbmUudGV4dC5zbGljZSgw
LCAxMDApLCBudWxsKTsKLSAgICBpZiAobGluZS50ZXh0Q2xhc3MpIGNvcHkudGV4dENsYXNzID0g
bGluZS50ZXh0Q2xhc3M7Ci0gICAgdmFyIG1lYXN1cmUgPSBtZWFzdXJlTGluZUlubmVyKGNtLCBj
b3B5KTsKLSAgICB2YXIgbGVmdCA9IG1lYXN1cmVDaGFyKGNtLCBjb3B5LCAwLCBtZWFzdXJlLCAi
bGVmdCIpOwotICAgIHZhciByaWdodCA9IG1lYXN1cmVDaGFyKGNtLCBjb3B5LCA5OSwgbWVhc3Vy
ZSwgInJpZ2h0Iik7Ci0gICAgcmV0dXJuIHtjcnVkZTogdHJ1ZSwgdG9wOiBsZWZ0LnRvcCwgbGVm
dDogbGVmdC5sZWZ0LCBib3R0b206IGxlZnQuYm90dG9tLCB3aWR0aDogKHJpZ2h0LnJpZ2h0IC0g
bGVmdC5sZWZ0KSAvIDEwMH07CisgICAgdmFyIHJlY3Q7CisgICAgaWYgKG5vZGUubm9kZVR5cGUg
PT0gMykgeyAvLyBJZiBpdCBpcyBhIHRleHQgbm9kZSwgdXNlIGEgcmFuZ2UgdG8gcmV0cmlldmUg
dGhlIGNvb3JkaW5hdGVzLgorICAgICAgd2hpbGUgKHN0YXJ0ICYmIGlzRXh0ZW5kaW5nQ2hhcihw
cmVwYXJlZC5saW5lLnRleHQuY2hhckF0KG1TdGFydCArIHN0YXJ0KSkpIC0tc3RhcnQ7CisgICAg
ICB3aGlsZSAobVN0YXJ0ICsgZW5kIDwgbUVuZCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQu
bGluZS50ZXh0LmNoYXJBdChtU3RhcnQgKyBlbmQpKSkgKytlbmQ7CisgICAgICBpZiAoaWVfdXB0
bzggJiYgc3RhcnQgPT0gMCAmJiBlbmQgPT0gbUVuZCAtIG1TdGFydCkgeworICAgICAgICByZWN0
ID0gbm9kZS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgfSBlbHNl
IGlmIChpZSAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgeworICAgICAgICB2YXIgcmVjdHMg
PSByYW5nZShub2RlLCBzdGFydCwgZW5kKS5nZXRDbGllbnRSZWN0cygpOworICAgICAgICBpZiAo
cmVjdHMubGVuZ3RoKQorICAgICAgICAgIHJlY3QgPSByZWN0c1tiaWFzID09ICJyaWdodCIgPyBy
ZWN0cy5sZW5ndGggLSAxIDogMF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZWN0ID0gbnVs
bFJlY3Q7CisgICAgICB9IGVsc2UgeworICAgICAgICByZWN0ID0gcmFuZ2Uobm9kZSwgc3RhcnQs
IGVuZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICB9CisgICAgfSBlbHNlIHsgLy8g
SWYgaXQgaXMgYSB3aWRnZXQsIHNpbXBseSBnZXQgdGhlIGJveCBmb3IgdGhlIHdob2xlIHdpZGdl
dC4KKyAgICAgIGlmIChzdGFydCA+IDApIGNvbGxhcHNlID0gYmlhcyA9ICJyaWdodCI7CisgICAg
ICB2YXIgcmVjdHM7CisgICAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgKHJlY3Rz
ID0gbm9kZS5nZXRDbGllbnRSZWN0cygpKS5sZW5ndGggPiAxKQorICAgICAgICByZWN0ID0gcmVj
dHNbYmlhcyA9PSAicmlnaHQiID8gcmVjdHMubGVuZ3RoIC0gMSA6IDBdOworICAgICAgZWxzZQor
ICAgICAgICByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICB9CisgICAg
aWYgKGllX3VwdG84ICYmICFzdGFydCAmJiAoIXJlY3QgfHwgIXJlY3QubGVmdCAmJiAhcmVjdC5y
aWdodCkpIHsKKyAgICAgIHZhciByU3BhbiA9IG5vZGUucGFyZW50Tm9kZS5nZXRDbGllbnRSZWN0
cygpWzBdOworICAgICAgaWYgKHJTcGFuKQorICAgICAgICByZWN0ID0ge2xlZnQ6IHJTcGFuLmxl
ZnQsIHJpZ2h0OiByU3Bhbi5sZWZ0ICsgY2hhcldpZHRoKGNtLmRpc3BsYXkpLCB0b3A6IHJTcGFu
LnRvcCwgYm90dG9tOiByU3Bhbi5ib3R0b219OworICAgICAgZWxzZQorICAgICAgICByZWN0ID0g
bnVsbFJlY3Q7CisgICAgfQorCisgICAgdmFyIHRvcCwgYm90ID0gKHJlY3QuYm90dG9tICsgcmVj
dC50b3ApIC8gMiAtIHByZXBhcmVkLnJlY3QudG9wOworICAgIHZhciBoZWlnaHRzID0gcHJlcGFy
ZWQudmlldy5tZWFzdXJlLmhlaWdodHM7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHRz
Lmxlbmd0aCAtIDE7IGkrKykKKyAgICAgIGlmIChib3QgPCBoZWlnaHRzW2ldKSBicmVhazsKKyAg
ICB0b3AgPSBpID8gaGVpZ2h0c1tpIC0gMV0gOiAwOyBib3QgPSBoZWlnaHRzW2ldOworICAgIHZh
ciByZXN1bHQgPSB7bGVmdDogKGNvbGxhcHNlID09ICJyaWdodCIgPyByZWN0LnJpZ2h0IDogcmVj
dC5sZWZ0KSAtIHByZXBhcmVkLnJlY3QubGVmdCwKKyAgICAgICAgICAgICAgICAgIHJpZ2h0OiAo
Y29sbGFwc2UgPT0gImxlZnQiID8gcmVjdC5sZWZ0IDogcmVjdC5yaWdodCkgLSBwcmVwYXJlZC5y
ZWN0LmxlZnQsCisgICAgICAgICAgICAgICAgICB0b3A6IHRvcCwgYm90dG9tOiBib3R9OworICAg
IGlmICghcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSByZXN1bHQuYm9ndXMgPSB0cnVlOworICAg
IHJldHVybiByZXN1bHQ7CiAgIH0KIAotICBmdW5jdGlvbiBtZWFzdXJlTGluZVdpZHRoKGNtLCBs
aW5lKSB7Ci0gICAgdmFyIGhhc0JhZFNwYW4gPSBmYWxzZTsKLSAgICBpZiAobGluZS5tYXJrZWRT
cGFucykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zOyArK2kpIHsKLSAgICAg
IHZhciBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV07Ci0gICAgICBpZiAoc3AuY29sbGFwc2VkICYm
IChzcC50byA9PSBudWxsIHx8IHNwLnRvID09IGxpbmUudGV4dC5sZW5ndGgpKSBoYXNCYWRTcGFu
ID0gdHJ1ZTsKKyAgZnVuY3Rpb24gY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcihsaW5lVmll
dykgeworICAgIGlmIChsaW5lVmlldy5tZWFzdXJlKSB7CisgICAgICBsaW5lVmlldy5tZWFzdXJl
LmNhY2hlID0ge307CisgICAgICBsaW5lVmlldy5tZWFzdXJlLmhlaWdodHMgPSBudWxsOworICAg
ICAgaWYgKGxpbmVWaWV3LnJlc3QpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5s
ZW5ndGg7IGkrKykKKyAgICAgICAgbGluZVZpZXcubWVhc3VyZS5jYWNoZXNbaV0gPSB7fTsKICAg
ICB9Ci0gICAgdmFyIGNhY2hlZCA9ICFoYXNCYWRTcGFuICYmIGZpbmRDYWNoZWRNZWFzdXJlbWVu
dChjbSwgbGluZSk7Ci0gICAgaWYgKGNhY2hlZCB8fCBsaW5lLnRleHQubGVuZ3RoID49IGNtLm9w
dGlvbnMuY3J1ZGVNZWFzdXJpbmdGcm9tKQotICAgICAgcmV0dXJuIG1lYXN1cmVDaGFyKGNtLCBs
aW5lLCBsaW5lLnRleHQubGVuZ3RoLCBjYWNoZWQgJiYgY2FjaGVkLm1lYXN1cmUsICJyaWdodCIp
LnJpZ2h0OworICB9CiAKLSAgICB2YXIgcHJlID0gYnVpbGRMaW5lQ29udGVudChjbSwgbGluZSwg
bnVsbCwgdHJ1ZSkucHJlOwotICAgIHZhciBlbmQgPSBwcmUuYXBwZW5kQ2hpbGQoemVyb1dpZHRo
RWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKTsKLSAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChj
bS5kaXNwbGF5Lm1lYXN1cmUsIHByZSk7Ci0gICAgcmV0dXJuIGdldFJlY3QoZW5kKS5yaWdodCAt
IGdldFJlY3QoY20uZGlzcGxheS5saW5lRGl2KS5sZWZ0OworICBmdW5jdGlvbiBjbGVhckxpbmVN
ZWFzdXJlbWVudENhY2hlKGNtKSB7CisgICAgY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmUgPSBu
dWxsOworICAgIHJlbW92ZUNoaWxkcmVuKGNtLmRpc3BsYXkubGluZU1lYXN1cmUpOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY20uZGlzcGxheS52aWV3Lmxlbmd0aDsgaSsrKQorICAgICAgY2xl
YXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcihjbS5kaXNwbGF5LnZpZXdbaV0pOwogICB9CiAKICAg
ZnVuY3Rpb24gY2xlYXJDYWNoZXMoY20pIHsKLSAgICBjbS5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2Fj
aGUubGVuZ3RoID0gY20uZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zID0gMDsKLSAgICBjbS5k
aXNwbGF5LmNhY2hlZENoYXJXaWR0aCA9IGNtLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IG51
bGw7CisgICAgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZShjbSk7CisgICAgY20uZGlzcGxheS5j
YWNoZWRDaGFyV2lkdGggPSBjbS5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgPSBjbS5kaXNwbGF5
LmNhY2hlZFBhZGRpbmdIID0gbnVsbDsKICAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5n
KSBjbS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gdHJ1ZTsKICAgICBjbS5kaXNwbGF5LmxpbmVO
dW1DaGFycyA9IG51bGw7CiAgIH0KQEAgLTExNjAsNyArMTY3Myw5IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBwYWdlU2Nyb2xsWCgpIHsgcmV0dXJuIHdp
bmRvdy5wYWdlWE9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50
LmJvZHkpLnNjcm9sbExlZnQ7IH0KICAgZnVuY3Rpb24gcGFnZVNjcm9sbFkoKSB7IHJldHVybiB3
aW5kb3cucGFnZVlPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVu
dC5ib2R5KS5zY3JvbGxUb3A7IH0KIAotICAvLyBDb250ZXh0IGlzIG9uZSBvZiAibGluZSIsICJk
aXYiIChkaXNwbGF5LmxpbmVEaXYpLCAibG9jYWwiL251bGwgKGVkaXRvciksIG9yICJwYWdlIgor
ICAvLyBDb252ZXJ0cyBhIHt0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHR9IGJveCBmcm9tIGxpbmUt
bG9jYWwKKyAgLy8gY29vcmRpbmF0ZXMgaW50byBhbm90aGVyIGNvb3JkaW5hdGUgc3lzdGVtLiBD
b250ZXh0IG1heSBiZSBvbmUgb2YKKyAgLy8gImxpbmUiLCAiZGl2IiAoZGlzcGxheS5saW5lRGl2
KSwgImxvY2FsIi9udWxsIChlZGl0b3IpLCBvciAicGFnZSIuCiAgIGZ1bmN0aW9uIGludG9Db29y
ZFN5c3RlbShjbSwgbGluZU9iaiwgcmVjdCwgY29udGV4dCkgewogICAgIGlmIChsaW5lT2JqLndp
ZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZU9iai53aWRnZXRzLmxlbmd0aDsgKytpKSBp
ZiAobGluZU9iai53aWRnZXRzW2ldLmFib3ZlKSB7CiAgICAgICB2YXIgc2l6ZSA9IHdpZGdldEhl
aWdodChsaW5lT2JqLndpZGdldHNbaV0pOwpAQCAtMTE2OCwxMSArMTY4MywxMSBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgICAgaWYgKGNvbnRleHQgPT0gImxp
bmUiKSByZXR1cm4gcmVjdDsKICAgICBpZiAoIWNvbnRleHQpIGNvbnRleHQgPSAibG9jYWwiOwot
ICAgIHZhciB5T2ZmID0gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lT2JqKTsKKyAgICB2YXIgeU9mZiA9
IGhlaWdodEF0TGluZShsaW5lT2JqKTsKICAgICBpZiAoY29udGV4dCA9PSAibG9jYWwiKSB5T2Zm
ICs9IHBhZGRpbmdUb3AoY20uZGlzcGxheSk7CiAgICAgZWxzZSB5T2ZmIC09IGNtLmRpc3BsYXku
dmlld09mZnNldDsKICAgICBpZiAoY29udGV4dCA9PSAicGFnZSIgfHwgY29udGV4dCA9PSAid2lu
ZG93IikgewotICAgICAgdmFyIGxPZmYgPSBnZXRSZWN0KGNtLmRpc3BsYXkubGluZVNwYWNlKTsK
KyAgICAgIHZhciBsT2ZmID0gY20uZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCk7CiAgICAgICB5T2ZmICs9IGxPZmYudG9wICsgKGNvbnRleHQgPT0gIndpbmRvdyIgPyAw
IDogcGFnZVNjcm9sbFkoKSk7CiAgICAgICB2YXIgeE9mZiA9IGxPZmYubGVmdCArIChjb250ZXh0
ID09ICJ3aW5kb3ciID8gMCA6IHBhZ2VTY3JvbGxYKCkpOwogICAgICAgcmVjdC5sZWZ0ICs9IHhP
ZmY7IHJlY3QucmlnaHQgKz0geE9mZjsKQEAgLTExODEsOCArMTY5Niw4IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiByZWN0OwogICB9CiAKLSAgLy8gQ29u
dGV4dCBtYXkgYmUgIndpbmRvdyIsICJwYWdlIiwgImRpdiIsIG9yICJsb2NhbCIvbnVsbAotICAv
LyBSZXN1bHQgaXMgaW4gImRpdiIgY29vcmRzCisgIC8vIENvdmVydHMgYSBib3ggZnJvbSAiZGl2
IiBjb29yZHMgdG8gYW5vdGhlciBjb29yZGluYXRlIHN5c3RlbS4KKyAgLy8gQ29udGV4dCBtYXkg
YmUgIndpbmRvdyIsICJwYWdlIiwgImRpdiIsIG9yICJsb2NhbCIvbnVsbC4KICAgZnVuY3Rpb24g
ZnJvbUNvb3JkU3lzdGVtKGNtLCBjb29yZHMsIGNvbnRleHQpIHsKICAgICBpZiAoY29udGV4dCA9
PSAiZGl2IikgcmV0dXJuIGNvb3JkczsKICAgICB2YXIgbGVmdCA9IGNvb3Jkcy5sZWZ0LCB0b3Ag
PSBjb29yZHMudG9wOwpAQCAtMTE5MSwyNSArMTcwNiwyOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIGxlZnQgLT0gcGFnZVNjcm9sbFgoKTsKICAgICAgIHRvcCAt
PSBwYWdlU2Nyb2xsWSgpOwogICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAibG9jYWwiIHx8ICFj
b250ZXh0KSB7Ci0gICAgICB2YXIgbG9jYWxCb3ggPSBnZXRSZWN0KGNtLmRpc3BsYXkuc2l6ZXIp
OworICAgICAgdmFyIGxvY2FsQm94ID0gY20uZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKICAgICAgIGxlZnQgKz0gbG9jYWxCb3gubGVmdDsKICAgICAgIHRvcCArPSBsb2Nh
bEJveC50b3A7CiAgICAgfQogCi0gICAgdmFyIGxpbmVTcGFjZUJveCA9IGdldFJlY3QoY20uZGlz
cGxheS5saW5lU3BhY2UpOworICAgIHZhciBsaW5lU3BhY2VCb3ggPSBjbS5kaXNwbGF5LmxpbmVT
cGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICByZXR1cm4ge2xlZnQ6IGxlZnQgLSBs
aW5lU3BhY2VCb3gubGVmdCwgdG9wOiB0b3AgLSBsaW5lU3BhY2VCb3gudG9wfTsKICAgfQogCiAg
IGZ1bmN0aW9uIGNoYXJDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgYmlhcykgewog
ICAgIGlmICghbGluZU9iaikgbGluZU9iaiA9IGdldExpbmUoY20uZG9jLCBwb3MubGluZSk7Ci0g
ICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbWVhc3VyZUNoYXIoY20sIGxp
bmVPYmosIHBvcy5jaCwgbnVsbCwgYmlhcyksIGNvbnRleHQpOworICAgIHJldHVybiBpbnRvQ29v
cmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3MuY2gsIGJp
YXMpLCBjb250ZXh0KTsKICAgfQogCi0gIGZ1bmN0aW9uIGN1cnNvckNvb3JkcyhjbSwgcG9zLCBj
b250ZXh0LCBsaW5lT2JqLCBtZWFzdXJlbWVudCkgeworICAvLyBSZXR1cm5zIGEgYm94IGZvciBh
IGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgd2hpY2ggbWF5IGhhdmUgYW4KKyAgLy8gJ290aGVyJyBw
cm9wZXJ0eSBjb250YWluaW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kYXJ5IGN1cnNvcgor
ICAvLyBvbiBhIGJpZGkgYm91bmRhcnkuCisgIGZ1bmN0aW9uIGN1cnNvckNvb3JkcyhjbSwgcG9z
LCBjb250ZXh0LCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUpIHsKICAgICBsaW5lT2JqID0gbGlu
ZU9iaiB8fCBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwotICAgIGlmICghbWVhc3VyZW1lbnQp
IG1lYXN1cmVtZW50ID0gbWVhc3VyZUxpbmUoY20sIGxpbmVPYmopOworICAgIGlmICghcHJlcGFy
ZWRNZWFzdXJlKSBwcmVwYXJlZE1lYXN1cmUgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxp
bmVPYmopOwogICAgIGZ1bmN0aW9uIGdldChjaCwgcmlnaHQpIHsKLSAgICAgIHZhciBtID0gbWVh
c3VyZUNoYXIoY20sIGxpbmVPYmosIGNoLCBtZWFzdXJlbWVudCwgcmlnaHQgPyAicmlnaHQiIDog
ImxlZnQiKTsKKyAgICAgIHZhciBtID0gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRN
ZWFzdXJlLCBjaCwgcmlnaHQgPyAicmlnaHQiIDogImxlZnQiKTsKICAgICAgIGlmIChyaWdodCkg
bS5sZWZ0ID0gbS5yaWdodDsgZWxzZSBtLnJpZ2h0ID0gbS5sZWZ0OwogICAgICAgcmV0dXJuIGlu
dG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbSwgY29udGV4dCk7CiAgICAgfQpAQCAtMTIzNSw0
MyArMTc1Myw1OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1
cm4gdmFsOwogICB9CiAKKyAgLy8gVXNlZCB0byBjaGVhcGx5IGVzdGltYXRlIHRoZSBjb29yZGlu
YXRlcyBmb3IgYSBwb3NpdGlvbi4gVXNlZCBmb3IKKyAgLy8gaW50ZXJtZWRpYXRlIHNjcm9sbCB1
cGRhdGVzLgorICBmdW5jdGlvbiBlc3RpbWF0ZUNvb3JkcyhjbSwgcG9zKSB7CisgICAgdmFyIGxl
ZnQgPSAwLCBwb3MgPSBjbGlwUG9zKGNtLmRvYywgcG9zKTsKKyAgICBpZiAoIWNtLm9wdGlvbnMu
bGluZVdyYXBwaW5nKSBsZWZ0ID0gY2hhcldpZHRoKGNtLmRpc3BsYXkpICogcG9zLmNoOworICAg
IHZhciBsaW5lT2JqID0gZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTsKKyAgICB2YXIgdG9wID0g
aGVpZ2h0QXRMaW5lKGxpbmVPYmopICsgcGFkZGluZ1RvcChjbS5kaXNwbGF5KTsKKyAgICByZXR1
cm4ge2xlZnQ6IGxlZnQsIHJpZ2h0OiBsZWZ0LCB0b3A6IHRvcCwgYm90dG9tOiB0b3AgKyBsaW5l
T2JqLmhlaWdodH07CisgIH0KKworICAvLyBQb3NpdGlvbnMgcmV0dXJuZWQgYnkgY29vcmRzQ2hh
ciBjb250YWluIHNvbWUgZXh0cmEgaW5mb3JtYXRpb24uCisgIC8vIHhSZWwgaXMgdGhlIHJlbGF0
aXZlIHggcG9zaXRpb24gb2YgdGhlIGlucHV0IGNvb3JkaW5hdGVzIGNvbXBhcmVkCisgIC8vIHRv
IHRoZSBmb3VuZCBwb3NpdGlvbiAoc28geFJlbCA+IDAgbWVhbnMgdGhlIGNvb3JkaW5hdGVzIGFy
ZSB0bworICAvLyB0aGUgcmlnaHQgb2YgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiwgZm9yIGV4YW1w
bGUpLiBXaGVuIG91dHNpZGUKKyAgLy8gaXMgdHJ1ZSwgdGhhdCBtZWFucyB0aGUgY29vcmRpbmF0
ZXMgbGllIG91dHNpZGUgdGhlIGxpbmUncworICAvLyB2ZXJ0aWNhbCByYW5nZS4KICAgZnVuY3Rp
b24gUG9zV2l0aEluZm8obGluZSwgY2gsIG91dHNpZGUsIHhSZWwpIHsKLSAgICB2YXIgcG9zID0g
bmV3IFBvcyhsaW5lLCBjaCk7CisgICAgdmFyIHBvcyA9IFBvcyhsaW5lLCBjaCk7CiAgICAgcG9z
LnhSZWwgPSB4UmVsOwogICAgIGlmIChvdXRzaWRlKSBwb3Mub3V0c2lkZSA9IHRydWU7CiAgICAg
cmV0dXJuIHBvczsKICAgfQogCi0gIC8vIENvb3JkcyBtdXN0IGJlIGxpbmVTcGFjZS1sb2NhbAor
ICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gY2xvc2VzdCB0byB0aGUgZ2l2ZW4g
Y29vcmRpbmF0ZXMuCisgIC8vIElucHV0IG11c3QgYmUgbGluZVNwYWNlLWxvY2FsICgiZGl2IiBj
b29yZGluYXRlIHN5c3RlbSkuCiAgIGZ1bmN0aW9uIGNvb3Jkc0NoYXIoY20sIHgsIHkpIHsKICAg
ICB2YXIgZG9jID0gY20uZG9jOwogICAgIHkgKz0gY20uZGlzcGxheS52aWV3T2Zmc2V0OwogICAg
IGlmICh5IDwgMCkgcmV0dXJuIFBvc1dpdGhJbmZvKGRvYy5maXJzdCwgMCwgdHJ1ZSwgLTEpOwot
ICAgIHZhciBsaW5lTm8gPSBsaW5lQXRIZWlnaHQoZG9jLCB5KSwgbGFzdCA9IGRvYy5maXJzdCAr
IGRvYy5zaXplIC0gMTsKLSAgICBpZiAobGluZU5vID4gbGFzdCkKKyAgICB2YXIgbGluZU4gPSBs
aW5lQXRIZWlnaHQoZG9jLCB5KSwgbGFzdCA9IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTsKKyAg
ICBpZiAobGluZU4gPiBsYXN0KQogICAgICAgcmV0dXJuIFBvc1dpdGhJbmZvKGRvYy5maXJzdCAr
IGRvYy5zaXplIC0gMSwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoLCB0cnVlLCAxKTsK
ICAgICBpZiAoeCA8IDApIHggPSAwOwogCisgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywg
bGluZU4pOwogICAgIGZvciAoOzspIHsKLSAgICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShkb2Ms
IGxpbmVObyk7Ci0gICAgICB2YXIgZm91bmQgPSBjb29yZHNDaGFySW5uZXIoY20sIGxpbmVPYmos
IGxpbmVObywgeCwgeSk7CisgICAgICB2YXIgZm91bmQgPSBjb29yZHNDaGFySW5uZXIoY20sIGxp
bmVPYmosIGxpbmVOLCB4LCB5KTsKICAgICAgIHZhciBtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRF
bmQobGluZU9iaik7Ci0gICAgICB2YXIgbWVyZ2VkUG9zID0gbWVyZ2VkICYmIG1lcmdlZC5maW5k
KCk7CisgICAgICB2YXIgbWVyZ2VkUG9zID0gbWVyZ2VkICYmIG1lcmdlZC5maW5kKDAsIHRydWUp
OwogICAgICAgaWYgKG1lcmdlZCAmJiAoZm91bmQuY2ggPiBtZXJnZWRQb3MuZnJvbS5jaCB8fCBm
b3VuZC5jaCA9PSBtZXJnZWRQb3MuZnJvbS5jaCAmJiBmb3VuZC54UmVsID4gMCkpCi0gICAgICAg
IGxpbmVObyA9IG1lcmdlZFBvcy50by5saW5lOworICAgICAgICBsaW5lTiA9IGxpbmVObyhsaW5l
T2JqID0gbWVyZ2VkUG9zLnRvLmxpbmUpOwogICAgICAgZWxzZQogICAgICAgICByZXR1cm4gZm91
bmQ7CiAgICAgfQogICB9CiAKICAgZnVuY3Rpb24gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2Jq
LCBsaW5lTm8sIHgsIHkpIHsKLSAgICB2YXIgaW5uZXJPZmYgPSB5IC0gaGVpZ2h0QXRMaW5lKGNt
LCBsaW5lT2JqKTsKKyAgICB2YXIgaW5uZXJPZmYgPSB5IC0gaGVpZ2h0QXRMaW5lKGxpbmVPYmop
OwogICAgIHZhciB3cm9uZ0xpbmUgPSBmYWxzZSwgYWRqdXN0ID0gMiAqIGNtLmRpc3BsYXkud3Jh
cHBlci5jbGllbnRXaWR0aDsKLSAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlTGluZShjbSwg
bGluZU9iaik7CisgICAgdmFyIHByZXBhcmVkTWVhc3VyZSA9IHByZXBhcmVNZWFzdXJlRm9yTGlu
ZShjbSwgbGluZU9iaik7CiAKICAgICBmdW5jdGlvbiBnZXRYKGNoKSB7Ci0gICAgICB2YXIgc3Ag
PSBjdXJzb3JDb29yZHMoY20sIFBvcyhsaW5lTm8sIGNoKSwgImxpbmUiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmVPYmosIG1lYXN1cmVtZW50KTsKKyAgICAgIHZhciBzcCA9IGN1
cnNvckNvb3JkcyhjbSwgUG9zKGxpbmVObywgY2gpLCAibGluZSIsIGxpbmVPYmosIHByZXBhcmVk
TWVhc3VyZSk7CiAgICAgICB3cm9uZ0xpbmUgPSB0cnVlOwogICAgICAgaWYgKGlubmVyT2ZmID4g
c3AuYm90dG9tKSByZXR1cm4gc3AubGVmdCAtIGFkanVzdDsKICAgICAgIGVsc2UgaWYgKGlubmVy
T2ZmIDwgc3AudG9wKSByZXR1cm4gc3AubGVmdCArIGFkanVzdDsKQEAgLTEyODksOSArMTgyMyw5
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKGJpZGkgPyB0
byA9PSBmcm9tIHx8IHRvID09IG1vdmVWaXN1YWxseShsaW5lT2JqLCBmcm9tLCAxKSA6IHRvIC0g
ZnJvbSA8PSAxKSB7CiAgICAgICAgIHZhciBjaCA9IHggPCBmcm9tWCB8fCB4IC0gZnJvbVggPD0g
dG9YIC0geCA/IGZyb20gOiB0bzsKICAgICAgICAgdmFyIHhEaWZmID0geCAtIChjaCA9PSBmcm9t
ID8gZnJvbVggOiB0b1gpOwotICAgICAgICB3aGlsZSAoaXNFeHRlbmRpbmdDaGFyLnRlc3QobGlu
ZU9iai50ZXh0LmNoYXJBdChjaCkpKSArK2NoOworICAgICAgICB3aGlsZSAoaXNFeHRlbmRpbmdD
aGFyKGxpbmVPYmoudGV4dC5jaGFyQXQoY2gpKSkgKytjaDsKICAgICAgICAgdmFyIHBvcyA9IFBv
c1dpdGhJbmZvKGxpbmVObywgY2gsIGNoID09IGZyb20gPyBmcm9tT3V0c2lkZSA6IHRvT3V0c2lk
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEaWZmIDwgMCA/IC0xIDogeERpZmYg
PyAxIDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGlmZiA8IC0xID8gLTEg
OiB4RGlmZiA+IDEgPyAxIDogMCk7CiAgICAgICAgIHJldHVybiBwb3M7CiAgICAgICB9CiAgICAg
ICB2YXIgc3RlcCA9IE1hdGguY2VpbChkaXN0IC8gMiksIG1pZGRsZSA9IGZyb20gKyBzdGVwOwpA
QCAtMTMwNiw2ICsxODQwLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
IH0KIAogICB2YXIgbWVhc3VyZVRleHQ7CisgIC8vIENvbXB1dGUgdGhlIGRlZmF1bHQgdGV4dCBo
ZWlnaHQuCiAgIGZ1bmN0aW9uIHRleHRIZWlnaHQoZGlzcGxheSkgewogICAgIGlmIChkaXNwbGF5
LmNhY2hlZFRleHRIZWlnaHQgIT0gbnVsbCkgcmV0dXJuIGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdo
dDsKICAgICBpZiAobWVhc3VyZVRleHQgPT0gbnVsbCkgewpAQCAtMTMyNSw4NCArMTg2MCw4OSBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gaGVpZ2h0IHx8
IDE7CiAgIH0KIAorICAvLyBDb21wdXRlIHRoZSBkZWZhdWx0IGNoYXJhY3RlciB3aWR0aC4KICAg
ZnVuY3Rpb24gY2hhcldpZHRoKGRpc3BsYXkpIHsKICAgICBpZiAoZGlzcGxheS5jYWNoZWRDaGFy
V2lkdGggIT0gbnVsbCkgcmV0dXJuIGRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoOwotICAgIHZhciBh
bmNob3IgPSBlbHQoInNwYW4iLCAieCIpOworICAgIHZhciBhbmNob3IgPSBlbHQoInNwYW4iLCAi
eHh4eHh4eHh4eCIpOwogICAgIHZhciBwcmUgPSBlbHQoInByZSIsIFthbmNob3JdKTsKICAgICBy
ZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIHByZSk7Ci0gICAgdmFyIHdpZHRo
ID0gYW5jaG9yLm9mZnNldFdpZHRoOworICAgIHZhciByZWN0ID0gYW5jaG9yLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpLCB3aWR0aCA9IChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAvIDEwOwogICAg
IGlmICh3aWR0aCA+IDIpIGRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoID0gd2lkdGg7CiAgICAgcmV0
dXJuIHdpZHRoIHx8IDEwOwogICB9CiAKICAgLy8gT1BFUkFUSU9OUwogCi0gIC8vIE9wZXJhdGlv
bnMgYXJlIHVzZWQgdG8gd3JhcCBjaGFuZ2VzIGluIHN1Y2ggYSB3YXkgdGhhdCBlYWNoCi0gIC8v
IGNoYW5nZSB3b24ndCBoYXZlIHRvIHVwZGF0ZSB0aGUgY3Vyc29yIGFuZCBkaXNwbGF5ICh3aGlj
aCB3b3VsZAotICAvLyBiZSBhd2t3YXJkLCBzbG93LCBhbmQgZXJyb3ItcHJvbmUpLCBidXQgaW5z
dGVhZCB1cGRhdGVzIGFyZQotICAvLyBiYXRjaGVkIGFuZCB0aGVuIGFsbCBjb21iaW5lZCBhbmQg
ZXhlY3V0ZWQgYXQgb25jZS4KKyAgLy8gT3BlcmF0aW9ucyBhcmUgdXNlZCB0byB3cmFwIGEgc2Vy
aWVzIG9mIGNoYW5nZXMgdG8gdGhlIGVkaXRvcgorICAvLyBzdGF0ZSBpbiBzdWNoIGEgd2F5IHRo
YXQgZWFjaCBjaGFuZ2Ugd29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlCisgIC8vIGN1cnNvciBhbmQg
ZGlzcGxheSAod2hpY2ggd291bGQgYmUgYXdrd2FyZCwgc2xvdywgYW5kCisgIC8vIGVycm9yLXBy
b25lKS4gSW5zdGVhZCwgZGlzcGxheSB1cGRhdGVzIGFyZSBiYXRjaGVkIGFuZCB0aGVuIGFsbAor
ICAvLyBjb21iaW5lZCBhbmQgZXhlY3V0ZWQgYXQgb25jZS4KIAogICB2YXIgbmV4dE9wSWQgPSAw
OworICAvLyBTdGFydCBhIG5ldyBvcGVyYXRpb24uCiAgIGZ1bmN0aW9uIHN0YXJ0T3BlcmF0aW9u
KGNtKSB7CiAgICAgY20uY3VyT3AgPSB7Ci0gICAgICAvLyBBbiBhcnJheSBvZiByYW5nZXMgb2Yg
bGluZXMgdGhhdCBoYXZlIHRvIGJlIHVwZGF0ZWQuIFNlZQotICAgICAgLy8gdXBkYXRlRGlzcGxh
eS4KLSAgICAgIGNoYW5nZXM6IFtdLAotICAgICAgZm9yY2VVcGRhdGU6IGZhbHNlLAotICAgICAg
dXBkYXRlSW5wdXQ6IG51bGwsCi0gICAgICB1c2VyU2VsQ2hhbmdlOiBudWxsLAotICAgICAgdGV4
dENoYW5nZWQ6IG51bGwsCi0gICAgICBzZWxlY3Rpb25DaGFuZ2VkOiBmYWxzZSwKLSAgICAgIGN1
cnNvckFjdGl2aXR5OiBmYWxzZSwKLSAgICAgIHVwZGF0ZU1heExpbmU6IGZhbHNlLAotICAgICAg
dXBkYXRlU2Nyb2xsUG9zOiBmYWxzZSwKLSAgICAgIGlkOiArK25leHRPcElkCisgICAgICB2aWV3
Q2hhbmdlZDogZmFsc2UsICAgICAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IGxpbmVzIG1p
Z2h0IG5lZWQgdG8gYmUgcmVkcmF3bgorICAgICAgc3RhcnRIZWlnaHQ6IGNtLmRvYy5oZWlnaHQs
IC8vIFVzZWQgdG8gZGV0ZWN0IG5lZWQgdG8gdXBkYXRlIHNjcm9sbGJhcgorICAgICAgZm9yY2VV
cGRhdGU6IGZhbHNlLCAgICAgIC8vIFVzZWQgdG8gZm9yY2UgYSByZWRyYXcKKyAgICAgIHVwZGF0
ZUlucHV0OiBudWxsLCAgICAgICAvLyBXaGV0aGVyIHRvIHJlc2V0IHRoZSBpbnB1dCB0ZXh0YXJl
YQorICAgICAgdHlwaW5nOiBmYWxzZSwgICAgICAgICAgIC8vIFdoZXRoZXIgdGhpcyByZXNldCBz
aG91bGQgYmUgY2FyZWZ1bCB0byBsZWF2ZSBleGlzdGluZyB0ZXh0IChmb3IgY29tcG9zaXRpbmcp
CisgICAgICBjaGFuZ2VPYmpzOiBudWxsLCAgICAgICAgLy8gQWNjdW11bGF0ZWQgY2hhbmdlcywg
Zm9yIGZpcmluZyBjaGFuZ2UgZXZlbnRzCisgICAgICBvcmlnaW46IG51bGwsICAgICAgICAgICAg
Ly8gU2VsZWN0aW9uJ3Mgb3JpZ2luCisgICAgICBjdXJzb3JBY3Rpdml0eTogZmFsc2UsICAgLy8g
V2hldGhlciB0byBmaXJlIGEgY3Vyc29yQWN0aXZpdHkgZXZlbnQKKyAgICAgIHNlbGVjdGlvbkNo
YW5nZWQ6IGZhbHNlLCAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gbmVlZHMgdG8gYmUgcmVkcmF3
bgorICAgICAgdXBkYXRlTWF4TGluZTogZmFsc2UsICAgIC8vIFNldCB3aGVuIHRoZSB3aWRlc3Qg
bGluZSBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIGFuZXcKKyAgICAgIHNjcm9sbExlZnQ6IG51bGws
IHNjcm9sbFRvcDogbnVsbCwgLy8gSW50ZXJtZWRpYXRlIHNjcm9sbCBwb3NpdGlvbiwgbm90IHB1
c2hlZCB0byBET00geWV0CisgICAgICBzY3JvbGxUb1BvczogbnVsbCwgICAgICAgLy8gVXNlZCB0
byBzY3JvbGwgdG8gYSBzcGVjaWZpYyBwb3NpdGlvbgorICAgICAgaWQ6ICsrbmV4dE9wSWQgICAg
ICAgICAgIC8vIFVuaXF1ZSBJRAogICAgIH07CiAgICAgaWYgKCFkZWxheWVkQ2FsbGJhY2tEZXB0
aCsrKSBkZWxheWVkQ2FsbGJhY2tzID0gW107CiAgIH0KIAorICAvLyBGaW5pc2ggYW4gb3BlcmF0
aW9uLCB1cGRhdGluZyB0aGUgZGlzcGxheSBhbmQgc2lnbmFsbGluZyBkZWxheWVkIGV2ZW50cwog
ICBmdW5jdGlvbiBlbmRPcGVyYXRpb24oY20pIHsKICAgICB2YXIgb3AgPSBjbS5jdXJPcCwgZG9j
ID0gY20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKICAgICBjbS5jdXJPcCA9IG51bGw7CiAK
LSAgICBpZiAob3AudXBkYXRlTWF4TGluZSkgY29tcHV0ZU1heExlbmd0aChjbSk7Ci0gICAgaWYg
KGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIGRp
c3BsYXkubWF4TGluZSkgewotICAgICAgdmFyIHdpZHRoID0gbWVhc3VyZUxpbmVXaWR0aChjbSwg
ZGlzcGxheS5tYXhMaW5lKTsKLSAgICAgIGRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGggPSBN
YXRoLm1heCgwLCB3aWR0aCArIDMgKyBzY3JvbGxlckN1dE9mZikgKyAicHgiOwotICAgICAgZGlz
cGxheS5tYXhMaW5lQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgdmFyIG1heFNjcm9sbExlZnQgPSBN
YXRoLm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBkaXNwbGF5LnNpemVyLm9mZnNl
dFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCk7Ci0gICAgICBpZiAobWF4U2Ny
b2xsTGVmdCA8IGRvYy5zY3JvbGxMZWZ0ICYmICFvcC51cGRhdGVTY3JvbGxQb3MpCi0gICAgICAg
IHNldFNjcm9sbExlZnQoY20sIE1hdGgubWluKGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwg
bWF4U2Nyb2xsTGVmdCksIHRydWUpOwotICAgIH0KLSAgICB2YXIgbmV3U2Nyb2xsUG9zLCB1cGRh
dGVkOwotICAgIGlmIChvcC51cGRhdGVTY3JvbGxQb3MpIHsKLSAgICAgIG5ld1Njcm9sbFBvcyA9
IG9wLnVwZGF0ZVNjcm9sbFBvczsKLSAgICB9IGVsc2UgaWYgKG9wLnNlbGVjdGlvbkNoYW5nZWQg
JiYgZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHsgLy8gZG9uJ3QgcmVzY3JvbGwgaWYg
bm90IHZpc2libGUKLSAgICAgIHZhciBjb29yZHMgPSBjdXJzb3JDb29yZHMoY20sIGRvYy5zZWwu
aGVhZCk7Ci0gICAgICBuZXdTY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIGNvb3Jk
cy5sZWZ0LCBjb29yZHMudG9wLCBjb29yZHMubGVmdCwgY29vcmRzLmJvdHRvbSk7Ci0gICAgfQot
ICAgIGlmIChvcC5jaGFuZ2VzLmxlbmd0aCB8fCBvcC5mb3JjZVVwZGF0ZSB8fCBuZXdTY3JvbGxQ
b3MgJiYgbmV3U2Nyb2xsUG9zLnNjcm9sbFRvcCAhPSBudWxsKSB7Ci0gICAgICB1cGRhdGVkID0g
dXBkYXRlRGlzcGxheShjbSwgb3AuY2hhbmdlcywgbmV3U2Nyb2xsUG9zICYmIG5ld1Njcm9sbFBv
cy5zY3JvbGxUb3AsIG9wLmZvcmNlVXBkYXRlKTsKKyAgICBpZiAob3AudXBkYXRlTWF4TGluZSkg
ZmluZE1heExpbmUoY20pOworCisgICAgLy8gSWYgaXQgbG9va3MgbGlrZSBhbiB1cGRhdGUgbWln
aHQgYmUgbmVlZGVkLCBjYWxsIHVwZGF0ZURpc3BsYXkKKyAgICBpZiAob3Audmlld0NoYW5nZWQg
fHwgb3AuZm9yY2VVcGRhdGUgfHwgb3Auc2Nyb2xsVG9wICE9IG51bGwgfHwKKyAgICAgICAgb3Au
c2Nyb2xsVG9Qb3MgJiYgKG9wLnNjcm9sbFRvUG9zLmZyb20ubGluZSA8IGRpc3BsYXkudmlld0Zy
b20gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLnNjcm9sbFRvUG9zLnRvLmxpbmUg
Pj0gZGlzcGxheS52aWV3VG8pIHx8CisgICAgICAgIGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYg
Y20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKKyAgICAgIHZhciB1cGRhdGVkID0gdXBkYXRlRGlz
cGxheShjbSwge3RvcDogb3Auc2Nyb2xsVG9wLCBlbnN1cmU6IG9wLnNjcm9sbFRvUG9zfSwgb3Au
Zm9yY2VVcGRhdGUpOwogICAgICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0
KSBjbS5kb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7CiAgICAg
fQorICAgIC8vIElmIG5vIHVwZGF0ZSB3YXMgcnVuLCBidXQgdGhlIHNlbGVjdGlvbiBjaGFuZ2Vk
LCByZWRyYXcgdGhhdC4KICAgICBpZiAoIXVwZGF0ZWQgJiYgb3Auc2VsZWN0aW9uQ2hhbmdlZCkg
dXBkYXRlU2VsZWN0aW9uKGNtKTsKLSAgICBpZiAob3AudXBkYXRlU2Nyb2xsUG9zKSB7Ci0gICAg
ICB2YXIgdG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxI
ZWlnaHQgLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwgbmV3U2Nyb2xsUG9zLnNjcm9s
bFRvcCkpOwotICAgICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LnNj
cm9sbGVyLnNjcm9sbFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwgbmV3U2Ny
b2xsUG9zLnNjcm9sbExlZnQpKTsKKyAgICBpZiAoIXVwZGF0ZWQgJiYgb3Auc3RhcnRIZWlnaHQg
IT0gY20uZG9jLmhlaWdodCkgdXBkYXRlU2Nyb2xsYmFycyhjbSk7CisKKyAgICAvLyBQcm9wYWdh
dGUgdGhlIHNjcm9sbCBwb3NpdGlvbiB0byB0aGUgYWN0dWFsIERPTSBzY3JvbGxlcgorICAgIGlm
IChvcC5zY3JvbGxUb3AgIT0gbnVsbCAmJiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCAhPSBv
cC5zY3JvbGxUb3ApIHsKKyAgICAgIHZhciB0b3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNw
bGF5LnNjcm9sbGVyLnNjcm9sbEhlaWdodCAtIGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0
LCBvcC5zY3JvbGxUb3ApKTsKICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gZGlz
cGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9IGRvYy5zY3JvbGxUb3AgPSB0b3A7CisgICAgfQor
ICAgIGlmIChvcC5zY3JvbGxMZWZ0ICE9IG51bGwgJiYgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxM
ZWZ0ICE9IG9wLnNjcm9sbExlZnQpIHsKKyAgICAgIHZhciBsZWZ0ID0gTWF0aC5tYXgoMCwgTWF0
aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGRpc3BsYXkuc2Nyb2xsZXIuY2xp
ZW50V2lkdGgsIG9wLnNjcm9sbExlZnQpKTsKICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xs
TGVmdCA9IGRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0ID0gZG9jLnNjcm9sbExlZnQgPSBs
ZWZ0OwogICAgICAgYWxpZ25Ib3Jpem9udGFsbHkoY20pOwotICAgICAgaWYgKG9wLnNjcm9sbFRv
UG9zKQotICAgICAgICBzY3JvbGxQb3NJbnRvVmlldyhjbSwgY2xpcFBvcyhjbS5kb2MsIG9wLnNj
cm9sbFRvUG9zLmZyb20pLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9zKGNtLmRv
Yywgb3Auc2Nyb2xsVG9Qb3MudG8pLCBvcC5zY3JvbGxUb1Bvcy5tYXJnaW4pOwotICAgIH0gZWxz
ZSBpZiAobmV3U2Nyb2xsUG9zKSB7Ci0gICAgICBzY3JvbGxDdXJzb3JJbnRvVmlldyhjbSk7CiAg
ICAgfQorICAgIC8vIElmIHdlIG5lZWQgdG8gc2Nyb2xsIGEgc3BlY2lmaWMgcG9zaXRpb24gaW50
byB2aWV3LCBkbyBzby4KKyAgICBpZiAob3Auc2Nyb2xsVG9Qb3MpIHsKKyAgICAgIHZhciBjb29y
ZHMgPSBzY3JvbGxQb3NJbnRvVmlldyhjbSwgY2xpcFBvcyhjbS5kb2MsIG9wLnNjcm9sbFRvUG9z
LmZyb20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQb3MoY20u
ZG9jLCBvcC5zY3JvbGxUb1Bvcy50byksIG9wLnNjcm9sbFRvUG9zLm1hcmdpbik7CisgICAgICBp
ZiAob3Auc2Nyb2xsVG9Qb3MuaXNDdXJzb3IgJiYgY20uc3RhdGUuZm9jdXNlZCkgbWF5YmVTY3Jv
bGxXaW5kb3coY20sIGNvb3Jkcyk7CisgICAgfQorCiAgICAgaWYgKG9wLnNlbGVjdGlvbkNoYW5n
ZWQpIHJlc3RhcnRCbGluayhjbSk7CiAKICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCAmJiBvcC51
cGRhdGVJbnB1dCkKLSAgICAgIHJlc2V0SW5wdXQoY20sIG9wLnVzZXJTZWxDaGFuZ2UpOworICAg
ICAgcmVzZXRJbnB1dChjbSwgb3AudHlwaW5nKTsKIAorICAgIC8vIEZpcmUgZXZlbnRzIGZvciBt
YXJrZXJzIHRoYXQgYXJlIGhpZGRlbi91bmlkZGVuIGJ5IGVkaXRpbmcgb3IKKyAgICAvLyB1bmRv
aW5nCiAgICAgdmFyIGhpZGRlbiA9IG9wLm1heWJlSGlkZGVuTWFya2VycywgdW5oaWRkZW4gPSBv
cC5tYXliZVVuaGlkZGVuTWFya2VyczsKICAgICBpZiAoaGlkZGVuKSBmb3IgKHZhciBpID0gMDsg
aSA8IGhpZGRlbi5sZW5ndGg7ICsraSkKICAgICAgIGlmICghaGlkZGVuW2ldLmxpbmVzLmxlbmd0
aCkgc2lnbmFsKGhpZGRlbltpXSwgImhpZGUiKTsKQEAgLTE0MTQsNDcgKzE5NTQsMjQyIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZGVsYXllZCA9IGRlbGF5ZWRD
YWxsYmFja3M7CiAgICAgICBkZWxheWVkQ2FsbGJhY2tzID0gbnVsbDsKICAgICB9Ci0gICAgaWYg
KG9wLnRleHRDaGFuZ2VkKQotICAgICAgc2lnbmFsKGNtLCAiY2hhbmdlIiwgY20sIG9wLnRleHRD
aGFuZ2VkKTsKLSAgICBpZiAob3AuY3Vyc29yQWN0aXZpdHkpIHNpZ25hbChjbSwgImN1cnNvckFj
dGl2aXR5IiwgY20pOworICAgIC8vIEZpcmUgY2hhbmdlIGV2ZW50cywgYW5kIGRlbGF5ZWQgZXZl
bnQgaGFuZGxlcnMKKyAgICBpZiAob3AuY2hhbmdlT2JqcykgeworICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBvcC5jaGFuZ2VPYmpzLmxlbmd0aDsgaSsrKQorICAgICAgICBzaWduYWwoY20sICJj
aGFuZ2UiLCBjbSwgb3AuY2hhbmdlT2Jqc1tpXSk7CisgICAgICBzaWduYWwoY20sICJjaGFuZ2Vz
IiwgY20sIG9wLmNoYW5nZU9ianMpOworICAgIH0KKyAgICBpZiAob3AuY3Vyc29yQWN0aXZpdHkp
IHNpZ25hbChjbSwgImN1cnNvckFjdGl2aXR5IiwgY20sIG9wLm9yaWdpbik7CiAgICAgaWYgKGRl
bGF5ZWQpIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsYXllZC5sZW5ndGg7ICsraSkgZGVsYXllZFtp
XSgpOwogICB9CiAKKyAgLy8gUnVuIHRoZSBnaXZlbiBmdW5jdGlvbiBpbiBhbiBvcGVyYXRpb24K
KyAgZnVuY3Rpb24gcnVuSW5PcChjbSwgZikgeworICAgIGlmIChjbS5jdXJPcCkgcmV0dXJuIGYo
KTsKKyAgICBzdGFydE9wZXJhdGlvbihjbSk7CisgICAgdHJ5IHsgcmV0dXJuIGYoKTsgfQorICAg
IGZpbmFsbHkgeyBlbmRPcGVyYXRpb24oY20pOyB9CisgIH0KICAgLy8gV3JhcHMgYSBmdW5jdGlv
biBpbiBhbiBvcGVyYXRpb24uIFJldHVybnMgdGhlIHdyYXBwZWQgZnVuY3Rpb24uCi0gIGZ1bmN0
aW9uIG9wZXJhdGlvbihjbTEsIGYpIHsKKyAgZnVuY3Rpb24gb3BlcmF0aW9uKGNtLCBmKSB7CiAg
ICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGNtID0gY20xIHx8IHRoaXMsIHdpdGhP
cCA9ICFjbS5jdXJPcDsKLSAgICAgIGlmICh3aXRoT3ApIHN0YXJ0T3BlcmF0aW9uKGNtKTsKLSAg
ICAgIHRyeSB7IHZhciByZXN1bHQgPSBmLmFwcGx5KGNtLCBhcmd1bWVudHMpOyB9Ci0gICAgICBm
aW5hbGx5IHsgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9uKGNtKTsgfQotICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgIGlmIChjbS5jdXJPcCkgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cyk7
CisgICAgICBzdGFydE9wZXJhdGlvbihjbSk7CisgICAgICB0cnkgeyByZXR1cm4gZi5hcHBseShj
bSwgYXJndW1lbnRzKTsgfQorICAgICAgZmluYWxseSB7IGVuZE9wZXJhdGlvbihjbSk7IH0KICAg
ICB9OwogICB9Ci0gIGZ1bmN0aW9uIGRvY09wZXJhdGlvbihmKSB7CisgIC8vIFVzZWQgdG8gYWRk
IG1ldGhvZHMgdG8gZWRpdG9yIGFuZCBkb2MgaW5zdGFuY2VzLCB3cmFwcGluZyB0aGVtIGluCisg
IC8vIG9wZXJhdGlvbnMuCisgIGZ1bmN0aW9uIG1ldGhvZE9wKGYpIHsKICAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7Ci0gICAgICB2YXIgd2l0aE9wID0gdGhpcy5jbSAmJiAhdGhpcy5jbS5jdXJPcCwg
cmVzdWx0OwotICAgICAgaWYgKHdpdGhPcCkgc3RhcnRPcGVyYXRpb24odGhpcy5jbSk7Ci0gICAg
ICB0cnkgeyByZXN1bHQgPSBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KLSAgICAgIGZpbmFs
bHkgeyBpZiAod2l0aE9wKSBlbmRPcGVyYXRpb24odGhpcy5jbSk7IH0KLSAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICBpZiAodGhpcy5jdXJPcCkgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1l
bnRzKTsKKyAgICAgIHN0YXJ0T3BlcmF0aW9uKHRoaXMpOworICAgICAgdHJ5IHsgcmV0dXJuIGYu
YXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQorICAgICAgZmluYWxseSB7IGVuZE9wZXJhdGlvbih0
aGlzKTsgfQogICAgIH07CiAgIH0KLSAgZnVuY3Rpb24gcnVuSW5PcChjbSwgZikgewotICAgIHZh
ciB3aXRoT3AgPSAhY20uY3VyT3AsIHJlc3VsdDsKLSAgICBpZiAod2l0aE9wKSBzdGFydE9wZXJh
dGlvbihjbSk7Ci0gICAgdHJ5IHsgcmVzdWx0ID0gZigpOyB9Ci0gICAgZmluYWxseSB7IGlmICh3
aXRoT3ApIGVuZE9wZXJhdGlvbihjbSk7IH0KLSAgICByZXR1cm4gcmVzdWx0OworICBmdW5jdGlv
biBkb2NNZXRob2RPcChmKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGNt
ID0gdGhpcy5jbTsKKyAgICAgIGlmICghY20gfHwgY20uY3VyT3ApIHJldHVybiBmLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7CisgICAgICBzdGFydE9wZXJhdGlvbihjbSk7CisgICAgICB0cnkgeyBy
ZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9CisgICAgICBmaW5hbGx5IHsgZW5kT3Bl
cmF0aW9uKGNtKTsgfQorICAgIH07CisgIH0KKworICAvLyBWSUVXIFRSQUNLSU5HCisKKyAgLy8g
VGhlc2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlIHZpc2libGUgKGN1cnJlbnRs
eSBkcmF3bikKKyAgLy8gcGFydCBvZiB0aGUgZG9jdW1lbnQuIEEgTGluZVZpZXcgbWF5IGNvcnJl
c3BvbmQgdG8gbXVsdGlwbGUKKyAgLy8gbG9naWNhbCBsaW5lcywgaWYgdGhvc2UgYXJlIGNvbm5l
Y3RlZCBieSBjb2xsYXBzZWQgcmFuZ2VzLgorICBmdW5jdGlvbiBMaW5lVmlldyhkb2MsIGxpbmUs
IGxpbmVOKSB7CisgICAgLy8gVGhlIHN0YXJ0aW5nIGxpbmUKKyAgICB0aGlzLmxpbmUgPSBsaW5l
OworICAgIC8vIENvbnRpbnVpbmcgbGluZXMsIGlmIGFueQorICAgIHRoaXMucmVzdCA9IHZpc3Vh
bExpbmVDb250aW51ZWQobGluZSk7CisgICAgLy8gTnVtYmVyIG9mIGxvZ2ljYWwgbGluZXMgaW4g
dGhpcyB2aXN1YWwgbGluZQorICAgIHRoaXMuc2l6ZSA9IHRoaXMucmVzdCA/IGxpbmVObyhsc3Qo
dGhpcy5yZXN0KSkgLSBsaW5lTiArIDEgOiAxOworICAgIHRoaXMubm9kZSA9IHRoaXMudGV4dCA9
IG51bGw7CisgICAgdGhpcy5oaWRkZW4gPSBsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKTsKKyAgfQor
CisgIC8vIENyZWF0ZSBhIHJhbmdlIG9mIExpbmVWaWV3IG9iamVjdHMgZm9yIHRoZSBnaXZlbiBs
aW5lcy4KKyAgZnVuY3Rpb24gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIHRvKSB7CisgICAgdmFy
IGFycmF5ID0gW10sIG5leHRQb3M7CisgICAgZm9yICh2YXIgcG9zID0gZnJvbTsgcG9zIDwgdG87
IHBvcyA9IG5leHRQb3MpIHsKKyAgICAgIHZhciB2aWV3ID0gbmV3IExpbmVWaWV3KGNtLmRvYywg
Z2V0TGluZShjbS5kb2MsIHBvcyksIHBvcyk7CisgICAgICBuZXh0UG9zID0gcG9zICsgdmlldy5z
aXplOworICAgICAgYXJyYXkucHVzaCh2aWV3KTsKKyAgICB9CisgICAgcmV0dXJuIGFycmF5Owog
ICB9CiAKKyAgLy8gVXBkYXRlcyB0aGUgZGlzcGxheS52aWV3IGRhdGEgc3RydWN0dXJlIGZvciBh
IGdpdmVuIGNoYW5nZSB0byB0aGUKKyAgLy8gZG9jdW1lbnQuIEZyb20gYW5kIHRvIGFyZSBpbiBw
cmUtY2hhbmdlIGNvb3JkaW5hdGVzLiBMZW5kaWZmIGlzCisgIC8vIHRoZSBhbW91bnQgb2YgbGlu
ZXMgYWRkZWQgb3Igc3VidHJhY3RlZCBieSB0aGUgY2hhbmdlLiBUaGlzIGlzCisgIC8vIHVzZWQg
Zm9yIGNoYW5nZXMgdGhhdCBzcGFuIG11bHRpcGxlIGxpbmVzLCBvciBjaGFuZ2UgdGhlIHdheQor
ICAvLyBsaW5lcyBhcmUgZGl2aWRlZCBpbnRvIHZpc3VhbCBsaW5lcy4gcmVnTGluZUNoYW5nZSAo
YmVsb3cpCisgIC8vIHJlZ2lzdGVycyBzaW5nbGUtbGluZSBjaGFuZ2VzLgogICBmdW5jdGlvbiBy
ZWdDaGFuZ2UoY20sIGZyb20sIHRvLCBsZW5kaWZmKSB7CiAgICAgaWYgKGZyb20gPT0gbnVsbCkg
ZnJvbSA9IGNtLmRvYy5maXJzdDsKICAgICBpZiAodG8gPT0gbnVsbCkgdG8gPSBjbS5kb2MuZmly
c3QgKyBjbS5kb2Muc2l6ZTsKLSAgICBjbS5jdXJPcC5jaGFuZ2VzLnB1c2goe2Zyb206IGZyb20s
IHRvOiB0bywgZGlmZjogbGVuZGlmZn0pOworICAgIGlmICghbGVuZGlmZikgbGVuZGlmZiA9IDA7
CisKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CisgICAgaWYgKGxlbmRpZmYgJiYgdG8g
PCBkaXNwbGF5LnZpZXdUbyAmJgorICAgICAgICAoZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9
PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPiBmcm9tKSkKKyAgICAgIGRpc3Bs
YXkudXBkYXRlTGluZU51bWJlcnMgPSBmcm9tOworCisgICAgY20uY3VyT3Audmlld0NoYW5nZWQg
PSB0cnVlOworCisgICAgaWYgKGZyb20gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8gQ2hhbmdlIGFm
dGVyCisgICAgICBpZiAoc2F3Q29sbGFwc2VkU3BhbnMgJiYgdmlzdWFsTGluZU5vKGNtLmRvYywg
ZnJvbSkgPCBkaXNwbGF5LnZpZXdUbykKKyAgICAgICAgcmVzZXRWaWV3KGNtKTsKKyAgICB9IGVs
c2UgaWYgKHRvIDw9IGRpc3BsYXkudmlld0Zyb20pIHsgLy8gQ2hhbmdlIGJlZm9yZQorICAgICAg
aWYgKHNhd0NvbGxhcHNlZFNwYW5zICYmIHZpc3VhbExpbmVFbmRObyhjbS5kb2MsIHRvICsgbGVu
ZGlmZikgPiBkaXNwbGF5LnZpZXdGcm9tKSB7CisgICAgICAgIHJlc2V0VmlldyhjbSk7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBkaXNwbGF5LnZpZXdGcm9tICs9IGxlbmRpZmY7CisgICAgICAg
IGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChmcm9t
IDw9IGRpc3BsYXkudmlld0Zyb20gJiYgdG8gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8gRnVsbCBv
dmVybGFwCisgICAgICByZXNldFZpZXcoY20pOworICAgIH0gZWxzZSBpZiAoZnJvbSA8PSBkaXNw
bGF5LnZpZXdGcm9tKSB7IC8vIFRvcCBvdmVybGFwCisgICAgICB2YXIgY3V0ID0gdmlld0N1dHRp
bmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7CisgICAgICBpZiAoY3V0KSB7CisgICAg
ICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShjdXQuaW5kZXgpOworICAgICAg
ICBkaXNwbGF5LnZpZXdGcm9tID0gY3V0LmxpbmVOOworICAgICAgICBkaXNwbGF5LnZpZXdUbyAr
PSBsZW5kaWZmOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzZXRWaWV3KGNtKTsKKyAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKHRvID49IGRpc3BsYXkudmlld1RvKSB7IC8vIEJvdHRvbSBvdmVy
bGFwCisgICAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgZnJvbSwgZnJvbSwgLTEp
OworICAgICAgaWYgKGN1dCkgeworICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcu
c2xpY2UoMCwgY3V0LmluZGV4KTsKKyAgICAgICAgZGlzcGxheS52aWV3VG8gPSBjdXQubGluZU47
CisgICAgICB9IGVsc2UgeworICAgICAgICByZXNldFZpZXcoY20pOworICAgICAgfQorICAgIH0g
ZWxzZSB7IC8vIEdhcCBpbiB0aGUgbWlkZGxlCisgICAgICB2YXIgY3V0VG9wID0gdmlld0N1dHRp
bmdQb2ludChjbSwgZnJvbSwgZnJvbSwgLTEpOworICAgICAgdmFyIGN1dEJvdCA9IHZpZXdDdXR0
aW5nUG9pbnQoY20sIHRvLCB0byArIGxlbmRpZmYsIDEpOworICAgICAgaWYgKGN1dFRvcCAmJiBj
dXRCb3QpIHsKKyAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGN1
dFRvcC5pbmRleCkKKyAgICAgICAgICAuY29uY2F0KGJ1aWxkVmlld0FycmF5KGNtLCBjdXRUb3Au
bGluZU4sIGN1dEJvdC5saW5lTikpCisgICAgICAgICAgLmNvbmNhdChkaXNwbGF5LnZpZXcuc2xp
Y2UoY3V0Qm90LmluZGV4KSk7CisgICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICByZXNldFZpZXcoY20pOworICAgICAgfQorICAgIH0KKwor
ICAgIHZhciBleHQgPSBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7CisgICAgaWYgKGV4dCkgewor
ICAgICAgaWYgKHRvIDwgZXh0LmxpbmVOKQorICAgICAgICBleHQubGluZU4gKz0gbGVuZGlmZjsK
KyAgICAgIGVsc2UgaWYgKGZyb20gPCBleHQubGluZU4gKyBleHQuc2l6ZSkKKyAgICAgICAgZGlz
cGxheS5leHRlcm5hbE1lYXN1cmVkID0gbnVsbDsKKyAgICB9CisgIH0KKworICAvLyBSZWdpc3Rl
ciBhIGNoYW5nZSB0byBhIHNpbmdsZSBsaW5lLiBUeXBlIG11c3QgYmUgb25lIG9mICJ0ZXh0IiwK
KyAgLy8gImd1dHRlciIsICJjbGFzcyIsICJ3aWRnZXQiCisgIGZ1bmN0aW9uIHJlZ0xpbmVDaGFu
Z2UoY20sIGxpbmUsIHR5cGUpIHsKKyAgICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7Cisg
ICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVh
c3VyZWQ7CisgICAgaWYgKGV4dCAmJiBsaW5lID49IGV4dC5saW5lTiAmJiBsaW5lIDwgZXh0Lmxp
bmVOICsgZXh0LnNpemUpCisgICAgICBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOwor
CisgICAgaWYgKGxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8IGxpbmUgPj0gZGlzcGxheS52aWV3
VG8pIHJldHVybjsKKyAgICB2YXIgbGluZVZpZXcgPSBkaXNwbGF5LnZpZXdbZmluZFZpZXdJbmRl
eChjbSwgbGluZSldOworICAgIGlmIChsaW5lVmlldy5ub2RlID09IG51bGwpIHJldHVybjsKKyAg
ICB2YXIgYXJyID0gbGluZVZpZXcuY2hhbmdlcyB8fCAobGluZVZpZXcuY2hhbmdlcyA9IFtdKTsK
KyAgICBpZiAoaW5kZXhPZihhcnIsIHR5cGUpID09IC0xKSBhcnIucHVzaCh0eXBlKTsKKyAgfQor
CisgIC8vIENsZWFyIHRoZSB2aWV3LgorICBmdW5jdGlvbiByZXNldFZpZXcoY20pIHsKKyAgICBj
bS5kaXNwbGF5LnZpZXdGcm9tID0gY20uZGlzcGxheS52aWV3VG8gPSBjbS5kb2MuZmlyc3Q7Cisg
ICAgY20uZGlzcGxheS52aWV3ID0gW107CisgICAgY20uZGlzcGxheS52aWV3T2Zmc2V0ID0gMDsK
KyAgfQorCisgIC8vIEZpbmQgdGhlIHZpZXcgZWxlbWVudCBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2
ZW4gbGluZS4gUmV0dXJuIG51bGwKKyAgLy8gd2hlbiB0aGUgbGluZSBpc24ndCB2aXNpYmxlLgor
ICBmdW5jdGlvbiBmaW5kVmlld0luZGV4KGNtLCBuKSB7CisgICAgaWYgKG4gPj0gY20uZGlzcGxh
eS52aWV3VG8pIHJldHVybiBudWxsOworICAgIG4gLT0gY20uZGlzcGxheS52aWV3RnJvbTsKKyAg
ICBpZiAobiA8IDApIHJldHVybiBudWxsOworICAgIHZhciB2aWV3ID0gY20uZGlzcGxheS52aWV3
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykgeworICAgICAgbiAt
PSB2aWV3W2ldLnNpemU7CisgICAgICBpZiAobiA8IDApIHJldHVybiBpOworICAgIH0KKyAgfQor
CisgIGZ1bmN0aW9uIHZpZXdDdXR0aW5nUG9pbnQoY20sIG9sZE4sIG5ld04sIGRpcikgeworICAg
IHZhciBpbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIG9sZE4pLCBkaWZmLCB2aWV3ID0gY20uZGlz
cGxheS52aWV3OworICAgIGlmICghc2F3Q29sbGFwc2VkU3BhbnMpIHJldHVybiB7aW5kZXg6IGlu
ZGV4LCBsaW5lTjogbmV3Tn07CisgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBjbS5kaXNwbGF5LnZp
ZXdGcm9tOyBpIDwgaW5kZXg7IGkrKykKKyAgICAgIG4gKz0gdmlld1tpXS5zaXplOworICAgIGlm
IChuICE9IG9sZE4pIHsKKyAgICAgIGlmIChkaXIgPiAwKSB7CisgICAgICAgIGlmIChpbmRleCA9
PSB2aWV3Lmxlbmd0aCAtIDEpIHJldHVybiBudWxsOworICAgICAgICBkaWZmID0gKG4gKyB2aWV3
W2luZGV4XS5zaXplKSAtIG9sZE47CisgICAgICAgIGluZGV4Kys7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICBkaWZmID0gbiAtIG9sZE47CisgICAgICB9CisgICAgICBvbGROICs9IGRpZmY7IG5l
d04gKz0gZGlmZjsKKyAgICB9CisgICAgd2hpbGUgKHZpc3VhbExpbmVObyhjbS5kb2MsIG5ld04p
ICE9IG5ld04pIHsKKyAgICAgIGlmIChpbmRleCA9PSAoZGlyIDwgMCA/IDAgOiB2aWV3Lmxlbmd0
aCAtIDEpKSByZXR1cm4gbnVsbDsKKyAgICAgIG5ld04gKz0gZGlyICogdmlld1tpbmRleCAtIChk
aXIgPCAwID8gMSA6IDApXS5zaXplOworICAgICAgaW5kZXggKz0gZGlyOworICAgIH0KKyAgICBy
ZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059OworICB9CisKKyAgLy8gRm9yY2UgdGhl
IHZpZXcgdG8gY292ZXIgYSBnaXZlbiByYW5nZSwgYWRkaW5nIGVtcHR5IHZpZXcgZWxlbWVudAor
ICAvLyBvciBjbGlwcGluZyBvZmYgZXhpc3Rpbmcgb25lcyBhcyBuZWVkZWQuCisgIGZ1bmN0aW9u
IGFkanVzdFZpZXcoY20sIGZyb20sIHRvKSB7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5
LCB2aWV3ID0gZGlzcGxheS52aWV3OworICAgIGlmICh2aWV3Lmxlbmd0aCA9PSAwIHx8IGZyb20g
Pj0gZGlzcGxheS52aWV3VG8gfHwgdG8gPD0gZGlzcGxheS52aWV3RnJvbSkgeworICAgICAgZGlz
cGxheS52aWV3ID0gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIHRvKTsKKyAgICAgIGRpc3BsYXku
dmlld0Zyb20gPSBmcm9tOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoZGlzcGxheS52aWV3RnJv
bSA+IGZyb20pCisgICAgICAgIGRpc3BsYXkudmlldyA9IGJ1aWxkVmlld0FycmF5KGNtLCBmcm9t
LCBkaXNwbGF5LnZpZXdGcm9tKS5jb25jYXQoZGlzcGxheS52aWV3KTsKKyAgICAgIGVsc2UgaWYg
KGRpc3BsYXkudmlld0Zyb20gPCBmcm9tKQorICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5
LnZpZXcuc2xpY2UoZmluZFZpZXdJbmRleChjbSwgZnJvbSkpOworICAgICAgZGlzcGxheS52aWV3
RnJvbSA9IGZyb207CisgICAgICBpZiAoZGlzcGxheS52aWV3VG8gPCB0bykKKyAgICAgICAgZGlz
cGxheS52aWV3ID0gZGlzcGxheS52aWV3LmNvbmNhdChidWlsZFZpZXdBcnJheShjbSwgZGlzcGxh
eS52aWV3VG8sIHRvKSk7CisgICAgICBlbHNlIGlmIChkaXNwbGF5LnZpZXdUbyA+IHRvKQorICAg
ICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgZmluZFZpZXdJbmRleChj
bSwgdG8pKTsKKyAgICB9CisgICAgZGlzcGxheS52aWV3VG8gPSB0bzsKKyAgfQorCisgIC8vIENv
dW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHZpZXcgd2hvc2UgRE9NIHJlcHJlc2VudGF0
aW9uIGlzCisgIC8vIG91dCBvZiBkYXRlIChvciBub25leGlzdGVudCkuCisgIGZ1bmN0aW9uIGNv
dW50RGlydHlWaWV3KGNtKSB7CisgICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXcsIGRpcnR5
ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHsKKyAgICAg
IHZhciBsaW5lVmlldyA9IHZpZXdbaV07CisgICAgICBpZiAoIWxpbmVWaWV3LmhpZGRlbiAmJiAo
IWxpbmVWaWV3Lm5vZGUgfHwgbGluZVZpZXcuY2hhbmdlcykpICsrZGlydHk7CisgICAgfQorICAg
IHJldHVybiBkaXJ0eTsKICAgfQogCiAgIC8vIElOUFVUIEhBTkRMSU5HCiAKKyAgLy8gUG9sbCBm
b3IgaW5wdXQgY2hhbmdlcywgdXNpbmcgdGhlIG5vcm1hbCByYXRlIG9mIHBvbGxpbmcuIFRoaXMK
KyAgLy8gcnVucyBhcyBsb25nIGFzIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC4KICAgZnVuY3Rpb24g
c2xvd1BvbGwoY20pIHsKICAgICBpZiAoY20uZGlzcGxheS5wb2xsaW5nRmFzdCkgcmV0dXJuOwog
ICAgIGNtLmRpc3BsYXkucG9sbC5zZXQoY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsIGZ1bmN0aW9u
KCkgewpAQCAtMTQ2Myw2ICsyMTk4LDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgfSk7CiAgIH0KIAorICAvLyBXaGVuIGFuIGV2ZW50IGhhcyBqdXN0IGNvbWUgaW4g
dGhhdCBpcyBsaWtlbHkgdG8gYWRkIG9yIGNoYW5nZQorICAvLyBzb21ldGhpbmcgaW4gdGhlIGlu
cHV0IHRleHRhcmVhLCB3ZSBwb2xsIGZhc3RlciwgdG8gZW5zdXJlIHRoYXQKKyAgLy8gdGhlIGNo
YW5nZSBhcHBlYXJzIG9uIHRoZSBzY3JlZW4gcXVpY2tseS4KICAgZnVuY3Rpb24gZmFzdFBvbGwo
Y20pIHsKICAgICB2YXIgbWlzc2VkID0gZmFsc2U7CiAgICAgY20uZGlzcGxheS5wb2xsaW5nRmFz
dCA9IHRydWU7CkBAIC0xNDc0LDEwMCArMjIxMiwxNDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgY20uZGlzcGxheS5wb2xsLnNldCgyMCwgcCk7CiAgIH0KIAotICAv
LyBwcmV2SW5wdXQgaXMgYSBoYWNrIHRvIHdvcmsgd2l0aCBJTUUuIElmIHdlIHJlc2V0IHRoZSB0
ZXh0YXJlYQotICAvLyBvbiBldmVyeSBjaGFuZ2UsIHRoYXQgYnJlYWtzIElNRS4gU28gd2UgbG9v
ayBmb3IgY2hhbmdlcwotICAvLyBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgY29udGVudCBpbnN0
ZWFkLiAoTW9kZXJuIGJyb3dzZXJzIGhhdmUKLSAgLy8gZXZlbnRzIHRoYXQgaW5kaWNhdGUgSU1F
IHRha2luZyBwbGFjZSwgYnV0IHRoZXNlIGFyZSBub3Qgd2lkZWx5Ci0gIC8vIHN1cHBvcnRlZCBv
ciBjb21wYXRpYmxlIGVub3VnaCB5ZXQgdG8gcmVseSBvbi4pCisgIC8vIFJlYWQgaW5wdXQgZnJv
bSB0aGUgdGV4dGFyZWEsIGFuZCB1cGRhdGUgdGhlIGRvY3VtZW50IHRvIG1hdGNoLgorICAvLyBX
aGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZCwgaXQgaXMgcHJlc2VudCBpbiB0aGUgdGV4dGFyZWEs
IGFuZAorICAvLyBzZWxlY3RlZCAodW5sZXNzIGl0IGlzIGh1Z2UsIGluIHdoaWNoIGNhc2UgYSBw
bGFjZWhvbGRlciBpcworICAvLyB1c2VkKS4gV2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLCB0aGUg
Y3Vyc29yIHNpdHMgYWZ0ZXIgcHJldmlvdXNseQorICAvLyBzZWVuIHRleHQgKGNhbiBiZSBlbXB0
eSksIHdoaWNoIGlzIHN0b3JlZCBpbiBwcmV2SW5wdXQgKHdlIG11c3QKKyAgLy8gbm90IHJlc2V0
IHRoZSB0ZXh0YXJlYSB3aGVuIHR5cGluZywgYmVjYXVzZSB0aGF0IGJyZWFrcyBJTUUpLgogICBm
dW5jdGlvbiByZWFkSW5wdXQoY20pIHsKLSAgICB2YXIgaW5wdXQgPSBjbS5kaXNwbGF5LmlucHV0
LCBwcmV2SW5wdXQgPSBjbS5kaXNwbGF5LnByZXZJbnB1dCwgZG9jID0gY20uZG9jLCBzZWwgPSBk
b2Muc2VsOwotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCB8fCBoYXNTZWxlY3Rpb24oaW5wdXQp
IHx8IGlzUmVhZE9ubHkoY20pIHx8IGNtLnN0YXRlLmRpc2FibGVJbnB1dCkgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChjbS5zdGF0ZS5wYXN0ZUluY29taW5nICYmIGNtLnN0YXRlLmZha2VkTGFzdENo
YXIpIHsKLSAgICAgIGlucHV0LnZhbHVlID0gaW5wdXQudmFsdWUuc3Vic3RyaW5nKDAsIGlucHV0
LnZhbHVlLmxlbmd0aCAtIDEpOwotICAgICAgY20uc3RhdGUuZmFrZWRMYXN0Q2hhciA9IGZhbHNl
OwotICAgIH0KKyAgICB2YXIgaW5wdXQgPSBjbS5kaXNwbGF5LmlucHV0LCBwcmV2SW5wdXQgPSBj
bS5kaXNwbGF5LnByZXZJbnB1dCwgZG9jID0gY20uZG9jOworICAgIC8vIFNpbmNlIHRoaXMgaXMg
Y2FsbGVkIGEgKmxvdCosIHRyeSB0byBiYWlsIG91dCBhcyBjaGVhcGx5IGFzCisgICAgLy8gcG9z
c2libGUgd2hlbiBpdCBpcyBjbGVhciB0aGF0IG5vdGhpbmcgaGFwcGVuZWQuIGhhc1NlbGVjdGlv
bgorICAgIC8vIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBhIGxvdCBvZiB0ZXh0IGlu
IHRoZSB0ZXh0YXJlYSwKKyAgICAvLyBpbiB3aGljaCBjYXNlIHJlYWRpbmcgaXRzIHZhbHVlIHdv
dWxkIGJlIGV4cGVuc2l2ZS4KKyAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQgfHwgaGFzU2VsZWN0
aW9uKGlucHV0KSB8fCBpc1JlYWRPbmx5KGNtKSB8fCBjbS5vcHRpb25zLmRpc2FibGVJbnB1dCkg
cmV0dXJuIGZhbHNlOwogICAgIHZhciB0ZXh0ID0gaW5wdXQudmFsdWU7Ci0gICAgaWYgKHRleHQg
PT0gcHJldklucHV0ICYmIHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGllICYmICFpZV9sdDkgJiYgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9PT0g
dGV4dCkgewotICAgICAgcmVzZXRJbnB1dChjbSwgdHJ1ZSk7CisgICAgLy8gSWYgbm90aGluZyBj
aGFuZ2VkLCBiYWlsLgorICAgIGlmICh0ZXh0ID09IHByZXZJbnB1dCAmJiAhY20uc29tZXRoaW5n
U2VsZWN0ZWQoKSkgcmV0dXJuIGZhbHNlOworICAgIC8vIFdvcmsgYXJvdW5kIG5vbnNlbnNpY2Fs
IHNlbGVjdGlvbiByZXNldHRpbmcgaW4gSUU5LzEwCisgICAgaWYgKGllICYmICFpZV91cHRvOCAm
JiBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID09PSB0ZXh0KSB7CisgICAgICByZXNldElu
cHV0KGNtKTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICB2YXIgd2l0aE9wID0g
IWNtLmN1ck9wOwogICAgIGlmICh3aXRoT3ApIHN0YXJ0T3BlcmF0aW9uKGNtKTsKLSAgICBzZWwu
c2hpZnQgPSBmYWxzZTsKKyAgICBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7CisKKyAgICAvLyBG
aW5kIHRoZSBwYXJ0IG9mIHRoZSBpbnB1dCB0aGF0IGlzIGFjdHVhbGx5IG5ldwogICAgIHZhciBz
YW1lID0gMCwgbCA9IE1hdGgubWluKHByZXZJbnB1dC5sZW5ndGgsIHRleHQubGVuZ3RoKTsKICAg
ICB3aGlsZSAoc2FtZSA8IGwgJiYgcHJldklucHV0LmNoYXJDb2RlQXQoc2FtZSkgPT0gdGV4dC5j
aGFyQ29kZUF0KHNhbWUpKSArK3NhbWU7Ci0gICAgdmFyIGZyb20gPSBzZWwuZnJvbSwgdG8gPSBz
ZWwudG87Ci0gICAgaWYgKHNhbWUgPCBwcmV2SW5wdXQubGVuZ3RoKQotICAgICAgZnJvbSA9IFBv
cyhmcm9tLmxpbmUsIGZyb20uY2ggLSAocHJldklucHV0Lmxlbmd0aCAtIHNhbWUpKTsKLSAgICBl
bHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgcG9zRXEoZnJvbSwgdG8pICYmICFjbS5zdGF0
ZS5wYXN0ZUluY29taW5nKQotICAgICAgdG8gPSBQb3ModG8ubGluZSwgTWF0aC5taW4oZ2V0TGlu
ZShkb2MsIHRvLmxpbmUpLnRleHQubGVuZ3RoLCB0by5jaCArICh0ZXh0Lmxlbmd0aCAtIHNhbWUp
KSk7Ci0KLSAgICB2YXIgdXBkYXRlSW5wdXQgPSBjbS5jdXJPcC51cGRhdGVJbnB1dDsKLSAgICB2
YXIgY2hhbmdlRXZlbnQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBzcGxpdExpbmVzKHRl
eHQuc2xpY2Uoc2FtZSkpLAotICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IGNtLnN0YXRl
LnBhc3RlSW5jb21pbmcgPyAicGFzdGUiIDogIitpbnB1dCJ9OwotICAgIG1ha2VDaGFuZ2UoY20u
ZG9jLCBjaGFuZ2VFdmVudCwgImVuZCIpOworICAgIHZhciBpbnNlcnRlZCA9IHRleHQuc2xpY2Uo
c2FtZSksIHRleHRMaW5lcyA9IHNwbGl0TGluZXMoaW5zZXJ0ZWQpOworCisgICAgLy8gV2hlbiBw
YXNpbmcgTiBsaW5lcyBpbnRvIE4gc2VsZWN0aW9ucywgaW5zZXJ0IG9uZSBsaW5lIHBlciBzZWxl
Y3Rpb24KKyAgICB2YXIgbXVsdGlQYXN0ZSA9IGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgJiYgdGV4
dExpbmVzLmxlbmd0aCA+IDEgJiYgZG9jLnNlbC5yYW5nZXMubGVuZ3RoID09IHRleHRMaW5lcy5s
ZW5ndGg7CisKKyAgICAvLyBOb3JtYWwgYmVoYXZpb3IgaXMgdG8gaW5zZXJ0IHRoZSBuZXcgdGV4
dCBpbnRvIGV2ZXJ5IHNlbGVjdGlvbgorICAgIGZvciAodmFyIGkgPSBkb2Muc2VsLnJhbmdlcy5s
ZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5n
ZXNbaV07CisgICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb20oKSwgdG8gPSByYW5nZS50bygpOwor
ICAgICAgLy8gSGFuZGxlIGRlbGV0aW9uCisgICAgICBpZiAoc2FtZSA8IHByZXZJbnB1dC5sZW5n
dGgpCisgICAgICAgIGZyb20gPSBQb3MoZnJvbS5saW5lLCBmcm9tLmNoIC0gKHByZXZJbnB1dC5s
ZW5ndGggLSBzYW1lKSk7CisgICAgICAvLyBIYW5kbGUgb3ZlcndyaXRlCisgICAgICBlbHNlIGlm
IChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgcmFuZ2UuZW1wdHkoKSAmJiAhY20uc3RhdGUucGFzdGVJ
bmNvbWluZykKKyAgICAgICAgdG8gPSBQb3ModG8ubGluZSwgTWF0aC5taW4oZ2V0TGluZShkb2Ms
IHRvLmxpbmUpLnRleHQubGVuZ3RoLCB0by5jaCArIGxzdCh0ZXh0TGluZXMpLmxlbmd0aCkpOwor
ICAgICAgdmFyIHVwZGF0ZUlucHV0ID0gY20uY3VyT3AudXBkYXRlSW5wdXQ7CisgICAgICB2YXIg
Y2hhbmdlRXZlbnQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBtdWx0aVBhc3RlID8gW3Rl
eHRMaW5lc1tpXV0gOiB0ZXh0TGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2lu
OiBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID8gInBhc3RlIiA6IGNtLnN0YXRlLmN1dEluY29taW5n
ID8gImN1dCIgOiAiK2lucHV0In07CisgICAgICBtYWtlQ2hhbmdlKGNtLmRvYywgY2hhbmdlRXZl
bnQpOworICAgICAgc2lnbmFsTGF0ZXIoY20sICJpbnB1dFJlYWQiLCBjbSwgY2hhbmdlRXZlbnQp
OworICAgICAgLy8gV2hlbiBhbiAnZWxlY3RyaWMnIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgaW1t
ZWRpYXRlbHkgdHJpZ2dlciBhIHJlaW5kZW50CisgICAgICBpZiAoaW5zZXJ0ZWQgJiYgIWNtLnN0
YXRlLnBhc3RlSW5jb21pbmcgJiYgY20ub3B0aW9ucy5lbGVjdHJpY0NoYXJzICYmCisgICAgICAg
ICAgY20ub3B0aW9ucy5zbWFydEluZGVudCAmJiByYW5nZS5oZWFkLmNoIDwgMTAwICYmCisgICAg
ICAgICAgKCFpIHx8IGRvYy5zZWwucmFuZ2VzW2kgLSAxXS5oZWFkLmxpbmUgIT0gcmFuZ2UuaGVh
ZC5saW5lKSkgeworICAgICAgICB2YXIgbW9kZSA9IGNtLmdldE1vZGVBdChyYW5nZS5oZWFkKTsK
KyAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNDaGFycykgeworICAgICAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgbW9kZS5lbGVjdHJpY0NoYXJzLmxlbmd0aDsgaisrKQorICAgICAgICAgICAgaWYg
KGluc2VydGVkLmluZGV4T2YobW9kZS5lbGVjdHJpY0NoYXJzLmNoYXJBdChqKSkgPiAtMSkgewor
ICAgICAgICAgICAgICBpbmRlbnRMaW5lKGNtLCByYW5nZS5oZWFkLmxpbmUsICJzbWFydCIpOwor
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICht
b2RlLmVsZWN0cmljSW5wdXQpIHsKKyAgICAgICAgICB2YXIgZW5kID0gY2hhbmdlRW5kKGNoYW5n
ZUV2ZW50KTsKKyAgICAgICAgICBpZiAobW9kZS5lbGVjdHJpY0lucHV0LnRlc3QoZ2V0TGluZShk
b2MsIGVuZC5saW5lKS50ZXh0LnNsaWNlKDAsIGVuZC5jaCkpKQorICAgICAgICAgICAgaW5kZW50
TGluZShjbSwgcmFuZ2UuaGVhZC5saW5lLCAic21hcnQiKTsKKyAgICAgICAgfQorICAgICAgfQor
ICAgIH0KKyAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKTsKICAgICBjbS5jdXJPcC51cGRhdGVJ
bnB1dCA9IHVwZGF0ZUlucHV0OwotICAgIHNpZ25hbExhdGVyKGNtLCAiaW5wdXRSZWFkIiwgY20s
IGNoYW5nZUV2ZW50KTsKKyAgICBjbS5jdXJPcC50eXBpbmcgPSB0cnVlOwogCisgICAgLy8gRG9u
J3QgbGVhdmUgbG9uZyB0ZXh0IGluIHRoZSB0ZXh0YXJlYSwgc2luY2UgaXQgbWFrZXMgZnVydGhl
ciBwb2xsaW5nIHNsb3cKICAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwIHx8IHRleHQuaW5kZXhP
ZigiXG4iKSA+IC0xKSBpbnB1dC52YWx1ZSA9IGNtLmRpc3BsYXkucHJldklucHV0ID0gIiI7CiAg
ICAgZWxzZSBjbS5kaXNwbGF5LnByZXZJbnB1dCA9IHRleHQ7CiAgICAgaWYgKHdpdGhPcCkgZW5k
T3BlcmF0aW9uKGNtKTsKLSAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gZmFsc2U7CisgICAg
Y20uc3RhdGUucGFzdGVJbmNvbWluZyA9IGNtLnN0YXRlLmN1dEluY29taW5nID0gZmFsc2U7CiAg
ICAgcmV0dXJuIHRydWU7CiAgIH0KIAotICBmdW5jdGlvbiByZXNldElucHV0KGNtLCB1c2VyKSB7
CisgIC8vIFJlc2V0IHRoZSBpbnB1dCB0byBjb3JyZXNwb25kIHRvIHRoZSBzZWxlY3Rpb24gKG9y
IHRvIGJlIGVtcHR5LAorICAvLyB3aGVuIG5vdCB0eXBpbmcgYW5kIG5vdGhpbmcgaXMgc2VsZWN0
ZWQpCisgIGZ1bmN0aW9uIHJlc2V0SW5wdXQoY20sIHR5cGluZykgewogICAgIHZhciBtaW5pbWFs
LCBzZWxlY3RlZCwgZG9jID0gY20uZG9jOwotICAgIGlmICghcG9zRXEoZG9jLnNlbC5mcm9tLCBk
b2Muc2VsLnRvKSkgeworICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7CiAgICAgICBj
bS5kaXNwbGF5LnByZXZJbnB1dCA9ICIiOworICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5wcmlt
YXJ5KCk7CiAgICAgICBtaW5pbWFsID0gaGFzQ29weUV2ZW50ICYmCi0gICAgICAgIChkb2Muc2Vs
LnRvLmxpbmUgLSBkb2Muc2VsLmZyb20ubGluZSA+IDEwMCB8fCAoc2VsZWN0ZWQgPSBjbS5nZXRT
ZWxlY3Rpb24oKSkubGVuZ3RoID4gMTAwMCk7CisgICAgICAgIChyYW5nZS50bygpLmxpbmUgLSBy
YW5nZS5mcm9tKCkubGluZSA+IDEwMCB8fCAoc2VsZWN0ZWQgPSBjbS5nZXRTZWxlY3Rpb24oKSku
bGVuZ3RoID4gMTAwMCk7CiAgICAgICB2YXIgY29udGVudCA9IG1pbmltYWwgPyAiLSIgOiBzZWxl
Y3RlZCB8fCBjbS5nZXRTZWxlY3Rpb24oKTsKICAgICAgIGNtLmRpc3BsYXkuaW5wdXQudmFsdWUg
PSBjb250ZW50OwogICAgICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHNlbGVjdElucHV0KGNtLmRp
c3BsYXkuaW5wdXQpOwotICAgICAgaWYgKGllICYmICFpZV9sdDkpIGNtLmRpc3BsYXkuaW5wdXRI
YXNTZWxlY3Rpb24gPSBjb250ZW50OwotICAgIH0gZWxzZSBpZiAodXNlcikgeworICAgICAgaWYg
KGllICYmICFpZV91cHRvOCkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IGNvbnRlbnQ7
CisgICAgfSBlbHNlIGlmICghdHlwaW5nKSB7CiAgICAgICBjbS5kaXNwbGF5LnByZXZJbnB1dCA9
IGNtLmRpc3BsYXkuaW5wdXQudmFsdWUgPSAiIjsKLSAgICAgIGlmIChpZSAmJiAhaWVfbHQ5KSBj
bS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gbnVsbDsKKyAgICAgIGlmIChpZSAmJiAhaWVf
dXB0bzgpIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOwogICAgIH0KICAgICBj
bS5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb24gPSBtaW5pbWFsOwogICB9CiAKICAgZnVuY3Rp
b24gZm9jdXNJbnB1dChjbSkgewotICAgIGlmIChjbS5vcHRpb25zLnJlYWRPbmx5ICE9ICJub2N1
cnNvciIgJiYgKCFtb2JpbGUgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPSBjbS5kaXNwbGF5
LmlucHV0KSkKKyAgICBpZiAoY20ub3B0aW9ucy5yZWFkT25seSAhPSAibm9jdXJzb3IiICYmICgh
bW9iaWxlIHx8IGFjdGl2ZUVsdCgpICE9IGNtLmRpc3BsYXkuaW5wdXQpKQogICAgICAgY20uZGlz
cGxheS5pbnB1dC5mb2N1cygpOwogICB9CiAKKyAgZnVuY3Rpb24gZW5zdXJlRm9jdXMoY20pIHsK
KyAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgZm9jdXNJbnB1dChjbSk7IG9uRm9jdXMoY20p
OyB9CisgIH0KKwogICBmdW5jdGlvbiBpc1JlYWRPbmx5KGNtKSB7CiAgICAgcmV0dXJuIGNtLm9w
dGlvbnMucmVhZE9ubHkgfHwgY20uZG9jLmNhbnRFZGl0OwogICB9CiAKICAgLy8gRVZFTlQgSEFO
RExFUlMKIAorICAvLyBBdHRhY2ggdGhlIG5lY2Vzc2FyeSBldmVudCBoYW5kbGVycyB3aGVuIGlu
aXRpYWxpemluZyB0aGUgZWRpdG9yCiAgIGZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRIYW5kbGVycyhj
bSkgewogICAgIHZhciBkID0gY20uZGlzcGxheTsKICAgICBvbihkLnNjcm9sbGVyLCAibW91c2Vk
b3duIiwgb3BlcmF0aW9uKGNtLCBvbk1vdXNlRG93bikpOwotICAgIGlmIChpZSkKKyAgICAvLyBP
bGRlciBJRSdzIHdpbGwgbm90IGZpcmUgYSBzZWNvbmQgbW91c2Vkb3duIGZvciBhIGRvdWJsZSBj
bGljaworICAgIGlmIChpZV91cHRvMTApCiAgICAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xpY2si
LCBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgaWYgKHNpZ25hbERPTUV2ZW50
KGNtLCBlKSkgcmV0dXJuOwogICAgICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKTsK
ICAgICAgICAgaWYgKCFwb3MgfHwgY2xpY2tJbkd1dHRlcihjbSwgZSkgfHwgZXZlbnRJbldpZGdl
dChjbS5kaXNwbGF5LCBlKSkgcmV0dXJuOwogICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwot
ICAgICAgICB2YXIgd29yZCA9IGZpbmRXb3JkQXQoZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKS50
ZXh0LCBwb3MpOwotICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmZyb20sIHdv
cmQudG8pOworICAgICAgICB2YXIgd29yZCA9IGZpbmRXb3JkQXQoY20uZG9jLCBwb3MpOworICAg
ICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmFuY2hvciwgd29yZC5oZWFkKTsKICAg
ICAgIH0pKTsKICAgICBlbHNlCiAgICAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xpY2siLCBmdW5j
dGlvbihlKSB7IHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBlX3ByZXZlbnREZWZhdWx0KGUpOyB9
KTsKKyAgICAvLyBQcmV2ZW50IG5vcm1hbCBzZWxlY3Rpb24gaW4gdGhlIGVkaXRvciAod2UgaGFu
ZGxlIG91ciBvd24pCiAgICAgb24oZC5saW5lU3BhY2UsICJzZWxlY3RzdGFydCIsIGZ1bmN0aW9u
KGUpIHsKICAgICAgIGlmICghZXZlbnRJbldpZGdldChkLCBlKSkgZV9wcmV2ZW50RGVmYXVsdChl
KTsKICAgICB9KTsKLSAgICAvLyBHZWNrbyBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRl
ciogb3BlbmluZyB0aGUgbWVudSwgYXQKKyAgICAvLyBTb21lIGJyb3dzZXJzIGZpcmUgY29udGV4
dG1lbnUgKmFmdGVyKiBvcGVuaW5nIHRoZSBtZW51LCBhdAogICAgIC8vIHdoaWNoIHBvaW50IHdl
IGNhbid0IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXMKLSAgICAvLyBoYW5k
bGVkIGluIG9uTW91c2VEb3duIGZvciBHZWNrby4KLSAgICBpZiAoIWNhcHR1cmVNaWRkbGVDbGlj
aykgb24oZC5zY3JvbGxlciwgImNvbnRleHRtZW51IiwgZnVuY3Rpb24oZSkge29uQ29udGV4dE1l
bnUoY20sIGUpO30pOworICAgIC8vIGhhbmRsZWQgaW4gb25Nb3VzZURvd24gZm9yIHRoZXNlIGJy
b3dzZXJzLgorICAgIGlmICghY2FwdHVyZVJpZ2h0Q2xpY2spIG9uKGQuc2Nyb2xsZXIsICJjb250
ZXh0bWVudSIsIGZ1bmN0aW9uKGUpIHtvbkNvbnRleHRNZW51KGNtLCBlKTt9KTsKIAorICAgIC8v
IFN5bmMgc2Nyb2xsaW5nIGJldHdlZW4gZmFrZSBzY3JvbGxiYXJzIGFuZCByZWFsIHNjcm9sbGFi
bGUKKyAgICAvLyBhcmVhLCBlbnN1cmUgdmlld3BvcnQgaXMgdXBkYXRlZCB3aGVuIHNjcm9sbGlu
Zy4KICAgICBvbihkLnNjcm9sbGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CiAgICAgICBpZiAo
ZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHsKICAgICAgICAgc2V0U2Nyb2xsVG9wKGNtLCBkLnNj
cm9sbGVyLnNjcm9sbFRvcCk7CkBAIC0xNTgyLDQyICsyMzY3LDQwIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSBz
ZXRTY3JvbGxMZWZ0KGNtLCBkLnNjcm9sbGJhckguc2Nyb2xsTGVmdCk7CiAgICAgfSk7CiAKKyAg
ICAvLyBMaXN0ZW4gdG8gd2hlZWwgZXZlbnRzIGluIG9yZGVyIHRvIHRyeSBhbmQgdXBkYXRlIHRo
ZSB2aWV3cG9ydCBvbiB0aW1lLgogICAgIG9uKGQuc2Nyb2xsZXIsICJtb3VzZXdoZWVsIiwgZnVu
Y3Rpb24oZSl7b25TY3JvbGxXaGVlbChjbSwgZSk7fSk7CiAgICAgb24oZC5zY3JvbGxlciwgIkRP
TU1vdXNlU2Nyb2xsIiwgZnVuY3Rpb24oZSl7b25TY3JvbGxXaGVlbChjbSwgZSk7fSk7CiAKKyAg
ICAvLyBQcmV2ZW50IGNsaWNrcyBpbiB0aGUgc2Nyb2xsYmFycyBmcm9tIGtpbGxpbmcgZm9jdXMK
ICAgICBmdW5jdGlvbiByZUZvY3VzKCkgeyBpZiAoY20uc3RhdGUuZm9jdXNlZCkgc2V0VGltZW91
dChiaW5kKGZvY3VzSW5wdXQsIGNtKSwgMCk7IH0KICAgICBvbihkLnNjcm9sbGJhckgsICJtb3Vz
ZWRvd24iLCByZUZvY3VzKTsKICAgICBvbihkLnNjcm9sbGJhclYsICJtb3VzZWRvd24iLCByZUZv
Y3VzKTsKICAgICAvLyBQcmV2ZW50IHdyYXBwZXIgZnJvbSBldmVyIHNjcm9sbGluZwogICAgIG9u
KGQud3JhcHBlciwgInNjcm9sbCIsIGZ1bmN0aW9uKCkgeyBkLndyYXBwZXIuc2Nyb2xsVG9wID0g
ZC53cmFwcGVyLnNjcm9sbExlZnQgPSAwOyB9KTsKIAorICAgIC8vIFdoZW4gdGhlIHdpbmRvdyBy
ZXNpemVzLCB3ZSBuZWVkIHRvIHJlZnJlc2ggYWN0aXZlIGVkaXRvcnMuCiAgICAgdmFyIHJlc2l6
ZVRpbWVyOwogICAgIGZ1bmN0aW9uIG9uUmVzaXplKCkgewogICAgICAgaWYgKHJlc2l6ZVRpbWVy
ID09IG51bGwpIHJlc2l6ZVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAg
cmVzaXplVGltZXIgPSBudWxsOwogICAgICAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGluZyBv
cGVyYXRpb24sIGNsZWFyIHNpemUgY2FjaGVzLgotICAgICAgICBkLmNhY2hlZENoYXJXaWR0aCA9
IGQuY2FjaGVkVGV4dEhlaWdodCA9IGtub3duU2Nyb2xsYmFyV2lkdGggPSBudWxsOwotICAgICAg
ICBjbGVhckNhY2hlcyhjbSk7Ci0gICAgICAgIHJ1bkluT3AoY20sIGJpbmQocmVnQ2hhbmdlLCBj
bSkpOworICAgICAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQu
Y2FjaGVkUGFkZGluZ0ggPSBrbm93blNjcm9sbGJhcldpZHRoID0gbnVsbDsKKyAgICAgICAgY20u
c2V0U2l6ZSgpOwogICAgICAgfSwgMTAwKTsKICAgICB9CiAgICAgb24od2luZG93LCAicmVzaXpl
Iiwgb25SZXNpemUpOwotICAgIC8vIEFib3ZlIGhhbmRsZXIgaG9sZHMgb24gdG8gdGhlIGVkaXRv
ciBhbmQgaXRzIGRhdGEgc3RydWN0dXJlcy4KLSAgICAvLyBIZXJlIHdlIHBvbGwgdG8gdW5yZWdp
c3RlciBpdCB3aGVuIHRoZSBlZGl0b3IgaXMgbm8gbG9uZ2VyIGluCi0gICAgLy8gdGhlIGRvY3Vt
ZW50LCBzbyB0aGF0IGl0IGNhbiBiZSBnYXJiYWdlLWNvbGxlY3RlZC4KKyAgICAvLyBUaGUgYWJv
dmUgaGFuZGxlciBob2xkcyBvbiB0byB0aGUgZWRpdG9yIGFuZCBpdHMgZGF0YQorICAgIC8vIHN0
cnVjdHVyZXMuIEhlcmUgd2UgcG9sbCB0byB1bnJlZ2lzdGVyIGl0IHdoZW4gdGhlIGVkaXRvciBp
cyBubworICAgIC8vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQsIHNvIHRoYXQgaXQgY2FuIGJlIGdh
cmJhZ2UtY29sbGVjdGVkLgogICAgIGZ1bmN0aW9uIHVucmVnaXN0ZXIoKSB7Ci0gICAgICBmb3Ig
KHZhciBwID0gZC53cmFwcGVyLnBhcmVudE5vZGU7IHAgJiYgcCAhPSBkb2N1bWVudC5ib2R5OyBw
ID0gcC5wYXJlbnROb2RlKSB7fQotICAgICAgaWYgKHApIHNldFRpbWVvdXQodW5yZWdpc3Rlciwg
NTAwMCk7CisgICAgICBpZiAoY29udGFpbnMoZG9jdW1lbnQuYm9keSwgZC53cmFwcGVyKSkgc2V0
VGltZW91dCh1bnJlZ2lzdGVyLCA1MDAwKTsKICAgICAgIGVsc2Ugb2ZmKHdpbmRvdywgInJlc2l6
ZSIsIG9uUmVzaXplKTsKICAgICB9CiAgICAgc2V0VGltZW91dCh1bnJlZ2lzdGVyLCA1MDAwKTsK
IAotICAgIG9uKGQuaW5wdXQsICJrZXl1cCIsIG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oZSkgewot
ICAgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBjbS5vcHRpb25zLm9uS2V5RXZlbnQg
JiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwotICAgICAg
aWYgKGUua2V5Q29kZSA9PSAxNikgY20uZG9jLnNlbC5zaGlmdCA9IGZhbHNlOwotICAgIH0pKTsK
KyAgICBvbihkLmlucHV0LCAia2V5dXAiLCBvcGVyYXRpb24oY20sIG9uS2V5VXApKTsKICAgICBv
bihkLmlucHV0LCAiaW5wdXQiLCBmdW5jdGlvbigpIHsKLSAgICAgIGlmIChpZSAmJiAhaWVfbHQ5
ICYmIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24pIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxl
Y3Rpb24gPSBudWxsOworICAgICAgaWYgKGllICYmICFpZV91cHRvOCAmJiBjbS5kaXNwbGF5Lmlu
cHV0SGFzU2VsZWN0aW9uKSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gbnVsbDsKICAg
ICAgIGZhc3RQb2xsKGNtKTsKICAgICB9KTsKICAgICBvbihkLmlucHV0LCAia2V5ZG93biIsIG9w
ZXJhdGlvbihjbSwgb25LZXlEb3duKSk7CkBAIC0xNjI2LDggKzI0MDksNyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBvbihkLmlucHV0LCAiYmx1ciIsIGJpbmQob25C
bHVyLCBjbSkpOwogCiAgICAgZnVuY3Rpb24gZHJhZ18oZSkgewotICAgICAgaWYgKHNpZ25hbERP
TUV2ZW50KGNtLCBlKSB8fCBjbS5vcHRpb25zLm9uRHJhZ0V2ZW50ICYmIGNtLm9wdGlvbnMub25E
cmFnRXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47Ci0gICAgICBlX3N0b3AoZSk7CisgICAg
ICBpZiAoIXNpZ25hbERPTUV2ZW50KGNtLCBlKSkgZV9zdG9wKGUpOwogICAgIH0KICAgICBpZiAo
Y20ub3B0aW9ucy5kcmFnRHJvcCkgewogICAgICAgb24oZC5zY3JvbGxlciwgImRyYWdzdGFydCIs
IGZ1bmN0aW9uKGUpe29uRHJhZ1N0YXJ0KGNtLCBlKTt9KTsKQEAgLTE2MzcsNzAgKzI0MTksOTgg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICAgIG9uKGQuc2Ny
b2xsZXIsICJwYXN0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgIGlmIChldmVudEluV2lkZ2V0KGQs
IGUpKSByZXR1cm47CisgICAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gdHJ1ZTsKICAgICAg
IGZvY3VzSW5wdXQoY20pOwogICAgICAgZmFzdFBvbGwoY20pOwogICAgIH0pOwogICAgIG9uKGQu
aW5wdXQsICJwYXN0ZSIsIGZ1bmN0aW9uKCkgewotICAgICAgLy8gV29ya2Fyb3VuZCBmb3Igd2Vi
a2l0IGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAyMDYKLSAg
ICAgIC8vIEFkZCBhIGNoYXIgdG8gdGhlIGVuZCBvZiB0ZXh0YXJlYSBiZWZvcmUgcGFzdGUgb2Nj
dXIgc28gdGhhdAotICAgICAgLy8gc2VsZWN0aW9uIGRvZXNuJ3Qgc3BhbiB0byB0aGUgZW5kIG9m
IHRleHRhcmVhLgotICAgICAgaWYgKHdlYmtpdCAmJiAhY20uc3RhdGUuZmFrZWRMYXN0Q2hhciAm
JiAhKG5ldyBEYXRlIC0gY20uc3RhdGUubGFzdE1pZGRsZURvd24gPCAyMDApKSB7Ci0gICAgICAg
IHZhciBzdGFydCA9IGQuaW5wdXQuc2VsZWN0aW9uU3RhcnQsIGVuZCA9IGQuaW5wdXQuc2VsZWN0
aW9uRW5kOwotICAgICAgICBkLmlucHV0LnZhbHVlICs9ICIkIjsKLSAgICAgICAgZC5pbnB1dC5z
ZWxlY3Rpb25TdGFydCA9IHN0YXJ0OwotICAgICAgICBkLmlucHV0LnNlbGVjdGlvbkVuZCA9IGVu
ZDsKLSAgICAgICAgY20uc3RhdGUuZmFrZWRMYXN0Q2hhciA9IHRydWU7Ci0gICAgICB9CiAgICAg
ICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gdHJ1ZTsKICAgICAgIGZhc3RQb2xsKGNtKTsKICAg
ICB9KTsKIAotICAgIGZ1bmN0aW9uIHByZXBhcmVDb3B5KCkgewotICAgICAgaWYgKGQuaW5hY2N1
cmF0ZVNlbGVjdGlvbikgewotICAgICAgICBkLnByZXZJbnB1dCA9ICIiOwotICAgICAgICBkLmlu
YWNjdXJhdGVTZWxlY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgZC5pbnB1dC52YWx1ZSA9IGNtLmdl
dFNlbGVjdGlvbigpOwotICAgICAgICBzZWxlY3RJbnB1dChkLmlucHV0KTsKKyAgICBmdW5jdGlv
biBwcmVwYXJlQ29weUN1dChlKSB7CisgICAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkg
eworICAgICAgICBpZiAoZC5pbmFjY3VyYXRlU2VsZWN0aW9uKSB7CisgICAgICAgICAgZC5wcmV2
SW5wdXQgPSAiIjsKKyAgICAgICAgICBkLmluYWNjdXJhdGVTZWxlY3Rpb24gPSBmYWxzZTsKKyAg
ICAgICAgICBkLmlucHV0LnZhbHVlID0gY20uZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgc2Vs
ZWN0SW5wdXQoZC5pbnB1dCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZh
ciB0ZXh0ID0gIiIsIHJhbmdlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNt
LmRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgdmFyIGxpbmUgPSBjbS5k
b2Muc2VsLnJhbmdlc1tpXS5oZWFkLmxpbmU7CisgICAgICAgICAgdmFyIGxpbmVSYW5nZSA9IHth
bmNob3I6IFBvcyhsaW5lLCAwKSwgaGVhZDogUG9zKGxpbmUgKyAxLCAwKX07CisgICAgICAgICAg
cmFuZ2VzLnB1c2gobGluZVJhbmdlKTsKKyAgICAgICAgICB0ZXh0ICs9IGNtLmdldFJhbmdlKGxp
bmVSYW5nZS5hbmNob3IsIGxpbmVSYW5nZS5oZWFkKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ZS50eXBlID09ICJjdXQiKSB7CisgICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMsIG51
bGwsIHNlbF9kb250U2Nyb2xsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBkLnByZXZJ
bnB1dCA9ICIiOworICAgICAgICAgIGQuaW5wdXQudmFsdWUgPSB0ZXh0OworICAgICAgICAgIHNl
bGVjdElucHV0KGQuaW5wdXQpOworICAgICAgICB9CiAgICAgICB9CisgICAgICBpZiAoZS50eXBl
ID09ICJjdXQiKSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IHRydWU7CiAgICAgfQotICAgIG9uKGQu
aW5wdXQsICJjdXQiLCBwcmVwYXJlQ29weSk7Ci0gICAgb24oZC5pbnB1dCwgImNvcHkiLCBwcmVw
YXJlQ29weSk7CisgICAgb24oZC5pbnB1dCwgImN1dCIsIHByZXBhcmVDb3B5Q3V0KTsKKyAgICBv
bihkLmlucHV0LCAiY29weSIsIHByZXBhcmVDb3B5Q3V0KTsKIAogICAgIC8vIE5lZWRlZCB0byBo
YW5kbGUgVGFiIGtleSBpbiBLSFRNTAogICAgIGlmIChraHRtbCkgb24oZC5zaXplciwgIm1vdXNl
dXAiLCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0g
ZC5pbnB1dCkgZC5pbnB1dC5ibHVyKCk7Ci0gICAgICAgIGZvY3VzSW5wdXQoY20pOworICAgICAg
aWYgKGFjdGl2ZUVsdCgpID09IGQuaW5wdXQpIGQuaW5wdXQuYmx1cigpOworICAgICAgZm9jdXNJ
bnB1dChjbSk7CiAgICAgfSk7CiAgIH0KIAorICAvLyBNT1VTRSBFVkVOVFMKKworICAvLyBSZXR1
cm4gdHJ1ZSB3aGVuIHRoZSBnaXZlbiBtb3VzZSBldmVudCBoYXBwZW5lZCBpbiBhIHdpZGdldAog
ICBmdW5jdGlvbiBldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpIHsKICAgICBmb3IgKHZhciBuID0g
ZV90YXJnZXQoZSk7IG4gIT0gZGlzcGxheS53cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKSB7CiAg
ICAgICBpZiAoIW4gfHwgbi5pZ25vcmVFdmVudHMgfHwgbi5wYXJlbnROb2RlID09IGRpc3BsYXku
c2l6ZXIgJiYgbiAhPSBkaXNwbGF5Lm1vdmVyKSByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KIAot
ICBmdW5jdGlvbiBwb3NGcm9tTW91c2UoY20sIGUsIGxpYmVyYWwpIHsKKyAgLy8gR2l2ZW4gYSBt
b3VzZSBldmVudCwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBwb3NpdGlvbi4gSWYgbGliZXJhbAor
ICAvLyBpcyBmYWxzZSwgaXQgY2hlY2tzIHdoZXRoZXIgYSBndXR0ZXIgb3Igc2Nyb2xsYmFyIHdh
cyBjbGlja2VkLAorICAvLyBhbmQgcmV0dXJucyBudWxsIGlmIGl0IHdhcy4gZm9yUmVjdCBpcyB1
c2VkIGJ5IHJlY3Rhbmd1bGFyCisgIC8vIHNlbGVjdGlvbnMsIGFuZCB0cmllcyB0byBlc3RpbWF0
ZSBhIGNoYXJhY3RlciBwb3NpdGlvbiBldmVuIGZvcgorICAvLyBjb29yZGluYXRlcyBiZXlvbmQg
dGhlIHJpZ2h0IG9mIHRoZSB0ZXh0LgorICBmdW5jdGlvbiBwb3NGcm9tTW91c2UoY20sIGUsIGxp
YmVyYWwsIGZvclJlY3QpIHsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CiAgICAgaWYg
KCFsaWJlcmFsKSB7CiAgICAgICB2YXIgdGFyZ2V0ID0gZV90YXJnZXQoZSk7Ci0gICAgICBpZiAo
dGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFySCB8fCB0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxi
YXJILmZpcnN0Q2hpbGQgfHwKLSAgICAgICAgICB0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJW
IHx8IHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhclYuZmlyc3RDaGlsZCB8fAorICAgICAgaWYg
KHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckggfHwgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xs
YmFyViB8fAogICAgICAgICAgIHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckZpbGxlciB8fCB0
YXJnZXQgPT0gZGlzcGxheS5ndXR0ZXJGaWxsZXIpIHJldHVybiBudWxsOwogICAgIH0KLSAgICB2
YXIgeCwgeSwgc3BhY2UgPSBnZXRSZWN0KGRpc3BsYXkubGluZVNwYWNlKTsKKyAgICB2YXIgeCwg
eSwgc3BhY2UgPSBkaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAg
ICAvLyBGYWlscyB1bnByZWRpY3RhYmx5IG9uIElFWzY3XSB3aGVuIG1vdXNlIGlzIGRyYWdnZWQg
YXJvdW5kIHF1aWNrbHkuCi0gICAgdHJ5IHsgeCA9IGUuY2xpZW50WDsgeSA9IGUuY2xpZW50WTsg
fSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfQotICAgIHJldHVybiBjb29yZHNDaGFyKGNtLCB4
IC0gc3BhY2UubGVmdCwgeSAtIHNwYWNlLnRvcCk7CisgICAgdHJ5IHsgeCA9IGUuY2xpZW50WCAt
IHNwYWNlLmxlZnQ7IHkgPSBlLmNsaWVudFkgLSBzcGFjZS50b3A7IH0KKyAgICBjYXRjaCAoZSkg
eyByZXR1cm4gbnVsbDsgfQorICAgIHZhciBjb29yZHMgPSBjb29yZHNDaGFyKGNtLCB4LCB5KSwg
bGluZTsKKyAgICBpZiAoZm9yUmVjdCAmJiBjb29yZHMueFJlbCA9PSAxICYmIChsaW5lID0gZ2V0
TGluZShjbS5kb2MsIGNvb3Jkcy5saW5lKS50ZXh0KS5sZW5ndGggPT0gY29vcmRzLmNoKSB7Cisg
ICAgICB2YXIgY29sRGlmZiA9IGNvdW50Q29sdW1uKGxpbmUsIGxpbmUubGVuZ3RoLCBjbS5vcHRp
b25zLnRhYlNpemUpIC0gbGluZS5sZW5ndGg7CisgICAgICBjb29yZHMgPSBQb3MoY29vcmRzLmxp
bmUsIE1hdGgucm91bmQoKHggLSBwYWRkaW5nSChjbS5kaXNwbGF5KS5sZWZ0KSAvIGNoYXJXaWR0
aChjbS5kaXNwbGF5KSkgLSBjb2xEaWZmKTsKKyAgICB9CisgICAgcmV0dXJuIGNvb3JkczsKICAg
fQogCi0gIHZhciBsYXN0Q2xpY2ssIGxhc3REb3VibGVDbGljazsKKyAgLy8gQSBtb3VzZSBkb3du
IGNhbiBiZSBhIHNpbmdsZSBjbGljaywgZG91YmxlIGNsaWNrLCB0cmlwbGUgY2xpY2ssCisgIC8v
IHN0YXJ0IG9mIHNlbGVjdGlvbiBkcmFnLCBzdGFydCBvZiB0ZXh0IGRyYWcsIG5ldyBjdXJzb3IK
KyAgLy8gKGN0cmwtY2xpY2spLCByZWN0YW5nbGUgZHJhZyAoYWx0LWRyYWcpLCBvciB4d2luCisg
IC8vIG1pZGRsZS1jbGljay1wYXN0ZS4gT3IgaXQgbWlnaHQgYmUgYSBjbGljayBvbiBzb21ldGhp
bmcgd2Ugc2hvdWxkCisgIC8vIG5vdCBpbnRlcmZlcmUgd2l0aCwgc3VjaCBhcyBhIHNjcm9sbGJh
ciBvciB3aWRnZXQuCiAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKICAgICBpZiAoc2lnbmFs
RE9NRXZlbnQodGhpcywgZSkpIHJldHVybjsKLSAgICB2YXIgY20gPSB0aGlzLCBkaXNwbGF5ID0g
Y20uZGlzcGxheSwgZG9jID0gY20uZG9jLCBzZWwgPSBkb2Muc2VsOwotICAgIHNlbC5zaGlmdCA9
IGUuc2hpZnRLZXk7CisgICAgdmFyIGNtID0gdGhpcywgZGlzcGxheSA9IGNtLmRpc3BsYXk7Cisg
ICAgZGlzcGxheS5zaGlmdCA9IGUuc2hpZnRLZXk7CiAKICAgICBpZiAoZXZlbnRJbldpZGdldChk
aXNwbGF5LCBlKSkgewogICAgICAgaWYgKCF3ZWJraXQpIHsKKyAgICAgICAgLy8gQnJpZWZseSB0
dXJuIG9mZiBkcmFnZ2FiaWxpdHksIHRvIGFsbG93IHdpZGdldHMgdG8gZG8KKyAgICAgICAgLy8g
bm9ybWFsIGRyYWdnaW5nIHRoaW5ncy4KICAgICAgICAgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2Fi
bGUgPSBmYWxzZTsKICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe2Rpc3BsYXkuc2Nyb2xs
ZXIuZHJhZ2dhYmxlID0gdHJ1ZTt9LCAxMDApOwogICAgICAgfQpAQCAtMTcwOCw4OSArMjUxOCwx
NjggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICAgIGlmIChj
bGlja0luR3V0dGVyKGNtLCBlKSkgcmV0dXJuOwogICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3Vz
ZShjbSwgZSk7CisgICAgd2luZG93LmZvY3VzKCk7CiAKICAgICBzd2l0Y2ggKGVfYnV0dG9uKGUp
KSB7Ci0gICAgY2FzZSAzOgotICAgICAgaWYgKGNhcHR1cmVNaWRkbGVDbGljaykgb25Db250ZXh0
TWVudS5jYWxsKGNtLCBjbSwgZSk7Ci0gICAgICByZXR1cm47CisgICAgY2FzZSAxOgorICAgICAg
aWYgKHN0YXJ0KQorICAgICAgICBsZWZ0QnV0dG9uRG93bihjbSwgZSwgc3RhcnQpOworICAgICAg
ZWxzZSBpZiAoZV90YXJnZXQoZSkgPT0gZGlzcGxheS5zY3JvbGxlcikKKyAgICAgICAgZV9wcmV2
ZW50RGVmYXVsdChlKTsKKyAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgIGlmICh3ZWJr
aXQpIGNtLnN0YXRlLmxhc3RNaWRkbGVEb3duID0gK25ldyBEYXRlOwogICAgICAgaWYgKHN0YXJ0
KSBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydCk7CiAgICAgICBzZXRUaW1lb3V0KGJpbmQo
Zm9jdXNJbnB1dCwgY20pLCAyMCk7CiAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgICAg
cmV0dXJuOworICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgaWYgKGNhcHR1cmVSaWdo
dENsaWNrKSBvbkNvbnRleHRNZW51KGNtLCBlKTsKKyAgICAgIGJyZWFrOwogICAgIH0KLSAgICAv
LyBGb3IgYnV0dG9uIDEsIGlmIGl0IHdhcyBjbGlja2VkIGluc2lkZSB0aGUgZWRpdG9yCi0gICAg
Ly8gKHBvc0Zyb21Nb3VzZSByZXR1cm5pbmcgbm9uLW51bGwpLCB3ZSBoYXZlIHRvIGFkanVzdCB0
aGUKLSAgICAvLyBzZWxlY3Rpb24uCi0gICAgaWYgKCFzdGFydCkge2lmIChlX3RhcmdldChlKSA9
PSBkaXNwbGF5LnNjcm9sbGVyKSBlX3ByZXZlbnREZWZhdWx0KGUpOyByZXR1cm47fQorICB9CiAK
LSAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIG9uRm9jdXMoY20pOworICB2YXIgbGFzdENsaWNr
LCBsYXN0RG91YmxlQ2xpY2s7CisgIGZ1bmN0aW9uIGxlZnRCdXR0b25Eb3duKGNtLCBlLCBzdGFy
dCkgeworICAgIHNldFRpbWVvdXQoYmluZChlbnN1cmVGb2N1cywgY20pLCAwKTsKIAotICAgIHZh
ciBub3cgPSArbmV3IERhdGUsIHR5cGUgPSAic2luZ2xlIjsKLSAgICBpZiAobGFzdERvdWJsZUNs
aWNrICYmIGxhc3REb3VibGVDbGljay50aW1lID4gbm93IC0gNDAwICYmIHBvc0VxKGxhc3REb3Vi
bGVDbGljay5wb3MsIHN0YXJ0KSkgeworICAgIHZhciBub3cgPSArbmV3IERhdGUsIHR5cGU7Cisg
ICAgaWYgKGxhc3REb3VibGVDbGljayAmJiBsYXN0RG91YmxlQ2xpY2sudGltZSA+IG5vdyAtIDQw
MCAmJiBjbXAobGFzdERvdWJsZUNsaWNrLnBvcywgc3RhcnQpID09IDApIHsKICAgICAgIHR5cGUg
PSAidHJpcGxlIjsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICBzZXRUaW1lb3V0
KGJpbmQoZm9jdXNJbnB1dCwgY20pLCAyMCk7Ci0gICAgICBzZWxlY3RMaW5lKGNtLCBzdGFydC5s
aW5lKTsKLSAgICB9IGVsc2UgaWYgKGxhc3RDbGljayAmJiBsYXN0Q2xpY2sudGltZSA+IG5vdyAt
IDQwMCAmJiBwb3NFcShsYXN0Q2xpY2sucG9zLCBzdGFydCkpIHsKKyAgICB9IGVsc2UgaWYgKGxh
c3RDbGljayAmJiBsYXN0Q2xpY2sudGltZSA+IG5vdyAtIDQwMCAmJiBjbXAobGFzdENsaWNrLnBv
cywgc3RhcnQpID09IDApIHsKICAgICAgIHR5cGUgPSAiZG91YmxlIjsKICAgICAgIGxhc3REb3Vi
bGVDbGljayA9IHt0aW1lOiBub3csIHBvczogc3RhcnR9OwotICAgICAgZV9wcmV2ZW50RGVmYXVs
dChlKTsKLSAgICAgIHZhciB3b3JkID0gZmluZFdvcmRBdChnZXRMaW5lKGRvYywgc3RhcnQubGlu
ZSkudGV4dCwgc3RhcnQpOwotICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5mcm9t
LCB3b3JkLnRvKTsKLSAgICB9IGVsc2UgeyBsYXN0Q2xpY2sgPSB7dGltZTogbm93LCBwb3M6IHN0
YXJ0fTsgfQotCi0gICAgdmFyIGxhc3QgPSBzdGFydDsKLSAgICBpZiAoY20ub3B0aW9ucy5kcmFn
RHJvcCAmJiBkcmFnQW5kRHJvcCAmJiAhaXNSZWFkT25seShjbSkgJiYgIXBvc0VxKHNlbC5mcm9t
LCBzZWwudG8pICYmCi0gICAgICAgICFwb3NMZXNzKHN0YXJ0LCBzZWwuZnJvbSkgJiYgIXBvc0xl
c3Moc2VsLnRvLCBzdGFydCkgJiYgdHlwZSA9PSAic2luZ2xlIikgewotICAgICAgdmFyIGRyYWdF
bmQgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKGUyKSB7Ci0gICAgICAgIGlmICh3ZWJraXQpIGRp
c3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7Ci0gICAgICAgIGNtLnN0YXRlLmRyYWdn
aW5nVGV4dCA9IGZhbHNlOwotICAgICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZXVwIiwgZHJhZ0Vu
ZCk7Ci0gICAgICAgIG9mZihkaXNwbGF5LnNjcm9sbGVyLCAiZHJvcCIsIGRyYWdFbmQpOwotICAg
ICAgICBpZiAoTWF0aC5hYnMoZS5jbGllbnRYIC0gZTIuY2xpZW50WCkgKyBNYXRoLmFicyhlLmNs
aWVudFkgLSBlMi5jbGllbnRZKSA8IDEwKSB7Ci0gICAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChl
Mik7Ci0gICAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3RhcnQpOwotICAgICAgICAg
IGZvY3VzSW5wdXQoY20pOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIC8vIExldCB0aGUg
ZHJhZyBoYW5kbGVyIGhhbmRsZSB0aGlzLgotICAgICAgaWYgKHdlYmtpdCkgZGlzcGxheS5zY3Jv
bGxlci5kcmFnZ2FibGUgPSB0cnVlOwotICAgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZHJh
Z0VuZDsKLSAgICAgIC8vIElFJ3MgYXBwcm9hY2ggdG8gZHJhZ2dhYmxlCi0gICAgICBpZiAoZGlz
cGxheS5zY3JvbGxlci5kcmFnRHJvcCkgZGlzcGxheS5zY3JvbGxlci5kcmFnRHJvcCgpOwotICAg
ICAgb24oZG9jdW1lbnQsICJtb3VzZXVwIiwgZHJhZ0VuZCk7Ci0gICAgICBvbihkaXNwbGF5LnNj
cm9sbGVyLCAiZHJvcCIsIGRyYWdFbmQpOwotICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7Cisg
ICAgICB0eXBlID0gInNpbmdsZSI7CisgICAgICBsYXN0Q2xpY2sgPSB7dGltZTogbm93LCBwb3M6
IHN0YXJ0fTsKICAgICB9Ci0gICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICBpZiAodHlwZSA9
PSAic2luZ2xlIikgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgY2xpcFBvcyhkb2MsIHN0YXJ0KSk7
CiAKLSAgICB2YXIgc3RhcnRzdGFydCA9IHNlbC5mcm9tLCBzdGFydGVuZCA9IHNlbC50bywgbGFz
dFBvcyA9IHN0YXJ0OwotCi0gICAgZnVuY3Rpb24gZG9TZWxlY3QoY3VyKSB7Ci0gICAgICBpZiAo
cG9zRXEobGFzdFBvcywgY3VyKSkgcmV0dXJuOwotICAgICAgbGFzdFBvcyA9IGN1cjsKKyAgICB2
YXIgc2VsID0gY20uZG9jLnNlbCwgYWRkTmV3ID0gbWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5
OworICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wICYmIGRyYWdBbmREcm9wICYmICFhZGROZXcg
JiYgIWlzUmVhZE9ubHkoY20pICYmCisgICAgICAgIHR5cGUgPT0gInNpbmdsZSIgJiYgc2VsLmNv
bnRhaW5zKHN0YXJ0KSA+IC0xICYmIHNlbC5zb21ldGhpbmdTZWxlY3RlZCgpKQorICAgICAgbGVm
dEJ1dHRvblN0YXJ0RHJhZyhjbSwgZSwgc3RhcnQpOworICAgIGVsc2UKKyAgICAgIGxlZnRCdXR0
b25TZWxlY3QoY20sIGUsIHN0YXJ0LCB0eXBlLCBhZGROZXcpOworICB9CiAKLSAgICAgIGlmICh0
eXBlID09ICJzaW5nbGUiKSB7Ci0gICAgICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIGNsaXBQ
b3MoZG9jLCBzdGFydCksIGN1cik7Ci0gICAgICAgIHJldHVybjsKKyAgLy8gU3RhcnQgYSB0ZXh0
IGRyYWcuIFdoZW4gaXQgZW5kcywgc2VlIGlmIGFueSBkcmFnZ2luZyBhY3R1YWxseQorICAvLyBo
YXBwZW4sIGFuZCB0cmVhdCBhcyBhIGNsaWNrIGlmIGl0IGRpZG4ndC4KKyAgZnVuY3Rpb24gbGVm
dEJ1dHRvblN0YXJ0RHJhZyhjbSwgZSwgc3RhcnQpIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRp
c3BsYXk7CisgICAgdmFyIGRyYWdFbmQgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKGUyKSB7Cisg
ICAgICBpZiAod2Via2l0KSBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IGZhbHNlOworICAg
ICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZmFsc2U7CisgICAgICBvZmYoZG9jdW1lbnQsICJt
b3VzZXVwIiwgZHJhZ0VuZCk7CisgICAgICBvZmYoZGlzcGxheS5zY3JvbGxlciwgImRyb3AiLCBk
cmFnRW5kKTsKKyAgICAgIGlmIChNYXRoLmFicyhlLmNsaWVudFggLSBlMi5jbGllbnRYKSArIE1h
dGguYWJzKGUuY2xpZW50WSAtIGUyLmNsaWVudFkpIDwgMTApIHsKKyAgICAgICAgZV9wcmV2ZW50
RGVmYXVsdChlMik7CisgICAgICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0KTsKKyAg
ICAgICAgZm9jdXNJbnB1dChjbSk7CisgICAgICAgIC8vIFdvcmsgYXJvdW5kIHVuZXhwbGFpbmFi
bGUgZm9jdXMgcHJvYmxlbSBpbiBJRTkgKCMyMTI3KQorICAgICAgICBpZiAoaWVfdXB0bzEwICYm
ICFpZV91cHRvOCkKKyAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2RvY3VtZW50LmJv
ZHkuZm9jdXMoKTsgZm9jdXNJbnB1dChjbSk7fSwgMjApOwogICAgICAgfQorICAgIH0pOworICAg
IC8vIExldCB0aGUgZHJhZyBoYW5kbGVyIGhhbmRsZSB0aGlzLgorICAgIGlmICh3ZWJraXQpIGRp
c3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gdHJ1ZTsKKyAgICBjbS5zdGF0ZS5kcmFnZ2luZ1Rl
eHQgPSBkcmFnRW5kOworICAgIC8vIElFJ3MgYXBwcm9hY2ggdG8gZHJhZ2dhYmxlCisgICAgaWYg
KGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ryb3ApIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ryb3AoKTsK
KyAgICBvbihkb2N1bWVudCwgIm1vdXNldXAiLCBkcmFnRW5kKTsKKyAgICBvbihkaXNwbGF5LnNj
cm9sbGVyLCAiZHJvcCIsIGRyYWdFbmQpOworICB9CisKKyAgLy8gTm9ybWFsIHNlbGVjdGlvbiwg
YXMgb3Bwb3NlZCB0byB0ZXh0IGRyYWdnaW5nLgorICBmdW5jdGlvbiBsZWZ0QnV0dG9uU2VsZWN0
KGNtLCBlLCBzdGFydCwgdHlwZSwgYWRkTmV3KSB7CisgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNw
bGF5LCBkb2MgPSBjbS5kb2M7CisgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKKworICAgIHZhciBv
dXJSYW5nZSwgb3VySW5kZXgsIHN0YXJ0U2VsID0gZG9jLnNlbDsKKyAgICBpZiAoYWRkTmV3KSB7
CisgICAgICBvdXJJbmRleCA9IGRvYy5zZWwuY29udGFpbnMoc3RhcnQpOworICAgICAgaWYgKG91
ckluZGV4ID4gLTEpCisgICAgICAgIG91clJhbmdlID0gZG9jLnNlbC5yYW5nZXNbb3VySW5kZXhd
OworICAgICAgZWxzZQorICAgICAgICBvdXJSYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgc3RhcnQp
OworICAgIH0gZWxzZSB7CisgICAgICBvdXJSYW5nZSA9IGRvYy5zZWwucHJpbWFyeSgpOworICAg
IH0KKworICAgIGlmIChlLmFsdEtleSkgeworICAgICAgdHlwZSA9ICJyZWN0IjsKKyAgICAgIGlm
ICghYWRkTmV3KSBvdXJSYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgc3RhcnQpOworICAgICAgc3Rh
cnQgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUsIHRydWUpOworICAgICAgb3VySW5kZXggPSAt
MTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImRvdWJsZSIpIHsKKyAgICAgIHZhciB3b3JkID0g
ZmluZFdvcmRBdChkb2MsIHN0YXJ0KTsKKyAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGRv
Yy5leHRlbmQpCisgICAgICAgIG91clJhbmdlID0gZXh0ZW5kUmFuZ2UoZG9jLCBvdXJSYW5nZSwg
d29yZC5hbmNob3IsIHdvcmQuaGVhZCk7CisgICAgICBlbHNlCisgICAgICAgIG91clJhbmdlID0g
d29yZDsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gInRyaXBsZSIpIHsKKyAgICAgIHZhciBsaW5l
ID0gbmV3IFJhbmdlKFBvcyhzdGFydC5saW5lLCAwKSwgY2xpcFBvcyhkb2MsIFBvcyhzdGFydC5s
aW5lICsgMSwgMCkpKTsKKyAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQp
CisgICAgICAgIG91clJhbmdlID0gZXh0ZW5kUmFuZ2UoZG9jLCBvdXJSYW5nZSwgbGluZS5hbmNo
b3IsIGxpbmUuaGVhZCk7CisgICAgICBlbHNlCisgICAgICAgIG91clJhbmdlID0gbGluZTsKKyAg
ICB9IGVsc2UgeworICAgICAgb3VyUmFuZ2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCBz
dGFydCk7CisgICAgfQogCi0gICAgICBzdGFydHN0YXJ0ID0gY2xpcFBvcyhkb2MsIHN0YXJ0c3Rh
cnQpOwotICAgICAgc3RhcnRlbmQgPSBjbGlwUG9zKGRvYywgc3RhcnRlbmQpOwotICAgICAgaWYg
KHR5cGUgPT0gImRvdWJsZSIpIHsKLSAgICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGdldExp
bmUoZG9jLCBjdXIubGluZSkudGV4dCwgY3VyKTsKLSAgICAgICAgaWYgKHBvc0xlc3MoY3VyLCBz
dGFydHN0YXJ0KSkgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5mcm9tLCBzdGFydGVuZCk7
Ci0gICAgICAgIGVsc2UgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3RhcnRzdGFydCwgd29yZC50
byk7Ci0gICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gInRyaXBsZSIpIHsKLSAgICAgICAgaWYgKHBv
c0xlc3MoY3VyLCBzdGFydHN0YXJ0KSkgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3RhcnRlbmQs
IGNsaXBQb3MoZG9jLCBQb3MoY3VyLmxpbmUsIDApKSk7Ci0gICAgICAgIGVsc2UgZXh0ZW5kU2Vs
ZWN0aW9uKGNtLmRvYywgc3RhcnRzdGFydCwgY2xpcFBvcyhkb2MsIFBvcyhjdXIubGluZSArIDEs
IDApKSk7CisgICAgaWYgKCFhZGROZXcpIHsKKyAgICAgIG91ckluZGV4ID0gMDsKKyAgICAgIHNl
dFNlbGVjdGlvbihkb2MsIG5ldyBTZWxlY3Rpb24oW291clJhbmdlXSwgMCksIHNlbF9tb3VzZSk7
CisgICAgfSBlbHNlIGlmIChvdXJJbmRleCA+IC0xKSB7CisgICAgICByZXBsYWNlT25lU2VsZWN0
aW9uKGRvYywgb3VySW5kZXgsIG91clJhbmdlLCBzZWxfbW91c2UpOworICAgIH0gZWxzZSB7Cisg
ICAgICBvdXJJbmRleCA9IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsKKyAgICAgIHNldFNlbGVjdGlv
bihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihkb2Muc2VsLnJhbmdlcy5jb25jYXQoW291clJhbmdl
XSksIG91ckluZGV4KSwKKyAgICAgICAgICAgICAgICAgICB7c2Nyb2xsOiBmYWxzZSwgb3JpZ2lu
OiAiKm1vdXNlIn0pOworICAgIH0KKworICAgIHZhciBsYXN0UG9zID0gc3RhcnQ7CisgICAgZnVu
Y3Rpb24gZXh0ZW5kVG8ocG9zKSB7CisgICAgICBpZiAoY21wKGxhc3RQb3MsIHBvcykgPT0gMCkg
cmV0dXJuOworICAgICAgbGFzdFBvcyA9IHBvczsKKworICAgICAgaWYgKHR5cGUgPT0gInJlY3Qi
KSB7CisgICAgICAgIHZhciByYW5nZXMgPSBbXSwgdGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6
ZTsKKyAgICAgICAgdmFyIHN0YXJ0Q29sID0gY291bnRDb2x1bW4oZ2V0TGluZShkb2MsIHN0YXJ0
LmxpbmUpLnRleHQsIHN0YXJ0LmNoLCB0YWJTaXplKTsKKyAgICAgICAgdmFyIHBvc0NvbCA9IGNv
dW50Q29sdW1uKGdldExpbmUoZG9jLCBwb3MubGluZSkudGV4dCwgcG9zLmNoLCB0YWJTaXplKTsK
KyAgICAgICAgdmFyIGxlZnQgPSBNYXRoLm1pbihzdGFydENvbCwgcG9zQ29sKSwgcmlnaHQgPSBN
YXRoLm1heChzdGFydENvbCwgcG9zQ29sKTsKKyAgICAgICAgZm9yICh2YXIgbGluZSA9IE1hdGgu
bWluKHN0YXJ0LmxpbmUsIHBvcy5saW5lKSwgZW5kID0gTWF0aC5taW4oY20ubGFzdExpbmUoKSwg
TWF0aC5tYXgoc3RhcnQubGluZSwgcG9zLmxpbmUpKTsKKyAgICAgICAgICAgICBsaW5lIDw9IGVu
ZDsgbGluZSsrKSB7CisgICAgICAgICAgdmFyIHRleHQgPSBnZXRMaW5lKGRvYywgbGluZSkudGV4
dCwgbGVmdFBvcyA9IGZpbmRDb2x1bW4odGV4dCwgbGVmdCwgdGFiU2l6ZSk7CisgICAgICAgICAg
aWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9z
KGxpbmUsIGxlZnRQb3MpLCBQb3MobGluZSwgbGVmdFBvcykpKTsKKyAgICAgICAgICBlbHNlIGlm
ICh0ZXh0Lmxlbmd0aCA+IGxlZnRQb3MpCisgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFu
Z2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQb3MobGluZSwgZmluZENvbHVtbih0ZXh0LCByaWdodCwg
dGFiU2l6ZSkpKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoKSByYW5n
ZXMucHVzaChuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KSk7CisgICAgICAgIHNldFNlbGVjdGlvbihk
b2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihzdGFydFNlbC5yYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgp
LmNvbmNhdChyYW5nZXMpLCBvdXJJbmRleCksIHNlbF9tb3VzZSk7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICB2YXIgb2xkUmFuZ2UgPSBvdXJSYW5nZTsKKyAgICAgICAgdmFyIGFuY2hvciA9IG9s
ZFJhbmdlLmFuY2hvciwgaGVhZCA9IHBvczsKKyAgICAgICAgaWYgKHR5cGUgIT0gInNpbmdsZSIp
IHsKKyAgICAgICAgICBpZiAodHlwZSA9PSAiZG91YmxlIikKKyAgICAgICAgICAgIHZhciByYW5n
ZSA9IGZpbmRXb3JkQXQoZG9jLCBwb3MpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZh
ciByYW5nZSA9IG5ldyBSYW5nZShQb3MocG9zLmxpbmUsIDApLCBjbGlwUG9zKGRvYywgUG9zKHBv
cy5saW5lICsgMSwgMCkpKTsKKyAgICAgICAgICBpZiAoY21wKHJhbmdlLmFuY2hvciwgYW5jaG9y
KSA+IDApIHsKKyAgICAgICAgICAgIGhlYWQgPSByYW5nZS5oZWFkOworICAgICAgICAgICAgYW5j
aG9yID0gbWluUG9zKG9sZFJhbmdlLmZyb20oKSwgcmFuZ2UuYW5jaG9yKTsKKyAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaGVhZCA9IHJhbmdlLmFuY2hvcjsKKyAgICAgICAgICAgIGFu
Y2hvciA9IG1heFBvcyhvbGRSYW5nZS50bygpLCByYW5nZS5oZWFkKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHJhbmdlcyA9IHN0YXJ0U2VsLnJhbmdlcy5zbGljZSgwKTsK
KyAgICAgICAgcmFuZ2VzW291ckluZGV4XSA9IG5ldyBSYW5nZShjbGlwUG9zKGRvYywgYW5jaG9y
KSwgaGVhZCk7CisgICAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihy
YW5nZXMsIG91ckluZGV4KSwgc2VsX21vdXNlKTsKICAgICAgIH0KICAgICB9CiAKLSAgICB2YXIg
ZWRpdG9yU2l6ZSA9IGdldFJlY3QoZGlzcGxheS53cmFwcGVyKTsKKyAgICB2YXIgZWRpdG9yU2l6
ZSA9IGRpc3BsYXkud3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAvLyBVc2Vk
IHRvIGVuc3VyZSB0aW1lb3V0IHJlLXRyaWVzIGRvbid0IGZpcmUgd2hlbiBhbm90aGVyIGV4dGVu
ZAogICAgIC8vIGhhcHBlbmVkIGluIHRoZSBtZWFudGltZSAoY2xlYXJUaW1lb3V0IGlzbid0IHJl
bGlhYmxlIC0tIGF0CiAgICAgLy8gbGVhc3Qgb24gQ2hyb21lLCB0aGUgdGltZW91dHMgc3RpbGwg
aGFwcGVuIGV2ZW4gd2hlbiBjbGVhcmVkLApAQCAtMTc5OSwxMiArMjY4OCwxMSBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIGZ1bmN0aW9uIGV4dGVuZChlKSB7CiAg
ICAgICB2YXIgY3VyQ291bnQgPSArK2NvdW50ZXI7Ci0gICAgICB2YXIgY3VyID0gcG9zRnJvbU1v
dXNlKGNtLCBlLCB0cnVlKTsKKyAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRy
dWUsIHR5cGUgPT0gInJlY3QiKTsKICAgICAgIGlmICghY3VyKSByZXR1cm47Ci0gICAgICBpZiAo
IXBvc0VxKGN1ciwgbGFzdCkpIHsKLSAgICAgICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSBvbkZv
Y3VzKGNtKTsKLSAgICAgICAgbGFzdCA9IGN1cjsKLSAgICAgICAgZG9TZWxlY3QoY3VyKTsKKyAg
ICAgIGlmIChjbXAoY3VyLCBsYXN0UG9zKSAhPSAwKSB7CisgICAgICAgIGVuc3VyZUZvY3VzKGNt
KTsKKyAgICAgICAgZXh0ZW5kVG8oY3VyKTsKICAgICAgICAgdmFyIHZpc2libGUgPSB2aXNpYmxl
TGluZXMoZGlzcGxheSwgZG9jKTsKICAgICAgICAgaWYgKGN1ci5saW5lID49IHZpc2libGUudG8g
fHwgY3VyLmxpbmUgPCB2aXNpYmxlLmZyb20pCiAgICAgICAgICAgc2V0VGltZW91dChvcGVyYXRp
b24oY20sIGZ1bmN0aW9uKCl7aWYgKGNvdW50ZXIgPT0gY3VyQ291bnQpIGV4dGVuZChlKTt9KSwg
MTUwKTsKQEAgLTE4MjQsMTAgKzI3MTIsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgICBmb2N1c0lucHV0KGNtKTsKICAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNl
bW92ZSIsIG1vdmUpOwogICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2V1cCIsIHVwKTsKKyAgICAg
IGRvYy5oaXN0b3J5Lmxhc3RTZWxPcmlnaW4gPSBudWxsOwogICAgIH0KIAogICAgIHZhciBtb3Zl
ID0gb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7Ci0gICAgICBpZiAoIWllICYmICFlX2J1dHRv
bihlKSkgZG9uZShlKTsKKyAgICAgIGlmICgoaWUgJiYgIWllX3VwdG85KSA/ICAhZS5idXR0b25z
IDogIWVfYnV0dG9uKGUpKSBkb25lKGUpOwogICAgICAgZWxzZSBleHRlbmQoZSk7CiAgICAgfSk7
CiAgICAgdmFyIHVwID0gb3BlcmF0aW9uKGNtLCBkb25lKTsKQEAgLTE4MzUsMjEgKzI3MjQsMjMg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgb24oZG9jdW1lbnQsICJt
b3VzZXVwIiwgdXApOwogICB9CiAKKyAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGV2ZW50IGhh
cHBlbmVkIGluIHRoZSBndXR0ZXIsIGFuZCBmaXJlcyB0aGUKKyAgLy8gaGFuZGxlcnMgZm9yIHRo
ZSBjb3JyZXNwb25kaW5nIGV2ZW50LgogICBmdW5jdGlvbiBndXR0ZXJFdmVudChjbSwgZSwgdHlw
ZSwgcHJldmVudCwgc2lnbmFsZm4pIHsKICAgICB0cnkgeyB2YXIgbVggPSBlLmNsaWVudFgsIG1Z
ID0gZS5jbGllbnRZOyB9CiAgICAgY2F0Y2goZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBpZiAo
bVggPj0gTWF0aC5mbG9vcihnZXRSZWN0KGNtLmRpc3BsYXkuZ3V0dGVycykucmlnaHQpKSByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1YID49IE1hdGguZmxvb3IoY20uZGlzcGxheS5ndXR0ZXJzLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSkgcmV0dXJuIGZhbHNlOwogICAgIGlmIChwcmV2
ZW50KSBlX3ByZXZlbnREZWZhdWx0KGUpOwogCiAgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5
OwotICAgIHZhciBsaW5lQm94ID0gZ2V0UmVjdChkaXNwbGF5LmxpbmVEaXYpOworICAgIHZhciBs
aW5lQm94ID0gZGlzcGxheS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogCiAgICAg
aWYgKG1ZID4gbGluZUJveC5ib3R0b20gfHwgIWhhc0hhbmRsZXIoY20sIHR5cGUpKSByZXR1cm4g
ZV9kZWZhdWx0UHJldmVudGVkKGUpOwogICAgIG1ZIC09IGxpbmVCb3gudG9wIC0gZGlzcGxheS52
aWV3T2Zmc2V0OwogCiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5vcHRpb25zLmd1dHRlcnMu
bGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBnID0gZGlzcGxheS5ndXR0ZXJzLmNoaWxkTm9kZXNb
aV07Ci0gICAgICBpZiAoZyAmJiBnZXRSZWN0KGcpLnJpZ2h0ID49IG1YKSB7CisgICAgICBpZiAo
ZyAmJiBnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0ID49IG1YKSB7CiAgICAgICAgIHZh
ciBsaW5lID0gbGluZUF0SGVpZ2h0KGNtLmRvYywgbVkpOwogICAgICAgICB2YXIgZ3V0dGVyID0g
Y20ub3B0aW9ucy5ndXR0ZXJzW2ldOwogICAgICAgICBzaWduYWxmbihjbSwgdHlwZSwgY20sIGxp
bmUsIGd1dHRlciwgZSk7CkBAIC0xODU4LDExICsyNzQ5LDYgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CiAKLSAgZnVuY3Rpb24gY29udGV4dE1lbnVJbkd1
dHRlcihjbSwgZSkgewotICAgIGlmICghaGFzSGFuZGxlcihjbSwgImd1dHRlckNvbnRleHRNZW51
IikpIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZ3V0dGVyRXZlbnQoY20sIGUsICJndXR0ZXJD
b250ZXh0TWVudSIsIGZhbHNlLCBzaWduYWwpOwotICB9Ci0KICAgZnVuY3Rpb24gY2xpY2tJbkd1
dHRlcihjbSwgZSkgewogICAgIHJldHVybiBndXR0ZXJFdmVudChjbSwgZSwgImd1dHRlckNsaWNr
IiwgdHJ1ZSwgc2lnbmFsTGF0ZXIpOwogICB9CkBAIC0xODczLDI5ICsyNzU5LDMzIEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIG9uRHJvcChlKSB7CiAg
ICAgdmFyIGNtID0gdGhpczsKLSAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGV2ZW50
SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwgKGNtLm9wdGlvbnMub25EcmFnRXZlbnQgJiYgY20u
b3B0aW9ucy5vbkRyYWdFdmVudChjbSwgYWRkU3RvcChlKSkpKQorICAgIGlmIChzaWduYWxET01F
dmVudChjbSwgZSkgfHwgZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSkKICAgICAgIHJldHVy
bjsKICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgIGlmIChpZSkgbGFzdERyb3AgPSArbmV3
IERhdGU7CisgICAgaWYgKGllX3VwdG8xMCkgbGFzdERyb3AgPSArbmV3IERhdGU7CiAgICAgdmFy
IHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSksIGZpbGVzID0gZS5kYXRhVHJhbnNmZXIu
ZmlsZXM7CiAgICAgaWYgKCFwb3MgfHwgaXNSZWFkT25seShjbSkpIHJldHVybjsKKyAgICAvLyBN
aWdodCBiZSBhIGZpbGUgZHJvcCwgaW4gd2hpY2ggY2FzZSB3ZSBzaW1wbHkgZXh0cmFjdCB0aGUg
dGV4dAorICAgIC8vIGFuZCBpbnNlcnQgaXQuCiAgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0
aCAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiB3aW5kb3cuRmlsZSkgewogICAgICAgdmFyIG4gPSBm
aWxlcy5sZW5ndGgsIHRleHQgPSBBcnJheShuKSwgcmVhZCA9IDA7CiAgICAgICB2YXIgbG9hZEZp
bGUgPSBmdW5jdGlvbihmaWxlLCBpKSB7CiAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJl
YWRlcjsKLSAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZWFk
ZXIub25sb2FkID0gb3BlcmF0aW9uKGNtLCBmdW5jdGlvbigpIHsKICAgICAgICAgICB0ZXh0W2ld
ID0gcmVhZGVyLnJlc3VsdDsKICAgICAgICAgICBpZiAoKytyZWFkID09IG4pIHsKICAgICAgICAg
ICAgIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpOwotICAgICAgICAgICAgbWFrZUNoYW5nZShj
bS5kb2MsIHtmcm9tOiBwb3MsIHRvOiBwb3MsIHRleHQ6IHNwbGl0TGluZXModGV4dC5qb2luKCJc
biIpKSwgb3JpZ2luOiAicGFzdGUifSwgImFyb3VuZCIpOworICAgICAgICAgICAgdmFyIGNoYW5n
ZSA9IHtmcm9tOiBwb3MsIHRvOiBwb3MsIHRleHQ6IHNwbGl0TGluZXModGV4dC5qb2luKCJcbiIp
KSwgb3JpZ2luOiAicGFzdGUifTsKKyAgICAgICAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFu
Z2UpOworICAgICAgICAgICAgc2V0U2VsZWN0aW9uUmVwbGFjZUhpc3RvcnkoY20uZG9jLCBzaW1w
bGVTZWxlY3Rpb24ocG9zLCBjaGFuZ2VFbmQoY2hhbmdlKSkpOwogICAgICAgICAgIH0KLSAgICAg
ICAgfTsKKyAgICAgICAgfSk7CiAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOwogICAg
ICAgfTsKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBsb2FkRmlsZShmaWxlc1tp
XSwgaSk7Ci0gICAgfSBlbHNlIHsKKyAgICB9IGVsc2UgeyAvLyBOb3JtYWwgZHJvcAogICAgICAg
Ly8gRG9uJ3QgZG8gYSByZXBsYWNlIGlmIHRoZSBkcm9wIGhhcHBlbmVkIGluc2lkZSBvZiB0aGUg
c2VsZWN0ZWQgdGV4dC4KLSAgICAgIGlmIChjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgIShwb3NM
ZXNzKHBvcywgY20uZG9jLnNlbC5mcm9tKSB8fCBwb3NMZXNzKGNtLmRvYy5zZWwudG8sIHBvcykp
KSB7CisgICAgICBpZiAoY20uc3RhdGUuZHJhZ2dpbmdUZXh0ICYmIGNtLmRvYy5zZWwuY29udGFp
bnMocG9zKSA+IC0xKSB7CiAgICAgICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dChlKTsKICAgICAg
ICAgLy8gRW5zdXJlIHRoZSBlZGl0b3IgaXMgcmUtZm9jdXNlZAogICAgICAgICBzZXRUaW1lb3V0
KGJpbmQoZm9jdXNJbnB1dCwgY20pLCAyMCk7CkBAIC0xOTA0LDEwICsyNzk0LDExIEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgdHJ5IHsKICAgICAgICAgdmFyIHRl
eHQgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7CiAgICAgICAgIGlmICh0ZXh0KSB7
Ci0gICAgICAgICAgdmFyIGN1ckZyb20gPSBjbS5kb2Muc2VsLmZyb20sIGN1clRvID0gY20uZG9j
LnNlbC50bzsKLSAgICAgICAgICBzZXRTZWxlY3Rpb24oY20uZG9jLCBwb3MsIHBvcyk7Ci0gICAg
ICAgICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCkgcmVwbGFjZVJhbmdlKGNtLmRvYywgIiIs
IGN1ckZyb20sIGN1clRvLCAicGFzdGUiKTsKLSAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9u
KHRleHQsIG51bGwsICJwYXN0ZSIpOworICAgICAgICAgIHZhciBzZWxlY3RlZCA9IGNtLnN0YXRl
LmRyYWdnaW5nVGV4dCAmJiBjbS5saXN0U2VsZWN0aW9ucygpOworICAgICAgICAgIHNldFNlbGVj
dGlvbk5vVW5kbyhjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIHBvcykpOworICAgICAgICAg
IGlmIChzZWxlY3RlZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZC5sZW5ndGg7ICsraSkK
KyAgICAgICAgICAgIHJlcGxhY2VSYW5nZShjbS5kb2MsICIiLCBzZWxlY3RlZFtpXS5hbmNob3Is
IHNlbGVjdGVkW2ldLmhlYWQsICJkcmFnIik7CisgICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlv
bih0ZXh0LCAiYXJvdW5kIiwgInBhc3RlIik7CiAgICAgICAgICAgZm9jdXNJbnB1dChjbSk7CiAg
ICAgICAgIH0KICAgICAgIH0KQEAgLTE5MTYsMzcgKzI4MDcsNDIgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBvbkRyYWdTdGFydChjbSwgZSkg
ewotICAgIGlmIChpZSAmJiAoIWNtLnN0YXRlLmRyYWdnaW5nVGV4dCB8fCArbmV3IERhdGUgLSBs
YXN0RHJvcCA8IDEwMCkpIHsgZV9zdG9wKGUpOyByZXR1cm47IH0KKyAgICBpZiAoaWVfdXB0bzEw
ICYmICghY20uc3RhdGUuZHJhZ2dpbmdUZXh0IHx8ICtuZXcgRGF0ZSAtIGxhc3REcm9wIDwgMTAw
KSkgeyBlX3N0b3AoZSk7IHJldHVybjsgfQogICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkg
fHwgZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSkgcmV0dXJuOwogCi0gICAgdmFyIHR4dCA9
IGNtLmdldFNlbGVjdGlvbigpOwotICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLCB0
eHQpOworICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLCBjbS5nZXRTZWxlY3Rpb24o
KSk7CiAKICAgICAvLyBVc2UgZHVtbXkgaW1hZ2UgaW5zdGVhZCBvZiBkZWZhdWx0IGJyb3dzZXJz
IGltYWdlLgogICAgIC8vIFJlY2VudCBTYWZhcmkgKH42LjAuMikgaGF2ZSBhIHRlbmRlbmN5IHRv
IHNlZ2ZhdWx0IHdoZW4gdGhpcyBoYXBwZW5zLCBzbyB3ZSBkb24ndCBkbyBpdCB0aGVyZS4KICAg
ICBpZiAoZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlICYmICFzYWZhcmkpIHsKICAgICAgIHZh
ciBpbWcgPSBlbHQoImltZyIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7
IHRvcDogMDsiKTsKICAgICAgIGltZy5zcmMgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdP
RGxoQVFBQkFBQUFBQ0g1QkFFS0FBRUFMQUFBQUFBQkFBRUFBQUlDVEFFQU93PT0iOwotICAgICAg
aWYgKG9wZXJhKSB7CisgICAgICBpZiAocHJlc3RvKSB7CiAgICAgICAgIGltZy53aWR0aCA9IGlt
Zy5oZWlnaHQgPSAxOwogICAgICAgICBjbS5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQoaW1n
KTsKICAgICAgICAgLy8gRm9yY2UgYSByZWxheW91dCwgb3IgT3BlcmEgd29uJ3QgdXNlIG91ciBp
bWFnZSBmb3Igc29tZSBvYnNjdXJlIHJlYXNvbgogICAgICAgICBpbWcuX3RvcCA9IGltZy5vZmZz
ZXRUb3A7CiAgICAgICB9CiAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoaW1nLCAw
LCAwKTsKLSAgICAgIGlmIChvcGVyYSkgaW1nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaW1nKTsK
KyAgICAgIGlmIChwcmVzdG8pIGltZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGltZyk7CiAgICAg
fQogICB9CiAKKyAgLy8gU0NST0xMIEVWRU5UUworCisgIC8vIFN5bmMgdGhlIHNjcm9sbGFibGUg
YXJlYSBhbmQgc2Nyb2xsYmFycywgZW5zdXJlIHRoZSB2aWV3cG9ydAorICAvLyBjb3ZlcnMgdGhl
IHZpc2libGUgYXJlYS4KICAgZnVuY3Rpb24gc2V0U2Nyb2xsVG9wKGNtLCB2YWwpIHsKICAgICBp
ZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAtIHZhbCkgPCAyKSByZXR1cm47CiAgICAgY20u
ZG9jLnNjcm9sbFRvcCA9IHZhbDsKLSAgICBpZiAoIWdlY2tvKSB1cGRhdGVEaXNwbGF5KGNtLCBb
XSwgdmFsKTsKKyAgICBpZiAoIWdlY2tvKSB1cGRhdGVEaXNwbGF5KGNtLCB7dG9wOiB2YWx9KTsK
ICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgIT0gdmFsKSBjbS5kaXNwbGF5
LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsKICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJW
LnNjcm9sbFRvcCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSB2YWw7
Ci0gICAgaWYgKGdlY2tvKSB1cGRhdGVEaXNwbGF5KGNtLCBbXSk7CisgICAgaWYgKGdlY2tvKSB1
cGRhdGVEaXNwbGF5KGNtKTsKICAgICBzdGFydFdvcmtlcihjbSwgMTAwKTsKICAgfQorICAvLyBT
eW5jIHNjcm9sbGVyIGFuZCBzY3JvbGxiYXIsIGVuc3VyZSB0aGUgZ3V0dGVyIGVsZW1lbnRzIGFy
ZQorICAvLyBhbGlnbmVkLgogICBmdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KGNtLCB2YWwsIGlzU2Ny
b2xsZXIpIHsKICAgICBpZiAoaXNTY3JvbGxlciA/IHZhbCA9PSBjbS5kb2Muc2Nyb2xsTGVmdCA6
IE1hdGguYWJzKGNtLmRvYy5zY3JvbGxMZWZ0IC0gdmFsKSA8IDIpIHJldHVybjsKICAgICB2YWwg
PSBNYXRoLm1pbih2YWwsIGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggLSBjbS5kaXNw
bGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKTsKQEAgLTE5OTMsMTAgKzI4ODksMTIgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gVGhpcyBoYWNrIChzZWUgcmVsYXRl
ZCBjb2RlIGluIHBhdGNoRGlzcGxheSkgbWFrZXMgc3VyZSB0aGUKICAgICAvLyBlbGVtZW50IGlz
IGtlcHQgYXJvdW5kLgogICAgIGlmIChkeSAmJiBtYWMgJiYgd2Via2l0KSB7Ci0gICAgICBmb3Ig
KHZhciBjdXIgPSBlLnRhcmdldDsgY3VyICE9IHNjcm9sbDsgY3VyID0gY3VyLnBhcmVudE5vZGUp
IHsKLSAgICAgICAgaWYgKGN1ci5saW5lT2JqKSB7Ci0gICAgICAgICAgY20uZGlzcGxheS5jdXJy
ZW50V2hlZWxUYXJnZXQgPSBjdXI7Ci0gICAgICAgICAgYnJlYWs7CisgICAgICBvdXRlcjogZm9y
ICh2YXIgY3VyID0gZS50YXJnZXQsIHZpZXcgPSBkaXNwbGF5LnZpZXc7IGN1ciAhPSBzY3JvbGw7
IGN1ciA9IGN1ci5wYXJlbnROb2RlKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmll
dy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIGlmICh2aWV3W2ldLm5vZGUgPT0gY3VyKSB7Cisg
ICAgICAgICAgICBjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCA9IGN1cjsKKyAgICAgICAg
ICAgIGJyZWFrIG91dGVyOworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgIH0K
QEAgLTIwMDcsNyArMjkwNSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIC8vIGVzdGltYXRlZCBwaXhlbHMvZGVsdGEgdmFsdWUsIHdlIGp1c3QgaGFuZGxlIGhvcml6
b250YWwKICAgICAvLyBzY3JvbGxpbmcgZW50aXJlbHkgaGVyZS4gSXQnbGwgYmUgc2xpZ2h0bHkg
b2ZmIGZyb20gbmF0aXZlLCBidXQKICAgICAvLyBiZXR0ZXIgdGhhbiBnbGl0Y2hpbmcgb3V0Lgot
ICAgIGlmIChkeCAmJiAhZ2Vja28gJiYgIW9wZXJhICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBu
dWxsKSB7CisgICAgaWYgKGR4ICYmICFnZWNrbyAmJiAhcHJlc3RvICYmIHdoZWVsUGl4ZWxzUGVy
VW5pdCAhPSBudWxsKSB7CiAgICAgICBpZiAoZHkpCiAgICAgICAgIHNldFNjcm9sbFRvcChjbSwg
TWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsLnNjcm9sbFRvcCArIGR5ICogd2hlZWxQaXhlbHNQ
ZXJVbml0LCBzY3JvbGwuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsLmNsaWVudEhlaWdodCkpKTsKICAg
ICAgIHNldFNjcm9sbExlZnQoY20sIE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbC5zY3JvbGxM
ZWZ0ICsgZHggKiB3aGVlbFBpeGVsc1BlclVuaXQsIHNjcm9sbC5zY3JvbGxXaWR0aCAtIHNjcm9s
bC5jbGllbnRXaWR0aCkpKTsKQEAgLTIwMTYsMTIgKzI5MTQsMTQgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gJ1Byb2pl
Y3QnIHRoZSB2aXNpYmxlIHZpZXdwb3J0IHRvIGNvdmVyIHRoZSBhcmVhIHRoYXQgaXMgYmVpbmcK
KyAgICAvLyBzY3JvbGxlZCBpbnRvIHZpZXcgKGlmIHdlIGtub3cgZW5vdWdoIHRvIGVzdGltYXRl
IGl0KS4KICAgICBpZiAoZHkgJiYgd2hlZWxQaXhlbHNQZXJVbml0ICE9IG51bGwpIHsKICAgICAg
IHZhciBwaXhlbHMgPSBkeSAqIHdoZWVsUGl4ZWxzUGVyVW5pdDsKICAgICAgIHZhciB0b3AgPSBj
bS5kb2Muc2Nyb2xsVG9wLCBib3QgPSB0b3AgKyBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0
OwogICAgICAgaWYgKHBpeGVscyA8IDApIHRvcCA9IE1hdGgubWF4KDAsIHRvcCArIHBpeGVscyAt
IDUwKTsKICAgICAgIGVsc2UgYm90ID0gTWF0aC5taW4oY20uZG9jLmhlaWdodCwgYm90ICsgcGl4
ZWxzICsgNTApOwotICAgICAgdXBkYXRlRGlzcGxheShjbSwgW10sIHt0b3A6IHRvcCwgYm90dG9t
OiBib3R9KTsKKyAgICAgIHVwZGF0ZURpc3BsYXkoY20sIHt0b3A6IHRvcCwgYm90dG9tOiBib3R9
KTsKICAgICB9CiAKICAgICBpZiAod2hlZWxTYW1wbGVzIDwgMjApIHsKQEAgLTIwNDUsNiArMjk0
NSw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAgfQogCisg
IC8vIEtFWSBFVkVOVFMKKworICAvLyBSdW4gYSBoYW5kbGVyIHRoYXQgd2FzIGJvdW5kIHRvIGEg
a2V5LgogICBmdW5jdGlvbiBkb0hhbmRsZUJpbmRpbmcoY20sIGJvdW5kLCBkcm9wU2hpZnQpIHsK
ICAgICBpZiAodHlwZW9mIGJvdW5kID09ICJzdHJpbmciKSB7CiAgICAgICBib3VuZCA9IGNvbW1h
bmRzW2JvdW5kXTsKQEAgLTIwNTMsMTggKzI5NTYsMTkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgLy8gRW5zdXJlIHByZXZpb3VzIGlucHV0IGhhcyBiZWVuIHJlYWQs
IHNvIHRoYXQgdGhlIGhhbmRsZXIgc2VlcyBhCiAgICAgLy8gY29uc2lzdGVudCB2aWV3IG9mIHRo
ZSBkb2N1bWVudAogICAgIGlmIChjbS5kaXNwbGF5LnBvbGxpbmdGYXN0ICYmIHJlYWRJbnB1dChj
bSkpIGNtLmRpc3BsYXkucG9sbGluZ0Zhc3QgPSBmYWxzZTsKLSAgICB2YXIgZG9jID0gY20uZG9j
LCBwcmV2U2hpZnQgPSBkb2Muc2VsLnNoaWZ0LCBkb25lID0gZmFsc2U7CisgICAgdmFyIHByZXZT
aGlmdCA9IGNtLmRpc3BsYXkuc2hpZnQsIGRvbmUgPSBmYWxzZTsKICAgICB0cnkgewogICAgICAg
aWYgKGlzUmVhZE9ubHkoY20pKSBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gdHJ1ZTsKLSAgICAg
IGlmIChkcm9wU2hpZnQpIGRvYy5zZWwuc2hpZnQgPSBmYWxzZTsKKyAgICAgIGlmIChkcm9wU2hp
ZnQpIGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZTsKICAgICAgIGRvbmUgPSBib3VuZChjbSkgIT0g
UGFzczsKICAgICB9IGZpbmFsbHkgewotICAgICAgZG9jLnNlbC5zaGlmdCA9IHByZXZTaGlmdDsK
KyAgICAgIGNtLmRpc3BsYXkuc2hpZnQgPSBwcmV2U2hpZnQ7CiAgICAgICBjbS5zdGF0ZS5zdXBw
cmVzc0VkaXRzID0gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiBkb25lOwogICB9CiAKKyAgLy8g
Q29sbGVjdCB0aGUgY3VycmVudGx5IGFjdGl2ZSBrZXltYXBzLgogICBmdW5jdGlvbiBhbGxLZXlN
YXBzKGNtKSB7CiAgICAgdmFyIG1hcHMgPSBjbS5zdGF0ZS5rZXlNYXBzLnNsaWNlKDApOwogICAg
IGlmIChjbS5vcHRpb25zLmV4dHJhS2V5cykgbWFwcy5wdXNoKGNtLm9wdGlvbnMuZXh0cmFLZXlz
KTsKQEAgLTIwNzMsOCArMjk3Nyw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICB9CiAKICAgdmFyIG1heWJlVHJhbnNpdGlvbjsKKyAgLy8gSGFuZGxlIGEga2V5IGZyb20g
dGhlIGtleWRvd24gZXZlbnQuCiAgIGZ1bmN0aW9uIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpIHsK
LSAgICAvLyBIYW5kbGUgYXV0byBrZXltYXAgdHJhbnNpdGlvbnMKKyAgICAvLyBIYW5kbGUgYXV0
b21hdGljIGtleW1hcCB0cmFuc2l0aW9ucwogICAgIHZhciBzdGFydE1hcCA9IGdldEtleU1hcChj
bS5vcHRpb25zLmtleU1hcCksIG5leHQgPSBzdGFydE1hcC5hdXRvOwogICAgIGNsZWFyVGltZW91
dChtYXliZVRyYW5zaXRpb24pOwogICAgIGlmIChuZXh0ICYmICFpc01vZGlmaWVyS2V5KGUpKSBt
YXliZVRyYW5zaXRpb24gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewpAQCAtMjEwNCwxMiArMzAw
OSwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoaGFuZGxl
ZCkgewogICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgIHJlc3RhcnRCbGluayhjbSk7
Ci0gICAgICBpZiAoaWVfbHQ5KSB7IGUub2xkS2V5Q29kZSA9IGUua2V5Q29kZTsgZS5rZXlDb2Rl
ID0gMDsgfQogICAgICAgc2lnbmFsTGF0ZXIoY20sICJrZXlIYW5kbGVkIiwgY20sIG5hbWUsIGUp
OwogICAgIH0KICAgICByZXR1cm4gaGFuZGxlZDsKICAgfQogCisgIC8vIEhhbmRsZSBhIGtleSBm
cm9tIHRoZSBrZXlwcmVzcyBldmVudAogICBmdW5jdGlvbiBoYW5kbGVDaGFyQmluZGluZyhjbSwg
ZSwgY2gpIHsKICAgICB2YXIgaGFuZGxlZCA9IGxvb2t1cEtleSgiJyIgKyBjaCArICInIiwgYWxs
S2V5TWFwcyhjbSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oYikgeyBy
ZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiLCB0cnVlKTsgfSk7CkBAIC0yMTI0LDQ3ICszMDI5
LDY3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB2YXIgbGFzdFN0b3Bw
ZWRLZXkgPSBudWxsOwogICBmdW5jdGlvbiBvbktleURvd24oZSkgewogICAgIHZhciBjbSA9IHRo
aXM7Ci0gICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSBvbkZvY3VzKGNtKTsKLSAgICBpZiAoc2ln
bmFsRE9NRXZlbnQoY20sIGUpIHx8IGNtLm9wdGlvbnMub25LZXlFdmVudCAmJiBjbS5vcHRpb25z
Lm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47Ci0gICAgaWYgKGllICYmIGUua2V5
Q29kZSA9PSAyNykgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwotICAgIHZhciBjb2RlID0gZS5rZXlD
b2RlOworICAgIGVuc3VyZUZvY3VzKGNtKTsKKyAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUp
KSByZXR1cm47CiAgICAgLy8gSUUgZG9lcyBzdHJhbmdlIHRoaW5ncyB3aXRoIGVzY2FwZS4KLSAg
ICBjbS5kb2Muc2VsLnNoaWZ0ID0gY29kZSA9PSAxNiB8fCBlLnNoaWZ0S2V5OwotICAgIC8vIEZp
cnN0IGdpdmUgb25LZXlFdmVudCBvcHRpb24gYSBjaGFuY2UgdG8gaGFuZGxlIHRoaXMuCisgICAg
aWYgKGllX3VwdG8xMCAmJiBlLmtleUNvZGUgPT0gMjcpIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsK
KyAgICB2YXIgY29kZSA9IGUua2V5Q29kZTsKKyAgICBjbS5kaXNwbGF5LnNoaWZ0ID0gY29kZSA9
PSAxNiB8fCBlLnNoaWZ0S2V5OwogICAgIHZhciBoYW5kbGVkID0gaGFuZGxlS2V5QmluZGluZyhj
bSwgZSk7Ci0gICAgaWYgKG9wZXJhKSB7CisgICAgaWYgKHByZXN0bykgewogICAgICAgbGFzdFN0
b3BwZWRLZXkgPSBoYW5kbGVkID8gY29kZSA6IG51bGw7CiAgICAgICAvLyBPcGVyYSBoYXMgbm8g
Y3V0IGV2ZW50Li4uIHdlIHRyeSB0byBhdCBsZWFzdCBjYXRjaCB0aGUga2V5IGNvbWJvCiAgICAg
ICBpZiAoIWhhbmRsZWQgJiYgY29kZSA9PSA4OCAmJiAhaGFzQ29weUV2ZW50ICYmIChtYWMgPyBl
Lm1ldGFLZXkgOiBlLmN0cmxLZXkpKQotICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKCIiKTsK
KyAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiIiwgbnVsbCwgImN1dCIpOworICAgIH0KKwor
ICAgIC8vIFR1cm4gbW91c2UgaW50byBjcm9zc2hhaXIgd2hlbiBBbHQgaXMgaGVsZCBvbiBNYWMu
CisgICAgaWYgKGNvZGUgPT0gMTggJiYgIS9cYkNvZGVNaXJyb3ItY3Jvc3NoYWlyXGIvLnRlc3Qo
Y20uZGlzcGxheS5saW5lRGl2LmNsYXNzTmFtZSkpCisgICAgICBzaG93Q3Jvc3NIYWlyKGNtKTsK
KyAgfQorCisgIGZ1bmN0aW9uIHNob3dDcm9zc0hhaXIoY20pIHsKKyAgICB2YXIgbGluZURpdiA9
IGNtLmRpc3BsYXkubGluZURpdjsKKyAgICBhZGRDbGFzcyhsaW5lRGl2LCAiQ29kZU1pcnJvci1j
cm9zc2hhaXIiKTsKKworICAgIGZ1bmN0aW9uIHVwKGUpIHsKKyAgICAgIGlmIChlLmtleUNvZGUg
PT0gMTggfHwgIWUuYWx0S2V5KSB7CisgICAgICAgIHJtQ2xhc3MobGluZURpdiwgIkNvZGVNaXJy
b3ItY3Jvc3NoYWlyIik7CisgICAgICAgIG9mZihkb2N1bWVudCwgImtleXVwIiwgdXApOworICAg
ICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZW92ZXIiLCB1cCk7CisgICAgICB9CiAgICAgfQorICAg
IG9uKGRvY3VtZW50LCAia2V5dXAiLCB1cCk7CisgICAgb24oZG9jdW1lbnQsICJtb3VzZW92ZXIi
LCB1cCk7CisgIH0KKworICBmdW5jdGlvbiBvbktleVVwKGUpIHsKKyAgICBpZiAoc2lnbmFsRE9N
RXZlbnQodGhpcywgZSkpIHJldHVybjsKKyAgICBpZiAoZS5rZXlDb2RlID09IDE2KSB0aGlzLmRv
Yy5zZWwuc2hpZnQgPSBmYWxzZTsKICAgfQogCiAgIGZ1bmN0aW9uIG9uS2V5UHJlc3MoZSkgewog
ICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBjbS5v
cHRpb25zLm9uS2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUp
KSkgcmV0dXJuOworICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHJldHVybjsKICAgICB2
YXIga2V5Q29kZSA9IGUua2V5Q29kZSwgY2hhckNvZGUgPSBlLmNoYXJDb2RlOwotICAgIGlmIChv
cGVyYSAmJiBrZXlDb2RlID09IGxhc3RTdG9wcGVkS2V5KSB7bGFzdFN0b3BwZWRLZXkgPSBudWxs
OyBlX3ByZXZlbnREZWZhdWx0KGUpOyByZXR1cm47fQotICAgIGlmICgoKG9wZXJhICYmICghZS53
aGljaCB8fCBlLndoaWNoIDwgMTApKSB8fCBraHRtbCkgJiYgaGFuZGxlS2V5QmluZGluZyhjbSwg
ZSkpIHJldHVybjsKKyAgICBpZiAocHJlc3RvICYmIGtleUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkp
IHtsYXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9Cisg
ICAgaWYgKCgocHJlc3RvICYmICghZS53aGljaCB8fCBlLndoaWNoIDwgMTApKSB8fCBraHRtbCkg
JiYgaGFuZGxlS2V5QmluZGluZyhjbSwgZSkpIHJldHVybjsKICAgICB2YXIgY2ggPSBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGNoYXJDb2RlID09IG51bGwgPyBrZXlDb2RlIDogY2hhckNvZGUpOwotICAg
IGlmICh0aGlzLm9wdGlvbnMuZWxlY3RyaWNDaGFycyAmJiB0aGlzLmRvYy5tb2RlLmVsZWN0cmlj
Q2hhcnMgJiYKLSAgICAgICAgdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50ICYmICFpc1JlYWRPbmx5
KHRoaXMpICYmCi0gICAgICAgIHRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGNo
KSA+IC0xKQotICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCkge2luZGVu
dExpbmUoY20sIGNtLmRvYy5zZWwudG8ubGluZSwgInNtYXJ0Iik7fSksIDc1KTsKICAgICBpZiAo
aGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSkgcmV0dXJuOwotICAgIGlmIChpZSAmJiAhaWVf
bHQ5KSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gbnVsbDsKKyAgICBpZiAoaWUgJiYg
IWllX3VwdG84KSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gbnVsbDsKICAgICBmYXN0
UG9sbChjbSk7CiAgIH0KIAorICAvLyBGT0NVUy9CTFVSIEVWRU5UUworCiAgIGZ1bmN0aW9uIG9u
Rm9jdXMoY20pIHsKICAgICBpZiAoY20ub3B0aW9ucy5yZWFkT25seSA9PSAibm9jdXJzb3IiKSBy
ZXR1cm47CiAgICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSB7CiAgICAgICBzaWduYWwoY20sICJm
b2N1cyIsIGNtKTsKICAgICAgIGNtLnN0YXRlLmZvY3VzZWQgPSB0cnVlOwotICAgICAgaWYgKGNt
LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNvZGVNaXJyb3ItZm9jdXNlZFxi
LykgPT0gLTEpCi0gICAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2Rl
TWlycm9yLWZvY3VzZWQiOworICAgICAgYWRkQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCAiQ29k
ZU1pcnJvci1mb2N1c2VkIik7CiAgICAgICBpZiAoIWNtLmN1ck9wKSB7Ci0gICAgICAgIHJlc2V0
SW5wdXQoY20sIHRydWUpOworICAgICAgICByZXNldElucHV0KGNtKTsKICAgICAgICAgaWYgKHdl
YmtpdCkgc2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQsIGNtLCB0cnVlKSwgMCk7IC8vIElzc3Vl
ICMxNzMwCiAgICAgICB9CiAgICAgfQpAQCAtMjE3NSw0MCArMzEwMCw0OSBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgewogICAg
ICAgc2lnbmFsKGNtLCAiYmx1ciIsIGNtKTsKICAgICAgIGNtLnN0YXRlLmZvY3VzZWQgPSBmYWxz
ZTsKLSAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgPSBjbS5kaXNwbGF5LndyYXBw
ZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCAiIik7CisgICAgICBy
bUNsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3ItZm9jdXNlZCIpOwogICAgIH0K
ICAgICBjbGVhckludGVydmFsKGNtLmRpc3BsYXkuYmxpbmtlcik7Ci0gICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHtpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIGNtLmRvYy5zZWwuc2hpZnQgPSBmYWxz
ZTt9LCAxNTApOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7aWYgKCFjbS5zdGF0ZS5mb2N1
c2VkKSBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7fSwgMTUwKTsKICAgfQogCisgIC8vIENPTlRF
WFQgTUVOVSBIQU5ETElORworCiAgIHZhciBkZXRlY3RpbmdTZWxlY3RBbGw7CisgIC8vIFRvIG1h
a2UgdGhlIGNvbnRleHQgbWVudSB3b3JrLCB3ZSBuZWVkIHRvIGJyaWVmbHkgdW5oaWRlIHRoZQor
ICAvLyB0ZXh0YXJlYSAobWFraW5nIGl0IGFzIHVub2J0cnVzaXZlIGFzIHBvc3NpYmxlKSB0byBs
ZXQgdGhlCisgIC8vIHJpZ2h0LWNsaWNrIHRha2UgZWZmZWN0IG9uIGl0LgogICBmdW5jdGlvbiBv
bkNvbnRleHRNZW51KGNtLCBlKSB7CiAgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlLCAiY29u
dGV4dG1lbnUiKSkgcmV0dXJuOwotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc2VsID0g
Y20uZG9jLnNlbDsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CiAgICAgaWYgKGV2ZW50
SW5XaWRnZXQoZGlzcGxheSwgZSkgfHwgY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkpIHJldHVy
bjsKIAogICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUpLCBzY3JvbGxQb3MgPSBkaXNw
bGF5LnNjcm9sbGVyLnNjcm9sbFRvcDsKLSAgICBpZiAoIXBvcyB8fCBvcGVyYSkgcmV0dXJuOyAv
LyBPcGVyYSBpcyBkaWZmaWN1bHQuCisgICAgaWYgKCFwb3MgfHwgcHJlc3RvKSByZXR1cm47IC8v
IE9wZXJhIGlzIGRpZmZpY3VsdC4KIAogICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IHRleHQgc2Vs
ZWN0aW9uIG9ubHkgaWYgdGhlIGNsaWNrIGlzIGRvbmUgb3V0c2lkZSBvZiB0aGUgc2VsZWN0aW9u
CiAgICAgLy8gYW5kICdyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUnIG9wdGlvbiBpcyB0cnVl
LgogICAgIHZhciByZXNldCA9IGNtLm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51
OwotICAgIGlmIChyZXNldCAmJiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykgfHwgcG9zTGVzcyhw
b3MsIHNlbC5mcm9tKSB8fCAhcG9zTGVzcyhwb3MsIHNlbC50bykpKQotICAgICAgb3BlcmF0aW9u
KGNtLCBzZXRTZWxlY3Rpb24pKGNtLmRvYywgcG9zLCBwb3MpOworICAgIGlmIChyZXNldCAmJiBj
bS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPT0gLTEpCisgICAgICBvcGVyYXRpb24oY20sIHNldFNl
bGVjdGlvbikoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zKSwgc2VsX2RvbnRTY3JvbGwpOwog
CiAgICAgdmFyIG9sZENTUyA9IGRpc3BsYXkuaW5wdXQuc3R5bGUuY3NzVGV4dDsKICAgICBkaXNw
bGF5LmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICBkaXNwbGF5Lmlu
cHV0LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGZpeGVkOyB3aWR0aDogMzBweDsgaGVpZ2h0
OiAzMHB4OyB0b3A6ICIgKyAoZS5jbGllbnRZIC0gNSkgKwotICAgICAgInB4OyBsZWZ0OiAiICsg
KGUuY2xpZW50WCAtIDUpICsgInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsg
b3V0bGluZTogbm9uZTsiICsKLSAgICAgICJib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7
IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgLW1zLW9wYWNpdHk6IC4wNTsgZmlsdGVy
OiBhbHBoYShvcGFjaXR5PTUpOyI7CisgICAgICAicHg7IGxlZnQ6ICIgKyAoZS5jbGllbnRYIC0g
NSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6ICIgKworICAgICAgKGllID8gInJn
YmEoMjU1LCAyNTUsIDI1NSwgLjA1KSIgOiAidHJhbnNwYXJlbnQiKSArCisgICAgICAiOyBvdXRs
aW5lOiBub25lOyBib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRk
ZW47IG9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyI7CiAgICAgZm9jdXNJ
bnB1dChjbSk7Ci0gICAgcmVzZXRJbnB1dChjbSwgdHJ1ZSk7CisgICAgcmVzZXRJbnB1dChjbSk7
CiAgICAgLy8gQWRkcyAiU2VsZWN0IGFsbCIgdG8gY29udGV4dCBtZW51IGluIEZGCi0gICAgaWYg
KHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSBkaXNwbGF5LmlucHV0LnZhbHVlID0gZGlzcGxheS5w
cmV2SW5wdXQgPSAiICI7CisgICAgaWYgKCFjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSBkaXNwbGF5
LmlucHV0LnZhbHVlID0gZGlzcGxheS5wcmV2SW5wdXQgPSAiICI7CiAKKyAgICAvLyBTZWxlY3Qt
YWxsIHdpbGwgYmUgZ3JleWVkIG91dCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gc2VsZWN0LCBzbwor
ICAgIC8vIHRoaXMgYWRkcyBhIHplcm8td2lkdGggc3BhY2Ugc28gdGhhdCB3ZSBjYW4gbGF0ZXIg
Y2hlY2sgd2hldGhlcgorICAgIC8vIGl0IGdvdCBzZWxlY3RlZC4KICAgICBmdW5jdGlvbiBwcmVw
YXJlU2VsZWN0QWxsSGFjaygpIHsKICAgICAgIGlmIChkaXNwbGF5LmlucHV0LnNlbGVjdGlvblN0
YXJ0ICE9IG51bGwpIHsKLSAgICAgICAgdmFyIGV4dHZhbCA9IGRpc3BsYXkuaW5wdXQudmFsdWUg
PSAiXHUyMDBiIiArIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSA/ICIiIDogZGlzcGxheS5pbnB1
dC52YWx1ZSk7CisgICAgICAgIHZhciBleHR2YWwgPSBkaXNwbGF5LmlucHV0LnZhbHVlID0gIlx1
MjAwYiIgKyAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSA/IGRpc3BsYXkuaW5wdXQudmFsdWUgOiAi
Iik7CiAgICAgICAgIGRpc3BsYXkucHJldklucHV0ID0gIlx1MjAwYiI7CiAgICAgICAgIGRpc3Bs
YXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSAxOyBkaXNwbGF5LmlucHV0LnNlbGVjdGlvbkVuZCA9
IGV4dHZhbC5sZW5ndGg7CiAgICAgICB9CkBAIC0yMjE2LDE1ICszMTUwLDE1IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGZ1bmN0aW9uIHJlaGlkZSgpIHsKICAgICAg
IGRpc3BsYXkuaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwogICAgICAgZGlz
cGxheS5pbnB1dC5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTOwotICAgICAgaWYgKGllX2x0OSkgZGlz
cGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0g
c2Nyb2xsUG9zOworICAgICAgaWYgKGllX3VwdG84KSBkaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xs
VG9wID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBzY3JvbGxQb3M7CiAgICAgICBzbG93
UG9sbChjbSk7CiAKICAgICAgIC8vIFRyeSB0byBkZXRlY3QgdGhlIHVzZXIgY2hvb3Npbmcgc2Vs
ZWN0LWFsbAogICAgICAgaWYgKGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkg
ewotICAgICAgICBpZiAoIWllIHx8IGllX2x0OSkgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsKKyAg
ICAgICAgaWYgKCFpZSB8fCBpZV91cHRvOCkgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsKICAgICAg
ICAgY2xlYXJUaW1lb3V0KGRldGVjdGluZ1NlbGVjdEFsbCk7CiAgICAgICAgIHZhciBpID0gMCwg
cG9sbCA9IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgaWYgKGRpc3BsYXkucHJldklucHV0ID09ICIg
IiAmJiBkaXNwbGF5LmlucHV0LnNlbGVjdGlvblN0YXJ0ID09IDApCisgICAgICAgICAgaWYgKGRp
c3BsYXkucHJldklucHV0ID09ICJcdTIwMGIiICYmIGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3Rh
cnQgPT0gMCkKICAgICAgICAgICAgIG9wZXJhdGlvbihjbSwgY29tbWFuZHMuc2VsZWN0QWxsKShj
bSk7CiAgICAgICAgICAgZWxzZSBpZiAoaSsrIDwgMTApIGRldGVjdGluZ1NlbGVjdEFsbCA9IHNl
dFRpbWVvdXQocG9sbCwgNTAwKTsKICAgICAgICAgICBlbHNlIHJlc2V0SW5wdXQoY20pOwpAQCAt
MjIzMyw4ICszMTY3LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKGllICYmICFpZV9sdDkpIHByZXBhcmVTZWxlY3RBbGxIYWNr
KCk7Ci0gICAgaWYgKGNhcHR1cmVNaWRkbGVDbGljaykgeworICAgIGlmIChpZSAmJiAhaWVfdXB0
bzgpIHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7CisgICAgaWYgKGNhcHR1cmVSaWdodENsaWNrKSB7
CiAgICAgICBlX3N0b3AoZSk7CiAgICAgICB2YXIgbW91c2V1cCA9IGZ1bmN0aW9uKCkgewogICAg
ICAgICBvZmYod2luZG93LCAibW91c2V1cCIsIG1vdXNldXApOwpAQCAtMjI0Niw1NCArMzE4MCw3
MSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgIH0KIAorICBm
dW5jdGlvbiBjb250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSB7CisgICAgaWYgKCFoYXNIYW5kbGVy
KGNtLCAiZ3V0dGVyQ29udGV4dE1lbnUiKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBndXR0
ZXJFdmVudChjbSwgZSwgImd1dHRlckNvbnRleHRNZW51IiwgZmFsc2UsIHNpZ25hbCk7CisgIH0K
KwogICAvLyBVUERBVElORwogCisgIC8vIENvbXB1dGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBlbmQg
b2YgYSBjaGFuZ2UgKGl0cyAndG8nIHByb3BlcnR5CisgIC8vIHJlZmVycyB0byB0aGUgcHJlLWNo
YW5nZSBlbmQpLgogICB2YXIgY2hhbmdlRW5kID0gQ29kZU1pcnJvci5jaGFuZ2VFbmQgPSBmdW5j
dGlvbihjaGFuZ2UpIHsKICAgICBpZiAoIWNoYW5nZS50ZXh0KSByZXR1cm4gY2hhbmdlLnRvOwog
ICAgIHJldHVybiBQb3MoY2hhbmdlLmZyb20ubGluZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEs
CiAgICAgICAgICAgICAgICBsc3QoY2hhbmdlLnRleHQpLmxlbmd0aCArIChjaGFuZ2UudGV4dC5s
ZW5ndGggPT0gMSA/IGNoYW5nZS5mcm9tLmNoIDogMCkpOwogICB9OwogCi0gIC8vIE1ha2Ugc3Vy
ZSBhIHBvc2l0aW9uIHdpbGwgYmUgdmFsaWQgYWZ0ZXIgdGhlIGdpdmVuIGNoYW5nZS4KLSAgZnVu
Y3Rpb24gY2xpcFBvc3RDaGFuZ2UoZG9jLCBjaGFuZ2UsIHBvcykgewotICAgIGlmICghcG9zTGVz
cyhjaGFuZ2UuZnJvbSwgcG9zKSkgcmV0dXJuIGNsaXBQb3MoZG9jLCBwb3MpOwotICAgIHZhciBk
aWZmID0gKGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEpIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdl
LmZyb20ubGluZSk7Ci0gICAgaWYgKHBvcy5saW5lID4gY2hhbmdlLnRvLmxpbmUgKyBkaWZmKSB7
Ci0gICAgICB2YXIgcHJlTGluZSA9IHBvcy5saW5lIC0gZGlmZiwgbGFzdExpbmUgPSBkb2MuZmly
c3QgKyBkb2Muc2l6ZSAtIDE7Ci0gICAgICBpZiAocHJlTGluZSA+IGxhc3RMaW5lKSByZXR1cm4g
UG9zKGxhc3RMaW5lLCBnZXRMaW5lKGRvYywgbGFzdExpbmUpLnRleHQubGVuZ3RoKTsKLSAgICAg
IHJldHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywgcHJlTGluZSkudGV4dC5sZW5ndGgp
OwotICAgIH0KLSAgICBpZiAocG9zLmxpbmUgPT0gY2hhbmdlLnRvLmxpbmUgKyBkaWZmKQotICAg
ICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGxzdChjaGFuZ2UudGV4dCkubGVuZ3RoICsgKGNoYW5n
ZS50ZXh0Lmxlbmd0aCA9PSAxID8gY2hhbmdlLmZyb20uY2ggOiAwKSArCi0gICAgICAgICAgICAg
ICAgICAgICAgIGdldExpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSkudGV4dC5sZW5ndGggLSBjaGFu
Z2UudG8uY2gpOwotICAgIHZhciBpbnNpZGUgPSBwb3MubGluZSAtIGNoYW5nZS5mcm9tLmxpbmU7
Ci0gICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGNoYW5nZS50ZXh0W2luc2lkZV0ubGVuZ3RoICsg
KGluc2lkZSA/IDAgOiBjaGFuZ2UuZnJvbS5jaCkpOwotICB9Ci0KLSAgLy8gSGludCBjYW4gYmUg
bnVsbHwiZW5kInwic3RhcnQifCJhcm91bmQifHthbmNob3IsaGVhZH0KLSAgZnVuY3Rpb24gY29t
cHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCBoaW50KSB7Ci0gICAgaWYgKGhpbnQgJiYg
dHlwZW9mIGhpbnQgPT0gIm9iamVjdCIpIC8vIEFzc3VtZWQgdG8gYmUge2FuY2hvciwgaGVhZH0g
b2JqZWN0Ci0gICAgICByZXR1cm4ge2FuY2hvcjogY2xpcFBvc3RDaGFuZ2UoZG9jLCBjaGFuZ2Us
IGhpbnQuYW5jaG9yKSwKLSAgICAgICAgICAgICAgaGVhZDogY2xpcFBvc3RDaGFuZ2UoZG9jLCBj
aGFuZ2UsIGhpbnQuaGVhZCl9OwotCi0gICAgaWYgKGhpbnQgPT0gInN0YXJ0IikgcmV0dXJuIHth
bmNob3I6IGNoYW5nZS5mcm9tLCBoZWFkOiBjaGFuZ2UuZnJvbX07Ci0KLSAgICB2YXIgZW5kID0g
Y2hhbmdlRW5kKGNoYW5nZSk7Ci0gICAgaWYgKGhpbnQgPT0gImFyb3VuZCIpIHJldHVybiB7YW5j
aG9yOiBjaGFuZ2UuZnJvbSwgaGVhZDogZW5kfTsKLSAgICBpZiAoaGludCA9PSAiZW5kIikgcmV0
dXJuIHthbmNob3I6IGVuZCwgaGVhZDogZW5kfTsKLQotICAgIC8vIGhpbnQgaXMgbnVsbCwgbGVh
dmUgdGhlIHNlbGVjdGlvbiBhbG9uZSBhcyBtdWNoIGFzIHBvc3NpYmxlCi0gICAgdmFyIGFkanVz
dFBvcyA9IGZ1bmN0aW9uKHBvcykgewotICAgICAgaWYgKHBvc0xlc3MocG9zLCBjaGFuZ2UuZnJv
bSkpIHJldHVybiBwb3M7Ci0gICAgICBpZiAoIXBvc0xlc3MoY2hhbmdlLnRvLCBwb3MpKSByZXR1
cm4gZW5kOwotCi0gICAgICB2YXIgbGluZSA9IHBvcy5saW5lICsgY2hhbmdlLnRleHQubGVuZ3Ro
IC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkgLSAxLCBjaCA9IHBvcy5jaDsK
LSAgICAgIGlmIChwb3MubGluZSA9PSBjaGFuZ2UudG8ubGluZSkgY2ggKz0gZW5kLmNoIC0gY2hh
bmdlLnRvLmNoOwotICAgICAgcmV0dXJuIFBvcyhsaW5lLCBjaCk7Ci0gICAgfTsKLSAgICByZXR1
cm4ge2FuY2hvcjogYWRqdXN0UG9zKGRvYy5zZWwuYW5jaG9yKSwgaGVhZDogYWRqdXN0UG9zKGRv
Yy5zZWwuaGVhZCl9OworICAvLyBBZGp1c3QgYSBwb3NpdGlvbiB0byByZWZlciB0byB0aGUgcG9z
dC1jaGFuZ2UgcG9zaXRpb24gb2YgdGhlCisgIC8vIHNhbWUgdGV4dCwgb3IgdGhlIGVuZCBvZiB0
aGUgY2hhbmdlIGlmIHRoZSBjaGFuZ2UgY292ZXJzIGl0LgorICBmdW5jdGlvbiBhZGp1c3RGb3JD
aGFuZ2UocG9zLCBjaGFuZ2UpIHsKKyAgICBpZiAoY21wKHBvcywgY2hhbmdlLmZyb20pIDwgMCkg
cmV0dXJuIHBvczsKKyAgICBpZiAoY21wKHBvcywgY2hhbmdlLnRvKSA8PSAwKSByZXR1cm4gY2hh
bmdlRW5kKGNoYW5nZSk7CisKKyAgICB2YXIgbGluZSA9IHBvcy5saW5lICsgY2hhbmdlLnRleHQu
bGVuZ3RoIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkgLSAxLCBjaCA9IHBv
cy5jaDsKKyAgICBpZiAocG9zLmxpbmUgPT0gY2hhbmdlLnRvLmxpbmUpIGNoICs9IGNoYW5nZUVu
ZChjaGFuZ2UpLmNoIC0gY2hhbmdlLnRvLmNoOworICAgIHJldHVybiBQb3MobGluZSwgY2gpOwog
ICB9CiAKKyAgZnVuY3Rpb24gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7Cisg
ICAgdmFyIG91dCA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldOworICAg
ICAgb3V0LnB1c2gobmV3IFJhbmdlKGFkanVzdEZvckNoYW5nZShyYW5nZS5hbmNob3IsIGNoYW5n
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmhlYWQs
IGNoYW5nZSkpKTsKKyAgICB9CisgICAgcmV0dXJuIG5vcm1hbGl6ZVNlbGVjdGlvbihvdXQsIGRv
Yy5zZWwucHJpbUluZGV4KTsKKyAgfQorCisgIGZ1bmN0aW9uIG9mZnNldFBvcyhwb3MsIG9sZCwg
bncpIHsKKyAgICBpZiAocG9zLmxpbmUgPT0gb2xkLmxpbmUpCisgICAgICByZXR1cm4gUG9zKG53
LmxpbmUsIHBvcy5jaCAtIG9sZC5jaCArIG53LmNoKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4g
UG9zKG53LmxpbmUgKyAocG9zLmxpbmUgLSBvbGQubGluZSksIHBvcy5jaCk7CisgIH0KKworICAv
LyBVc2VkIGJ5IHJlcGxhY2VTZWxlY3Rpb25zIHRvIGFsbG93IG1vdmluZyB0aGUgc2VsZWN0aW9u
IHRvIHRoZQorICAvLyBzdGFydCBvciBhcm91bmQgdGhlIHJlcGxhY2VkIHRlc3QuIEhpbnQgbWF5
IGJlICJzdGFydCIgb3IgImFyb3VuZCIuCisgIGZ1bmN0aW9uIGNvbXB1dGVSZXBsYWNlZFNlbChk
b2MsIGNoYW5nZXMsIGhpbnQpIHsKKyAgICB2YXIgb3V0ID0gW107CisgICAgdmFyIG9sZFByZXYg
PSBQb3MoZG9jLmZpcnN0LCAwKSwgbmV3UHJldiA9IG9sZFByZXY7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgY2hhbmdlID0gY2hhbmdl
c1tpXTsKKyAgICAgIHZhciBmcm9tID0gb2Zmc2V0UG9zKGNoYW5nZS5mcm9tLCBvbGRQcmV2LCBu
ZXdQcmV2KTsKKyAgICAgIHZhciB0byA9IG9mZnNldFBvcyhjaGFuZ2VFbmQoY2hhbmdlKSwgb2xk
UHJldiwgbmV3UHJldik7CisgICAgICBvbGRQcmV2ID0gY2hhbmdlLnRvOworICAgICAgbmV3UHJl
diA9IHRvOworICAgICAgaWYgKGhpbnQgPT0gImFyb3VuZCIpIHsKKyAgICAgICAgdmFyIHJhbmdl
ID0gZG9jLnNlbC5yYW5nZXNbaV0sIGludiA9IGNtcChyYW5nZS5oZWFkLCByYW5nZS5hbmNob3Ip
IDwgMDsKKyAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGludiA/IHRvIDogZnJvbSwgaW52ID8g
ZnJvbSA6IHRvKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShm
cm9tLCBmcm9tKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24ob3V0
LCBkb2Muc2VsLnByaW1JbmRleCk7CisgIH0KKworICAvLyBBbGxvdyAiYmVmb3JlQ2hhbmdlIiBl
dmVudCBoYW5kbGVycyB0byBpbmZsdWVuY2UgYSBjaGFuZ2UKICAgZnVuY3Rpb24gZmlsdGVyQ2hh
bmdlKGRvYywgY2hhbmdlLCB1cGRhdGUpIHsKICAgICB2YXIgb2JqID0gewogICAgICAgY2FuY2Vs
ZWQ6IGZhbHNlLApAQCAtMjMxNiwxMSArMzI2NywxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICByZXR1cm4ge2Zyb206IG9iai5mcm9tLCB0bzogb2JqLnRvLCB0ZXh0
OiBvYmoudGV4dCwgb3JpZ2luOiBvYmoub3JpZ2lufTsKICAgfQogCi0gIC8vIFJlcGxhY2UgdGhl
IHJhbmdlIGZyb20gZnJvbSB0byB0byBieSB0aGUgc3RyaW5ncyBpbiByZXBsYWNlbWVudC4KLSAg
Ly8gY2hhbmdlIGlzIGEge2Zyb20sIHRvLCB0ZXh0IFssIG9yaWdpbl19IG9iamVjdAotICBmdW5j
dGlvbiBtYWtlQ2hhbmdlKGRvYywgY2hhbmdlLCBzZWxVcGRhdGUsIGlnbm9yZVJlYWRPbmx5KSB7
CisgIC8vIEFwcGx5IGEgY2hhbmdlIHRvIGEgZG9jdW1lbnQsIGFuZCBhZGQgaXQgdG8gdGhlIGRv
Y3VtZW50J3MKKyAgLy8gaGlzdG9yeSwgYW5kIHByb3BhZ2F0aW5nIGl0IHRvIGFsbCBsaW5rZWQg
ZG9jdW1lbnRzLgorICBmdW5jdGlvbiBtYWtlQ2hhbmdlKGRvYywgY2hhbmdlLCBpZ25vcmVSZWFk
T25seSkgewogICAgIGlmIChkb2MuY20pIHsKLSAgICAgIGlmICghZG9jLmNtLmN1ck9wKSByZXR1
cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFrZUNoYW5nZSkoZG9jLCBjaGFuZ2UsIHNlbFVwZGF0ZSwg
aWdub3JlUmVhZE9ubHkpOworICAgICAgaWYgKCFkb2MuY20uY3VyT3ApIHJldHVybiBvcGVyYXRp
b24oZG9jLmNtLCBtYWtlQ2hhbmdlKShkb2MsIGNoYW5nZSwgaWdub3JlUmVhZE9ubHkpOwogICAg
ICAgaWYgKGRvYy5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKSByZXR1cm47CiAgICAgfQogCkBAIC0y
MzMzLDE5ICszMjg0LDE3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IC8vIG9mIHJlYWQtb25seSBzcGFucyBpbiBpdHMgcmFuZ2UuCiAgICAgdmFyIHNwbGl0ID0gc2F3
UmVhZE9ubHlTcGFucyAmJiAhaWdub3JlUmVhZE9ubHkgJiYgcmVtb3ZlUmVhZE9ubHlSYW5nZXMo
ZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKTsKICAgICBpZiAoc3BsaXQpIHsKLSAgICAgIGZv
ciAodmFyIGkgPSBzcGxpdC5sZW5ndGggLSAxOyBpID49IDE7IC0taSkKLSAgICAgICAgbWFrZUNo
YW5nZU5vUmVhZG9ubHkoZG9jLCB7ZnJvbTogc3BsaXRbaV0uZnJvbSwgdG86IHNwbGl0W2ldLnRv
LCB0ZXh0OiBbIiJdfSk7Ci0gICAgICBpZiAoc3BsaXQubGVuZ3RoKQotICAgICAgICBtYWtlQ2hh
bmdlTm9SZWFkb25seShkb2MsIHtmcm9tOiBzcGxpdFswXS5mcm9tLCB0bzogc3BsaXRbMF0udG8s
IHRleHQ6IGNoYW5nZS50ZXh0fSwgc2VsVXBkYXRlKTsKKyAgICAgIGZvciAodmFyIGkgPSBzcGxp
dC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgbWFrZUNoYW5nZUlubmVyKGRvYywg
e2Zyb206IHNwbGl0W2ldLmZyb20sIHRvOiBzcGxpdFtpXS50bywgdGV4dDogaSA/IFsiIl0gOiBj
aGFuZ2UudGV4dH0pOwogICAgIH0gZWxzZSB7Ci0gICAgICBtYWtlQ2hhbmdlTm9SZWFkb25seShk
b2MsIGNoYW5nZSwgc2VsVXBkYXRlKTsKKyAgICAgIG1ha2VDaGFuZ2VJbm5lcihkb2MsIGNoYW5n
ZSk7CiAgICAgfQogICB9CiAKLSAgZnVuY3Rpb24gbWFrZUNoYW5nZU5vUmVhZG9ubHkoZG9jLCBj
aGFuZ2UsIHNlbFVwZGF0ZSkgewotICAgIGlmIChjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSAmJiBj
aGFuZ2UudGV4dFswXSA9PSAiIiAmJiBwb3NFcShjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSkgcmV0
dXJuOwotICAgIHZhciBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5n
ZSwgc2VsVXBkYXRlKTsKLSAgICBhZGRUb0hpc3RvcnkoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBk
b2MuY20gPyBkb2MuY20uY3VyT3AuaWQgOiBOYU4pOworICBmdW5jdGlvbiBtYWtlQ2hhbmdlSW5u
ZXIoZG9jLCBjaGFuZ2UpIHsKKyAgICBpZiAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgJiYgY2hh
bmdlLnRleHRbMF0gPT0gIiIgJiYgY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDApIHJl
dHVybjsKKyAgICB2YXIgc2VsQWZ0ZXIgPSBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFu
Z2UpOworICAgIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIGRvYy5j
bSA/IGRvYy5jbS5jdXJPcC5pZCA6IE5hTik7CiAKICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRv
YywgY2hhbmdlLCBzZWxBZnRlciwgc3RyZXRjaFNwYW5zT3ZlckNoYW5nZShkb2MsIGNoYW5nZSkp
OwogICAgIHZhciByZWJhc2VkID0gW107CkBAIC0yMzU5LDE3ICszMzA4LDQxIEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0pOwogICB9CiAKLSAgZnVuY3Rpb24gbWFr
ZUNoYW5nZUZyb21IaXN0b3J5KGRvYywgdHlwZSkgeworICAvLyBSZXZlcnQgYSBjaGFuZ2Ugc3Rv
cmVkIGluIGEgZG9jdW1lbnQncyBoaXN0b3J5LgorICBmdW5jdGlvbiBtYWtlQ2hhbmdlRnJvbUhp
c3RvcnkoZG9jLCB0eXBlLCBhbGxvd1NlbGVjdGlvbk9ubHkpIHsKICAgICBpZiAoZG9jLmNtICYm
IGRvYy5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKSByZXR1cm47CiAKLSAgICB2YXIgaGlzdCA9IGRv
Yy5oaXN0b3J5OwotICAgIHZhciBldmVudCA9ICh0eXBlID09ICJ1bmRvIiA/IGhpc3QuZG9uZSA6
IGhpc3QudW5kb25lKS5wb3AoKTsKLSAgICBpZiAoIWV2ZW50KSByZXR1cm47CisgICAgdmFyIGhp
c3QgPSBkb2MuaGlzdG9yeSwgZXZlbnQsIHNlbEFmdGVyID0gZG9jLnNlbDsKKyAgICB2YXIgc291
cmNlID0gdHlwZSA9PSAidW5kbyIgPyBoaXN0LmRvbmUgOiBoaXN0LnVuZG9uZSwgZGVzdCA9IHR5
cGUgPT0gInVuZG8iID8gaGlzdC51bmRvbmUgOiBoaXN0LmRvbmU7CisKKyAgICAvLyBWZXJpZnkg
dGhhdCB0aGVyZSBpcyBhIHVzZWFibGUgZXZlbnQgKHNvIHRoYXQgY3RybC16IHdvbid0CisgICAg
Ly8gbmVlZGxlc3NseSBjbGVhciBzZWxlY3Rpb24gZXZlbnRzKQorICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7CisgICAgICBldmVudCA9IHNvdXJjZVtpXTsKKyAg
ICAgIGlmIChhbGxvd1NlbGVjdGlvbk9ubHkgPyBldmVudC5yYW5nZXMgJiYgIWV2ZW50LmVxdWFs
cyhkb2Muc2VsKSA6ICFldmVudC5yYW5nZXMpCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBp
ZiAoaSA9PSBzb3VyY2UubGVuZ3RoKSByZXR1cm47CisgICAgaGlzdC5sYXN0T3JpZ2luID0gaGlz
dC5sYXN0U2VsT3JpZ2luID0gbnVsbDsKKworICAgIGZvciAoOzspIHsKKyAgICAgIGV2ZW50ID0g
c291cmNlLnBvcCgpOworICAgICAgaWYgKGV2ZW50LnJhbmdlcykgeworICAgICAgICBwdXNoU2Vs
ZWN0aW9uVG9IaXN0b3J5KGV2ZW50LCBkZXN0KTsKKyAgICAgICAgaWYgKGFsbG93U2VsZWN0aW9u
T25seSAmJiAhZXZlbnQuZXF1YWxzKGRvYy5zZWwpKSB7CisgICAgICAgICAgc2V0U2VsZWN0aW9u
KGRvYywgZXZlbnQsIHtjbGVhclJlZG86IGZhbHNlfSk7CisgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHNlbEFmdGVyID0gZXZlbnQ7CisgICAgICB9CisgICAgICBlbHNlIGJy
ZWFrOworICAgIH0KIAotICAgIHZhciBhbnRpID0ge2NoYW5nZXM6IFtdLCBhbmNob3JCZWZvcmU6
IGV2ZW50LmFuY2hvckFmdGVyLCBoZWFkQmVmb3JlOiBldmVudC5oZWFkQWZ0ZXIsCi0gICAgICAg
ICAgICAgICAgYW5jaG9yQWZ0ZXI6IGV2ZW50LmFuY2hvckJlZm9yZSwgaGVhZEFmdGVyOiBldmVu
dC5oZWFkQmVmb3JlLAotICAgICAgICAgICAgICAgIGdlbmVyYXRpb246IGhpc3QuZ2VuZXJhdGlv
bn07Ci0gICAgKHR5cGUgPT0gInVuZG8iID8gaGlzdC51bmRvbmUgOiBoaXN0LmRvbmUpLnB1c2go
YW50aSk7CisgICAgLy8gQnVpbGQgdXAgYSByZXZlcnNlIGNoYW5nZSBvYmplY3QgdG8gYWRkIHRv
IHRoZSBvcHBvc2l0ZSBoaXN0b3J5CisgICAgLy8gc3RhY2sgKHJlZG8gd2hlbiB1bmRvaW5nLCBh
bmQgdmljZSB2ZXJzYSkuCisgICAgdmFyIGFudGlDaGFuZ2VzID0gW107CisgICAgcHVzaFNlbGVj
dGlvblRvSGlzdG9yeShzZWxBZnRlciwgZGVzdCk7CisgICAgZGVzdC5wdXNoKHtjaGFuZ2VzOiBh
bnRpQ2hhbmdlcywgZ2VuZXJhdGlvbjogaGlzdC5nZW5lcmF0aW9ufSk7CiAgICAgaGlzdC5nZW5l
cmF0aW9uID0gZXZlbnQuZ2VuZXJhdGlvbiB8fCArK2hpc3QubWF4R2VuZXJhdGlvbjsKIAogICAg
IHZhciBmaWx0ZXIgPSBoYXNIYW5kbGVyKGRvYywgImJlZm9yZUNoYW5nZSIpIHx8IGRvYy5jbSAm
JiBoYXNIYW5kbGVyKGRvYy5jbSwgImJlZm9yZUNoYW5nZSIpOwpAQCAtMjM3OCwxNyArMzM1MSwx
OCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBjaGFuZ2Ug
PSBldmVudC5jaGFuZ2VzW2ldOwogICAgICAgY2hhbmdlLm9yaWdpbiA9IHR5cGU7CiAgICAgICBp
ZiAoZmlsdGVyICYmICFmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIGZhbHNlKSkgewotICAgICAg
ICAodHlwZSA9PSAidW5kbyIgPyBoaXN0LmRvbmUgOiBoaXN0LnVuZG9uZSkubGVuZ3RoID0gMDsK
KyAgICAgICAgc291cmNlLmxlbmd0aCA9IDA7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KIAot
ICAgICAgYW50aS5jaGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFu
Z2UpKTsKKyAgICAgIGFudGlDaGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9j
LCBjaGFuZ2UpKTsKIAotICAgICAgdmFyIGFmdGVyID0gaSA/IGNvbXB1dGVTZWxBZnRlckNoYW5n
ZShkb2MsIGNoYW5nZSwgbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgOiB7YW5jaG9yOiBldmVu
dC5hbmNob3JCZWZvcmUsIGhlYWQ6IGV2ZW50LmhlYWRCZWZvcmV9OworICAgICAgdmFyIGFmdGVy
ID0gaSA/IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSwgbnVsbCkgOiBsc3Qoc291
cmNlKTsKICAgICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIGFmdGVyLCBtZXJn
ZU9sZFNwYW5zKGRvYywgY2hhbmdlKSk7CisgICAgICBpZiAoZG9jLmNtKSBlbnN1cmVDdXJzb3JW
aXNpYmxlKGRvYy5jbSk7CiAgICAgICB2YXIgcmViYXNlZCA9IFtdOwogCisgICAgICAvLyBQcm9w
YWdhdGUgdG8gdGhlIGxpbmtlZCBkb2N1bWVudHMKICAgICAgIGxpbmtlZERvY3MoZG9jLCBmdW5j
dGlvbihkb2MsIHNoYXJlZEhpc3QpIHsKICAgICAgICAgaWYgKCFzaGFyZWRIaXN0ICYmIGluZGV4
T2YocmViYXNlZCwgZG9jLmhpc3RvcnkpID09IC0xKSB7CiAgICAgICAgICAgcmViYXNlSGlzdChk
b2MuaGlzdG9yeSwgY2hhbmdlKTsKQEAgLTIzOTksMTQgKzMzNzMsMTkgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICB9CiAKKyAgLy8gU3ViLXZpZXdzIG5lZWQg
dGhlaXIgbGluZSBudW1iZXJzIHNoaWZ0ZWQgd2hlbiB0ZXh0IGlzIGFkZGVkCisgIC8vIGFib3Zl
IG9yIGJlbG93IHRoZW0gaW4gdGhlIHBhcmVudCBkb2N1bWVudC4KICAgZnVuY3Rpb24gc2hpZnRE
b2MoZG9jLCBkaXN0YW5jZSkgewotICAgIGZ1bmN0aW9uIHNoaWZ0UG9zKHBvcykge3JldHVybiBQ
b3MocG9zLmxpbmUgKyBkaXN0YW5jZSwgcG9zLmNoKTt9CiAgICAgZG9jLmZpcnN0ICs9IGRpc3Rh
bmNlOwotICAgIGlmIChkb2MuY20pIHJlZ0NoYW5nZShkb2MuY20sIGRvYy5maXJzdCwgZG9jLmZp
cnN0LCBkaXN0YW5jZSk7Ci0gICAgZG9jLnNlbC5oZWFkID0gc2hpZnRQb3MoZG9jLnNlbC5oZWFk
KTsgZG9jLnNlbC5hbmNob3IgPSBzaGlmdFBvcyhkb2Muc2VsLmFuY2hvcik7Ci0gICAgZG9jLnNl
bC5mcm9tID0gc2hpZnRQb3MoZG9jLnNlbC5mcm9tKTsgZG9jLnNlbC50byA9IHNoaWZ0UG9zKGRv
Yy5zZWwudG8pOworICAgIGRvYy5zZWwgPSBuZXcgU2VsZWN0aW9uKG1hcChkb2Muc2VsLnJhbmdl
cywgZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgIHJldHVybiBuZXcgUmFuZ2UoUG9zKHJhbmdlLmFu
Y2hvci5saW5lICsgZGlzdGFuY2UsIHJhbmdlLmFuY2hvci5jaCksCisgICAgICAgICAgICAgICAg
ICAgICAgIFBvcyhyYW5nZS5oZWFkLmxpbmUgKyBkaXN0YW5jZSwgcmFuZ2UuaGVhZC5jaCkpOwor
ICAgIH0pLCBkb2Muc2VsLnByaW1JbmRleCk7CisgICAgaWYgKGRvYy5jbSkgcmVnQ2hhbmdlKGRv
Yy5jbSwgZG9jLmZpcnN0LCBkb2MuZmlyc3QgLSBkaXN0YW5jZSwgZGlzdGFuY2UpOwogICB9CiAK
KyAgLy8gTW9yZSBsb3dlci1sZXZlbCBjaGFuZ2UgZnVuY3Rpb24sIGhhbmRsaW5nIG9ubHkgYSBz
aW5nbGUgZG9jdW1lbnQKKyAgLy8gKG5vdCBsaW5rZWQgb25lcykuCiAgIGZ1bmN0aW9uIG1ha2VD
aGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzcGFucykgewogICAgIGlmIChk
b2MuY20gJiYgIWRvYy5jbS5jdXJPcCkKICAgICAgIHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBt
YWtlQ2hhbmdlU2luZ2xlRG9jKShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHNwYW5zKTsKQEAgLTI0
MzMsMTYgKzM0MTIsMTkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
Y2hhbmdlLnJlbW92ZWQgPSBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byk7
CiAKICAgICBpZiAoIXNlbEFmdGVyKSBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShk
b2MsIGNoYW5nZSwgbnVsbCk7Ci0gICAgaWYgKGRvYy5jbSkgbWFrZUNoYW5nZVNpbmdsZURvY0lu
RWRpdG9yKGRvYy5jbSwgY2hhbmdlLCBzcGFucywgc2VsQWZ0ZXIpOwotICAgIGVsc2UgdXBkYXRl
RG9jKGRvYywgY2hhbmdlLCBzcGFucywgc2VsQWZ0ZXIpOworICAgIGlmIChkb2MuY20pIG1ha2VD
aGFuZ2VTaW5nbGVEb2NJbkVkaXRvcihkb2MuY20sIGNoYW5nZSwgc3BhbnMpOworICAgIGVsc2Ug
dXBkYXRlRG9jKGRvYywgY2hhbmdlLCBzcGFucyk7CisgICAgc2V0U2VsZWN0aW9uTm9VbmRvKGRv
Yywgc2VsQWZ0ZXIsIHNlbF9kb250U2Nyb2xsKTsKICAgfQogCi0gIGZ1bmN0aW9uIG1ha2VDaGFu
Z2VTaW5nbGVEb2NJbkVkaXRvcihjbSwgY2hhbmdlLCBzcGFucywgc2VsQWZ0ZXIpIHsKKyAgLy8g
SGFuZGxlIHRoZSBpbnRlcmFjdGlvbiBvZiBhIGNoYW5nZSB0byBhIGRvY3VtZW50IHdpdGggdGhl
IGVkaXRvcgorICAvLyB0aGF0IHRoaXMgZG9jdW1lbnQgaXMgcGFydCBvZi4KKyAgZnVuY3Rpb24g
bWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGNtLCBjaGFuZ2UsIHNwYW5zKSB7CiAgICAgdmFy
IGRvYyA9IGNtLmRvYywgZGlzcGxheSA9IGNtLmRpc3BsYXksIGZyb20gPSBjaGFuZ2UuZnJvbSwg
dG8gPSBjaGFuZ2UudG87CiAKICAgICB2YXIgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2UsIGNo
ZWNrV2lkdGhTdGFydCA9IGZyb20ubGluZTsKICAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBw
aW5nKSB7Ci0gICAgICBjaGVja1dpZHRoU3RhcnQgPSBsaW5lTm8odmlzdWFsTGluZShkb2MsIGdl
dExpbmUoZG9jLCBmcm9tLmxpbmUpKSk7CisgICAgICBjaGVja1dpZHRoU3RhcnQgPSBsaW5lTm8o
dmlzdWFsTGluZShnZXRMaW5lKGRvYywgZnJvbS5saW5lKSkpOwogICAgICAgZG9jLml0ZXIoY2hl
Y2tXaWR0aFN0YXJ0LCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICBpZiAo
bGluZSA9PSBkaXNwbGF5Lm1heExpbmUpIHsKICAgICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGgg
PSB0cnVlOwpAQCAtMjQ1MSwxNCArMzQzMywxNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmICghcG9zTGVzcyhkb2Muc2VsLmhl
YWQsIGNoYW5nZS5mcm9tKSAmJiAhcG9zTGVzcyhjaGFuZ2UudG8sIGRvYy5zZWwuaGVhZCkpCisg
ICAgaWYgKGRvYy5zZWwuY29udGFpbnMoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPiAtMSkKICAg
ICAgIGNtLmN1ck9wLmN1cnNvckFjdGl2aXR5ID0gdHJ1ZTsKIAotICAgIHVwZGF0ZURvYyhkb2Ms
IGNoYW5nZSwgc3BhbnMsIHNlbEFmdGVyLCBlc3RpbWF0ZUhlaWdodChjbSkpOworICAgIHVwZGF0
ZURvYyhkb2MsIGNoYW5nZSwgc3BhbnMsIGVzdGltYXRlSGVpZ2h0KGNtKSk7CiAKICAgICBpZiAo
IWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgICBkb2MuaXRlcihjaGVja1dpZHRoU3Rh
cnQsIGZyb20ubGluZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCwgZnVuY3Rpb24obGluZSkgewotICAg
ICAgICB2YXIgbGVuID0gbGluZUxlbmd0aChkb2MsIGxpbmUpOworICAgICAgICB2YXIgbGVuID0g
bGluZUxlbmd0aChsaW5lKTsKICAgICAgICAgaWYgKGxlbiA+IGRpc3BsYXkubWF4TGluZUxlbmd0
aCkgewogICAgICAgICAgIGRpc3BsYXkubWF4TGluZSA9IGxpbmU7CiAgICAgICAgICAgZGlzcGxh
eS5tYXhMaW5lTGVuZ3RoID0gbGVuOwpAQCAtMjQ3NSwxOTIgKzM0NTcsNDkgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgICB2YXIgbGVuZGlmZiA9IGNoYW5nZS50ZXh0
Lmxlbmd0aCAtICh0by5saW5lIC0gZnJvbS5saW5lKSAtIDE7CiAgICAgLy8gUmVtZW1iZXIgdGhh
dCB0aGVzZSBsaW5lcyBjaGFuZ2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXkKLSAgICByZWdD
aGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEsIGxlbmRpZmYpOwotCi0gICAgaWYgKGhh
c0hhbmRsZXIoY20sICJjaGFuZ2UiKSkgewotICAgICAgdmFyIGNoYW5nZU9iaiA9IHtmcm9tOiBm
cm9tLCB0bzogdG8sCi0gICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGNoYW5nZS50ZXh0LAot
ICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkOiBjaGFuZ2UucmVtb3ZlZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgb3JpZ2luOiBjaGFuZ2Uub3JpZ2lufTsKLSAgICAgIGlmIChjbS5jdXJP
cC50ZXh0Q2hhbmdlZCkgewotICAgICAgICBmb3IgKHZhciBjdXIgPSBjbS5jdXJPcC50ZXh0Q2hh
bmdlZDsgY3VyLm5leHQ7IGN1ciA9IGN1ci5uZXh0KSB7fQotICAgICAgICBjdXIubmV4dCA9IGNo
YW5nZU9iajsKLSAgICAgIH0gZWxzZSBjbS5jdXJPcC50ZXh0Q2hhbmdlZCA9IGNoYW5nZU9iajsK
LSAgICB9CisgICAgaWYgKGZyb20ubGluZSA9PSB0by5saW5lICYmIGNoYW5nZS50ZXh0Lmxlbmd0
aCA9PSAxICYmICFpc1dob2xlTGluZVVwZGF0ZShjbS5kb2MsIGNoYW5nZSkpCisgICAgICByZWdM
aW5lQ2hhbmdlKGNtLCBmcm9tLmxpbmUsICJ0ZXh0Iik7CisgICAgZWxzZQorICAgICAgcmVnQ2hh
bmdlKGNtLCBmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBsZW5kaWZmKTsKKworICAgIGlmIChoYXNI
YW5kbGVyKGNtLCAiY2hhbmdlIikgfHwgaGFzSGFuZGxlcihjbSwgImNoYW5nZXMiKSkKKyAgICAg
IChjbS5jdXJPcC5jaGFuZ2VPYmpzIHx8IChjbS5jdXJPcC5jaGFuZ2VPYmpzID0gW10pKS5wdXNo
KHsKKyAgICAgICAgZnJvbTogZnJvbSwgdG86IHRvLAorICAgICAgICB0ZXh0OiBjaGFuZ2UudGV4
dCwKKyAgICAgICAgcmVtb3ZlZDogY2hhbmdlLnJlbW92ZWQsCisgICAgICAgIG9yaWdpbjogY2hh
bmdlLm9yaWdpbgorICAgICAgfSk7CiAgIH0KIAogICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UoZG9j
LCBjb2RlLCBmcm9tLCB0bywgb3JpZ2luKSB7CiAgICAgaWYgKCF0bykgdG8gPSBmcm9tOwotICAg
IGlmIChwb3NMZXNzKHRvLCBmcm9tKSkgeyB2YXIgdG1wID0gdG87IHRvID0gZnJvbTsgZnJvbSA9
IHRtcDsgfQorICAgIGlmIChjbXAodG8sIGZyb20pIDwgMCkgeyB2YXIgdG1wID0gdG87IHRvID0g
ZnJvbTsgZnJvbSA9IHRtcDsgfQogICAgIGlmICh0eXBlb2YgY29kZSA9PSAic3RyaW5nIikgY29k
ZSA9IHNwbGl0TGluZXMoY29kZSk7Ci0gICAgbWFrZUNoYW5nZShkb2MsIHtmcm9tOiBmcm9tLCB0
bzogdG8sIHRleHQ6IGNvZGUsIG9yaWdpbjogb3JpZ2lufSwgbnVsbCk7Ci0gIH0KLQotICAvLyBQ
T1NJVElPTiBPQkpFQ1QKLQotICBmdW5jdGlvbiBQb3MobGluZSwgY2gpIHsKLSAgICBpZiAoISh0
aGlzIGluc3RhbmNlb2YgUG9zKSkgcmV0dXJuIG5ldyBQb3MobGluZSwgY2gpOwotICAgIHRoaXMu
bGluZSA9IGxpbmU7IHRoaXMuY2ggPSBjaDsKLSAgfQotICBDb2RlTWlycm9yLlBvcyA9IFBvczsK
LQotICBmdW5jdGlvbiBwb3NFcShhLCBiKSB7cmV0dXJuIGEubGluZSA9PSBiLmxpbmUgJiYgYS5j
aCA9PSBiLmNoO30KLSAgZnVuY3Rpb24gcG9zTGVzcyhhLCBiKSB7cmV0dXJuIGEubGluZSA8IGIu
bGluZSB8fCAoYS5saW5lID09IGIubGluZSAmJiBhLmNoIDwgYi5jaCk7fQotICBmdW5jdGlvbiBj
b3B5UG9zKHgpIHtyZXR1cm4gUG9zKHgubGluZSwgeC5jaCk7fQotCi0gIC8vIFNFTEVDVElPTgot
Ci0gIGZ1bmN0aW9uIGNsaXBMaW5lKGRvYywgbikge3JldHVybiBNYXRoLm1heChkb2MuZmlyc3Qs
IE1hdGgubWluKG4sIGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSkpO30KLSAgZnVuY3Rpb24gY2xp
cFBvcyhkb2MsIHBvcykgewotICAgIGlmIChwb3MubGluZSA8IGRvYy5maXJzdCkgcmV0dXJuIFBv
cyhkb2MuZmlyc3QsIDApOwotICAgIHZhciBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAx
OwotICAgIGlmIChwb3MubGluZSA+IGxhc3QpIHJldHVybiBQb3MobGFzdCwgZ2V0TGluZShkb2Ms
IGxhc3QpLnRleHQubGVuZ3RoKTsKLSAgICByZXR1cm4gY2xpcFRvTGVuKHBvcywgZ2V0TGluZShk
b2MsIHBvcy5saW5lKS50ZXh0Lmxlbmd0aCk7Ci0gIH0KLSAgZnVuY3Rpb24gY2xpcFRvTGVuKHBv
cywgbGluZWxlbikgewotICAgIHZhciBjaCA9IHBvcy5jaDsKLSAgICBpZiAoY2ggPT0gbnVsbCB8
fCBjaCA+IGxpbmVsZW4pIHJldHVybiBQb3MocG9zLmxpbmUsIGxpbmVsZW4pOwotICAgIGVsc2Ug
aWYgKGNoIDwgMCkgcmV0dXJuIFBvcyhwb3MubGluZSwgMCk7Ci0gICAgZWxzZSByZXR1cm4gcG9z
OwotICB9Ci0gIGZ1bmN0aW9uIGlzTGluZShkb2MsIGwpIHtyZXR1cm4gbCA+PSBkb2MuZmlyc3Qg
JiYgbCA8IGRvYy5maXJzdCArIGRvYy5zaXplO30KLQotICAvLyBJZiBzaGlmdCBpcyBoZWxkLCB0
aGlzIHdpbGwgbW92ZSB0aGUgc2VsZWN0aW9uIGFuY2hvci4gT3RoZXJ3aXNlLAotICAvLyBpdCds
bCBzZXQgdGhlIHdob2xlIHNlbGVjdGlvbi4KLSAgZnVuY3Rpb24gZXh0ZW5kU2VsZWN0aW9uKGRv
YywgcG9zLCBvdGhlciwgYmlhcykgewotICAgIGlmIChkb2Muc2VsLnNoaWZ0IHx8IGRvYy5zZWwu
ZXh0ZW5kKSB7Ci0gICAgICB2YXIgYW5jaG9yID0gZG9jLnNlbC5hbmNob3I7Ci0gICAgICBpZiAo
b3RoZXIpIHsKLSAgICAgICAgdmFyIHBvc0JlZm9yZSA9IHBvc0xlc3MocG9zLCBhbmNob3IpOwot
ICAgICAgICBpZiAocG9zQmVmb3JlICE9IHBvc0xlc3Mob3RoZXIsIGFuY2hvcikpIHsKLSAgICAg
ICAgICBhbmNob3IgPSBwb3M7Ci0gICAgICAgICAgcG9zID0gb3RoZXI7Ci0gICAgICAgIH0gZWxz
ZSBpZiAocG9zQmVmb3JlICE9IHBvc0xlc3MocG9zLCBvdGhlcikpIHsKLSAgICAgICAgICBwb3Mg
PSBvdGhlcjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc2V0U2VsZWN0aW9uKGRvYywgYW5j
aG9yLCBwb3MsIGJpYXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBw
b3MsIG90aGVyIHx8IHBvcywgYmlhcyk7Ci0gICAgfQotICAgIGlmIChkb2MuY20pIGRvYy5jbS5j
dXJPcC51c2VyU2VsQ2hhbmdlID0gdHJ1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGZpbHRlclNlbGVj
dGlvbkNoYW5nZShkb2MsIGFuY2hvciwgaGVhZCkgewotICAgIHZhciBvYmogPSB7YW5jaG9yOiBh
bmNob3IsIGhlYWQ6IGhlYWR9OwotICAgIHNpZ25hbChkb2MsICJiZWZvcmVTZWxlY3Rpb25DaGFu
Z2UiLCBkb2MsIG9iaik7Ci0gICAgaWYgKGRvYy5jbSkgc2lnbmFsKGRvYy5jbSwgImJlZm9yZVNl
bGVjdGlvbkNoYW5nZSIsIGRvYy5jbSwgb2JqKTsKLSAgICBvYmouYW5jaG9yID0gY2xpcFBvcyhk
b2MsIG9iai5hbmNob3IpOyBvYmouaGVhZCA9IGNsaXBQb3MoZG9jLCBvYmouaGVhZCk7Ci0gICAg
cmV0dXJuIG9iajsKLSAgfQotCi0gIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uLiBMYXN0IHR3byBh
cmdzIGFyZSBvbmx5IHVzZWQgYnkKLSAgLy8gdXBkYXRlRG9jLCBzaW5jZSB0aGV5IGhhdmUgdG8g
YmUgZXhwcmVzc2VkIGluIHRoZSBsaW5lCi0gIC8vIG51bWJlcnMgYmVmb3JlIHRoZSB1cGRhdGUu
Ci0gIGZ1bmN0aW9uIHNldFNlbGVjdGlvbihkb2MsIGFuY2hvciwgaGVhZCwgYmlhcywgY2hlY2tB
dG9taWMpIHsKLSAgICBpZiAoIWNoZWNrQXRvbWljICYmIGhhc0hhbmRsZXIoZG9jLCAiYmVmb3Jl
U2VsZWN0aW9uQ2hhbmdlIikgfHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3Jl
U2VsZWN0aW9uQ2hhbmdlIikpIHsKLSAgICAgIHZhciBmaWx0ZXJlZCA9IGZpbHRlclNlbGVjdGlv
bkNoYW5nZShkb2MsIGFuY2hvciwgaGVhZCk7Ci0gICAgICBoZWFkID0gZmlsdGVyZWQuaGVhZDsK
LSAgICAgIGFuY2hvciA9IGZpbHRlcmVkLmFuY2hvcjsKLSAgICB9Ci0KLSAgICB2YXIgc2VsID0g
ZG9jLnNlbDsKLSAgICBzZWwuZ29hbENvbHVtbiA9IG51bGw7Ci0gICAgaWYgKGJpYXMgPT0gbnVs
bCkgYmlhcyA9IHBvc0xlc3MoaGVhZCwgc2VsLmhlYWQpID8gLTEgOiAxOwotICAgIC8vIFNraXAg
b3ZlciBhdG9taWMgc3BhbnMuCi0gICAgaWYgKGNoZWNrQXRvbWljIHx8ICFwb3NFcShhbmNob3Is
IHNlbC5hbmNob3IpKQotICAgICAgYW5jaG9yID0gc2tpcEF0b21pYyhkb2MsIGFuY2hvciwgYmlh
cywgY2hlY2tBdG9taWMgIT0gInB1c2giKTsKLSAgICBpZiAoY2hlY2tBdG9taWMgfHwgIXBvc0Vx
KGhlYWQsIHNlbC5oZWFkKSkKLSAgICAgIGhlYWQgPSBza2lwQXRvbWljKGRvYywgaGVhZCwgYmlh
cywgY2hlY2tBdG9taWMgIT0gInB1c2giKTsKLQotICAgIGlmIChwb3NFcShzZWwuYW5jaG9yLCBh
bmNob3IpICYmIHBvc0VxKHNlbC5oZWFkLCBoZWFkKSkgcmV0dXJuOwotCi0gICAgc2VsLmFuY2hv
ciA9IGFuY2hvcjsgc2VsLmhlYWQgPSBoZWFkOwotICAgIHZhciBpbnYgPSBwb3NMZXNzKGhlYWQs
IGFuY2hvcik7Ci0gICAgc2VsLmZyb20gPSBpbnYgPyBoZWFkIDogYW5jaG9yOwotICAgIHNlbC50
byA9IGludiA/IGFuY2hvciA6IGhlYWQ7Ci0KLSAgICBpZiAoZG9jLmNtKQotICAgICAgZG9jLmNt
LmN1ck9wLnVwZGF0ZUlucHV0ID0gZG9jLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPQotICAg
ICAgICBkb2MuY20uY3VyT3AuY3Vyc29yQWN0aXZpdHkgPSB0cnVlOwotCi0gICAgc2lnbmFsTGF0
ZXIoZG9jLCAiY3Vyc29yQWN0aXZpdHkiLCBkb2MpOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVDaGVj
a1NlbGVjdGlvbihjbSkgewotICAgIHNldFNlbGVjdGlvbihjbS5kb2MsIGNtLmRvYy5zZWwuZnJv
bSwgY20uZG9jLnNlbC50bywgbnVsbCwgInB1c2giKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNraXBB
dG9taWMoZG9jLCBwb3MsIGJpYXMsIG1heUNsZWFyKSB7Ci0gICAgdmFyIGZsaXBwZWQgPSBmYWxz
ZSwgY3VyUG9zID0gcG9zOwotICAgIHZhciBkaXIgPSBiaWFzIHx8IDE7Ci0gICAgZG9jLmNhbnRF
ZGl0ID0gZmFsc2U7Ci0gICAgc2VhcmNoOiBmb3IgKDs7KSB7Ci0gICAgICB2YXIgbGluZSA9IGdl
dExpbmUoZG9jLCBjdXJQb3MubGluZSk7Ci0gICAgICBpZiAobGluZS5tYXJrZWRTcGFucykgewot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICB2YXIgc3AgPSBsaW5lLm1hcmtlZFNwYW5zW2ldLCBtID0gc3AubWFya2Vy
OwotICAgICAgICAgIGlmICgoc3AuZnJvbSA9PSBudWxsIHx8IChtLmluY2x1c2l2ZUxlZnQgPyBz
cC5mcm9tIDw9IGN1clBvcy5jaCA6IHNwLmZyb20gPCBjdXJQb3MuY2gpKSAmJgotICAgICAgICAg
ICAgICAoc3AudG8gPT0gbnVsbCB8fCAobS5pbmNsdXNpdmVSaWdodCA/IHNwLnRvID49IGN1clBv
cy5jaCA6IHNwLnRvID4gY3VyUG9zLmNoKSkpIHsKLSAgICAgICAgICAgIGlmIChtYXlDbGVhcikg
ewotICAgICAgICAgICAgICBzaWduYWwobSwgImJlZm9yZUN1cnNvckVudGVyIik7Ci0gICAgICAg
ICAgICAgIGlmIChtLmV4cGxpY2l0bHlDbGVhcmVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFs
aW5lLm1hcmtlZFNwYW5zKSBicmVhazsKLSAgICAgICAgICAgICAgICBlbHNlIHstLWk7IGNvbnRp
bnVlO30KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFt
LmF0b21pYykgY29udGludWU7Ci0gICAgICAgICAgICB2YXIgbmV3UG9zID0gbS5maW5kKClbZGly
IDwgMCA/ICJmcm9tIiA6ICJ0byJdOwotICAgICAgICAgICAgaWYgKHBvc0VxKG5ld1BvcywgY3Vy
UG9zKSkgewotICAgICAgICAgICAgICBuZXdQb3MuY2ggKz0gZGlyOwotICAgICAgICAgICAgICBp
ZiAobmV3UG9zLmNoIDwgMCkgewotICAgICAgICAgICAgICAgIGlmIChuZXdQb3MubGluZSA+IGRv
Yy5maXJzdCkgbmV3UG9zID0gY2xpcFBvcyhkb2MsIFBvcyhuZXdQb3MubGluZSAtIDEpKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIG5ld1BvcyA9IG51bGw7Ci0gICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobmV3UG9zLmNoID4gbGluZS50ZXh0Lmxlbmd0aCkgewotICAgICAgICAgICAgICAgIGlmIChu
ZXdQb3MubGluZSA8IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSkgbmV3UG9zID0gUG9zKG5ld1Bv
cy5saW5lICsgMSwgMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBuZXdQb3MgPSBudWxsOwotICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmICghbmV3UG9zKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGZsaXBwZWQpIHsKLSAgICAgICAgICAgICAgICAgIC8vIERyaXZlbiBpbiBhIGNvcm5l
ciAtLSBubyB2YWxpZCBjdXJzb3IgcG9zaXRpb24gZm91bmQgYXQgYWxsCi0gICAgICAgICAgICAg
ICAgICAvLyAtLSB0cnkgYWdhaW4gKndpdGgqIGNsZWFyaW5nLCBpZiB3ZSBkaWRuJ3QgYWxyZWFk
eQotICAgICAgICAgICAgICAgICAgaWYgKCFtYXlDbGVhcikgcmV0dXJuIHNraXBBdG9taWMoZG9j
LCBwb3MsIGJpYXMsIHRydWUpOwotICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB0dXJu
IG9mZiBlZGl0aW5nIHVudGlsIGZ1cnRoZXIgbm90aWNlLCBhbmQgcmV0dXJuIHRoZSBzdGFydCBv
ZiB0aGUgZG9jCi0gICAgICAgICAgICAgICAgICBkb2MuY2FudEVkaXQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFBvcyhkb2MuZmlyc3QsIDApOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBmbGlwcGVkID0gdHJ1ZTsgbmV3UG9zID0gcG9zOyBkaXIgPSAtZGly
OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJQb3MgPSBu
ZXdQb3M7Ci0gICAgICAgICAgICBjb250aW51ZSBzZWFyY2g7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gY3VyUG9zOwotICAgIH0KKyAgICBtYWtlQ2hhbmdl
KGRvYywge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogY29kZSwgb3JpZ2luOiBvcmlnaW59KTsK
ICAgfQogCi0gIC8vIFNDUk9MTElORworICAvLyBTQ1JPTExJTkcgVEhJTkdTIElOVE8gVklFVwog
Ci0gIGZ1bmN0aW9uIHNjcm9sbEN1cnNvckludG9WaWV3KGNtKSB7Ci0gICAgdmFyIGNvb3JkcyA9
IHNjcm9sbFBvc0ludG9WaWV3KGNtLCBjbS5kb2Muc2VsLmhlYWQsIG51bGwsIGNtLm9wdGlvbnMu
Y3Vyc29yU2Nyb2xsTWFyZ2luKTsKLSAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHJldHVybjsK
LSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGJveCA9IGdldFJlY3QoZGlzcGxheS5zaXpl
ciksIGRvU2Nyb2xsID0gbnVsbDsKKyAgLy8gSWYgYW4gZWRpdG9yIHNpdHMgb24gdGhlIHRvcCBv
ciBib3R0b20gb2YgdGhlIHdpbmRvdywgcGFydGlhbGx5CisgIC8vIHNjcm9sbGVkIG91dCBvZiB2
aWV3LCB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgY3Vyc29yIGlzIHZpc2libGUuCisgIGZ1bmN0aW9u
IG1heWJlU2Nyb2xsV2luZG93KGNtLCBjb29yZHMpIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRp
c3BsYXksIGJveCA9IGRpc3BsYXkuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGRvU2Ny
b2xsID0gbnVsbDsKICAgICBpZiAoY29vcmRzLnRvcCArIGJveC50b3AgPCAwKSBkb1Njcm9sbCA9
IHRydWU7CiAgICAgZWxzZSBpZiAoY29vcmRzLmJvdHRvbSArIGJveC50b3AgPiAod2luZG93Lmlu
bmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpKSBkb1Nj
cm9sbCA9IGZhbHNlOwogICAgIGlmIChkb1Njcm9sbCAhPSBudWxsICYmICFwaGFudG9tKSB7Ci0g
ICAgICB2YXIgaGlkZGVuID0gZGlzcGxheS5jdXJzb3Iuc3R5bGUuZGlzcGxheSA9PSAibm9uZSI7
Ci0gICAgICBpZiAoaGlkZGVuKSB7Ci0gICAgICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxlLmRpc3Bs
YXkgPSAiIjsKLSAgICAgICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUubGVmdCA9IGNvb3Jkcy5sZWZ0
ICsgInB4IjsKLSAgICAgICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUudG9wID0gKGNvb3Jkcy50b3Ag
LSBkaXNwbGF5LnZpZXdPZmZzZXQpICsgInB4IjsKLSAgICAgIH0KLSAgICAgIGRpc3BsYXkuY3Vy
c29yLnNjcm9sbEludG9WaWV3KGRvU2Nyb2xsKTsKLSAgICAgIGlmIChoaWRkZW4pIGRpc3BsYXku
Y3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgICB2YXIgc2Nyb2xsTm9kZSA9IGVs
dCgiZGl2IiwgIlx1MjAwYiIsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogIiArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29vcmRzLnRvcCAtIGRpc3BsYXkudmlld09mZnNl
dCAtIHBhZGRpbmdUb3AoY20uZGlzcGxheSkpICsgInB4OyBoZWlnaHQ6ICIgKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvb3Jkcy5ib3R0b20gLSBjb29yZHMudG9wICsgc2Nyb2xsZXJD
dXRPZmYpICsgInB4OyBsZWZ0OiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jk
cy5sZWZ0ICsgInB4OyB3aWR0aDogMnB4OyIpOworICAgICAgY20uZGlzcGxheS5saW5lU3BhY2Uu
YXBwZW5kQ2hpbGQoc2Nyb2xsTm9kZSk7CisgICAgICBzY3JvbGxOb2RlLnNjcm9sbEludG9WaWV3
KGRvU2Nyb2xsKTsKKyAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKHNjcm9s
bE5vZGUpOwogICAgIH0KICAgfQogCisgIC8vIFNjcm9sbCBhIGdpdmVuIHBvc2l0aW9uIGludG8g
dmlldyAoaW1tZWRpYXRlbHkpLCB2ZXJpZnlpbmcgdGhhdAorICAvLyBpdCBhY3R1YWxseSBiZWNh
bWUgdmlzaWJsZSAoYXMgbGluZSBoZWlnaHRzIGFyZSBhY2N1cmF0ZWx5CisgIC8vIG1lYXN1cmVk
LCB0aGUgcG9zaXRpb24gb2Ygc29tZXRoaW5nIG1heSAnZHJpZnQnIGR1cmluZyBkcmF3aW5nKS4K
ICAgZnVuY3Rpb24gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIHBvcywgZW5kLCBtYXJnaW4pIHsKICAg
ICBpZiAobWFyZ2luID09IG51bGwpIG1hcmdpbiA9IDA7CiAgICAgZm9yICg7OykgewpAQCAtMjY4
MywxNiArMzUyMiwyMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9
CiAgIH0KIAorICAvLyBTY3JvbGwgYSBnaXZlbiBzZXQgb2YgY29vcmRpbmF0ZXMgaW50byB2aWV3
IChpbW1lZGlhdGVseSkuCiAgIGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KGNtLCB4MSwgeTEsIHgy
LCB5MikgewogICAgIHZhciBzY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHgxLCB5
MSwgeDIsIHkyKTsKICAgICBpZiAoc2Nyb2xsUG9zLnNjcm9sbFRvcCAhPSBudWxsKSBzZXRTY3Jv
bGxUb3AoY20sIHNjcm9sbFBvcy5zY3JvbGxUb3ApOwogICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xs
TGVmdCAhPSBudWxsKSBzZXRTY3JvbGxMZWZ0KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCk7CiAg
IH0KIAorICAvLyBDYWxjdWxhdGUgYSBuZXcgc2Nyb2xsIHBvc2l0aW9uIG5lZWRlZCB0byBzY3Jv
bGwgdGhlIGdpdmVuCisgIC8vIHJlY3RhbmdsZSBpbnRvIHZpZXcuIFJldHVybnMgYW4gb2JqZWN0
IHdpdGggc2Nyb2xsVG9wIGFuZAorICAvLyBzY3JvbGxMZWZ0IHByb3BlcnRpZXMuIFdoZW4gdGhl
c2UgYXJlIHVuZGVmaW5lZCwgdGhlCisgIC8vIHZlcnRpY2FsL2hvcml6b250YWwgcG9zaXRpb24g
ZG9lcyBub3QgbmVlZCB0byBiZSBhZGp1c3RlZC4KICAgZnVuY3Rpb24gY2FsY3VsYXRlU2Nyb2xs
UG9zKGNtLCB4MSwgeTEsIHgyLCB5MikgewogICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwg
c25hcE1hcmdpbiA9IHRleHRIZWlnaHQoY20uZGlzcGxheSk7CiAgICAgaWYgKHkxIDwgMCkgeTEg
PSAwOwotICAgIHZhciBzY3JlZW4gPSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCAtIHNj
cm9sbGVyQ3V0T2ZmLCBzY3JlZW50b3AgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCwgcmVz
dWx0ID0ge307CisgICAgdmFyIHNjcmVlbnRvcCA9IGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9s
bFRvcCAhPSBudWxsID8gY20uY3VyT3Auc2Nyb2xsVG9wIDogZGlzcGxheS5zY3JvbGxlci5zY3Jv
bGxUb3A7CisgICAgdmFyIHNjcmVlbiA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0g
c2Nyb2xsZXJDdXRPZmYsIHJlc3VsdCA9IHt9OwogICAgIHZhciBkb2NCb3R0b20gPSBjbS5kb2Mu
aGVpZ2h0ICsgcGFkZGluZ1ZlcnQoZGlzcGxheSk7CiAgICAgdmFyIGF0VG9wID0geTEgPCBzbmFw
TWFyZ2luLCBhdEJvdHRvbSA9IHkyID4gZG9jQm90dG9tIC0gc25hcE1hcmdpbjsKICAgICBpZiAo
eTEgPCBzY3JlZW50b3ApIHsKQEAgLTI3MDIsNyArMzU0Nyw4IEBAIHdpbmRvdy5Db2RlTWlycm9y
ID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKG5ld1RvcCAhPSBzY3JlZW50b3ApIHJlc3VsdC5z
Y3JvbGxUb3AgPSBuZXdUb3A7CiAgICAgfQogCi0gICAgdmFyIHNjcmVlbncgPSBkaXNwbGF5LnNj
cm9sbGVyLmNsaWVudFdpZHRoIC0gc2Nyb2xsZXJDdXRPZmYsIHNjcmVlbmxlZnQgPSBkaXNwbGF5
LnNjcm9sbGVyLnNjcm9sbExlZnQ7CisgICAgdmFyIHNjcmVlbmxlZnQgPSBjbS5jdXJPcCAmJiBj
bS5jdXJPcC5zY3JvbGxMZWZ0ICE9IG51bGwgPyBjbS5jdXJPcC5zY3JvbGxMZWZ0IDogZGlzcGxh
eS5zY3JvbGxlci5zY3JvbGxMZWZ0OworICAgIHZhciBzY3JlZW53ID0gZGlzcGxheS5zY3JvbGxl
ci5jbGllbnRXaWR0aCAtIHNjcm9sbGVyQ3V0T2ZmOwogICAgIHgxICs9IGRpc3BsYXkuZ3V0dGVy
cy5vZmZzZXRXaWR0aDsgeDIgKz0gZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoOwogICAgIHZh
ciBndXR0ZXJ3ID0gZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoOwogICAgIHZhciBhdExlZnQg
PSB4MSA8IGd1dHRlcncgKyAxMDsKQEAgLTI3MTUsMzIgKzM1NjEsNzAgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCi0gIGZ1bmN0
aW9uIHVwZGF0ZVNjcm9sbFBvcyhjbSwgbGVmdCwgdG9wKSB7Ci0gICAgY20uY3VyT3AudXBkYXRl
U2Nyb2xsUG9zID0ge3Njcm9sbExlZnQ6IGxlZnQgPT0gbnVsbCA/IGNtLmRvYy5zY3JvbGxMZWZ0
IDogbGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiB0b3Ag
PT0gbnVsbCA/IGNtLmRvYy5zY3JvbGxUb3AgOiB0b3B9OworICAvLyBTdG9yZSBhIHJlbGF0aXZl
IGFkanVzdG1lbnQgdG8gdGhlIHNjcm9sbCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudAorICAvLyBv
cGVyYXRpb24gKHRvIGJlIGFwcGxpZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGZpbmlzaGVzKS4KKyAg
ZnVuY3Rpb24gYWRkVG9TY3JvbGxQb3MoY20sIGxlZnQsIHRvcCkgeworICAgIGlmIChsZWZ0ICE9
IG51bGwgfHwgdG9wICE9IG51bGwpIHJlc29sdmVTY3JvbGxUb1BvcyhjbSk7CisgICAgaWYgKGxl
ZnQgIT0gbnVsbCkKKyAgICAgIGNtLmN1ck9wLnNjcm9sbExlZnQgPSAoY20uY3VyT3Auc2Nyb2xs
TGVmdCA9PSBudWxsID8gY20uZG9jLnNjcm9sbExlZnQgOiBjbS5jdXJPcC5zY3JvbGxMZWZ0KSAr
IGxlZnQ7CisgICAgaWYgKHRvcCAhPSBudWxsKQorICAgICAgY20uY3VyT3Auc2Nyb2xsVG9wID0g
KGNtLmN1ck9wLnNjcm9sbFRvcCA9PSBudWxsID8gY20uZG9jLnNjcm9sbFRvcCA6IGNtLmN1ck9w
LnNjcm9sbFRvcCkgKyB0b3A7CisgIH0KKworICAvLyBNYWtlIHN1cmUgdGhhdCBhdCB0aGUgZW5k
IG9mIHRoZSBvcGVyYXRpb24gdGhlIGN1cnJlbnQgY3Vyc29yIGlzCisgIC8vIHNob3duLgorICBm
dW5jdGlvbiBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKSB7CisgICAgcmVzb2x2ZVNjcm9sbFRvUG9z
KGNtKTsKKyAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGZyb20gPSBjdXIsIHRvID0gY3Vy
OworICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKKyAgICAgIGZyb20gPSBjdXIu
Y2ggPyBQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpIDogY3VyOworICAgICAgdG8gPSBQb3MoY3Vy
LmxpbmUsIGN1ci5jaCArIDEpOworICAgIH0KKyAgICBjbS5jdXJPcC5zY3JvbGxUb1BvcyA9IHtm
cm9tOiBmcm9tLCB0bzogdG8sIG1hcmdpbjogY20ub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4s
IGlzQ3Vyc29yOiB0cnVlfTsKICAgfQogCi0gIGZ1bmN0aW9uIGFkZFRvU2Nyb2xsUG9zKGNtLCBs
ZWZ0LCB0b3ApIHsKLSAgICB2YXIgcG9zID0gY20uY3VyT3AudXBkYXRlU2Nyb2xsUG9zIHx8IChj
bS5jdXJPcC51cGRhdGVTY3JvbGxQb3MgPSB7c2Nyb2xsTGVmdDogY20uZG9jLnNjcm9sbExlZnQs
IHNjcm9sbFRvcDogY20uZG9jLnNjcm9sbFRvcH0pOwotICAgIHZhciBzY3JvbGwgPSBjbS5kaXNw
bGF5LnNjcm9sbGVyOwotICAgIHBvcy5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihz
Y3JvbGwuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsLmNsaWVudEhlaWdodCwgcG9zLnNjcm9sbFRvcCAr
IHRvcCkpOwotICAgIHBvcy5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xs
LnNjcm9sbFdpZHRoIC0gc2Nyb2xsLmNsaWVudFdpZHRoLCBwb3Muc2Nyb2xsTGVmdCArIGxlZnQp
KTsKKyAgLy8gV2hlbiBhbiBvcGVyYXRpb24gaGFzIGl0cyBzY3JvbGxUb1BvcyBwcm9wZXJ0eSBz
ZXQsIGFuZCBhbm90aGVyCisgIC8vIHNjcm9sbCBhY3Rpb24gaXMgYXBwbGllZCBiZWZvcmUgdGhl
IGVuZCBvZiB0aGUgb3BlcmF0aW9uLCB0aGlzCisgIC8vICdzaW11bGF0ZXMnIHNjcm9sbGluZyB0
aGF0IHBvc2l0aW9uIGludG8gdmlldyBpbiBhIGNoZWFwIHdheSwgc28KKyAgLy8gdGhhdCB0aGUg
ZWZmZWN0IG9mIGludGVybWVkaWF0ZSBzY3JvbGwgY29tbWFuZHMgaXMgbm90IGlnbm9yZWQuCisg
IGZ1bmN0aW9uIHJlc29sdmVTY3JvbGxUb1BvcyhjbSkgeworICAgIHZhciByYW5nZSA9IGNtLmN1
ck9wLnNjcm9sbFRvUG9zOworICAgIGlmIChyYW5nZSkgeworICAgICAgY20uY3VyT3Auc2Nyb2xs
VG9Qb3MgPSBudWxsOworICAgICAgdmFyIGZyb20gPSBlc3RpbWF0ZUNvb3JkcyhjbSwgcmFuZ2Uu
ZnJvbSksIHRvID0gZXN0aW1hdGVDb29yZHMoY20sIHJhbmdlLnRvKTsKKyAgICAgIHZhciBzUG9z
ID0gY2FsY3VsYXRlU2Nyb2xsUG9zKGNtLCBNYXRoLm1pbihmcm9tLmxlZnQsIHRvLmxlZnQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oZnJvbS50b3AsIHRv
LnRvcCkgLSByYW5nZS5tYXJnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNYXRoLm1heChmcm9tLnJpZ2h0LCB0by5yaWdodCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNYXRoLm1heChmcm9tLmJvdHRvbSwgdG8uYm90dG9tKSArIHJhbmdlLm1h
cmdpbik7CisgICAgICBjbS5zY3JvbGxUbyhzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9w
KTsKKyAgICB9CiAgIH0KIAogICAvLyBBUEkgVVRJTElUSUVTCiAKKyAgLy8gSW5kZW50IHRoZSBn
aXZlbiBsaW5lLiBUaGUgaG93IHBhcmFtZXRlciBjYW4gYmUgInNtYXJ0IiwKKyAgLy8gImFkZCIv
bnVsbCwgInN1YnRyYWN0Iiwgb3IgInByZXYiLiBXaGVuIGFnZ3Jlc3NpdmUgaXMgZmFsc2UKKyAg
Ly8gKHR5cGljYWxseSBzZXQgdG8gdHJ1ZSBmb3IgZm9yY2VkIHNpbmdsZS1saW5lIGluZGVudHMp
LCBlbXB0eQorICAvLyBsaW5lcyBhcmUgbm90IGluZGVudGVkLCBhbmQgcGxhY2VzIHdoZXJlIHRo
ZSBtb2RlIHJldHVybnMgUGFzcworICAvLyBhcmUgbGVmdCBhbG9uZS4KICAgZnVuY3Rpb24gaW5k
ZW50TGluZShjbSwgbiwgaG93LCBhZ2dyZXNzaXZlKSB7Ci0gICAgdmFyIGRvYyA9IGNtLmRvYzsK
KyAgICB2YXIgZG9jID0gY20uZG9jLCBzdGF0ZTsKICAgICBpZiAoaG93ID09IG51bGwpIGhvdyA9
ICJhZGQiOwogICAgIGlmIChob3cgPT0gInNtYXJ0IikgeworICAgICAgLy8gRmFsbCBiYWNrIHRv
ICJwcmV2IiB3aGVuIHRoZSBtb2RlIGRvZXNuJ3QgaGF2ZSBhbiBpbmRlbnRhdGlvbgorICAgICAg
Ly8gbWV0aG9kLgogICAgICAgaWYgKCFjbS5kb2MubW9kZS5pbmRlbnQpIGhvdyA9ICJwcmV2IjsK
LSAgICAgIGVsc2UgdmFyIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUoY20sIG4pOworICAgICAgZWxz
ZSBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKGNtLCBuKTsKICAgICB9CiAKICAgICB2YXIgdGFiU2l6
ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTsKICAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBuKSwg
Y3VyU3BhY2UgPSBjb3VudENvbHVtbihsaW5lLnRleHQsIG51bGwsIHRhYlNpemUpOworICAgIGlm
IChsaW5lLnN0YXRlQWZ0ZXIpIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7CiAgICAgdmFyIGN1clNw
YWNlU3RyaW5nID0gbGluZS50ZXh0Lm1hdGNoKC9eXHMqLylbMF0sIGluZGVudGF0aW9uOwotICAg
IGlmIChob3cgPT0gInNtYXJ0IikgeworICAgIGlmICghYWdncmVzc2l2ZSAmJiAhL1xTLy50ZXN0
KGxpbmUudGV4dCkpIHsKKyAgICAgIGluZGVudGF0aW9uID0gMDsKKyAgICAgIGhvdyA9ICJub3Qi
OworICAgIH0gZWxzZSBpZiAoaG93ID09ICJzbWFydCIpIHsKICAgICAgIGluZGVudGF0aW9uID0g
Y20uZG9jLm1vZGUuaW5kZW50KHN0YXRlLCBsaW5lLnRleHQuc2xpY2UoY3VyU3BhY2VTdHJpbmcu
bGVuZ3RoKSwgbGluZS50ZXh0KTsKICAgICAgIGlmIChpbmRlbnRhdGlvbiA9PSBQYXNzKSB7CiAg
ICAgICAgIGlmICghYWdncmVzc2l2ZSkgcmV0dXJuOwpAQCAtMjc2NCwyMyArMzY0OCw2OSBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGZvciAodmFyIGkgPSBNYXRo
LmZsb29yKGluZGVudGF0aW9uIC8gdGFiU2l6ZSk7IGk7IC0taSkge3BvcyArPSB0YWJTaXplOyBp
bmRlbnRTdHJpbmcgKz0gIlx0Ijt9CiAgICAgaWYgKHBvcyA8IGluZGVudGF0aW9uKSBpbmRlbnRT
dHJpbmcgKz0gc3BhY2VTdHIoaW5kZW50YXRpb24gLSBwb3MpOwogCi0gICAgaWYgKGluZGVudFN0
cmluZyAhPSBjdXJTcGFjZVN0cmluZykKKyAgICBpZiAoaW5kZW50U3RyaW5nICE9IGN1clNwYWNl
U3RyaW5nKSB7CiAgICAgICByZXBsYWNlUmFuZ2UoY20uZG9jLCBpbmRlbnRTdHJpbmcsIFBvcyhu
LCAwKSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCksICIraW5wdXQiKTsKLSAgICBlbHNl
IGlmIChkb2Muc2VsLmhlYWQubGluZSA9PSBuICYmIGRvYy5zZWwuaGVhZC5jaCA8IGN1clNwYWNl
U3RyaW5nLmxlbmd0aCkKLSAgICAgIHNldFNlbGVjdGlvbihkb2MsIFBvcyhuLCBjdXJTcGFjZVN0
cmluZy5sZW5ndGgpLCBQb3MobiwgY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgMSk7CisgICAgfSBl
bHNlIHsKKyAgICAgIC8vIEVuc3VyZSB0aGF0LCBpZiB0aGUgY3Vyc29yIHdhcyBpbiB0aGUgd2hp
dGVzcGFjZSBhdCB0aGUgc3RhcnQKKyAgICAgIC8vIG9mIHRoZSBsaW5lLCBpdCBpcyBtb3ZlZCB0
byB0aGUgZW5kIG9mIHRoYXQgc3BhY2UuCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5z
ZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFu
Z2VzW2ldOworICAgICAgICBpZiAocmFuZ2UuaGVhZC5saW5lID09IG4gJiYgcmFuZ2UuaGVhZC5j
aCA8IGN1clNwYWNlU3RyaW5nLmxlbmd0aCkgeworICAgICAgICAgIHZhciBwb3MgPSBQb3Mobiwg
Y3VyU3BhY2VTdHJpbmcubGVuZ3RoKTsKKyAgICAgICAgICByZXBsYWNlT25lU2VsZWN0aW9uKGRv
YywgaSwgbmV3IFJhbmdlKHBvcywgcG9zKSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICB9CiAgICAgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsKICAgfQogCi0gIGZ1
bmN0aW9uIGNoYW5nZUxpbmUoY20sIGhhbmRsZSwgb3ApIHsKKyAgLy8gVXRpbGl0eSBmb3IgYXBw
bHlpbmcgYSBjaGFuZ2UgdG8gYSBsaW5lIGJ5IGhhbmRsZSBvciBudW1iZXIsCisgIC8vIHJldHVy
bmluZyB0aGUgbnVtYmVyIGFuZCBvcHRpb25hbGx5IHJlZ2lzdGVyaW5nIHRoZSBsaW5lIGFzCisg
IC8vIGNoYW5nZWQuCisgIGZ1bmN0aW9uIGNoYW5nZUxpbmUoY20sIGhhbmRsZSwgY2hhbmdlVHlw
ZSwgb3ApIHsKICAgICB2YXIgbm8gPSBoYW5kbGUsIGxpbmUgPSBoYW5kbGUsIGRvYyA9IGNtLmRv
YzsKICAgICBpZiAodHlwZW9mIGhhbmRsZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoZG9j
LCBjbGlwTGluZShkb2MsIGhhbmRsZSkpOwogICAgIGVsc2Ugbm8gPSBsaW5lTm8oaGFuZGxlKTsK
ICAgICBpZiAobm8gPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0gICAgaWYgKG9wKGxpbmUsIG5vKSkg
cmVnQ2hhbmdlKGNtLCBubywgbm8gKyAxKTsKLSAgICBlbHNlIHJldHVybiBudWxsOworICAgIGlm
IChvcChsaW5lLCBubykpIHJlZ0xpbmVDaGFuZ2UoY20sIG5vLCBjaGFuZ2VUeXBlKTsKICAgICBy
ZXR1cm4gbGluZTsKICAgfQogCisgIC8vIEhlbHBlciBmb3IgZGVsZXRpbmcgdGV4dCBuZWFyIHRo
ZSBzZWxlY3Rpb24ocyksIHVzZWQgdG8gaW1wbGVtZW50CisgIC8vIGJhY2tzcGFjZSwgZGVsZXRl
LCBhbmQgc2ltaWxhciBmdW5jdGlvbmFsaXR5LgorICBmdW5jdGlvbiBkZWxldGVOZWFyU2VsZWN0
aW9uKGNtLCBjb21wdXRlKSB7CisgICAgdmFyIHJhbmdlcyA9IGNtLmRvYy5zZWwucmFuZ2VzLCBr
aWxsID0gW107CisgICAgLy8gQnVpbGQgdXAgYSBzZXQgb2YgcmFuZ2VzIHRvIGtpbGwgZmlyc3Qs
IG1lcmdpbmcgb3ZlcmxhcHBpbmcKKyAgICAvLyByYW5nZXMuCisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciB0b0tpbGwgPSBjb21wdXRlKHJh
bmdlc1tpXSk7CisgICAgICB3aGlsZSAoa2lsbC5sZW5ndGggJiYgY21wKHRvS2lsbC5mcm9tLCBs
c3Qoa2lsbCkudG8pIDw9IDApIHsKKyAgICAgICAgdmFyIHJlcGxhY2VkID0ga2lsbC5wb3AoKTsK
KyAgICAgICAgaWYgKGNtcChyZXBsYWNlZC5mcm9tLCB0b0tpbGwuZnJvbSkgPCAwKSB7CisgICAg
ICAgICAgdG9LaWxsLmZyb20gPSByZXBsYWNlZC5mcm9tOworICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICB9CisgICAgICBraWxsLnB1c2godG9LaWxsKTsKKyAgICB9CisgICAgLy8g
TmV4dCwgcmVtb3ZlIHRob3NlIGFjdHVhbCByYW5nZXMuCisgICAgcnVuSW5PcChjbSwgZnVuY3Rp
b24oKSB7CisgICAgICBmb3IgKHZhciBpID0ga2lsbC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkK
KyAgICAgICAgcmVwbGFjZVJhbmdlKGNtLmRvYywgIiIsIGtpbGxbaV0uZnJvbSwga2lsbFtpXS50
bywgIitkZWxldGUiKTsKKyAgICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pOworICAgIH0pOwor
ICB9CisKKyAgLy8gVXNlZCBmb3IgaG9yaXpvbnRhbCByZWxhdGl2ZSBtb3Rpb24uIERpciBpcyAt
MSBvciAxIChsZWZ0IG9yCisgIC8vIHJpZ2h0KSwgdW5pdCBjYW4gYmUgImNoYXIiLCAiY29sdW1u
IiAobGlrZSBjaGFyLCBidXQgZG9lc24ndAorICAvLyBjcm9zcyBsaW5lIGJvdW5kYXJpZXMpLCAi
d29yZCIgKGFjcm9zcyBuZXh0IHdvcmQpLCBvciAiZ3JvdXAiICh0bworICAvLyB0aGUgc3RhcnQg
b2YgbmV4dCBncm91cCBvZiB3b3JkIG9yIG5vbi13b3JkLW5vbi13aGl0ZXNwYWNlCisgIC8vIGNo
YXJzKS4gVGhlIHZpc3VhbGx5IHBhcmFtIGNvbnRyb2xzIHdoZXRoZXIsIGluIHJpZ2h0LXRvLWxl
ZnQKKyAgLy8gdGV4dCwgZGlyZWN0aW9uIDEgbWVhbnMgdG8gbW92ZSB0b3dhcmRzIHRoZSBuZXh0
IGluZGV4IGluIHRoZQorICAvLyBzdHJpbmcsIG9yIHRvd2FyZHMgdGhlIGNoYXJhY3RlciB0byB0
aGUgcmlnaHQgb2YgdGhlIGN1cnJlbnQKKyAgLy8gcG9zaXRpb24uIFRoZSByZXN1bHRpbmcgcG9z
aXRpb24gd2lsbCBoYXZlIGEgaGl0U2lkZT10cnVlCisgIC8vIHByb3BlcnR5IGlmIGl0IHJlYWNo
ZWQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuCiAgIGZ1bmN0aW9uIGZpbmRQb3NIKGRvYywgcG9z
LCBkaXIsIHVuaXQsIHZpc3VhbGx5KSB7CiAgICAgdmFyIGxpbmUgPSBwb3MubGluZSwgY2ggPSBw
b3MuY2gsIG9yaWdEaXIgPSBkaXI7CiAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGlu
ZSk7CkBAIC0yODEwLDEzICszNzQwLDE1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgICBpZiAoZGlyIDwgMCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkgYnJlYWs7CiAg
ICAgICAgIHZhciBjdXIgPSBsaW5lT2JqLnRleHQuY2hhckF0KGNoKSB8fCAiXG4iOwogICAgICAg
ICB2YXIgdHlwZSA9IGlzV29yZENoYXIoY3VyKSA/ICJ3IgotICAgICAgICAgIDogIWdyb3VwID8g
bnVsbAotICAgICAgICAgIDogL1xzLy50ZXN0KGN1cikgPyBudWxsCisgICAgICAgICAgOiBncm91
cCAmJiBjdXIgPT0gIlxuIiA/ICJuIgorICAgICAgICAgIDogIWdyb3VwIHx8IC9ccy8udGVzdChj
dXIpID8gbnVsbAogICAgICAgICAgIDogInAiOworICAgICAgICBpZiAoZ3JvdXAgJiYgIWZpcnN0
ICYmICF0eXBlKSB0eXBlID0gInMiOwogICAgICAgICBpZiAoc2F3VHlwZSAmJiBzYXdUeXBlICE9
IHR5cGUpIHsKICAgICAgICAgICBpZiAoZGlyIDwgMCkge2RpciA9IDE7IG1vdmVPbmNlKCk7fQog
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKICAgICAgICAgaWYgKHR5cGUpIHNhd1R5cGUg
PSB0eXBlOwogICAgICAgICBpZiAoZGlyID4gMCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkgYnJlYWs7
CiAgICAgICB9CkBAIC0yODI2LDYgKzM3NTgsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKKyAgLy8gRm9yIHJlbGF0aXZlIHZl
cnRpY2FsIG1vdmVtZW50LiBEaXIgbWF5IGJlIC0xIG9yIDEuIFVuaXQgY2FuIGJlCisgIC8vICJw
YWdlIiBvciAibGluZSIuIFRoZSByZXN1bHRpbmcgcG9zaXRpb24gd2lsbCBoYXZlIGEgaGl0U2lk
ZT10cnVlCisgIC8vIHByb3BlcnR5IGlmIGl0IHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZG9jdW1l
bnQuCiAgIGZ1bmN0aW9uIGZpbmRQb3NWKGNtLCBwb3MsIGRpciwgdW5pdCkgewogICAgIHZhciBk
b2MgPSBjbS5kb2MsIHggPSBwb3MubGVmdCwgeTsKICAgICBpZiAodW5pdCA9PSAicGFnZSIpIHsK
QEAgLTI4NDMsNyArMzc3OCw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICAgIHJldHVybiB0YXJnZXQ7CiAgIH0KIAotICBmdW5jdGlvbiBmaW5kV29yZEF0KGxpbmUsIHBv
cykgeworICAvLyBGaW5kIHRoZSB3b3JkIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAoYXMgcmV0dXJu
ZWQgYnkgY29vcmRzQ2hhcikuCisgIGZ1bmN0aW9uIGZpbmRXb3JkQXQoZG9jLCBwb3MpIHsKKyAg
ICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBwb3MubGluZSkudGV4dDsKICAgICB2YXIgc3RhcnQg
PSBwb3MuY2gsIGVuZCA9IHBvcy5jaDsKICAgICBpZiAobGluZSkgewogICAgICAgaWYgKChwb3Mu
eFJlbCA8IDAgfHwgZW5kID09IGxpbmUubGVuZ3RoKSAmJiBzdGFydCkgLS1zdGFydDsgZWxzZSAr
K2VuZDsKQEAgLTI4NTQsMTcgKzM3OTEsMTggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgICB3aGlsZSAoc3RhcnQgPiAwICYmIGNoZWNrKGxpbmUuY2hhckF0KHN0YXJ0
IC0gMSkpKSAtLXN0YXJ0OwogICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGNoZWNr
KGxpbmUuY2hhckF0KGVuZCkpKSArK2VuZDsKICAgICB9Ci0gICAgcmV0dXJuIHtmcm9tOiBQb3Mo
cG9zLmxpbmUsIHN0YXJ0KSwgdG86IFBvcyhwb3MubGluZSwgZW5kKX07CisgICAgcmV0dXJuIG5l
dyBSYW5nZShQb3MocG9zLmxpbmUsIHN0YXJ0KSwgUG9zKHBvcy5saW5lLCBlbmQpKTsKICAgfQog
Ci0gIGZ1bmN0aW9uIHNlbGVjdExpbmUoY20sIGxpbmUpIHsKLSAgICBleHRlbmRTZWxlY3Rpb24o
Y20uZG9jLCBQb3MobGluZSwgMCksIGNsaXBQb3MoY20uZG9jLCBQb3MobGluZSArIDEsIDApKSk7
Ci0gIH0KKyAgLy8gRURJVE9SIE1FVEhPRFMKIAotICAvLyBQUk9UT1RZUEUKKyAgLy8gVGhlIHB1
YmxpY2x5IHZpc2libGUgQVBJLiBOb3RlIHRoYXQgbWV0aG9kT3AoZikgbWVhbnMKKyAgLy8gJ3dy
YXAgZiBpbiBhbiBvcGVyYXRpb24sIHBlcmZvcm1lZCBvbiBpdHMgYHRoaXNgIHBhcmFtZXRlcicu
CiAKLSAgLy8gVGhlIHB1YmxpY2x5IHZpc2libGUgQVBJLiBOb3RlIHRoYXQgb3BlcmF0aW9uKG51
bGwsIGYpIG1lYW5zCi0gIC8vICd3cmFwIGYgaW4gYW4gb3BlcmF0aW9uLCBwZXJmb3JtZWQgb24g
aXRzIGB0aGlzYCBwYXJhbWV0ZXInCisgIC8vIFRoaXMgaXMgbm90IHRoZSBjb21wbGV0ZSBzZXQg
b2YgZWRpdG9yIG1ldGhvZHMuIE1vc3Qgb2YgdGhlCisgIC8vIG1ldGhvZHMgZGVmaW5lZCBvbiB0
aGUgRG9jIHR5cGUgYXJlIGFsc28gaW5qZWN0ZWQgaW50bworICAvLyBDb2RlTWlycm9yLnByb3Rv
dHlwZSwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZAorICAvLyBjb252ZW5pZW5jZS4K
IAogICBDb2RlTWlycm9yLnByb3RvdHlwZSA9IHsKICAgICBjb25zdHJ1Y3RvcjogQ29kZU1pcnJv
ciwKQEAgLTI4OTMsMTQgKzM4MzEsMTQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICAgIH0KICAgICB9LAogCi0gICAgYWRkT3ZlcmxheTogb3BlcmF0aW9uKG51bGws
IGZ1bmN0aW9uKHNwZWMsIG9wdGlvbnMpIHsKKyAgICBhZGRPdmVybGF5OiBtZXRob2RPcChmdW5j
dGlvbihzcGVjLCBvcHRpb25zKSB7CiAgICAgICB2YXIgbW9kZSA9IHNwZWMudG9rZW4gPyBzcGVj
IDogQ29kZU1pcnJvci5nZXRNb2RlKHRoaXMub3B0aW9ucywgc3BlYyk7CiAgICAgICBpZiAobW9k
ZS5zdGFydFN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXlzIG1heSBub3QgYmUgc3RhdGVm
dWwuIik7CiAgICAgICB0aGlzLnN0YXRlLm92ZXJsYXlzLnB1c2goe21vZGU6IG1vZGUsIG1vZGVT
cGVjOiBzcGVjLCBvcGFxdWU6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcGFxdWV9KTsKICAgICAgIHRo
aXMuc3RhdGUubW9kZUdlbisrOwogICAgICAgcmVnQ2hhbmdlKHRoaXMpOwogICAgIH0pLAotICAg
IHJlbW92ZU92ZXJsYXk6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihzcGVjKSB7CisgICAgcmVt
b3ZlT3ZlcmxheTogbWV0aG9kT3AoZnVuY3Rpb24oc3BlYykgewogICAgICAgdmFyIG92ZXJsYXlz
ID0gdGhpcy5zdGF0ZS5vdmVybGF5czsKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3Zlcmxh
eXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgdmFyIGN1ciA9IG92ZXJsYXlzW2ldLm1vZGVTcGVj
OwpAQCAtMjkxMywxOCArMzg1MSwyOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICAgIH0KICAgICB9KSwKIAotICAgIGluZGVudExpbmU6IG9wZXJhdGlvbihudWxsLCBm
dW5jdGlvbihuLCBkaXIsIGFnZ3Jlc3NpdmUpIHsKKyAgICBpbmRlbnRMaW5lOiBtZXRob2RPcChm
dW5jdGlvbihuLCBkaXIsIGFnZ3Jlc3NpdmUpIHsKICAgICAgIGlmICh0eXBlb2YgZGlyICE9ICJz
dHJpbmciICYmIHR5cGVvZiBkaXIgIT0gIm51bWJlciIpIHsKICAgICAgICAgaWYgKGRpciA9PSBu
dWxsKSBkaXIgPSB0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQgPyAic21hcnQiIDogInByZXYiOwog
ICAgICAgICBlbHNlIGRpciA9IGRpciA/ICJhZGQiIDogInN1YnRyYWN0IjsKICAgICAgIH0KICAg
ICAgIGlmIChpc0xpbmUodGhpcy5kb2MsIG4pKSBpbmRlbnRMaW5lKHRoaXMsIG4sIGRpciwgYWdn
cmVzc2l2ZSk7CiAgICAgfSksCi0gICAgaW5kZW50U2VsZWN0aW9uOiBvcGVyYXRpb24obnVsbCwg
ZnVuY3Rpb24oaG93KSB7Ci0gICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsOwotICAgICAgaWYg
KHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXR1cm4gaW5kZW50TGluZSh0aGlzLCBzZWwuZnJv
bS5saW5lLCBob3cpOwotICAgICAgdmFyIGUgPSBzZWwudG8ubGluZSAtIChzZWwudG8uY2ggPyAw
IDogMSk7Ci0gICAgICBmb3IgKHZhciBpID0gc2VsLmZyb20ubGluZTsgaSA8PSBlOyArK2kpIGlu
ZGVudExpbmUodGhpcywgaSwgaG93KTsKKyAgICBpbmRlbnRTZWxlY3Rpb246IG1ldGhvZE9wKGZ1
bmN0aW9uKGhvdykgeworICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuZG9jLnNlbC5yYW5nZXMsIGVu
ZCA9IC0xOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldOworICAgICAgICBpZiAoIXJhbmdlLmVtcHR5
KCkpIHsKKyAgICAgICAgICB2YXIgc3RhcnQgPSBNYXRoLm1heChlbmQsIHJhbmdlLmZyb20oKS5s
aW5lKTsKKyAgICAgICAgICB2YXIgdG8gPSByYW5nZS50bygpOworICAgICAgICAgIGVuZCA9IE1h
dGgubWluKHRoaXMubGFzdExpbmUoKSwgdG8ubGluZSAtICh0by5jaCA/IDAgOiAxKSkgKyAxOwor
ICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydDsgaiA8IGVuZDsgKytqKQorICAgICAgICAgICAg
aW5kZW50TGluZSh0aGlzLCBqLCBob3cpOworICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmhlYWQu
bGluZSA+IGVuZCkgeworICAgICAgICAgIGluZGVudExpbmUodGhpcywgcmFuZ2UuaGVhZC5saW5l
LCBob3csIHRydWUpOworICAgICAgICAgIGVuZCA9IHJhbmdlLmhlYWQubGluZTsKKyAgICAgICAg
ICBpZiAoaSA9PSB0aGlzLmRvYy5zZWwucHJpbUluZGV4KSBlbnN1cmVDdXJzb3JWaXNpYmxlKHRo
aXMpOworICAgICAgICB9CisgICAgICB9CiAgICAgfSksCiAKICAgICAvLyBGZXRjaCB0aGUgcGFy
c2VyIHRva2VuIGZvciBhIGdpdmVuIGNoYXJhY3Rlci4gVXNlZnVsIGZvciBoYWNrcwpAQCAtMjkz
NywxMiArMzg4NiwxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUudGV4dCwgdGhpcy5vcHRpb25zLnRh
YlNpemUpOwogICAgICAgd2hpbGUgKHN0cmVhbS5wb3MgPCBwb3MuY2ggJiYgIXN0cmVhbS5lb2wo
KSkgewogICAgICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwotICAgICAgICB2YXIgc3R5
bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOworICAgICAgICB2YXIgc3R5bGUgPSByZWFk
VG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgICB9CiAgICAgICByZXR1cm4ge3N0YXJ0
OiBzdHJlYW0uc3RhcnQsCiAgICAgICAgICAgICAgIGVuZDogc3RyZWFtLnBvcywKICAgICAgICAg
ICAgICAgc3RyaW5nOiBzdHJlYW0uY3VycmVudCgpLAotICAgICAgICAgICAgICBjbGFzc05hbWU6
IHN0eWxlIHx8IG51bGwsIC8vIERlcHJlY2F0ZWQsIHVzZSAndHlwZScgaW5zdGVhZAogICAgICAg
ICAgICAgICB0eXBlOiBzdHlsZSB8fCBudWxsLAogICAgICAgICAgICAgICBzdGF0ZTogc3RhdGV9
OwogICAgIH0sCkBAIC0yOTY3LDExICszOTE1LDMxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgIH0sCiAKICAgICBnZXRIZWxwZXI6IGZ1bmN0aW9uKHBvcywgdHlwZSkg
ewotICAgICAgaWYgKCFoZWxwZXJzLmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm47CisgICAg
ICByZXR1cm4gdGhpcy5nZXRIZWxwZXJzKHBvcywgdHlwZSlbMF07CisgICAgfSwKKworICAgIGdl
dEhlbHBlcnM6IGZ1bmN0aW9uKHBvcywgdHlwZSkgeworICAgICAgdmFyIGZvdW5kID0gW107Cisg
ICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBoZWxwZXJzOwog
ICAgICAgdmFyIGhlbHAgPSBoZWxwZXJzW3R5cGVdLCBtb2RlID0gdGhpcy5nZXRNb2RlQXQocG9z
KTsKLSAgICAgIHJldHVybiBtb2RlW3R5cGVdICYmIGhlbHBbbW9kZVt0eXBlXV0gfHwKLSAgICAg
ICAgbW9kZS5oZWxwZXJUeXBlICYmIGhlbHBbbW9kZS5oZWxwZXJUeXBlXSB8fAotICAgICAgICBo
ZWxwW21vZGUubmFtZV07CisgICAgICBpZiAodHlwZW9mIG1vZGVbdHlwZV0gPT0gInN0cmluZyIp
IHsKKyAgICAgICAgaWYgKGhlbHBbbW9kZVt0eXBlXV0pIGZvdW5kLnB1c2goaGVscFttb2RlW3R5
cGVdXSk7CisgICAgICB9IGVsc2UgaWYgKG1vZGVbdHlwZV0pIHsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBtb2RlW3R5cGVdLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgdmFyIHZhbCA9
IGhlbHBbbW9kZVt0eXBlXVtpXV07CisgICAgICAgICAgaWYgKHZhbCkgZm91bmQucHVzaCh2YWwp
OworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKG1vZGUuaGVscGVyVHlwZSAmJiBoZWxwW21v
ZGUuaGVscGVyVHlwZV0pIHsKKyAgICAgICAgZm91bmQucHVzaChoZWxwW21vZGUuaGVscGVyVHlw
ZV0pOworICAgICAgfSBlbHNlIGlmIChoZWxwW21vZGUubmFtZV0pIHsKKyAgICAgICAgZm91bmQu
cHVzaChoZWxwW21vZGUubmFtZV0pOworICAgICAgfQorICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBoZWxwLl9nbG9iYWwubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIGN1ciA9IGhlbHAuX2ds
b2JhbFtpXTsKKyAgICAgICAgaWYgKGN1ci5wcmVkKG1vZGUsIHRoaXMpICYmIGluZGV4T2YoZm91
bmQsIGN1ci52YWwpID09IC0xKQorICAgICAgICAgIGZvdW5kLnB1c2goY3VyLnZhbCk7CisgICAg
ICB9CisgICAgICByZXR1cm4gZm91bmQ7CiAgICAgfSwKIAogICAgIGdldFN0YXRlQWZ0ZXI6IGZ1
bmN0aW9uKGxpbmUsIHByZWNpc2UpIHsKQEAgLTI5ODEsMTAgKzM5NDksMTAgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfSwKIAogICAgIGN1cnNvckNvb3JkczogZnVu
Y3Rpb24oc3RhcnQsIG1vZGUpIHsKLSAgICAgIHZhciBwb3MsIHNlbCA9IHRoaXMuZG9jLnNlbDsK
LSAgICAgIGlmIChzdGFydCA9PSBudWxsKSBwb3MgPSBzZWwuaGVhZDsKKyAgICAgIHZhciBwb3Ms
IHJhbmdlID0gdGhpcy5kb2Muc2VsLnByaW1hcnkoKTsKKyAgICAgIGlmIChzdGFydCA9PSBudWxs
KSBwb3MgPSByYW5nZS5oZWFkOwogICAgICAgZWxzZSBpZiAodHlwZW9mIHN0YXJ0ID09ICJvYmpl
Y3QiKSBwb3MgPSBjbGlwUG9zKHRoaXMuZG9jLCBzdGFydCk7Ci0gICAgICBlbHNlIHBvcyA9IHN0
YXJ0ID8gc2VsLmZyb20gOiBzZWwudG87CisgICAgICBlbHNlIHBvcyA9IHN0YXJ0ID8gcmFuZ2Uu
ZnJvbSgpIDogcmFuZ2UudG8oKTsKICAgICAgIHJldHVybiBjdXJzb3JDb29yZHModGhpcywgcG9z
LCBtb2RlIHx8ICJwYWdlIik7CiAgICAgfSwKIApAQCAtMzAwNiwxNSArMzk3NCwxNSBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGlmIChsaW5lIDwgdGhpcy5kb2Mu
Zmlyc3QpIGxpbmUgPSB0aGlzLmRvYy5maXJzdDsKICAgICAgIGVsc2UgaWYgKGxpbmUgPiBsYXN0
KSB7IGxpbmUgPSBsYXN0OyBlbmQgPSB0cnVlOyB9CiAgICAgICB2YXIgbGluZU9iaiA9IGdldExp
bmUodGhpcy5kb2MsIGxpbmUpOwotICAgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbSh0aGlzLCBn
ZXRMaW5lKHRoaXMuZG9jLCBsaW5lKSwge3RvcDogMCwgbGVmdDogMH0sIG1vZGUgfHwgInBhZ2Ui
KS50b3AgKwotICAgICAgICAoZW5kID8gbGluZU9iai5oZWlnaHQgOiAwKTsKKyAgICAgIHJldHVy
biBpbnRvQ29vcmRTeXN0ZW0odGhpcywgbGluZU9iaiwge3RvcDogMCwgbGVmdDogMH0sIG1vZGUg
fHwgInBhZ2UiKS50b3AgKworICAgICAgICAoZW5kID8gdGhpcy5kb2MuaGVpZ2h0IC0gaGVpZ2h0
QXRMaW5lKGxpbmVPYmopIDogMCk7CiAgICAgfSwKIAogICAgIGRlZmF1bHRUZXh0SGVpZ2h0OiBm
dW5jdGlvbigpIHsgcmV0dXJuIHRleHRIZWlnaHQodGhpcy5kaXNwbGF5KTsgfSwKICAgICBkZWZh
dWx0Q2hhcldpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNoYXJXaWR0aCh0aGlzLmRpc3BsYXkp
OyB9LAogCi0gICAgc2V0R3V0dGVyTWFya2VyOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24obGlu
ZSwgZ3V0dGVySUQsIHZhbHVlKSB7Ci0gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBsaW5l
LCBmdW5jdGlvbihsaW5lKSB7CisgICAgc2V0R3V0dGVyTWFya2VyOiBtZXRob2RPcChmdW5jdGlv
bihsaW5lLCBndXR0ZXJJRCwgdmFsdWUpIHsKKyAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMs
IGxpbmUsICJndXR0ZXIiLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgIHZhciBtYXJrZXJzID0g
bGluZS5ndXR0ZXJNYXJrZXJzIHx8IChsaW5lLmd1dHRlck1hcmtlcnMgPSB7fSk7CiAgICAgICAg
IG1hcmtlcnNbZ3V0dGVySURdID0gdmFsdWU7CiAgICAgICAgIGlmICghdmFsdWUgJiYgaXNFbXB0
eShtYXJrZXJzKSkgbGluZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsKQEAgLTMwMjIsMjAgKzM5OTAs
MjAgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB9KTsKICAgICB9
KSwKIAotICAgIGNsZWFyR3V0dGVyOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oZ3V0dGVySUQp
IHsKKyAgICBjbGVhckd1dHRlcjogbWV0aG9kT3AoZnVuY3Rpb24oZ3V0dGVySUQpIHsKICAgICAg
IHZhciBjbSA9IHRoaXMsIGRvYyA9IGNtLmRvYywgaSA9IGRvYy5maXJzdDsKICAgICAgIGRvYy5p
dGVyKGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgaWYgKGxpbmUuZ3V0dGVyTWFya2VycyAmJiBs
aW5lLmd1dHRlck1hcmtlcnNbZ3V0dGVySURdKSB7CiAgICAgICAgICAgbGluZS5ndXR0ZXJNYXJr
ZXJzW2d1dHRlcklEXSA9IG51bGw7Ci0gICAgICAgICAgcmVnQ2hhbmdlKGNtLCBpLCBpICsgMSk7
CisgICAgICAgICAgcmVnTGluZUNoYW5nZShjbSwgaSwgImd1dHRlciIpOwogICAgICAgICAgIGlm
IChpc0VtcHR5KGxpbmUuZ3V0dGVyTWFya2VycykpIGxpbmUuZ3V0dGVyTWFya2VycyA9IG51bGw7
CiAgICAgICAgIH0KICAgICAgICAgKytpOwogICAgICAgfSk7CiAgICAgfSksCiAKLSAgICBhZGRM
aW5lQ2xhc3M6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihoYW5kbGUsIHdoZXJlLCBjbHMpIHsK
LSAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgZnVuY3Rpb24obGluZSkgewor
ICAgIGFkZExpbmVDbGFzczogbWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCB3aGVyZSwgY2xzKSB7
CisgICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBoYW5kbGUsICJjbGFzcyIsIGZ1bmN0aW9u
KGxpbmUpIHsKICAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSAidGV4dCIgPyAidGV4dENsYXNz
IiA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNzIiA6ICJ3cmFwQ2xhc3MiOwogICAg
ICAgICBpZiAoIWxpbmVbcHJvcF0pIGxpbmVbcHJvcF0gPSBjbHM7CiAgICAgICAgIGVsc2UgaWYg
KG5ldyBSZWdFeHAoIig/Ol58XFxzKSIgKyBjbHMgKyAiKD86JHxcXHMpIikudGVzdChsaW5lW3By
b3BdKSkgcmV0dXJuIGZhbHNlOwpAQCAtMzA0NCw4ICs0MDEyLDggQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB9KTsKICAgICB9KSwKIAotICAgIHJlbW92ZUxpbmVD
bGFzczogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykgewotICAg
ICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCBmdW5jdGlvbihsaW5lKSB7CisgICAg
cmVtb3ZlTGluZUNsYXNzOiBtZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIHdoZXJlLCBjbHMpIHsK
KyAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgImNsYXNzIiwgZnVuY3Rpb24o
bGluZSkgewogICAgICAgICB2YXIgcHJvcCA9IHdoZXJlID09ICJ0ZXh0IiA/ICJ0ZXh0Q2xhc3Mi
IDogd2hlcmUgPT0gImJhY2tncm91bmQiID8gImJnQ2xhc3MiIDogIndyYXBDbGFzcyI7CiAgICAg
ICAgIHZhciBjdXIgPSBsaW5lW3Byb3BdOwogICAgICAgICBpZiAoIWN1cikgcmV0dXJuIGZhbHNl
OwpAQCAtMzA2MCw3ICs0MDI4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICB9KTsKICAgICB9KSwKIAotICAgIGFkZExpbmVXaWRnZXQ6IG9wZXJhdGlvbihudWxs
LCBmdW5jdGlvbihoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKKyAgICBhZGRMaW5lV2lkZ2V0OiBt
ZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKICAgICAgIHJldHVybiBh
ZGRMaW5lV2lkZ2V0KHRoaXMsIGhhbmRsZSwgbm9kZSwgb3B0aW9ucyk7CiAgICAgfSksCiAKQEAg
LTMwODEsNyArNDA0OSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICB3aWRnZXRzOiBsaW5lLndpZGdldHN9OwogICAgIH0sCiAKLSAgICBnZXRWaWV3
cG9ydDogZnVuY3Rpb24oKSB7IHJldHVybiB7ZnJvbTogdGhpcy5kaXNwbGF5LnNob3dpbmdGcm9t
LCB0bzogdGhpcy5kaXNwbGF5LnNob3dpbmdUb307fSwKKyAgICBnZXRWaWV3cG9ydDogZnVuY3Rp
b24oKSB7IHJldHVybiB7ZnJvbTogdGhpcy5kaXNwbGF5LnZpZXdGcm9tLCB0bzogdGhpcy5kaXNw
bGF5LnZpZXdUb307fSwKIAogICAgIGFkZFdpZGdldDogZnVuY3Rpb24ocG9zLCBub2RlLCBzY3Jv
bGwsIHZlcnQsIGhvcml6KSB7CiAgICAgICB2YXIgZGlzcGxheSA9IHRoaXMuZGlzcGxheTsKQEAg
LTMxMTYsOSArNDA4NCwxNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgICAgc2Nyb2xsSW50b1ZpZXcodGhpcywgbGVmdCwgdG9wLCBsZWZ0ICsgbm9kZS5vZmZzZXRX
aWR0aCwgdG9wICsgbm9kZS5vZmZzZXRIZWlnaHQpOwogICAgIH0sCiAKLSAgICB0cmlnZ2VyT25L
ZXlEb3duOiBvcGVyYXRpb24obnVsbCwgb25LZXlEb3duKSwKKyAgICB0cmlnZ2VyT25LZXlEb3du
OiBtZXRob2RPcChvbktleURvd24pLAorICAgIHRyaWdnZXJPbktleVByZXNzOiBtZXRob2RPcChv
bktleVByZXNzKSwKKyAgICB0cmlnZ2VyT25LZXlVcDogbWV0aG9kT3Aob25LZXlVcCksCiAKLSAg
ICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7cmV0dXJuIGNvbW1hbmRzW2NtZF0odGhpcyk7
fSwKKyAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7CisgICAgICBpZiAoY29tbWFuZHMu
aGFzT3duUHJvcGVydHkoY21kKSkKKyAgICAgICAgcmV0dXJuIGNvbW1hbmRzW2NtZF0odGhpcyk7
CisgICAgfSwKIAogICAgIGZpbmRQb3NIOiBmdW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIHZp
c3VhbGx5KSB7CiAgICAgICB2YXIgZGlyID0gMTsKQEAgLTMxMzAsMjAgKzQxMDMsMjUgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICByZXR1cm4gY3VyOwogICAgIH0s
CiAKLSAgICBtb3ZlSDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRpciwgdW5pdCkgewotICAg
ICAgdmFyIHNlbCA9IHRoaXMuZG9jLnNlbCwgcG9zOwotICAgICAgaWYgKHNlbC5zaGlmdCB8fCBz
ZWwuZXh0ZW5kIHx8IHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKQotICAgICAgICBwb3MgPSBmaW5k
UG9zSCh0aGlzLmRvYywgc2VsLmhlYWQsIGRpciwgdW5pdCwgdGhpcy5vcHRpb25zLnJ0bE1vdmVW
aXN1YWxseSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHBvcyA9IGRpciA8IDAgPyBzZWwuZnJvbSA6
IHNlbC50bzsKLSAgICAgIGV4dGVuZFNlbGVjdGlvbih0aGlzLmRvYywgcG9zLCBwb3MsIGRpcik7
CisgICAgbW92ZUg6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkgeworICAgICAgdmFyIGNt
ID0gdGhpczsKKyAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgewor
ICAgICAgICBpZiAoY20uZGlzcGxheS5zaGlmdCB8fCBjbS5kb2MuZXh0ZW5kIHx8IHJhbmdlLmVt
cHR5KCkpCisgICAgICAgICAgcmV0dXJuIGZpbmRQb3NIKGNtLmRvYywgcmFuZ2UuaGVhZCwgZGly
LCB1bml0LCBjbS5vcHRpb25zLnJ0bE1vdmVWaXN1YWxseSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICByZXR1cm4gZGlyIDwgMCA/IHJhbmdlLmZyb20oKSA6IHJhbmdlLnRvKCk7CisgICAgICB9
LCBzZWxfbW92ZSk7CiAgICAgfSksCiAKLSAgICBkZWxldGVIOiBvcGVyYXRpb24obnVsbCwgZnVu
Y3Rpb24oZGlyLCB1bml0KSB7Ci0gICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsOwotICAgICAg
aWYgKCFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmVwbGFjZVJhbmdlKHRoaXMuZG9jLCAiIiwg
c2VsLmZyb20sIHNlbC50bywgIitkZWxldGUiKTsKLSAgICAgIGVsc2UgcmVwbGFjZVJhbmdlKHRo
aXMuZG9jLCAiIiwgc2VsLmZyb20sIGZpbmRQb3NIKHRoaXMuZG9jLCBzZWwuaGVhZCwgZGlyLCB1
bml0LCBmYWxzZSksICIrZGVsZXRlIik7Ci0gICAgICB0aGlzLmN1ck9wLnVzZXJTZWxDaGFuZ2Ug
PSB0cnVlOworICAgIGRlbGV0ZUg6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkgeworICAg
ICAgdmFyIHNlbCA9IHRoaXMuZG9jLnNlbCwgZG9jID0gdGhpcy5kb2M7CisgICAgICBpZiAoc2Vs
LnNvbWV0aGluZ1NlbGVjdGVkKCkpCisgICAgICAgIGRvYy5yZXBsYWNlU2VsZWN0aW9uKCIiLCBu
dWxsLCAiK2RlbGV0ZSIpOworICAgICAgZWxzZQorICAgICAgICBkZWxldGVOZWFyU2VsZWN0aW9u
KHRoaXMsIGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgICAgdmFyIG90aGVyID0gZmluZFBvc0go
ZG9jLCByYW5nZS5oZWFkLCBkaXIsIHVuaXQsIGZhbHNlKTsKKyAgICAgICAgICByZXR1cm4gZGly
IDwgMCA/IHtmcm9tOiBvdGhlciwgdG86IHJhbmdlLmhlYWR9IDoge2Zyb206IHJhbmdlLmhlYWQs
IHRvOiBvdGhlcn07CisgICAgICAgIH0pOwogICAgIH0pLAogCiAgICAgZmluZFBvc1Y6IGZ1bmN0
aW9uKGZyb20sIGFtb3VudCwgdW5pdCwgZ29hbENvbHVtbikgewpAQCAtMzE1OSwyOCArNDEzNywz
OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiBjdXI7
CiAgICAgfSwKIAotICAgIG1vdmVWOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oZGlyLCB1bml0
KSB7Ci0gICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsOwotICAgICAgdmFyIHBvcyA9IGN1cnNv
ckNvb3Jkcyh0aGlzLCBzZWwuaGVhZCwgImRpdiIpOwotICAgICAgaWYgKHNlbC5nb2FsQ29sdW1u
ICE9IG51bGwpIHBvcy5sZWZ0ID0gc2VsLmdvYWxDb2x1bW47Ci0gICAgICB2YXIgdGFyZ2V0ID0g
ZmluZFBvc1YodGhpcywgcG9zLCBkaXIsIHVuaXQpOwotCi0gICAgICBpZiAodW5pdCA9PSAicGFn
ZSIpIGFkZFRvU2Nyb2xsUG9zKHRoaXMsIDAsIGNoYXJDb29yZHModGhpcywgdGFyZ2V0LCAiZGl2
IikudG9wIC0gcG9zLnRvcCk7Ci0gICAgICBleHRlbmRTZWxlY3Rpb24odGhpcy5kb2MsIHRhcmdl
dCwgdGFyZ2V0LCBkaXIpOwotICAgICAgc2VsLmdvYWxDb2x1bW4gPSBwb3MubGVmdDsKKyAgICBt
b3ZlVjogbWV0aG9kT3AoZnVuY3Rpb24oZGlyLCB1bml0KSB7CisgICAgICB2YXIgY20gPSB0aGlz
LCBkb2MgPSB0aGlzLmRvYywgZ29hbHMgPSBbXTsKKyAgICAgIHZhciBjb2xsYXBzZSA9ICFjbS5k
aXNwbGF5LnNoaWZ0ICYmICFkb2MuZXh0ZW5kICYmIGRvYy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQo
KTsKKyAgICAgIGRvYy5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAg
ICAgaWYgKGNvbGxhcHNlKQorICAgICAgICAgIHJldHVybiBkaXIgPCAwID8gcmFuZ2UuZnJvbSgp
IDogcmFuZ2UudG8oKTsKKyAgICAgICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHMoY20sIHJh
bmdlLmhlYWQsICJkaXYiKTsKKyAgICAgICAgaWYgKHJhbmdlLmdvYWxDb2x1bW4gIT0gbnVsbCkg
aGVhZFBvcy5sZWZ0ID0gcmFuZ2UuZ29hbENvbHVtbjsKKyAgICAgICAgZ29hbHMucHVzaChoZWFk
UG9zLmxlZnQpOworICAgICAgICB2YXIgcG9zID0gZmluZFBvc1YoY20sIGhlYWRQb3MsIGRpciwg
dW5pdCk7CisgICAgICAgIGlmICh1bml0ID09ICJwYWdlIiAmJiByYW5nZSA9PSBkb2Muc2VsLnBy
aW1hcnkoKSkKKyAgICAgICAgICBhZGRUb1Njcm9sbFBvcyhjbSwgbnVsbCwgY2hhckNvb3Jkcyhj
bSwgcG9zLCAiZGl2IikudG9wIC0gaGVhZFBvcy50b3ApOworICAgICAgICByZXR1cm4gcG9zOwor
ICAgICAgfSwgc2VsX21vdmUpOworICAgICAgaWYgKGdvYWxzLmxlbmd0aCkgZm9yICh2YXIgaSA9
IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgZG9jLnNlbC5yYW5n
ZXNbaV0uZ29hbENvbHVtbiA9IGdvYWxzW2ldOwogICAgIH0pLAogCiAgICAgdG9nZ2xlT3Zlcndy
aXRlOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUg
PT0gdGhpcy5zdGF0ZS5vdmVyd3JpdGUpIHJldHVybjsKICAgICAgIGlmICh0aGlzLnN0YXRlLm92
ZXJ3cml0ZSA9ICF0aGlzLnN0YXRlLm92ZXJ3cml0ZSkKLSAgICAgICAgdGhpcy5kaXNwbGF5LmN1
cnNvci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI7CisgICAgICAgIGFkZENs
YXNzKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsICJDb2RlTWlycm9yLW92ZXJ3cml0ZSIpOwogICAg
ICAgZWxzZQotICAgICAgICB0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSA9IHRoaXMuZGlz
cGxheS5jdXJzb3IuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLW92ZXJ3cml0ZSIsICIi
KTsKKyAgICAgICAgcm1DbGFzcyh0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LCAiQ29kZU1pcnJvci1v
dmVyd3JpdGUiKTsKKworICAgICAgc2lnbmFsKHRoaXMsICJvdmVyd3JpdGVUb2dnbGUiLCB0aGlz
LCB0aGlzLnN0YXRlLm92ZXJ3cml0ZSk7CiAgICAgfSwKLSAgICBoYXNGb2N1czogZnVuY3Rpb24o
KSB7IHJldHVybiB0aGlzLnN0YXRlLmZvY3VzZWQ7IH0sCisgICAgaGFzRm9jdXM6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gYWN0aXZlRWx0KCkgPT0gdGhpcy5kaXNwbGF5LmlucHV0OyB9LAogCi0gICAg
c2Nyb2xsVG86IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbih4LCB5KSB7Ci0gICAgICB1cGRhdGVT
Y3JvbGxQb3ModGhpcywgeCwgeSk7CisgICAgc2Nyb2xsVG86IG1ldGhvZE9wKGZ1bmN0aW9uKHgs
IHkpIHsKKyAgICAgIGlmICh4ICE9IG51bGwgfHwgeSAhPSBudWxsKSByZXNvbHZlU2Nyb2xsVG9Q
b3ModGhpcyk7CisgICAgICBpZiAoeCAhPSBudWxsKSB0aGlzLmN1ck9wLnNjcm9sbExlZnQgPSB4
OworICAgICAgaWYgKHkgIT0gbnVsbCkgdGhpcy5jdXJPcC5zY3JvbGxUb3AgPSB5OwogICAgIH0p
LAogICAgIGdldFNjcm9sbEluZm86IGZ1bmN0aW9uKCkgewogICAgICAgdmFyIHNjcm9sbGVyID0g
dGhpcy5kaXNwbGF5LnNjcm9sbGVyLCBjbyA9IHNjcm9sbGVyQ3V0T2ZmOwpAQCAtMzE4OSw1NCAr
NDE3OCw2MiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgY2xpZW50SGVpZ2h0OiBzY3JvbGxlci5jbGllbnRIZWlnaHQgLSBjbywgY2xpZW50V2lkdGg6
IHNjcm9sbGVyLmNsaWVudFdpZHRoIC0gY299OwogICAgIH0sCiAKLSAgICBzY3JvbGxJbnRvVmll
dzogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHJhbmdlLCBtYXJnaW4pIHsKLSAgICAgIGlmIChy
YW5nZSA9PSBudWxsKSByYW5nZSA9IHtmcm9tOiB0aGlzLmRvYy5zZWwuaGVhZCwgdG86IG51bGx9
OwotICAgICAgZWxzZSBpZiAodHlwZW9mIHJhbmdlID09ICJudW1iZXIiKSByYW5nZSA9IHtmcm9t
OiBQb3MocmFuZ2UsIDApLCB0bzogbnVsbH07Ci0gICAgICBlbHNlIGlmIChyYW5nZS5mcm9tID09
IG51bGwpIHJhbmdlID0ge2Zyb206IHJhbmdlLCB0bzogbnVsbH07CisgICAgc2Nyb2xsSW50b1Zp
ZXc6IG1ldGhvZE9wKGZ1bmN0aW9uKHJhbmdlLCBtYXJnaW4pIHsKKyAgICAgIGlmIChyYW5nZSA9
PSBudWxsKSB7CisgICAgICAgIHJhbmdlID0ge2Zyb206IHRoaXMuZG9jLnNlbC5wcmltYXJ5KCku
aGVhZCwgdG86IG51bGx9OworICAgICAgICBpZiAobWFyZ2luID09IG51bGwpIG1hcmdpbiA9IHRo
aXMub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW47CisgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBy
YW5nZSA9PSAibnVtYmVyIikgeworICAgICAgICByYW5nZSA9IHtmcm9tOiBQb3MocmFuZ2UsIDAp
LCB0bzogbnVsbH07CisgICAgICB9IGVsc2UgaWYgKHJhbmdlLmZyb20gPT0gbnVsbCkgeworICAg
ICAgICByYW5nZSA9IHtmcm9tOiByYW5nZSwgdG86IG51bGx9OworICAgICAgfQogICAgICAgaWYg
KCFyYW5nZS50bykgcmFuZ2UudG8gPSByYW5nZS5mcm9tOwotICAgICAgaWYgKCFtYXJnaW4pIG1h
cmdpbiA9IDA7CisgICAgICByYW5nZS5tYXJnaW4gPSBtYXJnaW4gfHwgMDsKIAotICAgICAgdmFy
IGNvb3JkcyA9IHJhbmdlOwogICAgICAgaWYgKHJhbmdlLmZyb20ubGluZSAhPSBudWxsKSB7Ci0g
ICAgICAgIHRoaXMuY3VyT3Auc2Nyb2xsVG9Qb3MgPSB7ZnJvbTogcmFuZ2UuZnJvbSwgdG86IHJh
bmdlLnRvLCBtYXJnaW46IG1hcmdpbn07Ci0gICAgICAgIGNvb3JkcyA9IHtmcm9tOiBjdXJzb3JD
b29yZHModGhpcywgcmFuZ2UuZnJvbSksCi0gICAgICAgICAgICAgICAgICB0bzogY3Vyc29yQ29v
cmRzKHRoaXMsIHJhbmdlLnRvKX07Ci0gICAgICB9Ci0gICAgICB2YXIgc1BvcyA9IGNhbGN1bGF0
ZVNjcm9sbFBvcyh0aGlzLCBNYXRoLm1pbihjb29yZHMuZnJvbS5sZWZ0LCBjb29yZHMudG8ubGVm
dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihjb29yZHMu
ZnJvbS50b3AsIGNvb3Jkcy50by50b3ApIC0gbWFyZ2luLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWF0aC5tYXgoY29vcmRzLmZyb20ucmlnaHQsIGNvb3Jkcy50by5yaWdo
dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChjb29yZHMu
ZnJvbS5ib3R0b20sIGNvb3Jkcy50by5ib3R0b20pICsgbWFyZ2luKTsKLSAgICAgIHVwZGF0ZVNj
cm9sbFBvcyh0aGlzLCBzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTsKKyAgICAgICAg
cmVzb2x2ZVNjcm9sbFRvUG9zKHRoaXMpOworICAgICAgICB0aGlzLmN1ck9wLnNjcm9sbFRvUG9z
ID0gcmFuZ2U7CisgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgc1BvcyA9IGNhbGN1bGF0ZVNj
cm9sbFBvcyh0aGlzLCBNYXRoLm1pbihyYW5nZS5mcm9tLmxlZnQsIHJhbmdlLnRvLmxlZnQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihyYW5nZS5mcm9t
LnRvcCwgcmFuZ2UudG8udG9wKSAtIHJhbmdlLm1hcmdpbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWF0aC5tYXgocmFuZ2UuZnJvbS5yaWdodCwgcmFuZ2UudG8ucmln
aHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChyYW5n
ZS5mcm9tLmJvdHRvbSwgcmFuZ2UudG8uYm90dG9tKSArIHJhbmdlLm1hcmdpbik7CisgICAgICAg
IHRoaXMuc2Nyb2xsVG8oc1Bvcy5zY3JvbGxMZWZ0LCBzUG9zLnNjcm9sbFRvcCk7CisgICAgICB9
CiAgICAgfSksCiAKLSAgICBzZXRTaXplOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24od2lkdGgs
IGhlaWdodCkgeworICAgIHNldFNpemU6IG1ldGhvZE9wKGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQp
IHsKICAgICAgIGZ1bmN0aW9uIGludGVycHJldCh2YWwpIHsKICAgICAgICAgcmV0dXJuIHR5cGVv
ZiB2YWwgPT0gIm51bWJlciIgfHwgL15cZCskLy50ZXN0KFN0cmluZyh2YWwpKSA/IHZhbCArICJw
eCIgOiB2YWw7CiAgICAgICB9CiAgICAgICBpZiAod2lkdGggIT0gbnVsbCkgdGhpcy5kaXNwbGF5
LndyYXBwZXIuc3R5bGUud2lkdGggPSBpbnRlcnByZXQod2lkdGgpOwogICAgICAgaWYgKGhlaWdo
dCAhPSBudWxsKSB0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQgPSBpbnRlcnByZXQo
aGVpZ2h0KTsKLSAgICAgIGlmICh0aGlzLm9wdGlvbnMubGluZVdyYXBwaW5nKQotICAgICAgICB0
aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGggPSB0aGlzLmRpc3BsYXkubWVhc3Vy
ZUxpbmVDYWNoZVBvcyA9IDA7CisgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZykg
Y2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZSh0aGlzKTsKICAgICAgIHRoaXMuY3VyT3AuZm9yY2VV
cGRhdGUgPSB0cnVlOworICAgICAgc2lnbmFsKHRoaXMsICJyZWZyZXNoIiwgdGhpcyk7CiAgICAg
fSksCiAKICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBydW5Jbk9wKHRoaXMsIGYp
O30sCiAKLSAgICByZWZyZXNoOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oKSB7Ci0gICAgICB2
YXIgYmFkSGVpZ2h0ID0gdGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgPT0gbnVsbDsKLSAg
ICAgIGNsZWFyQ2FjaGVzKHRoaXMpOwotICAgICAgdXBkYXRlU2Nyb2xsUG9zKHRoaXMsIHRoaXMu
ZG9jLnNjcm9sbExlZnQsIHRoaXMuZG9jLnNjcm9sbFRvcCk7CisgICAgcmVmcmVzaDogbWV0aG9k
T3AoZnVuY3Rpb24oKSB7CisgICAgICB2YXIgb2xkSGVpZ2h0ID0gdGhpcy5kaXNwbGF5LmNhY2hl
ZFRleHRIZWlnaHQ7CiAgICAgICByZWdDaGFuZ2UodGhpcyk7Ci0gICAgICBpZiAoYmFkSGVpZ2h0
KSBlc3RpbWF0ZUxpbmVIZWlnaHRzKHRoaXMpOworICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0
ZSA9IHRydWU7CisgICAgICBjbGVhckNhY2hlcyh0aGlzKTsKKyAgICAgIHRoaXMuc2Nyb2xsVG8o
dGhpcy5kb2Muc2Nyb2xsTGVmdCwgdGhpcy5kb2Muc2Nyb2xsVG9wKTsKKyAgICAgIHVwZGF0ZUd1
dHRlclNwYWNlKHRoaXMpOworICAgICAgaWYgKG9sZEhlaWdodCA9PSBudWxsIHx8IE1hdGguYWJz
KG9sZEhlaWdodCAtIHRleHRIZWlnaHQodGhpcy5kaXNwbGF5KSkgPiAuNSkKKyAgICAgICAgZXN0
aW1hdGVMaW5lSGVpZ2h0cyh0aGlzKTsKKyAgICAgIHNpZ25hbCh0aGlzLCAicmVmcmVzaCIsIHRo
aXMpOwogICAgIH0pLAogCi0gICAgc3dhcERvYzogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRv
YykgeworICAgIHN3YXBEb2M6IG1ldGhvZE9wKGZ1bmN0aW9uKGRvYykgewogICAgICAgdmFyIG9s
ZCA9IHRoaXMuZG9jOwogICAgICAgb2xkLmNtID0gbnVsbDsKICAgICAgIGF0dGFjaERvYyh0aGlz
LCBkb2MpOwogICAgICAgY2xlYXJDYWNoZXModGhpcyk7Ci0gICAgICByZXNldElucHV0KHRoaXMs
IHRydWUpOwotICAgICAgdXBkYXRlU2Nyb2xsUG9zKHRoaXMsIGRvYy5zY3JvbGxMZWZ0LCBkb2Mu
c2Nyb2xsVG9wKTsKKyAgICAgIHJlc2V0SW5wdXQodGhpcyk7CisgICAgICB0aGlzLnNjcm9sbFRv
KGRvYy5zY3JvbGxMZWZ0LCBkb2Muc2Nyb2xsVG9wKTsKICAgICAgIHNpZ25hbExhdGVyKHRoaXMs
ICJzd2FwRG9jIiwgdGhpcywgb2xkKTsKICAgICAgIHJldHVybiBvbGQ7CiAgICAgfSksCkBAIC0z
MjUwLDEwICs0MjQ3LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAg
IC8vIE9QVElPTiBERUZBVUxUUwogCi0gIHZhciBvcHRpb25IYW5kbGVycyA9IENvZGVNaXJyb3Iu
b3B0aW9uSGFuZGxlcnMgPSB7fTsKLQogICAvLyBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9w
dGlvbnMuCiAgIHZhciBkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHMgPSB7fTsKKyAgLy8g
RnVuY3Rpb25zIHRvIHJ1biB3aGVuIG9wdGlvbnMgYXJlIGNoYW5nZWQuCisgIHZhciBvcHRpb25I
YW5kbGVycyA9IENvZGVNaXJyb3Iub3B0aW9uSGFuZGxlcnMgPSB7fTsKIAogICBmdW5jdGlvbiBv
cHRpb24obmFtZSwgZGVmbHQsIGhhbmRsZSwgbm90T25Jbml0KSB7CiAgICAgQ29kZU1pcnJvci5k
ZWZhdWx0c1tuYW1lXSA9IGRlZmx0OwpAQCAtMzI2MSw2ICs0MjU4LDcgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBub3RPbkluaXQgPyBmdW5jdGlvbihjbSwgdmFs
LCBvbGQpIHtpZiAob2xkICE9IEluaXQpIGhhbmRsZShjbSwgdmFsLCBvbGQpO30gOiBoYW5kbGU7
CiAgIH0KIAorICAvLyBQYXNzZWQgdG8gb3B0aW9uIGhhbmRsZXJzIHdoZW4gdGhlcmUgaXMgbm8g
b2xkIHZhbHVlLgogICB2YXIgSW5pdCA9IENvZGVNaXJyb3IuSW5pdCA9IHt0b1N0cmluZzogZnVu
Y3Rpb24oKXtyZXR1cm4gIkNvZGVNaXJyb3IuSW5pdCI7fX07CiAKICAgLy8gVGhlc2UgdHdvIGFy
ZSwgb24gaW5pdCwgY2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yIGJlY2F1c2UgdGhleQpAQCAt
MzI3Nyw3ICs0Mjc1LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIG9w
dGlvbigiaW5kZW50V2l0aFRhYnMiLCBmYWxzZSk7CiAgIG9wdGlvbigic21hcnRJbmRlbnQiLCB0
cnVlKTsKICAgb3B0aW9uKCJ0YWJTaXplIiwgNCwgZnVuY3Rpb24oY20pIHsKLSAgICBsb2FkTW9k
ZShjbSk7CisgICAgcmVzZXRNb2RlU3RhdGUoY20pOwogICAgIGNsZWFyQ2FjaGVzKGNtKTsKICAg
ICByZWdDaGFuZ2UoY20pOwogICB9LCB0cnVlKTsKQEAgLTMyOTcsOSArNDI5NSw2IEBAIHdpbmRv
dy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBvcHRpb24oImtleU1hcCIsICJkZWZhdWx0
Iiwga2V5TWFwQ2hhbmdlZCk7CiAgIG9wdGlvbigiZXh0cmFLZXlzIiwgbnVsbCk7CiAKLSAgb3B0
aW9uKCJvbktleUV2ZW50IiwgbnVsbCk7Ci0gIG9wdGlvbigib25EcmFnRXZlbnQiLCBudWxsKTsK
LQogICBvcHRpb24oImxpbmVXcmFwcGluZyIsIGZhbHNlLCB3cmFwcGluZ0NoYW5nZWQsIHRydWUp
OwogICBvcHRpb24oImd1dHRlcnMiLCBbXSwgZnVuY3Rpb24oY20pIHsKICAgICBzZXRHdXR0ZXJz
Rm9yTGluZU51bWJlcnMoY20ub3B0aW9ucyk7CkBAIC0zMzI3LDkgKzQzMjIsMTAgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBjbS5kaXNwbGF5LmRpc2FibGVkID0g
dHJ1ZTsKICAgICB9IGVsc2UgewogICAgICAgY20uZGlzcGxheS5kaXNhYmxlZCA9IGZhbHNlOwot
ICAgICAgaWYgKCF2YWwpIHJlc2V0SW5wdXQoY20sIHRydWUpOworICAgICAgaWYgKCF2YWwpIHJl
c2V0SW5wdXQoY20pOwogICAgIH0KICAgfSk7CisgIG9wdGlvbigiZGlzYWJsZUlucHV0IiwgZmFs
c2UsIGZ1bmN0aW9uKGNtLCB2YWwpIHtpZiAoIXZhbCkgcmVzZXRJbnB1dChjbSk7fSwgdHJ1ZSk7
CiAgIG9wdGlvbigiZHJhZ0Ryb3AiLCB0cnVlKTsKIAogICBvcHRpb24oImN1cnNvckJsaW5rUmF0
ZSIsIDUzMCk7CkBAIC0zMzM3LDEzICs0MzMzLDEzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICBvcHRpb24oImN1cnNvckhlaWdodCIsIDEpOwogICBvcHRpb24oIndvcmtU
aW1lIiwgMTAwKTsKICAgb3B0aW9uKCJ3b3JrRGVsYXkiLCAxMDApOwotICBvcHRpb24oImZsYXR0
ZW5TcGFucyIsIHRydWUpOworICBvcHRpb24oImZsYXR0ZW5TcGFucyIsIHRydWUsIHJlc2V0TW9k
ZVN0YXRlLCB0cnVlKTsKKyAgb3B0aW9uKCJhZGRNb2RlQ2xhc3MiLCBmYWxzZSwgcmVzZXRNb2Rl
U3RhdGUsIHRydWUpOwogICBvcHRpb24oInBvbGxJbnRlcnZhbCIsIDEwMCk7Ci0gIG9wdGlvbigi
dW5kb0RlcHRoIiwgNDAsIGZ1bmN0aW9uKGNtLCB2YWwpe2NtLmRvYy5oaXN0b3J5LnVuZG9EZXB0
aCA9IHZhbDt9KTsKLSAgb3B0aW9uKCJoaXN0b3J5RXZlbnREZWxheSIsIDUwMCk7CisgIG9wdGlv
bigidW5kb0RlcHRoIiwgMjAwLCBmdW5jdGlvbihjbSwgdmFsKXtjbS5kb2MuaGlzdG9yeS51bmRv
RGVwdGggPSB2YWw7fSk7CisgIG9wdGlvbigiaGlzdG9yeUV2ZW50RGVsYXkiLCAxMjUwKTsKICAg
b3B0aW9uKCJ2aWV3cG9ydE1hcmdpbiIsIDEwLCBmdW5jdGlvbihjbSl7Y20ucmVmcmVzaCgpO30s
IHRydWUpOwotICBvcHRpb24oIm1heEhpZ2hsaWdodExlbmd0aCIsIDEwMDAwLCBmdW5jdGlvbihj
bSl7bG9hZE1vZGUoY20pOyBjbS5yZWZyZXNoKCk7fSwgdHJ1ZSk7Ci0gIG9wdGlvbigiY3J1ZGVN
ZWFzdXJpbmdGcm9tIiwgMTAwMDApOworICBvcHRpb24oIm1heEhpZ2hsaWdodExlbmd0aCIsIDEw
MDAwLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7CiAgIG9wdGlvbigibW92ZUlucHV0V2l0aEN1cnNv
ciIsIHRydWUsIGZ1bmN0aW9uKGNtLCB2YWwpIHsKICAgICBpZiAoIXZhbCkgY20uZGlzcGxheS5p
bnB1dERpdi5zdHlsZS50b3AgPSBjbS5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQgPSAwOwog
ICB9KTsKQEAgLTMzNTgsNiArNDM1NCw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAvLyBLbm93biBtb2RlcywgYnkgbmFtZSBhbmQgYnkgTUlNRQogICB2YXIgbW9kZXMg
PSBDb2RlTWlycm9yLm1vZGVzID0ge30sIG1pbWVNb2RlcyA9IENvZGVNaXJyb3IubWltZU1vZGVz
ID0ge307CiAKKyAgLy8gRXh0cmEgYXJndW1lbnRzIGFyZSBzdG9yZWQgYXMgdGhlIG1vZGUncyBk
ZXBlbmRlbmNpZXMsIHdoaWNoIGlzCisgIC8vIHVzZWQgYnkgKGxlZ2FjeSkgbWVjaGFuaXNtcyBs
aWtlIGxvYWRtb2RlLmpzIHRvIGF1dG9tYXRpY2FsbHkKKyAgLy8gbG9hZCBhIG1vZGUuIChQcmVm
ZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSByZXF1aXJlL2RlZmluZSBjYWxscy4pCiAgIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUpIHsKICAgICBpZiAoIUNvZGVNaXJy
b3IuZGVmYXVsdHMubW9kZSAmJiBuYW1lICE9ICJudWxsIikgQ29kZU1pcnJvci5kZWZhdWx0cy5t
b2RlID0gbmFtZTsKICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHsKQEAgLTMzNzEsMTEg
KzQzNzAsMTQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgbWltZU1v
ZGVzW21pbWVdID0gc3BlYzsKICAgfTsKIAorICAvLyBHaXZlbiBhIE1JTUUgdHlwZSwgYSB7bmFt
ZSwgLi4ub3B0aW9uc30gY29uZmlnIG9iamVjdCwgb3IgYSBuYW1lCisgIC8vIHN0cmluZywgcmV0
dXJuIGEgbW9kZSBjb25maWcgb2JqZWN0LgogICBDb2RlTWlycm9yLnJlc29sdmVNb2RlID0gZnVu
Y3Rpb24oc3BlYykgewogICAgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiBtaW1lTW9k
ZXMuaGFzT3duUHJvcGVydHkoc3BlYykpIHsKICAgICAgIHNwZWMgPSBtaW1lTW9kZXNbc3BlY107
CiAgICAgfSBlbHNlIGlmIChzcGVjICYmIHR5cGVvZiBzcGVjLm5hbWUgPT0gInN0cmluZyIgJiYg
bWltZU1vZGVzLmhhc093blByb3BlcnR5KHNwZWMubmFtZSkpIHsKICAgICAgIHZhciBmb3VuZCA9
IG1pbWVNb2Rlc1tzcGVjLm5hbWVdOworICAgICAgaWYgKHR5cGVvZiBmb3VuZCA9PSAic3RyaW5n
IikgZm91bmQgPSB7bmFtZTogZm91bmR9OwogICAgICAgc3BlYyA9IGNyZWF0ZU9iaihmb3VuZCwg
c3BlYyk7CiAgICAgICBzcGVjLm5hbWUgPSBmb3VuZC5uYW1lOwogICAgIH0gZWxzZSBpZiAodHlw
ZW9mIHNwZWMgPT0gInN0cmluZyIgJiYgL15bXHdcLV0rXC9bXHdcLV0rXCt4bWwkLy50ZXN0KHNw
ZWMpKSB7CkBAIC0zMzg1LDYgKzQzODcsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBlbHNlIHJldHVybiBzcGVjIHx8IHtuYW1lOiAibnVsbCJ9OwogICB9OwogCisg
IC8vIEdpdmVuIGEgbW9kZSBzcGVjIChhbnl0aGluZyB0aGF0IHJlc29sdmVNb2RlIGFjY2VwdHMp
LCBmaW5kIGFuZAorICAvLyBpbml0aWFsaXplIGFuIGFjdHVhbCBtb2RlIG9iamVjdC4KICAgQ29k
ZU1pcnJvci5nZXRNb2RlID0gZnVuY3Rpb24ob3B0aW9ucywgc3BlYykgewogICAgIHZhciBzcGVj
ID0gQ29kZU1pcnJvci5yZXNvbHZlTW9kZShzcGVjKTsKICAgICB2YXIgbWZhY3RvcnkgPSBtb2Rl
c1tzcGVjLm5hbWVdOwpAQCAtMzM5OSwxNSArNDQwMywyMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIH0KICAgICB9CiAgICAgbW9kZU9iai5uYW1lID0gc3BlYy5u
YW1lOworICAgIGlmIChzcGVjLmhlbHBlclR5cGUpIG1vZGVPYmouaGVscGVyVHlwZSA9IHNwZWMu
aGVscGVyVHlwZTsKKyAgICBpZiAoc3BlYy5tb2RlUHJvcHMpIGZvciAodmFyIHByb3AgaW4gc3Bl
Yy5tb2RlUHJvcHMpCisgICAgICBtb2RlT2JqW3Byb3BdID0gc3BlYy5tb2RlUHJvcHNbcHJvcF07
CiAKICAgICByZXR1cm4gbW9kZU9iajsKICAgfTsKIAorICAvLyBNaW5pbWFsIGRlZmF1bHQgbW9k
ZS4KICAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJudWxsIiwgZnVuY3Rpb24oKSB7CiAgICAgcmV0
dXJuIHt0b2tlbjogZnVuY3Rpb24oc3RyZWFtKSB7c3RyZWFtLnNraXBUb0VuZCgpO319OwogICB9
KTsKICAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwgIm51bGwiKTsKIAorICAv
LyBUaGlzIGNhbiBiZSB1c2VkIHRvIGF0dGFjaCBwcm9wZXJ0aWVzIHRvIG1vZGUgb2JqZWN0cyBm
cm9tCisgIC8vIG91dHNpZGUgdGhlIGFjdHVhbCBtb2RlIGRlZmluaXRpb24uCiAgIHZhciBtb2Rl
RXh0ZW5zaW9ucyA9IENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnMgPSB7fTsKICAgQ29kZU1pcnJv
ci5leHRlbmRNb2RlID0gZnVuY3Rpb24obW9kZSwgcHJvcGVydGllcykgewogICAgIHZhciBleHRz
ID0gbW9kZUV4dGVuc2lvbnMuaGFzT3duUHJvcGVydHkobW9kZSkgPyBtb2RlRXh0ZW5zaW9uc1tt
b2RlXSA6IChtb2RlRXh0ZW5zaW9uc1ttb2RlXSA9IHt9KTsKQEAgLTM0MjksMTkgKzQ0MzksMjAg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgdmFyIGhlbHBlcnMgPSBD
b2RlTWlycm9yLmhlbHBlcnMgPSB7fTsKICAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlciA9IGZ1
bmN0aW9uKHR5cGUsIG5hbWUsIHZhbHVlKSB7Ci0gICAgaWYgKCFoZWxwZXJzLmhhc093blByb3Bl
cnR5KHR5cGUpKSBoZWxwZXJzW3R5cGVdID0gQ29kZU1pcnJvclt0eXBlXSA9IHt9OworICAgIGlm
ICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgaGVscGVyc1t0eXBlXSA9IENvZGVNaXJy
b3JbdHlwZV0gPSB7X2dsb2JhbDogW119OwogICAgIGhlbHBlcnNbdHlwZV1bbmFtZV0gPSB2YWx1
ZTsKICAgfTsKLQotICAvLyBVVElMSVRJRVMKLQotICBDb2RlTWlycm9yLmlzV29yZENoYXIgPSBp
c1dvcmRDaGFyOworICBDb2RlTWlycm9yLnJlZ2lzdGVyR2xvYmFsSGVscGVyID0gZnVuY3Rpb24o
dHlwZSwgbmFtZSwgcHJlZGljYXRlLCB2YWx1ZSkgeworICAgIENvZGVNaXJyb3IucmVnaXN0ZXJI
ZWxwZXIodHlwZSwgbmFtZSwgdmFsdWUpOworICAgIGhlbHBlcnNbdHlwZV0uX2dsb2JhbC5wdXNo
KHtwcmVkOiBwcmVkaWNhdGUsIHZhbDogdmFsdWV9KTsKKyAgfTsKIAogICAvLyBNT0RFIFNUQVRF
IEhBTkRMSU5HCiAKLSAgLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBzdGF0
ZS4gRXhwb3J0ZWQgYmVjYXVzZSBtb2RlcwotICAvLyBzb21ldGltZXMgbmVlZCB0byBkbyB0aGlz
LgotICBmdW5jdGlvbiBjb3B5U3RhdGUobW9kZSwgc3RhdGUpIHsKKyAgLy8gVXRpbGl0eSBmdW5j
dGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBzdGF0ZS4gRXhwb3J0ZWQgYmVjYXVzZSBuZXN0ZWQKKyAg
Ly8gbW9kZXMgbmVlZCB0byBkbyB0aGlzIGZvciB0aGVpciBpbm5lciBtb2Rlcy4KKworICB2YXIg
Y29weVN0YXRlID0gQ29kZU1pcnJvci5jb3B5U3RhdGUgPSBmdW5jdGlvbihtb2RlLCBzdGF0ZSkg
ewogICAgIGlmIChzdGF0ZSA9PT0gdHJ1ZSkgcmV0dXJuIHN0YXRlOwogICAgIGlmIChtb2RlLmNv
cHlTdGF0ZSkgcmV0dXJuIG1vZGUuY29weVN0YXRlKHN0YXRlKTsKICAgICB2YXIgbnN0YXRlID0g
e307CkBAIC0zNDUxLDE0ICs0NDYyLDE0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgICAgbnN0YXRlW25dID0gdmFsOwogICAgIH0KICAgICByZXR1cm4gbnN0YXRlOwot
ICB9Ci0gIENvZGVNaXJyb3IuY29weVN0YXRlID0gY29weVN0YXRlOworICB9OwogCi0gIGZ1bmN0
aW9uIHN0YXJ0U3RhdGUobW9kZSwgYTEsIGEyKSB7CisgIHZhciBzdGFydFN0YXRlID0gQ29kZU1p
cnJvci5zdGFydFN0YXRlID0gZnVuY3Rpb24obW9kZSwgYTEsIGEyKSB7CiAgICAgcmV0dXJuIG1v
ZGUuc3RhcnRTdGF0ZSA/IG1vZGUuc3RhcnRTdGF0ZShhMSwgYTIpIDogdHJ1ZTsKLSAgfQotICBD
b2RlTWlycm9yLnN0YXJ0U3RhdGUgPSBzdGFydFN0YXRlOworICB9OwogCisgIC8vIEdpdmVuIGEg
bW9kZSBhbmQgYSBzdGF0ZSAoZm9yIHRoYXQgbW9kZSksIGZpbmQgdGhlIGlubmVyIG1vZGUgYW5k
CisgIC8vIHN0YXRlIGF0IHRoZSBwb3NpdGlvbiB0aGF0IHRoZSBzdGF0ZSByZWZlcnMgdG8uCiAg
IENvZGVNaXJyb3IuaW5uZXJNb2RlID0gZnVuY3Rpb24obW9kZSwgc3RhdGUpIHsKICAgICB3aGls
ZSAobW9kZS5pbm5lck1vZGUpIHsKICAgICAgIHZhciBpbmZvID0gbW9kZS5pbm5lck1vZGUoc3Rh
dGUpOwpAQCAtMzQ3MSw0OSArNDQ4Miw3MyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKIAogICAvLyBTVEFOREFSRCBDT01NQU5EUwogCisgIC8vIENvbW1hbmRzIGFyZSBwYXJh
bWV0ZXItbGVzcyBhY3Rpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBvbiBhbgorICAvLyBlZGl0
b3IsIG1vc3RseSB1c2VkIGZvciBrZXliaW5kaW5ncy4KICAgdmFyIGNvbW1hbmRzID0gQ29kZU1p
cnJvci5jb21tYW5kcyA9IHsKLSAgICBzZWxlY3RBbGw6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0U2Vs
ZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCksIFBvcyhjbS5sYXN0TGluZSgpKSk7fSwKKyAg
ICBzZWxlY3RBbGw6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0U2VsZWN0aW9uKFBvcyhjbS5maXJzdExp
bmUoKSwgMCksIFBvcyhjbS5sYXN0TGluZSgpKSwgc2VsX2RvbnRTY3JvbGwpO30sCisgICAgc2lu
Z2xlU2VsZWN0aW9uOiBmdW5jdGlvbihjbSkgeworICAgICAgY20uc2V0U2VsZWN0aW9uKGNtLmdl
dEN1cnNvcigiYW5jaG9yIiksIGNtLmdldEN1cnNvcigiaGVhZCIpLCBzZWxfZG9udFNjcm9sbCk7
CisgICAgfSwKICAgICBraWxsTGluZTogZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciBmcm9tID0g
Y20uZ2V0Q3Vyc29yKHRydWUpLCB0byA9IGNtLmdldEN1cnNvcihmYWxzZSksIHNlbCA9ICFwb3NF
cShmcm9tLCB0byk7Ci0gICAgICBpZiAoIXNlbCAmJiBjbS5nZXRMaW5lKGZyb20ubGluZSkubGVu
Z3RoID09IGZyb20uY2gpCi0gICAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgZnJvbSwgUG9zKGZy
b20ubGluZSArIDEsIDApLCAiK2RlbGV0ZSIpOwotICAgICAgZWxzZSBjbS5yZXBsYWNlUmFuZ2Uo
IiIsIGZyb20sIHNlbCA/IHRvIDogUG9zKGZyb20ubGluZSksICIrZGVsZXRlIik7CisgICAgICBk
ZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbihyYW5nZSkgeworICAgICAgICBpZiAocmFu
Z2UuZW1wdHkoKSkgeworICAgICAgICAgIHZhciBsZW4gPSBnZXRMaW5lKGNtLmRvYywgcmFuZ2Uu
aGVhZC5saW5lKS50ZXh0Lmxlbmd0aDsKKyAgICAgICAgICBpZiAocmFuZ2UuaGVhZC5jaCA9PSBs
ZW4gJiYgcmFuZ2UuaGVhZC5saW5lIDwgY20ubGFzdExpbmUoKSkKKyAgICAgICAgICAgIHJldHVy
biB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxpbmUgKyAxLCAwKX07Cisg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiByYW5nZS5oZWFkLCB0bzog
UG9zKHJhbmdlLmhlYWQubGluZSwgbGVuKX07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
cmV0dXJuIHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByYW5nZS50bygpfTsKKyAgICAgICAgfQor
ICAgICAgfSk7CiAgICAgfSwKICAgICBkZWxldGVMaW5lOiBmdW5jdGlvbihjbSkgewotICAgICAg
dmFyIGwgPSBjbS5nZXRDdXJzb3IoKS5saW5lOwotICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCBQ
b3MobCwgMCksIFBvcyhsKSwgIitkZWxldGUiKTsKKyAgICAgIGRlbGV0ZU5lYXJTZWxlY3Rpb24o
Y20sIGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHJldHVybiB7ZnJvbTogUG9zKHJhbmdlLmZy
b20oKS5saW5lLCAwKSwKKyAgICAgICAgICAgICAgICB0bzogY2xpcFBvcyhjbS5kb2MsIFBvcyhy
YW5nZS50bygpLmxpbmUgKyAxLCAwKSl9OworICAgICAgfSk7CiAgICAgfSwKICAgICBkZWxMaW5l
TGVmdDogZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKLSAg
ICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgUG9zKGN1ci5saW5lLCAwKSwgY3VyLCAiK2RlbGV0ZSIp
OworICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAg
ICAgcmV0dXJuIHtmcm9tOiBQb3MocmFuZ2UuZnJvbSgpLmxpbmUsIDApLCB0bzogcmFuZ2UuZnJv
bSgpfTsKKyAgICAgIH0pOwogICAgIH0sCiAgICAgdW5kbzogZnVuY3Rpb24oY20pIHtjbS51bmRv
KCk7fSwKICAgICByZWRvOiBmdW5jdGlvbihjbSkge2NtLnJlZG8oKTt9LAorICAgIHVuZG9TZWxl
Y3Rpb246IGZ1bmN0aW9uKGNtKSB7Y20udW5kb1NlbGVjdGlvbigpO30sCisgICAgcmVkb1NlbGVj
dGlvbjogZnVuY3Rpb24oY20pIHtjbS5yZWRvU2VsZWN0aW9uKCk7fSwKICAgICBnb0RvY1N0YXJ0
OiBmdW5jdGlvbihjbSkge2NtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDAp
KTt9LAogICAgIGdvRG9jRW5kOiBmdW5jdGlvbihjbSkge2NtLmV4dGVuZFNlbGVjdGlvbihQb3Mo
Y20ubGFzdExpbmUoKSkpO30sCiAgICAgZ29MaW5lU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAg
ICBjbS5leHRlbmRTZWxlY3Rpb24obGluZVN0YXJ0KGNtLCBjbS5nZXRDdXJzb3IoKS5saW5lKSk7
CisgICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsgcmV0dXJuIGxp
bmVTdGFydChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSwgc2VsX21vdmUpOwogICAgIH0sCiAgICAg
Z29MaW5lU3RhcnRTbWFydDogZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciBjdXIgPSBjbS5nZXRD
dXJzb3IoKSwgc3RhcnQgPSBsaW5lU3RhcnQoY20sIGN1ci5saW5lKTsKLSAgICAgIHZhciBsaW5l
ID0gY20uZ2V0TGluZUhhbmRsZShzdGFydC5saW5lKTsKLSAgICAgIHZhciBvcmRlciA9IGdldE9y
ZGVyKGxpbmUpOwotICAgICAgaWYgKCFvcmRlciB8fCBvcmRlclswXS5sZXZlbCA9PSAwKSB7Ci0g
ICAgICAgIHZhciBmaXJzdE5vbldTID0gTWF0aC5tYXgoMCwgbGluZS50ZXh0LnNlYXJjaCgvXFMv
KSk7Ci0gICAgICAgIHZhciBpbldTID0gY3VyLmxpbmUgPT0gc3RhcnQubGluZSAmJiBjdXIuY2gg
PD0gZmlyc3ROb25XUyAmJiBjdXIuY2g7Ci0gICAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbihQb3Mo
c3RhcnQubGluZSwgaW5XUyA/IDAgOiBmaXJzdE5vbldTKSk7Ci0gICAgICB9IGVsc2UgY20uZXh0
ZW5kU2VsZWN0aW9uKHN0YXJ0KTsKKyAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlv
bihyYW5nZSkgeworICAgICAgICB2YXIgc3RhcnQgPSBsaW5lU3RhcnQoY20sIHJhbmdlLmhlYWQu
bGluZSk7CisgICAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShzdGFydC5saW5lKTsK
KyAgICAgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7CisgICAgICAgIGlmICghb3JkZXIg
fHwgb3JkZXJbMF0ubGV2ZWwgPT0gMCkgeworICAgICAgICAgIHZhciBmaXJzdE5vbldTID0gTWF0
aC5tYXgoMCwgbGluZS50ZXh0LnNlYXJjaCgvXFMvKSk7CisgICAgICAgICAgdmFyIGluV1MgPSBy
YW5nZS5oZWFkLmxpbmUgPT0gc3RhcnQubGluZSAmJiByYW5nZS5oZWFkLmNoIDw9IGZpcnN0Tm9u
V1MgJiYgcmFuZ2UuaGVhZC5jaDsKKyAgICAgICAgICByZXR1cm4gUG9zKHN0YXJ0LmxpbmUsIGlu
V1MgPyAwIDogZmlyc3ROb25XUyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXJ0Owor
ICAgICAgfSwgc2VsX21vdmUpOwogICAgIH0sCiAgICAgZ29MaW5lRW5kOiBmdW5jdGlvbihjbSkg
ewotICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uKGxpbmVFbmQoY20sIGNtLmdldEN1cnNvcigpLmxp
bmUpKTsKKyAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgeyByZXR1
cm4gbGluZUVuZChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSwgc2VsX21vdmUpOwogICAgIH0sCiAg
ICAgZ29MaW5lUmlnaHQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICB2YXIgdG9wID0gY20uY2hhckNv
b3JkcyhjbS5nZXRDdXJzb3IoKSwgImRpdiIpLnRvcCArIDU7Ci0gICAgICBjbS5leHRlbmRTZWxl
Y3Rpb24oY20uY29vcmRzQ2hhcih7bGVmdDogY20uZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRo
ICsgMTAwLCB0b3A6IHRvcH0sICJkaXYiKSk7CisgICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnko
ZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2Uu
aGVhZCwgImRpdiIpLnRvcCArIDU7CisgICAgICAgIHJldHVybiBjbS5jb29yZHNDaGFyKHtsZWZ0
OiBjbS5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGggKyAxMDAsIHRvcDogdG9wfSwgImRpdiIp
OworICAgICAgfSwgc2VsX21vdmUpOwogICAgIH0sCiAgICAgZ29MaW5lTGVmdDogZnVuY3Rpb24o
Y20pIHsKLSAgICAgIHZhciB0b3AgPSBjbS5jaGFyQ29vcmRzKGNtLmdldEN1cnNvcigpLCAiZGl2
IikudG9wICsgNTsKLSAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbihjbS5jb29yZHNDaGFyKHtsZWZ0
OiAwLCB0b3A6IHRvcH0sICJkaXYiKSk7CisgICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVu
Y3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVh
ZCwgImRpdiIpLnRvcCArIDU7CisgICAgICAgIHJldHVybiBjbS5jb29yZHNDaGFyKHtsZWZ0OiAw
LCB0b3A6IHRvcH0sICJkaXYiKTsKKyAgICAgIH0sIHNlbF9tb3ZlKTsKICAgICB9LAogICAgIGdv
TGluZVVwOiBmdW5jdGlvbihjbSkge2NtLm1vdmVWKC0xLCAibGluZSIpO30sCiAgICAgZ29MaW5l
RG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAibGluZSIpO30sCkBAIC0zNTM2LDIyICs0
NTcxLDQxIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGluZGVudEF1
dG86IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpO30sCiAgICAgaW5k
ZW50TW9yZTogZnVuY3Rpb24oY20pIHtjbS5pbmRlbnRTZWxlY3Rpb24oImFkZCIpO30sCiAgICAg
aW5kZW50TGVzczogZnVuY3Rpb24oY20pIHtjbS5pbmRlbnRTZWxlY3Rpb24oInN1YnRyYWN0Iik7
fSwKLSAgICBpbnNlcnRUYWI6IGZ1bmN0aW9uKGNtKSB7Y20ucmVwbGFjZVNlbGVjdGlvbigiXHQi
LCAiZW5kIiwgIitpbnB1dCIpO30sCisgICAgaW5zZXJ0VGFiOiBmdW5jdGlvbihjbSkge2NtLnJl
cGxhY2VTZWxlY3Rpb24oIlx0Iik7fSwKKyAgICBpbnNlcnRTb2Z0VGFiOiBmdW5jdGlvbihjbSkg
eworICAgICAgdmFyIHNwYWNlcyA9IFtdLCByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCB0
YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
YW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHBvcyA9IHJhbmdlc1tpXS5mcm9tKCk7
CisgICAgICAgIHZhciBjb2wgPSBjb3VudENvbHVtbihjbS5nZXRMaW5lKHBvcy5saW5lKSwgcG9z
LmNoLCB0YWJTaXplKTsKKyAgICAgICAgc3BhY2VzLnB1c2gobmV3IEFycmF5KHRhYlNpemUgLSBj
b2wgJSB0YWJTaXplICsgMSkuam9pbigiICIpKTsKKyAgICAgIH0KKyAgICAgIGNtLnJlcGxhY2VT
ZWxlY3Rpb25zKHNwYWNlcyk7CisgICAgfSwKICAgICBkZWZhdWx0VGFiOiBmdW5jdGlvbihjbSkg
ewogICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIGNtLmluZGVudFNlbGVjdGlvbigi
YWRkIik7Ci0gICAgICBlbHNlIGNtLnJlcGxhY2VTZWxlY3Rpb24oIlx0IiwgImVuZCIsICIraW5w
dXQiKTsKKyAgICAgIGVsc2UgY20uZXhlY0NvbW1hbmQoImluc2VydFRhYiIpOwogICAgIH0sCiAg
ICAgdHJhbnNwb3NlQ2hhcnM6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICB2YXIgY3VyID0gY20uZ2V0
Q3Vyc29yKCksIGxpbmUgPSBjbS5nZXRMaW5lKGN1ci5saW5lKTsKLSAgICAgIGlmIChjdXIuY2gg
PiAwICYmIGN1ci5jaCA8IGxpbmUubGVuZ3RoIC0gMSkKLSAgICAgICAgY20ucmVwbGFjZVJhbmdl
KGxpbmUuY2hhckF0KGN1ci5jaCkgKyBsaW5lLmNoYXJBdChjdXIuY2ggLSAxKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSksIFBvcyhjdXIubGluZSwg
Y3VyLmNoICsgMSkpOworICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHZhciBjdXIgPSByYW5nZXNbaV0u
aGVhZCwgbGluZSA9IGdldExpbmUoY20uZG9jLCBjdXIubGluZSkudGV4dDsKKyAgICAgICAgICBp
ZiAoY3VyLmNoID4gMCAmJiBjdXIuY2ggPCBsaW5lLmxlbmd0aCAtIDEpCisgICAgICAgICAgICBj
bS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoY3VyLmNoKSArIGxpbmUuY2hhckF0KGN1ci5jaCAt
IDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhjdXIubGluZSwgY3VyLmNoIC0g
MSksIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSkpOworICAgICAgICB9CisgICAgICB9KTsKICAg
ICB9LAogICAgIG5ld2xpbmVBbmRJbmRlbnQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICBvcGVyYXRp
b24oY20sIGZ1bmN0aW9uKCkgewotICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJcbiIsICJl
bmQiLCAiK2lucHV0Iik7Ci0gICAgICAgIGNtLmluZGVudExpbmUoY20uZ2V0Q3Vyc29yKCkubGlu
ZSwgbnVsbCwgdHJ1ZSk7Ci0gICAgICB9KSgpOworICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBsZW4gPSBjbS5saXN0U2VsZWN0aW9ucygpLmxlbmd0aDsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgIHZhciByYW5nZSA9
IGNtLmxpc3RTZWxlY3Rpb25zKClbaV07CisgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKCJcbiIs
IHJhbmdlLmFuY2hvciwgcmFuZ2UuaGVhZCwgIitpbnB1dCIpOworICAgICAgICAgIGNtLmluZGVu
dExpbmUocmFuZ2UuZnJvbSgpLmxpbmUgKyAxLCBudWxsLCB0cnVlKTsKKyAgICAgICAgICBlbnN1
cmVDdXJzb3JWaXNpYmxlKGNtKTsKKyAgICAgICAgfQorICAgICAgfSk7CiAgICAgfSwKICAgICB0
b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKGNtKSB7Y20udG9nZ2xlT3ZlcndyaXRlKCk7fQogICB9
OwpAQCAtMzU2NCwxNyArNDYxOCwyMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICAiRW5kIjogImdvTGluZUVuZCIsICJIb21lIjogImdvTGluZVN0YXJ0U21hcnQiLCAi
UGFnZVVwIjogImdvUGFnZVVwIiwgIlBhZ2VEb3duIjogImdvUGFnZURvd24iLAogICAgICJEZWxl
dGUiOiAiZGVsQ2hhckFmdGVyIiwgIkJhY2tzcGFjZSI6ICJkZWxDaGFyQmVmb3JlIiwgIlNoaWZ0
LUJhY2tzcGFjZSI6ICJkZWxDaGFyQmVmb3JlIiwKICAgICAiVGFiIjogImRlZmF1bHRUYWIiLCAi
U2hpZnQtVGFiIjogImluZGVudEF1dG8iLAotICAgICJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50
IiwgIkluc2VydCI6ICJ0b2dnbGVPdmVyd3JpdGUiCisgICAgIkVudGVyIjogIm5ld2xpbmVBbmRJ
bmRlbnQiLCAiSW5zZXJ0IjogInRvZ2dsZU92ZXJ3cml0ZSIsCisgICAgIkVzYyI6ICJzaW5nbGVT
ZWxlY3Rpb24iCiAgIH07CiAgIC8vIE5vdGUgdGhhdCB0aGUgc2F2ZSBhbmQgZmluZC1yZWxhdGVk
IGNvbW1hbmRzIGFyZW4ndCBkZWZpbmVkIGJ5Ci0gIC8vIGRlZmF1bHQuIFVua25vd24gY29tbWFu
ZHMgYXJlIHNpbXBseSBpZ25vcmVkLgorICAvLyBkZWZhdWx0LiBVc2VyIGNvZGUgb3IgYWRkb25z
IGNhbiBkZWZpbmUgdGhlbS4gVW5rbm93biBjb21tYW5kcworICAvLyBhcmUgc2ltcGx5IGlnbm9y
ZWQuCiAgIGtleU1hcC5wY0RlZmF1bHQgPSB7CiAgICAgIkN0cmwtQSI6ICJzZWxlY3RBbGwiLCAi
Q3RybC1EIjogImRlbGV0ZUxpbmUiLCAiQ3RybC1aIjogInVuZG8iLCAiU2hpZnQtQ3RybC1aIjog
InJlZG8iLCAiQ3RybC1ZIjogInJlZG8iLAotICAgICJDdHJsLUhvbWUiOiAiZ29Eb2NTdGFydCIs
ICJBbHQtVXAiOiAiZ29Eb2NTdGFydCIsICJDdHJsLUVuZCI6ICJnb0RvY0VuZCIsICJDdHJsLURv
d24iOiAiZ29Eb2NFbmQiLAorICAgICJDdHJsLUhvbWUiOiAiZ29Eb2NTdGFydCIsICJDdHJsLVVw
IjogImdvRG9jU3RhcnQiLCAiQ3RybC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ3RybC1Eb3duIjogImdv
RG9jRW5kIiwKICAgICAiQ3RybC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwgIkN0cmwtUmlnaHQiOiAi
Z29Hcm91cFJpZ2h0IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkFsdC1SaWdodCI6ICJn
b0xpbmVFbmQiLAogICAgICJDdHJsLUJhY2tzcGFjZSI6ICJkZWxHcm91cEJlZm9yZSIsICJDdHJs
LURlbGV0ZSI6ICJkZWxHcm91cEFmdGVyIiwgIkN0cmwtUyI6ICJzYXZlIiwgIkN0cmwtRiI6ICJm
aW5kIiwKICAgICAiQ3RybC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUN0cmwtRyI6ICJmaW5kUHJl
diIsICJTaGlmdC1DdHJsLUYiOiAicmVwbGFjZSIsICJTaGlmdC1DdHJsLVIiOiAicmVwbGFjZUFs
bCIsCiAgICAgIkN0cmwtWyI6ICJpbmRlbnRMZXNzIiwgIkN0cmwtXSI6ICJpbmRlbnRNb3JlIiwK
KyAgICAiQ3RybC1VIjogInVuZG9TZWxlY3Rpb24iLCAiU2hpZnQtQ3RybC1VIjogInJlZG9TZWxl
Y3Rpb24iLCAiQWx0LVUiOiAicmVkb1NlbGVjdGlvbiIsCiAgICAgZmFsbHRocm91Z2g6ICJiYXNp
YyIKICAgfTsKICAga2V5TWFwLm1hY0RlZmF1bHQgPSB7CkBAIC0zNTg0LDE1ICs0NjQxLDE3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICJDdHJsLUFsdC1CYWNrc3Bh
Y2UiOiAiZGVsR3JvdXBBZnRlciIsICJBbHQtRGVsZXRlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQ21k
LVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5kIiwKICAgICAiQ21kLUciOiAiZmluZE5leHQiLCAi
U2hpZnQtQ21kLUciOiAiZmluZFByZXYiLCAiQ21kLUFsdC1GIjogInJlcGxhY2UiLCAiU2hpZnQt
Q21kLUFsdC1GIjogInJlcGxhY2VBbGwiLAogICAgICJDbWQtWyI6ICJpbmRlbnRMZXNzIiwgIkNt
ZC1dIjogImluZGVudE1vcmUiLCAiQ21kLUJhY2tzcGFjZSI6ICJkZWxMaW5lTGVmdCIsCisgICAg
IkNtZC1VIjogInVuZG9TZWxlY3Rpb24iLCAiU2hpZnQtQ21kLVUiOiAicmVkb1NlbGVjdGlvbiIs
CiAgICAgZmFsbHRocm91Z2g6IFsiYmFzaWMiLCAiZW1hY3N5Il0KICAgfTsKLSAga2V5TWFwWyJk
ZWZhdWx0Il0gPSBtYWMgPyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7Cisg
IC8vIFZlcnkgYmFzaWMgcmVhZGxpbmUvZW1hY3Mtc3R5bGUgYmluZGluZ3MsIHdoaWNoIGFyZSBz
dGFuZGFyZCBvbiBNYWMuCiAgIGtleU1hcC5lbWFjc3kgPSB7CiAgICAgIkN0cmwtRiI6ICJnb0No
YXJSaWdodCIsICJDdHJsLUIiOiAiZ29DaGFyTGVmdCIsICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAi
Q3RybC1OIjogImdvTGluZURvd24iLAogICAgICJBbHQtRiI6ICJnb1dvcmRSaWdodCIsICJBbHQt
QiI6ICJnb1dvcmRMZWZ0IiwgIkN0cmwtQSI6ICJnb0xpbmVTdGFydCIsICJDdHJsLUUiOiAiZ29M
aW5lRW5kIiwKICAgICAiQ3RybC1WIjogImdvUGFnZURvd24iLCAiU2hpZnQtQ3RybC1WIjogImdv
UGFnZVVwIiwgIkN0cmwtRCI6ICJkZWxDaGFyQWZ0ZXIiLCAiQ3RybC1IIjogImRlbENoYXJCZWZv
cmUiLAogICAgICJBbHQtRCI6ICJkZWxXb3JkQWZ0ZXIiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxX
b3JkQmVmb3JlIiwgIkN0cmwtSyI6ICJraWxsTGluZSIsICJDdHJsLVQiOiAidHJhbnNwb3NlQ2hh
cnMiCiAgIH07CisgIGtleU1hcFsiZGVmYXVsdCJdID0gbWFjID8ga2V5TWFwLm1hY0RlZmF1bHQg
OiBrZXlNYXAucGNEZWZhdWx0OwogCiAgIC8vIEtFWU1BUCBESVNQQVRDSAogCkBAIC0zNjAxLDcg
KzQ2NjAsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgZWxzZSBy
ZXR1cm4gdmFsOwogICB9CiAKLSAgZnVuY3Rpb24gbG9va3VwS2V5KG5hbWUsIG1hcHMsIGhhbmRs
ZSkgeworICAvLyBHaXZlbiBhbiBhcnJheSBvZiBrZXltYXBzIGFuZCBhIGtleSBuYW1lLCBjYWxs
IGhhbmRsZSBvbiBhbnkKKyAgLy8gYmluZGluZ3MgZm91bmQsIHVudGlsIHRoYXQgcmV0dXJucyBh
IHRydXRoeSB2YWx1ZSwgYXQgd2hpY2ggcG9pbnQKKyAgLy8gd2UgY29uc2lkZXIgdGhlIGtleSBo
YW5kbGVkLiBJbXBsZW1lbnRzIHRoaW5ncyBsaWtlIGJpbmRpbmcgYSBrZXkKKyAgLy8gdG8gZmFs
c2Ugc3RvcHBpbmcgZnVydGhlciBoYW5kbGluZyBhbmQga2V5bWFwIGZhbGx0aHJvdWdoLgorICB2
YXIgbG9va3VwS2V5ID0gQ29kZU1pcnJvci5sb29rdXBLZXkgPSBmdW5jdGlvbihuYW1lLCBtYXBz
LCBoYW5kbGUpIHsKICAgICBmdW5jdGlvbiBsb29rdXAobWFwKSB7CiAgICAgICBtYXAgPSBnZXRL
ZXlNYXAobWFwKTsKICAgICAgIHZhciBmb3VuZCA9IG1hcFtuYW1lXTsKQEAgLTM2MTMsNyArNDY3
Niw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaWYgKGZhbGx0
aHJvdWdoID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgIGlmIChPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nLmNhbGwoZmFsbHRocm91Z2gpICE9ICJbb2JqZWN0IEFycmF5XSIpCiAgICAgICAg
IHJldHVybiBsb29rdXAoZmFsbHRocm91Z2gpOwotICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBm
YWxsdGhyb3VnaC5sZW5ndGg7IGkgPCBlOyArK2kpIHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZmFsbHRocm91Z2gubGVuZ3RoOyArK2kpIHsKICAgICAgICAgdmFyIGRvbmUgPSBsb29rdXAo
ZmFsbHRocm91Z2hbaV0pOwogICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIGRvbmU7CiAgICAgICB9
CkBAIC0zNjI0LDEzICs0Njg3LDE4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgdmFyIGRvbmUgPSBsb29rdXAobWFwc1tpXSk7CiAgICAgICBpZiAoZG9uZSkgcmV0
dXJuIGRvbmUgIT0gInN0b3AiOwogICAgIH0KLSAgfQotICBmdW5jdGlvbiBpc01vZGlmaWVyS2V5
KGV2ZW50KSB7CisgIH07CisKKyAgLy8gTW9kaWZpZXIga2V5IHByZXNzZXMgZG9uJ3QgY291bnQg
YXMgJ3JlYWwnIGtleSBwcmVzc2VzIGZvciB0aGUKKyAgLy8gcHVycG9zZSBvZiBrZXltYXAgZmFs
bHRocm91Z2guCisgIHZhciBpc01vZGlmaWVyS2V5ID0gQ29kZU1pcnJvci5pc01vZGlmaWVyS2V5
ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2V2ZW50LmtleUNv
ZGVdOwogICAgIHJldHVybiBuYW1lID09ICJDdHJsIiB8fCBuYW1lID09ICJBbHQiIHx8IG5hbWUg
PT0gIlNoaWZ0IiB8fCBuYW1lID09ICJNb2QiOwotICB9Ci0gIGZ1bmN0aW9uIGtleU5hbWUoZXZl
bnQsIG5vU2hpZnQpIHsKLSAgICBpZiAob3BlcmEgJiYgZXZlbnQua2V5Q29kZSA9PSAzNCAmJiBl
dmVudFsiY2hhciJdKSByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgLy8gTG9vayB1cCB0aGUgbmFt
ZSBvZiBhIGtleSBhcyBpbmRpY2F0ZWQgYnkgYW4gZXZlbnQgb2JqZWN0LgorICB2YXIga2V5TmFt
ZSA9IENvZGVNaXJyb3Iua2V5TmFtZSA9IGZ1bmN0aW9uKGV2ZW50LCBub1NoaWZ0KSB7CisgICAg
aWYgKHByZXN0byAmJiBldmVudC5rZXlDb2RlID09IDM0ICYmIGV2ZW50WyJjaGFyIl0pIHJldHVy
biBmYWxzZTsKICAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2V2ZW50LmtleUNvZGVdOwogICAgIGlm
IChuYW1lID09IG51bGwgfHwgZXZlbnQuYWx0R3JhcGhLZXkpIHJldHVybiBmYWxzZTsKICAgICBp
ZiAoZXZlbnQuYWx0S2V5KSBuYW1lID0gIkFsdC0iICsgbmFtZTsKQEAgLTM2MzgsMTAgKzQ3MDYs
NyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBpZiAoZmxpcEN0cmxD
bWQgPyBldmVudC5jdHJsS2V5IDogZXZlbnQubWV0YUtleSkgbmFtZSA9ICJDbWQtIiArIG5hbWU7
CiAgICAgaWYgKCFub1NoaWZ0ICYmIGV2ZW50LnNoaWZ0S2V5KSBuYW1lID0gIlNoaWZ0LSIgKyBu
YW1lOwogICAgIHJldHVybiBuYW1lOwotICB9Ci0gIENvZGVNaXJyb3IubG9va3VwS2V5ID0gbG9v
a3VwS2V5OwotICBDb2RlTWlycm9yLmlzTW9kaWZpZXJLZXkgPSBpc01vZGlmaWVyS2V5OwotICBD
b2RlTWlycm9yLmtleU5hbWUgPSBrZXlOYW1lOworICB9OwogCiAgIC8vIEZST01URVhUQVJFQQog
CkBAIC0zNjU1LDkgKzQ3MjAsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICAvLyBTZXQgYXV0b2ZvY3VzIHRvIHRydWUgaWYgdGhpcyB0ZXh0YXJlYSBpcyBmb2N1c2Vk
LCBvciBpZiBpdCBoYXMKICAgICAvLyBhdXRvZm9jdXMgYW5kIG5vIG90aGVyIGVsZW1lbnQgaXMg
Zm9jdXNlZC4KICAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgPT0gbnVsbCkgewotICAgICAgdmFy
IGhhc0ZvY3VzID0gZG9jdW1lbnQuYm9keTsKLSAgICAgIC8vIGRvYy5hY3RpdmVFbGVtZW50IG9j
Y2FzaW9uYWxseSB0aHJvd3Mgb24gSUUKLSAgICAgIHRyeSB7IGhhc0ZvY3VzID0gZG9jdW1lbnQu
YWN0aXZlRWxlbWVudDsgfSBjYXRjaChlKSB7fQorICAgICAgdmFyIGhhc0ZvY3VzID0gYWN0aXZl
RWx0KCk7CiAgICAgICBvcHRpb25zLmF1dG9mb2N1cyA9IGhhc0ZvY3VzID09IHRleHRhcmVhIHx8
CiAgICAgICAgIHRleHRhcmVhLmdldEF0dHJpYnV0ZSgiYXV0b2ZvY3VzIikgIT0gbnVsbCAmJiBo
YXNGb2N1cyA9PSBkb2N1bWVudC5ib2R5OwogICAgIH0KQEAgLTM3MDMsMTcgKzQ3NjYsMTcgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vIEZlZCB0byB0aGUgbW9kZSBw
YXJzZXJzLCBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIG1ha2UKICAgLy8gcGFyc2VycyBt
b3JlIHN1Y2NpbmN0LgogCi0gIC8vIFRoZSBjaGFyYWN0ZXIgc3RyZWFtIHVzZWQgYnkgYSBtb2Rl
J3MgcGFyc2VyLgotICBmdW5jdGlvbiBTdHJpbmdTdHJlYW0oc3RyaW5nLCB0YWJTaXplKSB7Cisg
IHZhciBTdHJpbmdTdHJlYW0gPSBDb2RlTWlycm9yLlN0cmluZ1N0cmVhbSA9IGZ1bmN0aW9uKHN0
cmluZywgdGFiU2l6ZSkgewogICAgIHRoaXMucG9zID0gdGhpcy5zdGFydCA9IDA7CiAgICAgdGhp
cy5zdHJpbmcgPSBzdHJpbmc7CiAgICAgdGhpcy50YWJTaXplID0gdGFiU2l6ZSB8fCA4OwogICAg
IHRoaXMubGFzdENvbHVtblBvcyA9IHRoaXMubGFzdENvbHVtblZhbHVlID0gMDsKLSAgfQorICAg
IHRoaXMubGluZVN0YXJ0ID0gMDsKKyAgfTsKIAogICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0g
ewogICAgIGVvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMuc3RyaW5nLmxl
bmd0aDt9LAotICAgIHNvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID09IDA7fSwKKyAg
ICBzb2w6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA9PSB0aGlzLmxpbmVTdGFydDt9LAog
ICAgIHBlZWs6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3Mp
IHx8IHVuZGVmaW5lZDt9LAogICAgIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgICAgaWYgKHRoaXMu
cG9zIDwgdGhpcy5zdHJpbmcubGVuZ3RoKQpAQCAtMzc0Niw5ICs0ODA5LDEyIEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICB0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9
IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLnN0YXJ0LCB0aGlzLnRhYlNpemUsIHRoaXMu
bGFzdENvbHVtblBvcywgdGhpcy5sYXN0Q29sdW1uVmFsdWUpOwogICAgICAgICB0aGlzLmxhc3RD
b2x1bW5Qb3MgPSB0aGlzLnN0YXJ0OwogICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMubGFzdENv
bHVtblZhbHVlOworICAgICAgcmV0dXJuIHRoaXMubGFzdENvbHVtblZhbHVlIC0gKHRoaXMubGlu
ZVN0YXJ0ID8gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMubGluZVN0YXJ0LCB0aGlzLnRh
YlNpemUpIDogMCk7CisgICAgfSwKKyAgICBpbmRlbnRhdGlvbjogZnVuY3Rpb24oKSB7CisgICAg
ICByZXR1cm4gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIG51bGwsIHRoaXMudGFiU2l6ZSkgLQor
ICAgICAgICAodGhpcy5saW5lU3RhcnQgPyBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5s
aW5lU3RhcnQsIHRoaXMudGFiU2l6ZSkgOiAwKTsKICAgICB9LAotICAgIGluZGVudGF0aW9uOiBm
dW5jdGlvbigpIHtyZXR1cm4gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIG51bGwsIHRoaXMudGFi
U2l6ZSk7fSwKICAgICBtYXRjaDogZnVuY3Rpb24ocGF0dGVybiwgY29uc3VtZSwgY2FzZUluc2Vu
c2l0aXZlKSB7CiAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT0gInN0cmluZyIpIHsKICAgICAg
ICAgdmFyIGNhc2VkID0gZnVuY3Rpb24oc3RyKSB7cmV0dXJuIGNhc2VJbnNlbnNpdGl2ZSA/IHN0
ci50b0xvd2VyQ2FzZSgpIDogc3RyO307CkBAIC0zNzY0LDIwICs0ODMwLDM0IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICB9
CiAgICAgfSwKLSAgICBjdXJyZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5zbGlj
ZSh0aGlzLnN0YXJ0LCB0aGlzLnBvcyk7fQorICAgIGN1cnJlbnQ6IGZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMucG9zKTt9LAorICAgIGhpZGVGaXJz
dENoYXJzOiBmdW5jdGlvbihuLCBpbm5lcikgeworICAgICAgdGhpcy5saW5lU3RhcnQgKz0gbjsK
KyAgICAgIHRyeSB7IHJldHVybiBpbm5lcigpOyB9CisgICAgICBmaW5hbGx5IHsgdGhpcy5saW5l
U3RhcnQgLT0gbjsgfQorICAgIH0KICAgfTsKLSAgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0gPSBT
dHJpbmdTdHJlYW07CiAKICAgLy8gVEVYVE1BUktFUlMKIAotICBmdW5jdGlvbiBUZXh0TWFya2Vy
KGRvYywgdHlwZSkgeworICAvLyBDcmVhdGVkIHdpdGggbWFya1RleHQgYW5kIHNldEJvb2ttYXJr
IG1ldGhvZHMuIEEgVGV4dE1hcmtlciBpcyBhCisgIC8vIGhhbmRsZSB0aGF0IGNhbiBiZSB1c2Vk
IHRvIGNsZWFyIG9yIGZpbmQgYSBtYXJrZWQgcG9zaXRpb24gaW4gdGhlCisgIC8vIGRvY3VtZW50
LiBMaW5lIG9iamVjdHMgaG9sZCBhcnJheXMgKG1hcmtlZFNwYW5zKSBjb250YWluaW5nCisgIC8v
IHtmcm9tLCB0bywgbWFya2VyfSBvYmplY3QgcG9pbnRpbmcgdG8gc3VjaCBtYXJrZXIgb2JqZWN0
cywgYW5kCisgIC8vIGluZGljYXRpbmcgdGhhdCBzdWNoIGEgbWFya2VyIGlzIHByZXNlbnQgb24g
dGhhdCBsaW5lLiBNdWx0aXBsZQorICAvLyBsaW5lcyBtYXkgcG9pbnQgdG8gdGhlIHNhbWUgbWFy
a2VyIHdoZW4gaXQgc3BhbnMgYWNyb3NzIGxpbmVzLgorICAvLyBUaGUgc3BhbnMgd2lsbCBoYXZl
IG51bGwgZm9yIHRoZWlyIGZyb20vdG8gcHJvcGVydGllcyB3aGVuIHRoZQorICAvLyBtYXJrZXIg
Y29udGludWVzIGJleW9uZCB0aGUgc3RhcnQvZW5kIG9mIHRoZSBsaW5lLiBNYXJrZXJzIGhhdmUK
KyAgLy8gbGlua3MgYmFjayB0byB0aGUgbGluZXMgdGhleSBjdXJyZW50bHkgdG91Y2guCisKKyAg
dmFyIFRleHRNYXJrZXIgPSBDb2RlTWlycm9yLlRleHRNYXJrZXIgPSBmdW5jdGlvbihkb2MsIHR5
cGUpIHsKICAgICB0aGlzLmxpbmVzID0gW107CiAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICB0
aGlzLmRvYyA9IGRvYzsKLSAgfQotICBDb2RlTWlycm9yLlRleHRNYXJrZXIgPSBUZXh0TWFya2Vy
OworICB9OwogICBldmVudE1peGluKFRleHRNYXJrZXIpOwogCisgIC8vIENsZWFyIHRoZSBtYXJr
ZXIuCiAgIFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7CiAgICAgaWYg
KHRoaXMuZXhwbGljaXRseUNsZWFyZWQpIHJldHVybjsKICAgICB2YXIgY20gPSB0aGlzLmRvYy5j
bSwgd2l0aE9wID0gY20gJiYgIWNtLmN1ck9wOwpAQCAtMzc5MCwxNSArNDg3MCwxNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMubGluZXMubGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTsK
ICAgICAgIHZhciBzcGFuID0gZ2V0TWFya2VkU3BhbkZvcihsaW5lLm1hcmtlZFNwYW5zLCB0aGlz
KTsKLSAgICAgIGlmIChzcGFuLnRvICE9IG51bGwpIG1heCA9IGxpbmVObyhsaW5lKTsKKyAgICAg
IGlmIChjbSAmJiAhdGhpcy5jb2xsYXBzZWQpIHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmVObyhsaW5l
KSwgInRleHQiKTsKKyAgICAgIGVsc2UgaWYgKGNtKSB7CisgICAgICAgIGlmIChzcGFuLnRvICE9
IG51bGwpIG1heCA9IGxpbmVObyhsaW5lKTsKKyAgICAgICAgaWYgKHNwYW4uZnJvbSAhPSBudWxs
KSBtaW4gPSBsaW5lTm8obGluZSk7CisgICAgICB9CiAgICAgICBsaW5lLm1hcmtlZFNwYW5zID0g
cmVtb3ZlTWFya2VkU3BhbihsaW5lLm1hcmtlZFNwYW5zLCBzcGFuKTsKLSAgICAgIGlmIChzcGFu
LmZyb20gIT0gbnVsbCkKLSAgICAgICAgbWluID0gbGluZU5vKGxpbmUpOwotICAgICAgZWxzZSBp
ZiAodGhpcy5jb2xsYXBzZWQgJiYgIWxpbmVJc0hpZGRlbih0aGlzLmRvYywgbGluZSkgJiYgY20p
CisgICAgICBpZiAoc3Bhbi5mcm9tID09IG51bGwgJiYgdGhpcy5jb2xsYXBzZWQgJiYgIWxpbmVJ
c0hpZGRlbih0aGlzLmRvYywgbGluZSkgJiYgY20pCiAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQo
bGluZSwgdGV4dEhlaWdodChjbS5kaXNwbGF5KSk7CiAgICAgfQogICAgIGlmIChjbSAmJiB0aGlz
LmNvbGxhcHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5saW5lcy5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIHZpc3VhbCA9IHZpc3VhbExp
bmUoY20uZG9jLCB0aGlzLmxpbmVzW2ldKSwgbGVuID0gbGluZUxlbmd0aChjbS5kb2MsIHZpc3Vh
bCk7CisgICAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZSh0aGlzLmxpbmVzW2ldKSwgbGVuID0g
bGluZUxlbmd0aCh2aXN1YWwpOwogICAgICAgaWYgKGxlbiA+IGNtLmRpc3BsYXkubWF4TGluZUxl
bmd0aCkgewogICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmUgPSB2aXN1YWw7CiAgICAgICAgIGNt
LmRpc3BsYXkubWF4TGluZUxlbmd0aCA9IGxlbjsKQEAgLTM4MDYsNDYgKzQ4ODgsNjIgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KG1pbiAhPSBudWxsICYmIGNtKSByZWdDaGFuZ2UoY20sIG1pbiwgbWF4ICsgMSk7CisgICAgaWYg
KG1pbiAhPSBudWxsICYmIGNtICYmIHRoaXMuY29sbGFwc2VkKSByZWdDaGFuZ2UoY20sIG1pbiwg
bWF4ICsgMSk7CiAgICAgdGhpcy5saW5lcy5sZW5ndGggPSAwOwogICAgIHRoaXMuZXhwbGljaXRs
eUNsZWFyZWQgPSB0cnVlOwogICAgIGlmICh0aGlzLmF0b21pYyAmJiB0aGlzLmRvYy5jYW50RWRp
dCkgewogICAgICAgdGhpcy5kb2MuY2FudEVkaXQgPSBmYWxzZTsKLSAgICAgIGlmIChjbSkgcmVD
aGVja1NlbGVjdGlvbihjbSk7CisgICAgICBpZiAoY20pIHJlQ2hlY2tTZWxlY3Rpb24oY20uZG9j
KTsKICAgICB9CisgICAgaWYgKGNtKSBzaWduYWxMYXRlcihjbSwgIm1hcmtlckNsZWFyZWQiLCBj
bSwgdGhpcyk7CiAgICAgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9uKGNtKTsKKyAgICBpZiAodGhp
cy5wYXJlbnQpIHRoaXMucGFyZW50LmNsZWFyKCk7CiAgIH07CiAKLSAgVGV4dE1hcmtlci5wcm90
b3R5cGUuZmluZCA9IGZ1bmN0aW9uKCkgeworICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUg
bWFya2VyIGluIHRoZSBkb2N1bWVudC4gUmV0dXJucyBhIHtmcm9tLAorICAvLyB0b30gb2JqZWN0
IGJ5IGRlZmF1bHQuIFNpZGUgY2FuIGJlIHBhc3NlZCB0byBnZXQgYSBzcGVjaWZpYyBzaWRlCisg
IC8vIC0tIDAgKGJvdGgpLCAtMSAobGVmdCksIG9yIDEgKHJpZ2h0KS4gV2hlbiBsaW5lT2JqIGlz
IHRydWUsIHRoZQorICAvLyBQb3Mgb2JqZWN0cyByZXR1cm5lZCBjb250YWluIGEgbGluZSBvYmpl
Y3QsIHJhdGhlciB0aGFuIGEgbGluZQorICAvLyBudW1iZXIgKHVzZWQgdG8gcHJldmVudCBsb29r
aW5nIHVwIHRoZSBzYW1lIGxpbmUgdHdpY2UpLgorICBUZXh0TWFya2VyLnByb3RvdHlwZS5maW5k
ID0gZnVuY3Rpb24oc2lkZSwgbGluZU9iaikgeworICAgIGlmIChzaWRlID09IG51bGwgJiYgdGhp
cy50eXBlID09ICJib29rbWFyayIpIHNpZGUgPSAxOwogICAgIHZhciBmcm9tLCB0bzsKICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBs
aW5lID0gdGhpcy5saW5lc1tpXTsKICAgICAgIHZhciBzcGFuID0gZ2V0TWFya2VkU3BhbkZvcihs
aW5lLm1hcmtlZFNwYW5zLCB0aGlzKTsKLSAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCB8fCBz
cGFuLnRvICE9IG51bGwpIHsKLSAgICAgICAgdmFyIGZvdW5kID0gbGluZU5vKGxpbmUpOwotICAg
ICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpIGZyb20gPSBQb3MoZm91bmQsIHNwYW4uZnJvbSk7
Ci0gICAgICAgIGlmIChzcGFuLnRvICE9IG51bGwpIHRvID0gUG9zKGZvdW5kLCBzcGFuLnRvKTsK
KyAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCkgeworICAgICAgICBmcm9tID0gUG9zKGxpbmVP
YmogPyBsaW5lIDogbGluZU5vKGxpbmUpLCBzcGFuLmZyb20pOworICAgICAgICBpZiAoc2lkZSA9
PSAtMSkgcmV0dXJuIGZyb207CisgICAgICB9CisgICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSB7
CisgICAgICAgIHRvID0gUG9zKGxpbmVPYmogPyBsaW5lIDogbGluZU5vKGxpbmUpLCBzcGFuLnRv
KTsKKyAgICAgICAgaWYgKHNpZGUgPT0gMSkgcmV0dXJuIHRvOwogICAgICAgfQogICAgIH0KLSAg
ICBpZiAodGhpcy50eXBlID09ICJib29rbWFyayIpIHJldHVybiBmcm9tOwogICAgIHJldHVybiBm
cm9tICYmIHtmcm9tOiBmcm9tLCB0bzogdG99OwogICB9OwogCisgIC8vIFNpZ25hbHMgdGhhdCB0
aGUgbWFya2VyJ3Mgd2lkZ2V0IGNoYW5nZWQsIGFuZCBzdXJyb3VuZGluZyBsYXlvdXQKKyAgLy8g
c2hvdWxkIGJlIHJlY29tcHV0ZWQuCiAgIFRleHRNYXJrZXIucHJvdG90eXBlLmNoYW5nZWQgPSBm
dW5jdGlvbigpIHsKLSAgICB2YXIgcG9zID0gdGhpcy5maW5kKCksIGNtID0gdGhpcy5kb2MuY207
CisgICAgdmFyIHBvcyA9IHRoaXMuZmluZCgtMSwgdHJ1ZSksIHdpZGdldCA9IHRoaXMsIGNtID0g
dGhpcy5kb2MuY207CiAgICAgaWYgKCFwb3MgfHwgIWNtKSByZXR1cm47Ci0gICAgaWYgKHRoaXMu
dHlwZSAhPSAiYm9va21hcmsiKSBwb3MgPSBwb3MuZnJvbTsKLSAgICB2YXIgbGluZSA9IGdldExp
bmUodGhpcy5kb2MsIHBvcy5saW5lKTsKLSAgICBjbGVhckNhY2hlZE1lYXN1cmVtZW50KGNtLCBs
aW5lKTsKLSAgICBpZiAocG9zLmxpbmUgPj0gY20uZGlzcGxheS5zaG93aW5nRnJvbSAmJiBwb3Mu
bGluZSA8IGNtLmRpc3BsYXkuc2hvd2luZ1RvKSB7Ci0gICAgICBmb3IgKHZhciBub2RlID0gY20u
ZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7IG5vZGU7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5n
KSBpZiAobm9kZS5saW5lT2JqID09IGxpbmUpIHsKLSAgICAgICAgaWYgKG5vZGUub2Zmc2V0SGVp
Z2h0ICE9IGxpbmUuaGVpZ2h0KSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIG5vZGUub2Zmc2V0SGVp
Z2h0KTsKLSAgICAgICAgYnJlYWs7CisgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CisgICAg
ICB2YXIgbGluZSA9IHBvcy5saW5lLCBsaW5lTiA9IGxpbmVObyhwb3MubGluZSk7CisgICAgICB2
YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGluZShjbSwgbGluZU4pOworICAgICAgaWYgKHZpZXcpIHsK
KyAgICAgICAgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcih2aWV3KTsKKyAgICAgICAgY20u
Y3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKICAg
ICAgIH0KLSAgICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewotICAgICAgICBjbS5jdXJPcC5z
ZWxlY3Rpb25DaGFuZ2VkID0gY20uY3VyT3AuZm9yY2VVcGRhdGUgPSBjbS5jdXJPcC51cGRhdGVN
YXhMaW5lID0gdHJ1ZTsKLSAgICAgIH0pOwotICAgIH0KKyAgICAgIGNtLmN1ck9wLnVwZGF0ZU1h
eExpbmUgPSB0cnVlOworICAgICAgaWYgKCFsaW5lSXNIaWRkZW4od2lkZ2V0LmRvYywgbGluZSkg
JiYgd2lkZ2V0LmhlaWdodCAhPSBudWxsKSB7CisgICAgICAgIHZhciBvbGRIZWlnaHQgPSB3aWRn
ZXQuaGVpZ2h0OworICAgICAgICB3aWRnZXQuaGVpZ2h0ID0gbnVsbDsKKyAgICAgICAgdmFyIGRI
ZWlnaHQgPSB3aWRnZXRIZWlnaHQod2lkZ2V0KSAtIG9sZEhlaWdodDsKKyAgICAgICAgaWYgKGRI
ZWlnaHQpCisgICAgICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhlaWdodCArIGRI
ZWlnaHQpOworICAgICAgfQorICAgIH0pOwogICB9OwogCiAgIFRleHRNYXJrZXIucHJvdG90eXBl
LmF0dGFjaExpbmUgPSBmdW5jdGlvbihsaW5lKSB7CkBAIC0zODY0LDQyICs0OTYyLDUzIEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KICAgfTsKIAorICAvLyBDb2xs
YXBzZWQgbWFya2VycyBoYXZlIHVuaXF1ZSBpZHMsIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gb3Jk
ZXIKKyAgLy8gdGhlbSwgd2hpY2ggaXMgbmVlZGVkIGZvciB1bmlxdWVseSBkZXRlcm1pbmluZyBh
biBvdXRlciBtYXJrZXIKKyAgLy8gd2hlbiB0aGV5IG92ZXJsYXAgKHRoZXkgbWF5IG5lc3QsIGJ1
dCBub3QgcGFydGlhbGx5IG92ZXJsYXApLgorICB2YXIgbmV4dE1hcmtlcklkID0gMDsKKworICAv
LyBDcmVhdGUgYSBtYXJrZXIsIHdpcmUgaXQgdXAgdG8gdGhlIHJpZ2h0IGxpbmVzLCBhbmQKICAg
ZnVuY3Rpb24gbWFya1RleHQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSkgeworICAgIC8v
IFNoYXJlZCBtYXJrZXJzIChhY3Jvc3MgbGlua2VkIGRvY3VtZW50cykgYXJlIGhhbmRsZWQgc2Vw
YXJhdGVseQorICAgIC8vIChtYXJrVGV4dFNoYXJlZCB3aWxsIGNhbGwgb3V0IHRvIHRoaXMgYWdh
aW4sIG9uY2UgcGVyCisgICAgLy8gZG9jdW1lbnQpLgogICAgIGlmIChvcHRpb25zICYmIG9wdGlv
bnMuc2hhcmVkKSByZXR1cm4gbWFya1RleHRTaGFyZWQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywg
dHlwZSk7CisgICAgLy8gRW5zdXJlIHdlIGFyZSBpbiBhbiBvcGVyYXRpb24uCiAgICAgaWYgKGRv
Yy5jbSAmJiAhZG9jLmNtLmN1ck9wKSByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFya1RleHQp
KGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpOwogCi0gICAgdmFyIG1hcmtlciA9IG5ldyBU
ZXh0TWFya2VyKGRvYywgdHlwZSk7Ci0gICAgaWYgKHBvc0xlc3ModG8sIGZyb20pIHx8IHBvc0Vx
KGZyb20sIHRvKSAmJiB0eXBlID09ICJyYW5nZSIgJiYKLSAgICAgICAgIShvcHRpb25zLmluY2x1
c2l2ZUxlZnQgJiYgb3B0aW9ucy5pbmNsdXNpdmVSaWdodCkpCisgICAgdmFyIG1hcmtlciA9IG5l
dyBUZXh0TWFya2VyKGRvYywgdHlwZSksIGRpZmYgPSBjbXAoZnJvbSwgdG8pOworICAgIGlmIChv
cHRpb25zKSBjb3B5T2JqKG9wdGlvbnMsIG1hcmtlciwgZmFsc2UpOworICAgIC8vIERvbid0IGNv
bm5lY3QgZW1wdHkgbWFya2VycyB1bmxlc3MgY2xlYXJXaGVuRW1wdHkgaXMgZmFsc2UKKyAgICBp
ZiAoZGlmZiA+IDAgfHwgZGlmZiA9PSAwICYmIG1hcmtlci5jbGVhcldoZW5FbXB0eSAhPT0gZmFs
c2UpCiAgICAgICByZXR1cm4gbWFya2VyOwotICAgIGlmIChvcHRpb25zKSBjb3B5T2JqKG9wdGlv
bnMsIG1hcmtlcik7CiAgICAgaWYgKG1hcmtlci5yZXBsYWNlZFdpdGgpIHsKKyAgICAgIC8vIFNo
b3dpbmcgdXAgYXMgYSB3aWRnZXQgaW1wbGllcyBjb2xsYXBzZWQgKHdpZGdldCByZXBsYWNlcyB0
ZXh0KQogICAgICAgbWFya2VyLmNvbGxhcHNlZCA9IHRydWU7Ci0gICAgICBtYXJrZXIucmVwbGFj
ZWRXaXRoID0gZWx0KCJzcGFuIiwgW21hcmtlci5yZXBsYWNlZFdpdGhdLCAiQ29kZU1pcnJvci13
aWRnZXQiKTsKLSAgICAgIGlmICghb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50cykgbWFya2VyLnJl
cGxhY2VkV2l0aC5pZ25vcmVFdmVudHMgPSB0cnVlOworICAgICAgbWFya2VyLndpZGdldE5vZGUg
PSBlbHQoInNwYW4iLCBbbWFya2VyLnJlcGxhY2VkV2l0aF0sICJDb2RlTWlycm9yLXdpZGdldCIp
OworICAgICAgaWYgKCFvcHRpb25zLmhhbmRsZU1vdXNlRXZlbnRzKSBtYXJrZXIud2lkZ2V0Tm9k
ZS5pZ25vcmVFdmVudHMgPSB0cnVlOworICAgICAgaWYgKG9wdGlvbnMuaW5zZXJ0TGVmdCkgbWFy
a2VyLndpZGdldE5vZGUuaW5zZXJ0TGVmdCA9IHRydWU7CisgICAgfQorICAgIGlmIChtYXJrZXIu
Y29sbGFwc2VkKSB7CisgICAgICBpZiAoY29uZmxpY3RpbmdDb2xsYXBzZWRSYW5nZShkb2MsIGZy
b20ubGluZSwgZnJvbSwgdG8sIG1hcmtlcikgfHwKKyAgICAgICAgICBmcm9tLmxpbmUgIT0gdG8u
bGluZSAmJiBjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgdG8ubGluZSwgZnJvbSwgdG8s
IG1hcmtlcikpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBt
YXJrZXIgcGFydGlhbGx5IG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpOworICAgICAgc2F3
Q29sbGFwc2VkU3BhbnMgPSB0cnVlOwogICAgIH0KLSAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkg
c2F3Q29sbGFwc2VkU3BhbnMgPSB0cnVlOwogCiAgICAgaWYgKG1hcmtlci5hZGRUb0hpc3Rvcnkp
Ci0gICAgICBhZGRUb0hpc3RvcnkoZG9jLCB7ZnJvbTogZnJvbSwgdG86IHRvLCBvcmlnaW46ICJt
YXJrVGV4dCJ9LAotICAgICAgICAgICAgICAgICAgIHtoZWFkOiBkb2Muc2VsLmhlYWQsIGFuY2hv
cjogZG9jLnNlbC5hbmNob3J9LCBOYU4pOworICAgICAgYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywg
e2Zyb206IGZyb20sIHRvOiB0bywgb3JpZ2luOiAibWFya1RleHQifSwgZG9jLnNlbCwgTmFOKTsK
IAotICAgIHZhciBjdXJMaW5lID0gZnJvbS5saW5lLCBzaXplID0gMCwgY29sbGFwc2VkQXRTdGFy
dCwgY29sbGFwc2VkQXRFbmQsIGNtID0gZG9jLmNtLCB1cGRhdGVNYXhMaW5lOworICAgIHZhciBj
dXJMaW5lID0gZnJvbS5saW5lLCBjbSA9IGRvYy5jbSwgdXBkYXRlTWF4TGluZTsKICAgICBkb2Mu
aXRlcihjdXJMaW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGNt
ICYmIG1hcmtlci5jb2xsYXBzZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIHZpc3Vh
bExpbmUoZG9jLCBsaW5lKSA9PSBjbS5kaXNwbGF5Lm1heExpbmUpCisgICAgICBpZiAoY20gJiYg
bWFya2VyLmNvbGxhcHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgdmlzdWFsTGlu
ZShsaW5lKSA9PSBjbS5kaXNwbGF5Lm1heExpbmUpCiAgICAgICAgIHVwZGF0ZU1heExpbmUgPSB0
cnVlOwotICAgICAgdmFyIHNwYW4gPSB7ZnJvbTogbnVsbCwgdG86IG51bGwsIG1hcmtlcjogbWFy
a2VyfTsKLSAgICAgIHNpemUgKz0gbGluZS50ZXh0Lmxlbmd0aDsKLSAgICAgIGlmIChjdXJMaW5l
ID09IGZyb20ubGluZSkge3NwYW4uZnJvbSA9IGZyb20uY2g7IHNpemUgLT0gZnJvbS5jaDt9Ci0g
ICAgICBpZiAoY3VyTGluZSA9PSB0by5saW5lKSB7c3Bhbi50byA9IHRvLmNoOyBzaXplIC09IGxp
bmUudGV4dC5sZW5ndGggLSB0by5jaDt9Ci0gICAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgewot
ICAgICAgICBpZiAoY3VyTGluZSA9PSB0by5saW5lKSBjb2xsYXBzZWRBdEVuZCA9IGNvbGxhcHNl
ZFNwYW5BdChsaW5lLCB0by5jaCk7Ci0gICAgICAgIGlmIChjdXJMaW5lID09IGZyb20ubGluZSkg
Y29sbGFwc2VkQXRTdGFydCA9IGNvbGxhcHNlZFNwYW5BdChsaW5lLCBmcm9tLmNoKTsKLSAgICAg
ICAgZWxzZSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOwotICAgICAgfQotICAgICAgYWRkTWFy
a2VkU3BhbihsaW5lLCBzcGFuKTsKKyAgICAgIGlmIChtYXJrZXIuY29sbGFwc2VkICYmIGN1ckxp
bmUgIT0gZnJvbS5saW5lKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOworICAgICAgYWRkTWFy
a2VkU3BhbihsaW5lLCBuZXcgTWFya2VkU3BhbihtYXJrZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN1ckxpbmUgPT0gZnJvbS5saW5lID8gZnJvbS5jaCA6IG51
bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxpbmUgPT0g
dG8ubGluZSA/IHRvLmNoIDogbnVsbCkpOwogICAgICAgKytjdXJMaW5lOwogICAgIH0pOworICAg
IC8vIGxpbmVJc0hpZGRlbiBkZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgc3BhbnMsIHNv
IG5lZWRzIGEgc2Vjb25kIHBhc3MKICAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgZG9jLml0ZXIo
ZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewogICAgICAgaWYgKGxpbmVJ
c0hpZGRlbihkb2MsIGxpbmUpKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOwogICAgIH0pOwpA
QCAtMzkxMiwzMSArNTAyMSwzMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICAgICAgZG9jLmNsZWFySGlzdG9yeSgpOwogICAgIH0KICAgICBpZiAobWFya2VyLmNvbGxh
cHNlZCkgewotICAgICAgaWYgKGNvbGxhcHNlZEF0U3RhcnQgIT0gY29sbGFwc2VkQXRFbmQpCi0g
ICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgb3Zlcmxh
cHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7Ci0gICAgICBtYXJrZXIuc2l6ZSA9IHNpemU7CisgICAg
ICBtYXJrZXIuaWQgPSArK25leHRNYXJrZXJJZDsKICAgICAgIG1hcmtlci5hdG9taWMgPSB0cnVl
OwogICAgIH0KICAgICBpZiAoY20pIHsKKyAgICAgIC8vIFN5bmMgZWRpdG9yIHN0YXRlCiAgICAg
ICBpZiAodXBkYXRlTWF4TGluZSkgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7Ci0gICAg
ICBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBtYXJrZXIudGl0bGUgfHwgbWFya2VyLnN0YXJ0U3R5
bGUgfHwgbWFya2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jb2xsYXBzZWQpCisgICAgICBpZiAobWFy
a2VyLmNvbGxhcHNlZCkKICAgICAgICAgcmVnQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIHRvLmxpbmUg
KyAxKTsKLSAgICAgIGlmIChtYXJrZXIuYXRvbWljKSByZUNoZWNrU2VsZWN0aW9uKGNtKTsKKyAg
ICAgIGVsc2UgaWYgKG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnRpdGxlIHx8IG1hcmtlci5z
dGFydFN0eWxlIHx8IG1hcmtlci5lbmRTdHlsZSkKKyAgICAgICAgZm9yICh2YXIgaSA9IGZyb20u
bGluZTsgaSA8PSB0by5saW5lOyBpKyspIHJlZ0xpbmVDaGFuZ2UoY20sIGksICJ0ZXh0Iik7Cisg
ICAgICBpZiAobWFya2VyLmF0b21pYykgcmVDaGVja1NlbGVjdGlvbihjbS5kb2MpOworICAgICAg
c2lnbmFsTGF0ZXIoY20sICJtYXJrZXJBZGRlZCIsIGNtLCBtYXJrZXIpOwogICAgIH0KICAgICBy
ZXR1cm4gbWFya2VyOwogICB9CiAKICAgLy8gU0hBUkVEIFRFWFRNQVJLRVJTCiAKLSAgZnVuY3Rp
b24gU2hhcmVkVGV4dE1hcmtlcihtYXJrZXJzLCBwcmltYXJ5KSB7CisgIC8vIEEgc2hhcmVkIG1h
cmtlciBzcGFucyBtdWx0aXBsZSBsaW5rZWQgZG9jdW1lbnRzLiBJdCBpcworICAvLyBpbXBsZW1l
bnRlZCBhcyBhIG1ldGEtbWFya2VyLW9iamVjdCBjb250cm9sbGluZyBtdWx0aXBsZSBub3JtYWwK
KyAgLy8gbWFya2Vycy4KKyAgdmFyIFNoYXJlZFRleHRNYXJrZXIgPSBDb2RlTWlycm9yLlNoYXJl
ZFRleHRNYXJrZXIgPSBmdW5jdGlvbihtYXJrZXJzLCBwcmltYXJ5KSB7CiAgICAgdGhpcy5tYXJr
ZXJzID0gbWFya2VyczsKICAgICB0aGlzLnByaW1hcnkgPSBwcmltYXJ5OwotICAgIGZvciAodmFy
IGkgPSAwLCBtZSA9IHRoaXM7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKSB7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKQogICAgICAgbWFya2Vyc1tpXS5wYXJl
bnQgPSB0aGlzOwotICAgICAgb24obWFya2Vyc1tpXSwgImNsZWFyIiwgZnVuY3Rpb24oKXttZS5j
bGVhcigpO30pOwotICAgIH0KLSAgfQotICBDb2RlTWlycm9yLlNoYXJlZFRleHRNYXJrZXIgPSBT
aGFyZWRUZXh0TWFya2VyOworICB9OwogICBldmVudE1peGluKFNoYXJlZFRleHRNYXJrZXIpOwog
CiAgIFNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7CkBAIC0z
OTQ2LDE3ICs1MDU3LDE3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgdGhpcy5tYXJrZXJzW2ldLmNsZWFyKCk7CiAgICAgc2lnbmFsTGF0ZXIodGhpcywgImNsZWFy
Iik7CiAgIH07Ci0gIFNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbigp
IHsKLSAgICByZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoKTsKKyAgU2hhcmVkVGV4dE1hcmtlci5w
cm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHNpZGUsIGxpbmVPYmopIHsKKyAgICByZXR1cm4gdGhp
cy5wcmltYXJ5LmZpbmQoc2lkZSwgbGluZU9iaik7CiAgIH07CiAKICAgZnVuY3Rpb24gbWFya1Rl
eHRTaGFyZWQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSkgewogICAgIG9wdGlvbnMgPSBj
b3B5T2JqKG9wdGlvbnMpOwogICAgIG9wdGlvbnMuc2hhcmVkID0gZmFsc2U7CiAgICAgdmFyIG1h
cmtlcnMgPSBbbWFya1RleHQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSldLCBwcmltYXJ5
ID0gbWFya2Vyc1swXTsKLSAgICB2YXIgd2lkZ2V0ID0gb3B0aW9ucy5yZXBsYWNlZFdpdGg7Cisg
ICAgdmFyIHdpZGdldCA9IG9wdGlvbnMud2lkZ2V0Tm9kZTsKICAgICBsaW5rZWREb2NzKGRvYywg
ZnVuY3Rpb24oZG9jKSB7Ci0gICAgICBpZiAod2lkZ2V0KSBvcHRpb25zLnJlcGxhY2VkV2l0aCA9
IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7CisgICAgICBpZiAod2lkZ2V0KSBvcHRpb25zLndpZGdl
dE5vZGUgPSB3aWRnZXQuY2xvbmVOb2RlKHRydWUpOwogICAgICAgbWFya2Vycy5wdXNoKG1hcmtU
ZXh0KGRvYywgY2xpcFBvcyhkb2MsIGZyb20pLCBjbGlwUG9zKGRvYywgdG8pLCBvcHRpb25zLCB0
eXBlKSk7CiAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5saW5rZWQubGVuZ3RoOyArK2kp
CiAgICAgICAgIGlmIChkb2MubGlua2VkW2ldLmlzUGFyZW50KSByZXR1cm47CkBAIC0zOTY1LDYw
ICs1MDc2LDEwNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1
cm4gbmV3IFNoYXJlZFRleHRNYXJrZXIobWFya2VycywgcHJpbWFyeSk7CiAgIH0KIAorICBmdW5j
dGlvbiBmaW5kU2hhcmVkTWFya2Vycyhkb2MpIHsKKyAgICByZXR1cm4gZG9jLmZpbmRNYXJrcyhQ
b3MoZG9jLmZpcnN0LCAwKSwgZG9jLmNsaXBQb3MoUG9zKGRvYy5sYXN0TGluZSgpKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24obSkgeyByZXR1cm4gbS5wYXJlbnQ7IH0pOwor
ICB9CisKKyAgZnVuY3Rpb24gY29weVNoYXJlZE1hcmtlcnMoZG9jLCBtYXJrZXJzKSB7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgbWFy
a2VyID0gbWFya2Vyc1tpXSwgcG9zID0gbWFya2VyLmZpbmQoKTsKKyAgICAgIHZhciBtRnJvbSA9
IGRvYy5jbGlwUG9zKHBvcy5mcm9tKSwgbVRvID0gZG9jLmNsaXBQb3MocG9zLnRvKTsKKyAgICAg
IGlmIChjbXAobUZyb20sIG1UbykpIHsKKyAgICAgICAgdmFyIHN1Yk1hcmsgPSBtYXJrVGV4dChk
b2MsIG1Gcm9tLCBtVG8sIG1hcmtlci5wcmltYXJ5LCBtYXJrZXIucHJpbWFyeS50eXBlKTsKKyAg
ICAgICAgbWFya2VyLm1hcmtlcnMucHVzaChzdWJNYXJrKTsKKyAgICAgICAgc3ViTWFyay5wYXJl
bnQgPSBtYXJrZXI7CisgICAgICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gZGV0YWNoU2hh
cmVkTWFya2VycyhtYXJrZXJzKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxl
bmd0aDsgaSsrKSB7CisgICAgICB2YXIgbWFya2VyID0gbWFya2Vyc1tpXSwgbGlua2VkID0gW21h
cmtlci5wcmltYXJ5LmRvY107OworICAgICAgbGlua2VkRG9jcyhtYXJrZXIucHJpbWFyeS5kb2Ms
IGZ1bmN0aW9uKGQpIHsgbGlua2VkLnB1c2goZCk7IH0pOworICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBtYXJrZXIubWFya2Vycy5sZW5ndGg7IGorKykgeworICAgICAgICB2YXIgc3ViTWFya2Vy
ID0gbWFya2VyLm1hcmtlcnNbal07CisgICAgICAgIGlmIChpbmRleE9mKGxpbmtlZCwgc3ViTWFy
a2VyLmRvYykgPT0gLTEpIHsKKyAgICAgICAgICBzdWJNYXJrZXIucGFyZW50ID0gbnVsbDsKKyAg
ICAgICAgICBtYXJrZXIubWFya2Vycy5zcGxpY2Uoai0tLCAxKTsKKyAgICAgICAgfQorICAgICAg
fQorICAgIH0KKyAgfQorCiAgIC8vIFRFWFRNQVJLRVIgU1BBTlMKIAorICBmdW5jdGlvbiBNYXJr
ZWRTcGFuKG1hcmtlciwgZnJvbSwgdG8pIHsKKyAgICB0aGlzLm1hcmtlciA9IG1hcmtlcjsKKyAg
ICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG87CisgIH0KKworICAvLyBTZWFyY2ggYW4g
YXJyYXkgb2Ygc3BhbnMgZm9yIGEgc3BhbiBtYXRjaGluZyB0aGUgZ2l2ZW4gbWFya2VyLgogICBm
dW5jdGlvbiBnZXRNYXJrZWRTcGFuRm9yKHNwYW5zLCBtYXJrZXIpIHsKICAgICBpZiAoc3BhbnMp
IGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBzcGFu
ID0gc3BhbnNbaV07CiAgICAgICBpZiAoc3Bhbi5tYXJrZXIgPT0gbWFya2VyKSByZXR1cm4gc3Bh
bjsKICAgICB9CiAgIH0KKyAgLy8gUmVtb3ZlIGEgc3BhbiBmcm9tIGFuIGFycmF5LCByZXR1cm5p
bmcgdW5kZWZpbmVkIGlmIG5vIHNwYW5zIGFyZQorICAvLyBsZWZ0ICh3ZSBkb24ndCBzdG9yZSBh
cnJheXMgZm9yIGxpbmVzIHdpdGhvdXQgc3BhbnMpLgogICBmdW5jdGlvbiByZW1vdmVNYXJrZWRT
cGFuKHNwYW5zLCBzcGFuKSB7CiAgICAgZm9yICh2YXIgciwgaSA9IDA7IGkgPCBzcGFucy5sZW5n
dGg7ICsraSkKICAgICAgIGlmIChzcGFuc1tpXSAhPSBzcGFuKSAociB8fCAociA9IFtdKSkucHVz
aChzcGFuc1tpXSk7CiAgICAgcmV0dXJuIHI7CiAgIH0KKyAgLy8gQWRkIGEgc3BhbiB0byBhIGxp
bmUuCiAgIGZ1bmN0aW9uIGFkZE1hcmtlZFNwYW4obGluZSwgc3BhbikgewogICAgIGxpbmUubWFy
a2VkU3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zID8gbGluZS5tYXJrZWRTcGFucy5jb25jYXQoW3Nw
YW5dKSA6IFtzcGFuXTsKICAgICBzcGFuLm1hcmtlci5hdHRhY2hMaW5lKGxpbmUpOwogICB9CiAK
KyAgLy8gVXNlZCBmb3IgdGhlIGFsZ29yaXRobSB0aGF0IGFkanVzdHMgbWFya2VycyBmb3IgYSBj
aGFuZ2UgaW4gdGhlCisgIC8vIGRvY3VtZW50LiBUaGVzZSBmdW5jdGlvbnMgY3V0IGFuIGFycmF5
IG9mIHNwYW5zIGF0IGEgZ2l2ZW4KKyAgLy8gY2hhcmFjdGVyIHBvc2l0aW9uLCByZXR1cm5pbmcg
YW4gYXJyYXkgb2YgcmVtYWluaW5nIGNodW5rcyAob3IKKyAgLy8gdW5kZWZpbmVkIGlmIG5vdGhp
bmcgcmVtYWlucykuCiAgIGZ1bmN0aW9uIG1hcmtlZFNwYW5zQmVmb3JlKG9sZCwgc3RhcnRDaCwg
aXNJbnNlcnQpIHsKICAgICBpZiAob2xkKSBmb3IgKHZhciBpID0gMCwgbnc7IGkgPCBvbGQubGVu
Z3RoOyArK2kpIHsKICAgICAgIHZhciBzcGFuID0gb2xkW2ldLCBtYXJrZXIgPSBzcGFuLm1hcmtl
cjsKICAgICAgIHZhciBzdGFydHNCZWZvcmUgPSBzcGFuLmZyb20gPT0gbnVsbCB8fCAobWFya2Vy
LmluY2x1c2l2ZUxlZnQgPyBzcGFuLmZyb20gPD0gc3RhcnRDaCA6IHNwYW4uZnJvbSA8IHN0YXJ0
Q2gpOwotICAgICAgaWYgKHN0YXJ0c0JlZm9yZSB8fAotICAgICAgICAgIChtYXJrZXIuaW5jbHVz
aXZlTGVmdCAmJiBtYXJrZXIuaW5jbHVzaXZlUmlnaHQgfHwgbWFya2VyLnR5cGUgPT0gImJvb2tt
YXJrIikgJiYKLSAgICAgICAgICBzcGFuLmZyb20gPT0gc3RhcnRDaCAmJiAoIWlzSW5zZXJ0IHx8
ICFzcGFuLm1hcmtlci5pbnNlcnRMZWZ0KSkgeworICAgICAgaWYgKHN0YXJ0c0JlZm9yZSB8fCBz
cGFuLmZyb20gPT0gc3RhcnRDaCAmJiBtYXJrZXIudHlwZSA9PSAiYm9va21hcmsiICYmICghaXNJ
bnNlcnQgfHwgIXNwYW4ubWFya2VyLmluc2VydExlZnQpKSB7CiAgICAgICAgIHZhciBlbmRzQWZ0
ZXIgPSBzcGFuLnRvID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IHNwYW4udG8g
Pj0gc3RhcnRDaCA6IHNwYW4udG8gPiBzdGFydENoKTsKLSAgICAgICAgKG53IHx8IChudyA9IFtd
KSkucHVzaCh7ZnJvbTogc3Bhbi5mcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0bzogZW5kc0FmdGVyID8gbnVsbCA6IHNwYW4udG8sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcmtlcjogbWFya2VyfSk7CisgICAgICAgIChudyB8fCAobncgPSBbXSkpLnB1
c2gobmV3IE1hcmtlZFNwYW4obWFya2VyLCBzcGFuLmZyb20sIGVuZHNBZnRlciA/IG51bGwgOiBz
cGFuLnRvKSk7CiAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBudzsKICAgfQotCiAgIGZ1bmN0
aW9uIG1hcmtlZFNwYW5zQWZ0ZXIob2xkLCBlbmRDaCwgaXNJbnNlcnQpIHsKICAgICBpZiAob2xk
KSBmb3IgKHZhciBpID0gMCwgbnc7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBz
cGFuID0gb2xkW2ldLCBtYXJrZXIgPSBzcGFuLm1hcmtlcjsKICAgICAgIHZhciBlbmRzQWZ0ZXIg
PSBzcGFuLnRvID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IHNwYW4udG8gPj0g
ZW5kQ2ggOiBzcGFuLnRvID4gZW5kQ2gpOwotICAgICAgaWYgKGVuZHNBZnRlciB8fCBtYXJrZXIu
dHlwZSA9PSAiYm9va21hcmsiICYmIHNwYW4uZnJvbSA9PSBlbmRDaCAmJiAoIWlzSW5zZXJ0IHx8
IHNwYW4ubWFya2VyLmluc2VydExlZnQpKSB7CisgICAgICBpZiAoZW5kc0FmdGVyIHx8IHNwYW4u
ZnJvbSA9PSBlbmRDaCAmJiBtYXJrZXIudHlwZSA9PSAiYm9va21hcmsiICYmICghaXNJbnNlcnQg
fHwgc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkpIHsKICAgICAgICAgdmFyIHN0YXJ0c0JlZm9yZSA9
IHNwYW4uZnJvbSA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IHNwYW4uZnJvbSA8
PSBlbmRDaCA6IHNwYW4uZnJvbSA8IGVuZENoKTsKLSAgICAgICAgKG53IHx8IChudyA9IFtdKSku
cHVzaCh7ZnJvbTogc3RhcnRzQmVmb3JlID8gbnVsbCA6IHNwYW4uZnJvbSAtIGVuZENoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogc3Bhbi50byA9PSBudWxsID8gbnVsbCA6
IHNwYW4udG8gLSBlbmRDaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vy
OiBtYXJrZXJ9KTsKKyAgICAgICAgKG53IHx8IChudyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3Bh
bihtYXJrZXIsIHN0YXJ0c0JlZm9yZSA/IG51bGwgOiBzcGFuLmZyb20gLSBlbmRDaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnRvID09IG51bGwg
PyBudWxsIDogc3Bhbi50byAtIGVuZENoKSk7CiAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBu
dzsKICAgfQogCisgIC8vIEdpdmVuIGEgY2hhbmdlIG9iamVjdCwgY29tcHV0ZSB0aGUgbmV3IHNl
dCBvZiBtYXJrZXIgc3BhbnMgdGhhdAorICAvLyBjb3ZlciB0aGUgbGluZSBpbiB3aGljaCB0aGUg
Y2hhbmdlIHRvb2sgcGxhY2UuIFJlbW92ZXMgc3BhbnMKKyAgLy8gZW50aXJlbHkgd2l0aGluIHRo
ZSBjaGFuZ2UsIHJlY29ubmVjdHMgc3BhbnMgYmVsb25naW5nIHRvIHRoZQorICAvLyBzYW1lIG1h
cmtlciB0aGF0IGFwcGVhciBvbiBib3RoIHNpZGVzIG9mIHRoZSBjaGFuZ2UsIGFuZCBjdXRzIG9m
ZgorICAvLyBzcGFucyBwYXJ0aWFsbHkgd2l0aGluIHRoZSBjaGFuZ2UuIFJldHVybnMgYW4gYXJy
YXkgb2Ygc3BhbgorICAvLyBhcnJheXMgd2l0aCBvbmUgZWxlbWVudCBmb3IgZWFjaCBsaW5lIGlu
IChhZnRlcikgdGhlIGNoYW5nZS4KICAgZnVuY3Rpb24gc3RyZXRjaFNwYW5zT3ZlckNoYW5nZShk
b2MsIGNoYW5nZSkgewogICAgIHZhciBvbGRGaXJzdCA9IGlzTGluZShkb2MsIGNoYW5nZS5mcm9t
LmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFuZ2UuZnJvbS5saW5lKS5tYXJrZWRTcGFuczsKICAg
ICB2YXIgb2xkTGFzdCA9IGlzTGluZShkb2MsIGNoYW5nZS50by5saW5lKSAmJiBnZXRMaW5lKGRv
YywgY2hhbmdlLnRvLmxpbmUpLm1hcmtlZFNwYW5zOwogICAgIGlmICghb2xkRmlyc3QgJiYgIW9s
ZExhc3QpIHJldHVybiBudWxsOwogCi0gICAgdmFyIHN0YXJ0Q2ggPSBjaGFuZ2UuZnJvbS5jaCwg
ZW5kQ2ggPSBjaGFuZ2UudG8uY2gsIGlzSW5zZXJ0ID0gcG9zRXEoY2hhbmdlLmZyb20sIGNoYW5n
ZS50byk7CisgICAgdmFyIHN0YXJ0Q2ggPSBjaGFuZ2UuZnJvbS5jaCwgZW5kQ2ggPSBjaGFuZ2Uu
dG8uY2gsIGlzSW5zZXJ0ID0gY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDA7CiAgICAg
Ly8gR2V0IHRoZSBzcGFucyB0aGF0ICdzdGljayBvdXQnIG9uIGJvdGggc2lkZXMKICAgICB2YXIg
Zmlyc3QgPSBtYXJrZWRTcGFuc0JlZm9yZShvbGRGaXJzdCwgc3RhcnRDaCwgaXNJbnNlcnQpOwog
ICAgIHZhciBsYXN0ID0gbWFya2VkU3BhbnNBZnRlcihvbGRMYXN0LCBlbmRDaCwgaXNJbnNlcnQp
OwpAQCAtNDA1MywxMyArNTIwOCw5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgICB9CiAgICAgICB9CiAgICAgfQotICAgIGlmIChzYW1lTGluZSAmJiBmaXJzdCkg
ewotICAgICAgLy8gTWFrZSBzdXJlIHdlIGRpZG4ndCBjcmVhdGUgYW55IHplcm8tbGVuZ3RoIHNw
YW5zCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0Lmxlbmd0aDsgKytpKQotICAgICAg
ICBpZiAoZmlyc3RbaV0uZnJvbSAhPSBudWxsICYmIGZpcnN0W2ldLmZyb20gPT0gZmlyc3RbaV0u
dG8gJiYgZmlyc3RbaV0ubWFya2VyLnR5cGUgIT0gImJvb2ttYXJrIikKLSAgICAgICAgICBmaXJz
dC5zcGxpY2UoaS0tLCAxKTsKLSAgICAgIGlmICghZmlyc3QubGVuZ3RoKSBmaXJzdCA9IG51bGw7
Ci0gICAgfQorICAgIC8vIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgY3JlYXRlIGFueSB6ZXJvLWxlbmd0
aCBzcGFucworICAgIGlmIChmaXJzdCkgZmlyc3QgPSBjbGVhckVtcHR5U3BhbnMoZmlyc3QpOwor
ICAgIGlmIChsYXN0ICYmIGxhc3QgIT0gZmlyc3QpIGxhc3QgPSBjbGVhckVtcHR5U3BhbnMobGFz
dCk7CiAKICAgICB2YXIgbmV3TWFya2VycyA9IFtmaXJzdF07CiAgICAgaWYgKCFzYW1lTGluZSkg
ewpAQCAtNDA2OCw3ICs1MjE5LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICBpZiAoZ2FwID4gMCAmJiBmaXJzdCkKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBmaXJzdC5sZW5ndGg7ICsraSkKICAgICAgICAgICBpZiAoZmlyc3RbaV0udG8gPT0gbnVsbCkK
LSAgICAgICAgICAgIChnYXBNYXJrZXJzIHx8IChnYXBNYXJrZXJzID0gW10pKS5wdXNoKHtmcm9t
OiBudWxsLCB0bzogbnVsbCwgbWFya2VyOiBmaXJzdFtpXS5tYXJrZXJ9KTsKKyAgICAgICAgICAg
IChnYXBNYXJrZXJzIHx8IChnYXBNYXJrZXJzID0gW10pKS5wdXNoKG5ldyBNYXJrZWRTcGFuKGZp
cnN0W2ldLm1hcmtlciwgbnVsbCwgbnVsbCkpOwogICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBn
YXA7ICsraSkKICAgICAgICAgbmV3TWFya2Vycy5wdXNoKGdhcE1hcmtlcnMpOwogICAgICAgbmV3
TWFya2Vycy5wdXNoKGxhc3QpOwpAQCAtNDA3Niw2ICs1MjI3LDIyIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBuZXdNYXJrZXJzOwogICB9CiAKKyAgLy8g
UmVtb3ZlIHNwYW5zIHRoYXQgYXJlIGVtcHR5IGFuZCBkb24ndCBoYXZlIGEgY2xlYXJXaGVuRW1w
dHkKKyAgLy8gb3B0aW9uIG9mIGZhbHNlLgorICBmdW5jdGlvbiBjbGVhckVtcHR5U3BhbnMoc3Bh
bnMpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7CisgICAg
ICB2YXIgc3BhbiA9IHNwYW5zW2ldOworICAgICAgaWYgKHNwYW4uZnJvbSAhPSBudWxsICYmIHNw
YW4uZnJvbSA9PSBzcGFuLnRvICYmIHNwYW4ubWFya2VyLmNsZWFyV2hlbkVtcHR5ICE9PSBmYWxz
ZSkKKyAgICAgICAgc3BhbnMuc3BsaWNlKGktLSwgMSk7CisgICAgfQorICAgIGlmICghc3BhbnMu
bGVuZ3RoKSByZXR1cm4gbnVsbDsKKyAgICByZXR1cm4gc3BhbnM7CisgIH0KKworICAvLyBVc2Vk
IGZvciB1bi9yZS1kb2luZyBjaGFuZ2VzIGZyb20gdGhlIGhpc3RvcnkuIENvbWJpbmVzIHRoZQor
ICAvLyByZXN1bHQgb2YgY29tcHV0aW5nIHRoZSBleGlzdGluZyBzcGFucyB3aXRoIHRoZSBzZXQg
b2Ygc3BhbnMgdGhhdAorICAvLyBleGlzdGVkIGluIHRoZSBoaXN0b3J5IChzbyB0aGF0IGRlbGV0
aW5nIGFyb3VuZCBhIHNwYW4gYW5kIHRoZW4KKyAgLy8gdW5kb2luZyBicmluZ3MgYmFjayB0aGUg
c3BhbikuCiAgIGZ1bmN0aW9uIG1lcmdlT2xkU3BhbnMoZG9jLCBjaGFuZ2UpIHsKICAgICB2YXIg
b2xkID0gZ2V0T2xkU3BhbnMoZG9jLCBjaGFuZ2UpOwogICAgIHZhciBzdHJldGNoZWQgPSBzdHJl
dGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKTsKQEAgLTQwOTgsNiArNTI2NSw3IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBvbGQ7CiAgIH0KIAor
ICAvLyBVc2VkIHRvICdjbGlwJyBvdXQgcmVhZE9ubHkgcmFuZ2VzIHdoZW4gbWFraW5nIGEgY2hh
bmdlLgogICBmdW5jdGlvbiByZW1vdmVSZWFkT25seVJhbmdlcyhkb2MsIGZyb20sIHRvKSB7CiAg
ICAgdmFyIG1hcmtlcnMgPSBudWxsOwogICAgIGRvYy5pdGVyKGZyb20ubGluZSwgdG8ubGluZSAr
IDEsIGZ1bmN0aW9uKGxpbmUpIHsKQEAgLTQxMTAsMTQgKzUyNzgsMTQgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKCFtYXJrZXJzKSByZXR1cm4gbnVsbDsKICAg
ICB2YXIgcGFydHMgPSBbe2Zyb206IGZyb20sIHRvOiB0b31dOwogICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIG1rID0gbWFya2Vyc1tpXSwg
bSA9IG1rLmZpbmQoKTsKKyAgICAgIHZhciBtayA9IG1hcmtlcnNbaV0sIG0gPSBtay5maW5kKDAp
OwogICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJ0cy5sZW5ndGg7ICsraikgewogICAgICAg
ICB2YXIgcCA9IHBhcnRzW2pdOwotICAgICAgICBpZiAocG9zTGVzcyhwLnRvLCBtLmZyb20pIHx8
IHBvc0xlc3MobS50bywgcC5mcm9tKSkgY29udGludWU7Ci0gICAgICAgIHZhciBuZXdQYXJ0cyA9
IFtqLCAxXTsKLSAgICAgICAgaWYgKHBvc0xlc3MocC5mcm9tLCBtLmZyb20pIHx8ICFtay5pbmNs
dXNpdmVMZWZ0ICYmIHBvc0VxKHAuZnJvbSwgbS5mcm9tKSkKKyAgICAgICAgaWYgKGNtcChwLnRv
LCBtLmZyb20pIDwgMCB8fCBjbXAocC5mcm9tLCBtLnRvKSA+IDApIGNvbnRpbnVlOworICAgICAg
ICB2YXIgbmV3UGFydHMgPSBbaiwgMV0sIGRmcm9tID0gY21wKHAuZnJvbSwgbS5mcm9tKSwgZHRv
ID0gY21wKHAudG8sIG0udG8pOworICAgICAgICBpZiAoZGZyb20gPCAwIHx8ICFtay5pbmNsdXNp
dmVMZWZ0ICYmICFkZnJvbSkKICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKHtmcm9tOiBwLmZyb20s
IHRvOiBtLmZyb219KTsKLSAgICAgICAgaWYgKHBvc0xlc3MobS50bywgcC50bykgfHwgIW1rLmlu
Y2x1c2l2ZVJpZ2h0ICYmIHBvc0VxKHAudG8sIG0udG8pKQorICAgICAgICBpZiAoZHRvID4gMCB8
fCAhbWsuaW5jbHVzaXZlUmlnaHQgJiYgIWR0bykKICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKHtm
cm9tOiBtLnRvLCB0bzogcC50b30pOwogICAgICAgICBwYXJ0cy5zcGxpY2UuYXBwbHkocGFydHMs
IG5ld1BhcnRzKTsKICAgICAgICAgaiArPSBuZXdQYXJ0cy5sZW5ndGggLSAxOwpAQCAtNDEyNiw3
MSArNTI5NCwxNDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0
dXJuIHBhcnRzOwogICB9CiAKLSAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0KGxpbmUsIGNoKSB7
CisgIC8vIENvbm5lY3Qgb3IgZGlzY29ubmVjdCBzcGFucyBmcm9tIGEgbGluZS4KKyAgZnVuY3Rp
b24gZGV0YWNoTWFya2VkU3BhbnMobGluZSkgeworICAgIHZhciBzcGFucyA9IGxpbmUubWFya2Vk
U3BhbnM7CisgICAgaWYgKCFzcGFucykgcmV0dXJuOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c3BhbnMubGVuZ3RoOyArK2kpCisgICAgICBzcGFuc1tpXS5tYXJrZXIuZGV0YWNoTGluZShsaW5l
KTsKKyAgICBsaW5lLm1hcmtlZFNwYW5zID0gbnVsbDsKKyAgfQorICBmdW5jdGlvbiBhdHRhY2hN
YXJrZWRTcGFucyhsaW5lLCBzcGFucykgeworICAgIGlmICghc3BhbnMpIHJldHVybjsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKQorICAgICAgc3BhbnNbaV0ubWFy
a2VyLmF0dGFjaExpbmUobGluZSk7CisgICAgbGluZS5tYXJrZWRTcGFucyA9IHNwYW5zOworICB9
CisKKyAgLy8gSGVscGVycyB1c2VkIHdoZW4gY29tcHV0aW5nIHdoaWNoIG92ZXJsYXBwaW5nIGNv
bGxhcHNlZCBzcGFuCisgIC8vIGNvdW50cyBhcyB0aGUgbGFyZ2VyIG9uZS4KKyAgZnVuY3Rpb24g
ZXh0cmFMZWZ0KG1hcmtlcikgeyByZXR1cm4gbWFya2VyLmluY2x1c2l2ZUxlZnQgPyAtMSA6IDA7
IH0KKyAgZnVuY3Rpb24gZXh0cmFSaWdodChtYXJrZXIpIHsgcmV0dXJuIG1hcmtlci5pbmNsdXNp
dmVSaWdodCA/IDEgOiAwOyB9CisKKyAgLy8gUmV0dXJucyBhIG51bWJlciBpbmRpY2F0aW5nIHdo
aWNoIG9mIHR3byBvdmVybGFwcGluZyBjb2xsYXBzZWQKKyAgLy8gc3BhbnMgaXMgbGFyZ2VyIChh
bmQgdGh1cyBpbmNsdWRlcyB0aGUgb3RoZXIpLiBGYWxscyBiYWNrIHRvCisgIC8vIGNvbXBhcmlu
ZyBpZHMgd2hlbiB0aGUgc3BhbnMgY292ZXIgZXhhY3RseSB0aGUgc2FtZSByYW5nZS4KKyAgZnVu
Y3Rpb24gY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoYSwgYikgeworICAgIHZhciBsZW5EaWZmID0g
YS5saW5lcy5sZW5ndGggLSBiLmxpbmVzLmxlbmd0aDsKKyAgICBpZiAobGVuRGlmZiAhPSAwKSBy
ZXR1cm4gbGVuRGlmZjsKKyAgICB2YXIgYVBvcyA9IGEuZmluZCgpLCBiUG9zID0gYi5maW5kKCk7
CisgICAgdmFyIGZyb21DbXAgPSBjbXAoYVBvcy5mcm9tLCBiUG9zLmZyb20pIHx8IGV4dHJhTGVm
dChhKSAtIGV4dHJhTGVmdChiKTsKKyAgICBpZiAoZnJvbUNtcCkgcmV0dXJuIC1mcm9tQ21wOwor
ICAgIHZhciB0b0NtcCA9IGNtcChhUG9zLnRvLCBiUG9zLnRvKSB8fCBleHRyYVJpZ2h0KGEpIC0g
ZXh0cmFSaWdodChiKTsKKyAgICBpZiAodG9DbXApIHJldHVybiB0b0NtcDsKKyAgICByZXR1cm4g
Yi5pZCAtIGEuaWQ7CisgIH0KKworICAvLyBGaW5kIG91dCB3aGV0aGVyIGEgbGluZSBlbmRzIG9y
IHN0YXJ0cyBpbiBhIGNvbGxhcHNlZCBzcGFuLiBJZgorICAvLyBzbywgcmV0dXJuIHRoZSBtYXJr
ZXIgZm9yIHRoYXQgc3Bhbi4KKyAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0U2lkZShsaW5lLCBz
dGFydCkgewogICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNw
YW5zLCBmb3VuZDsKICAgICBpZiAoc3BzKSBmb3IgKHZhciBzcCwgaSA9IDA7IGkgPCBzcHMubGVu
Z3RoOyArK2kpIHsKICAgICAgIHNwID0gc3BzW2ldOwotICAgICAgaWYgKCFzcC5tYXJrZXIuY29s
bGFwc2VkKSBjb250aW51ZTsKLSAgICAgIGlmICgoc3AuZnJvbSA9PSBudWxsIHx8IHNwLmZyb20g
PCBjaCkgJiYKLSAgICAgICAgICAoc3AudG8gPT0gbnVsbCB8fCBzcC50byA+IGNoKSAmJgotICAg
ICAgICAgICghZm91bmQgfHwgZm91bmQud2lkdGggPCBzcC5tYXJrZXIud2lkdGgpKQorICAgICAg
aWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgKHN0YXJ0ID8gc3AuZnJvbSA6IHNwLnRvKSA9PSBu
dWxsICYmCisgICAgICAgICAgKCFmb3VuZCB8fCBjb21wYXJlQ29sbGFwc2VkTWFya2Vycyhmb3Vu
ZCwgc3AubWFya2VyKSA8IDApKQogICAgICAgICBmb3VuZCA9IHNwLm1hcmtlcjsKICAgICB9CiAg
ICAgcmV0dXJuIGZvdW5kOwogICB9Ci0gIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdFN0YXJ0KGxp
bmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdChsaW5lLCAtMSk7IH0KLSAgZnVuY3Rpb24gY29s
bGFwc2VkU3BhbkF0RW5kKGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdChsaW5lLCBsaW5l
LnRleHQubGVuZ3RoICsgMSk7IH0KKyAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0U3RhcnQobGlu
ZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0U2lkZShsaW5lLCB0cnVlKTsgfQorICBmdW5jdGlv
biBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0U2lkZShs
aW5lLCBmYWxzZSk7IH0KKworICAvLyBUZXN0IHdoZXRoZXIgdGhlcmUgZXhpc3RzIGEgY29sbGFw
c2VkIHNwYW4gdGhhdCBwYXJ0aWFsbHkKKyAgLy8gb3ZlcmxhcHMgKGNvdmVycyB0aGUgc3RhcnQg
b3IgZW5kLCBidXQgbm90IGJvdGgpIG9mIGEgbmV3IHNwYW4uCisgIC8vIFN1Y2ggb3ZlcmxhcCBp
cyBub3QgYWxsb3dlZC4KKyAgZnVuY3Rpb24gY29uZmxpY3RpbmdDb2xsYXBzZWRSYW5nZShkb2Ms
IGxpbmVObywgZnJvbSwgdG8sIG1hcmtlcikgeworICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2Ms
IGxpbmVObyk7CisgICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYmIGxpbmUubWFya2Vk
U3BhbnM7CisgICAgaWYgKHNwcykgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kp
IHsKKyAgICAgIHZhciBzcCA9IHNwc1tpXTsKKyAgICAgIGlmICghc3AubWFya2VyLmNvbGxhcHNl
ZCkgY29udGludWU7CisgICAgICB2YXIgZm91bmQgPSBzcC5tYXJrZXIuZmluZCgwKTsKKyAgICAg
IHZhciBmcm9tQ21wID0gY21wKGZvdW5kLmZyb20sIGZyb20pIHx8IGV4dHJhTGVmdChzcC5tYXJr
ZXIpIC0gZXh0cmFMZWZ0KG1hcmtlcik7CisgICAgICB2YXIgdG9DbXAgPSBjbXAoZm91bmQudG8s
IHRvKSB8fCBleHRyYVJpZ2h0KHNwLm1hcmtlcikgLSBleHRyYVJpZ2h0KG1hcmtlcik7CisgICAg
ICBpZiAoZnJvbUNtcCA+PSAwICYmIHRvQ21wIDw9IDAgfHwgZnJvbUNtcCA8PSAwICYmIHRvQ21w
ID49IDApIGNvbnRpbnVlOworICAgICAgaWYgKGZyb21DbXAgPD0gMCAmJiAoY21wKGZvdW5kLnRv
LCBmcm9tKSB8fCBleHRyYVJpZ2h0KHNwLm1hcmtlcikgLSBleHRyYUxlZnQobWFya2VyKSkgPiAw
IHx8CisgICAgICAgICAgZnJvbUNtcCA+PSAwICYmIChjbXAoZm91bmQuZnJvbSwgdG8pIHx8IGV4
dHJhTGVmdChzcC5tYXJrZXIpIC0gZXh0cmFSaWdodChtYXJrZXIpKSA8IDApCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgfQogCi0gIGZ1bmN0aW9uIHZpc3VhbExpbmUoZG9jLCBsaW5l
KSB7CisgIC8vIEEgdmlzdWFsIGxpbmUgaXMgYSBsaW5lIGFzIGRyYXduIG9uIHRoZSBzY3JlZW4u
IEZvbGRpbmcsIGZvcgorICAvLyBleGFtcGxlLCBjYW4gY2F1c2UgbXVsdGlwbGUgbG9naWNhbCBs
aW5lcyB0byBhcHBlYXIgb24gdGhlIHNhbWUKKyAgLy8gdmlzdWFsIGxpbmUuIFRoaXMgZmluZHMg
dGhlIHN0YXJ0IG9mIHRoZSB2aXN1YWwgbGluZSB0aGF0IHRoZQorICAvLyBnaXZlbiBsaW5lIGlz
IHBhcnQgb2YgKHVzdWFsbHkgdGhhdCBpcyB0aGUgbGluZSBpdHNlbGYpLgorICBmdW5jdGlvbiB2
aXN1YWxMaW5lKGxpbmUpIHsKICAgICB2YXIgbWVyZ2VkOwogICAgIHdoaWxlIChtZXJnZWQgPSBj
b2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSkKLSAgICAgIGxpbmUgPSBnZXRMaW5lKGRvYywgbWVy
Z2VkLmZpbmQoKS5mcm9tLmxpbmUpOworICAgICAgbGluZSA9IG1lcmdlZC5maW5kKC0xLCB0cnVl
KS5saW5lOwogICAgIHJldHVybiBsaW5lOwogICB9CiAKKyAgLy8gUmV0dXJucyBhbiBhcnJheSBv
ZiBsb2dpY2FsIGxpbmVzIHRoYXQgY29udGludWUgdGhlIHZpc3VhbCBsaW5lCisgIC8vIHN0YXJ0
ZWQgYnkgdGhlIGFyZ3VtZW50LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG5vIHN1Y2ggbGlu
ZXMuCisgIGZ1bmN0aW9uIHZpc3VhbExpbmVDb250aW51ZWQobGluZSkgeworICAgIHZhciBtZXJn
ZWQsIGxpbmVzOworICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkp
IHsKKyAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lOworICAgICAgKGxpbmVz
IHx8IChsaW5lcyA9IFtdKSkucHVzaChsaW5lKTsKKyAgICB9CisgICAgcmV0dXJuIGxpbmVzOwor
ICB9CisKKyAgLy8gR2V0IHRoZSBsaW5lIG51bWJlciBvZiB0aGUgc3RhcnQgb2YgdGhlIHZpc3Vh
bCBsaW5lIHRoYXQgdGhlCisgIC8vIGdpdmVuIGxpbmUgbnVtYmVyIGlzIHBhcnQgb2YuCisgIGZ1
bmN0aW9uIHZpc3VhbExpbmVObyhkb2MsIGxpbmVOKSB7CisgICAgdmFyIGxpbmUgPSBnZXRMaW5l
KGRvYywgbGluZU4pLCB2aXMgPSB2aXN1YWxMaW5lKGxpbmUpOworICAgIGlmIChsaW5lID09IHZp
cykgcmV0dXJuIGxpbmVOOworICAgIHJldHVybiBsaW5lTm8odmlzKTsKKyAgfQorICAvLyBHZXQg
dGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgbmV4dCB2aXN1YWwgbGluZSBhZnRl
cgorICAvLyB0aGUgZ2l2ZW4gbGluZS4KKyAgZnVuY3Rpb24gdmlzdWFsTGluZUVuZE5vKGRvYywg
bGluZU4pIHsKKyAgICBpZiAobGluZU4gPiBkb2MubGFzdExpbmUoKSkgcmV0dXJuIGxpbmVOOwor
ICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGxpbmVOKSwgbWVyZ2VkOworICAgIGlmICghbGlu
ZUlzSGlkZGVuKGRvYywgbGluZSkpIHJldHVybiBsaW5lTjsKKyAgICB3aGlsZSAobWVyZ2VkID0g
Y29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpKQorICAgICAgbGluZSA9IG1lcmdlZC5maW5kKDEsIHRy
dWUpLmxpbmU7CisgICAgcmV0dXJuIGxpbmVObyhsaW5lKSArIDE7CisgIH0KKworICAvLyBDb21w
dXRlIHdoZXRoZXIgYSBsaW5lIGlzIGhpZGRlbi4gTGluZXMgY291bnQgYXMgaGlkZGVuIHdoZW4g
dGhleQorICAvLyBhcmUgcGFydCBvZiBhIHZpc3VhbCBsaW5lIHRoYXQgc3RhcnRzIHdpdGggYW5v
dGhlciBsaW5lLCBvciB3aGVuCisgIC8vIHRoZXkgYXJlIGVudGlyZWx5IGNvdmVyZWQgYnkgY29s
bGFwc2VkLCBub24td2lkZ2V0IHNwYW4uCiAgIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbihkb2MsIGxp
bmUpIHsKICAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFu
czsKICAgICBpZiAoc3BzKSBmb3IgKHZhciBzcCwgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kp
IHsKICAgICAgIHNwID0gc3BzW2ldOwogICAgICAgaWYgKCFzcC5tYXJrZXIuY29sbGFwc2VkKSBj
b250aW51ZTsKICAgICAgIGlmIChzcC5mcm9tID09IG51bGwpIHJldHVybiB0cnVlOwotICAgICAg
aWYgKHNwLm1hcmtlci5yZXBsYWNlZFdpdGgpIGNvbnRpbnVlOworICAgICAgaWYgKHNwLm1hcmtl
ci53aWRnZXROb2RlKSBjb250aW51ZTsKICAgICAgIGlmIChzcC5mcm9tID09IDAgJiYgc3AubWFy
a2VyLmluY2x1c2l2ZUxlZnQgJiYgbGluZUlzSGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgfQogICBmdW5jdGlvbiBsaW5lSXNIaWRkZW5J
bm5lcihkb2MsIGxpbmUsIHNwYW4pIHsKICAgICBpZiAoc3Bhbi50byA9PSBudWxsKSB7Ci0gICAg
ICB2YXIgZW5kID0gc3Bhbi5tYXJrZXIuZmluZCgpLnRvLCBlbmRMaW5lID0gZ2V0TGluZShkb2Ms
IGVuZC5saW5lKTsKLSAgICAgIHJldHVybiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGVuZExpbmUs
IGdldE1hcmtlZFNwYW5Gb3IoZW5kTGluZS5tYXJrZWRTcGFucywgc3Bhbi5tYXJrZXIpKTsKKyAg
ICAgIHZhciBlbmQgPSBzcGFuLm1hcmtlci5maW5kKDEsIHRydWUpOworICAgICAgcmV0dXJuIGxp
bmVJc0hpZGRlbklubmVyKGRvYywgZW5kLmxpbmUsIGdldE1hcmtlZFNwYW5Gb3IoZW5kLmxpbmUu
bWFya2VkU3BhbnMsIHNwYW4ubWFya2VyKSk7CiAgICAgfQogICAgIGlmIChzcGFuLm1hcmtlci5p
bmNsdXNpdmVSaWdodCAmJiBzcGFuLnRvID09IGxpbmUudGV4dC5sZW5ndGgpCiAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBmb3IgKHZhciBzcCwgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxl
bmd0aDsgKytpKSB7CiAgICAgICBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV07Ci0gICAgICBpZiAo
c3AubWFya2VyLmNvbGxhcHNlZCAmJiAhc3AubWFya2VyLnJlcGxhY2VkV2l0aCAmJiBzcC5mcm9t
ID09IHNwYW4udG8gJiYKKyAgICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmICFzcC5tYXJr
ZXIud2lkZ2V0Tm9kZSAmJiBzcC5mcm9tID09IHNwYW4udG8gJiYKKyAgICAgICAgICAoc3AudG8g
PT0gbnVsbCB8fCBzcC50byAhPSBzcGFuLmZyb20pICYmCiAgICAgICAgICAgKHNwLm1hcmtlci5p
bmNsdXNpdmVMZWZ0IHx8IHNwYW4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSAmJgogICAgICAgICAg
IGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKSByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
IH0KIAotICBmdW5jdGlvbiBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKSB7Ci0gICAgdmFyIHNwYW5z
ID0gbGluZS5tYXJrZWRTcGFuczsKLSAgICBpZiAoIXNwYW5zKSByZXR1cm47Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkKLSAgICAgIHNwYW5zW2ldLm1hcmtlci5k
ZXRhY2hMaW5lKGxpbmUpOwotICAgIGxpbmUubWFya2VkU3BhbnMgPSBudWxsOwotICB9Ci0KLSAg
ZnVuY3Rpb24gYXR0YWNoTWFya2VkU3BhbnMobGluZSwgc3BhbnMpIHsKLSAgICBpZiAoIXNwYW5z
KSByZXR1cm47Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkKLSAg
ICAgIHNwYW5zW2ldLm1hcmtlci5hdHRhY2hMaW5lKGxpbmUpOwotICAgIGxpbmUubWFya2VkU3Bh
bnMgPSBzcGFuczsKLSAgfQotCiAgIC8vIExJTkUgV0lER0VUUwogCisgIC8vIExpbmUgd2lkZ2V0
cyBhcmUgYmxvY2sgZWxlbWVudHMgZGlzcGxheWVkIGFib3ZlIG9yIGJlbG93IGEgbGluZS4KKwog
ICB2YXIgTGluZVdpZGdldCA9IENvZGVNaXJyb3IuTGluZVdpZGdldCA9IGZ1bmN0aW9uKGNtLCBu
b2RlLCBvcHRpb25zKSB7CiAgICAgaWYgKG9wdGlvbnMpIGZvciAodmFyIG9wdCBpbiBvcHRpb25z
KSBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKQogICAgICAgdGhpc1tvcHRdID0gb3B0
aW9uc1tvcHRdOwpAQCAtNDE5OCwzOCArNTQ0MywzOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICB0aGlzLm5vZGUgPSBub2RlOwogICB9OwogICBldmVudE1peGluKExp
bmVXaWRnZXQpOwotICBmdW5jdGlvbiB3aWRnZXRPcGVyYXRpb24oZikgewotICAgIHJldHVybiBm
dW5jdGlvbigpIHsKLSAgICAgIHZhciB3aXRoT3AgPSAhdGhpcy5jbS5jdXJPcDsKLSAgICAgIGlm
ICh3aXRoT3ApIHN0YXJ0T3BlcmF0aW9uKHRoaXMuY20pOwotICAgICAgdHJ5IHt2YXIgcmVzdWx0
ID0gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO30KLSAgICAgIGZpbmFsbHkge2lmICh3aXRoT3Ap
IGVuZE9wZXJhdGlvbih0aGlzLmNtKTt9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH07CisK
KyAgZnVuY3Rpb24gYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZikg
eworICAgIGlmIChoZWlnaHRBdExpbmUobGluZSkgPCAoKGNtLmN1ck9wICYmIGNtLmN1ck9wLnNj
cm9sbFRvcCkgfHwgY20uZG9jLnNjcm9sbFRvcCkpCisgICAgICBhZGRUb1Njcm9sbFBvcyhjbSwg
bnVsbCwgZGlmZik7CiAgIH0KLSAgTGluZVdpZGdldC5wcm90b3R5cGUuY2xlYXIgPSB3aWRnZXRP
cGVyYXRpb24oZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHdzID0gdGhpcy5saW5lLndpZGdldHMsIG5v
ID0gbGluZU5vKHRoaXMubGluZSk7CisKKyAgTGluZVdpZGdldC5wcm90b3R5cGUuY2xlYXIgPSBm
dW5jdGlvbigpIHsKKyAgICB2YXIgY20gPSB0aGlzLmNtLCB3cyA9IHRoaXMubGluZS53aWRnZXRz
LCBsaW5lID0gdGhpcy5saW5lLCBubyA9IGxpbmVObyhsaW5lKTsKICAgICBpZiAobm8gPT0gbnVs
bCB8fCAhd3MpIHJldHVybjsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdzLmxlbmd0aDsgKytp
KSBpZiAod3NbaV0gPT0gdGhpcykgd3Muc3BsaWNlKGktLSwgMSk7Ci0gICAgaWYgKCF3cy5sZW5n
dGgpIHRoaXMubGluZS53aWRnZXRzID0gbnVsbDsKLSAgICB2YXIgYWJvdmVWaXNpYmxlID0gaGVp
Z2h0QXRMaW5lKHRoaXMuY20sIHRoaXMubGluZSkgPCB0aGlzLmNtLmRvYy5zY3JvbGxUb3A7Ci0g
ICAgdXBkYXRlTGluZUhlaWdodCh0aGlzLmxpbmUsIE1hdGgubWF4KDAsIHRoaXMubGluZS5oZWln
aHQgLSB3aWRnZXRIZWlnaHQodGhpcykpKTsKLSAgICBpZiAoYWJvdmVWaXNpYmxlKSBhZGRUb1Nj
cm9sbFBvcyh0aGlzLmNtLCAwLCAtdGhpcy5oZWlnaHQpOwotICAgIHJlZ0NoYW5nZSh0aGlzLmNt
LCBubywgbm8gKyAxKTsKLSAgfSk7Ci0gIExpbmVXaWRnZXQucHJvdG90eXBlLmNoYW5nZWQgPSB3
aWRnZXRPcGVyYXRpb24oZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG9sZEggPSB0aGlzLmhlaWdodDsK
KyAgICBpZiAoIXdzLmxlbmd0aCkgbGluZS53aWRnZXRzID0gbnVsbDsKKyAgICB2YXIgaGVpZ2h0
ID0gd2lkZ2V0SGVpZ2h0KHRoaXMpOworICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgeworICAg
ICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgLWhlaWdodCk7CisgICAg
ICByZWdMaW5lQ2hhbmdlKGNtLCBubywgIndpZGdldCIpOworICAgICAgdXBkYXRlTGluZUhlaWdo
dChsaW5lLCBNYXRoLm1heCgwLCBsaW5lLmhlaWdodCAtIGhlaWdodCkpOworICAgIH0pOworICB9
OworICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgdmFy
IG9sZEggPSB0aGlzLmhlaWdodCwgY20gPSB0aGlzLmNtLCBsaW5lID0gdGhpcy5saW5lOwogICAg
IHRoaXMuaGVpZ2h0ID0gbnVsbDsKICAgICB2YXIgZGlmZiA9IHdpZGdldEhlaWdodCh0aGlzKSAt
IG9sZEg7CiAgICAgaWYgKCFkaWZmKSByZXR1cm47Ci0gICAgdXBkYXRlTGluZUhlaWdodCh0aGlz
LmxpbmUsIHRoaXMubGluZS5oZWlnaHQgKyBkaWZmKTsKLSAgICB2YXIgbm8gPSBsaW5lTm8odGhp
cy5saW5lKTsKLSAgICByZWdDaGFuZ2UodGhpcy5jbSwgbm8sIG5vICsgMSk7Ci0gIH0pOworICAg
IHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgeworICAgICAgY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0
cnVlOworICAgICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZik7
CisgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgZGlmZik7CisgICAg
fSk7CisgIH07CiAKICAgZnVuY3Rpb24gd2lkZ2V0SGVpZ2h0KHdpZGdldCkgewogICAgIGlmICh3
aWRnZXQuaGVpZ2h0ICE9IG51bGwpIHJldHVybiB3aWRnZXQuaGVpZ2h0OwotICAgIGlmICghd2lk
Z2V0Lm5vZGUucGFyZW50Tm9kZSB8fCB3aWRnZXQubm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlICE9
IDEpCisgICAgaWYgKCFjb250YWlucyhkb2N1bWVudC5ib2R5LCB3aWRnZXQubm9kZSkpCiAgICAg
ICByZW1vdmVDaGlsZHJlbkFuZEFkZCh3aWRnZXQuY20uZGlzcGxheS5tZWFzdXJlLCBlbHQoImRp
diIsIFt3aWRnZXQubm9kZV0sIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmUiKSk7CiAgICAgcmV0
dXJuIHdpZGdldC5oZWlnaHQgPSB3aWRnZXQubm9kZS5vZmZzZXRIZWlnaHQ7CiAgIH0KQEAgLTQy
MzcsMTUgKzU0ODMsMTYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1
bmN0aW9uIGFkZExpbmVXaWRnZXQoY20sIGhhbmRsZSwgbm9kZSwgb3B0aW9ucykgewogICAgIHZh
ciB3aWRnZXQgPSBuZXcgTGluZVdpZGdldChjbSwgbm9kZSwgb3B0aW9ucyk7CiAgICAgaWYgKHdp
ZGdldC5ub0hTY3JvbGwpIGNtLmRpc3BsYXkuYWxpZ25XaWRnZXRzID0gdHJ1ZTsKLSAgICBjaGFu
Z2VMaW5lKGNtLCBoYW5kbGUsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICBjaGFuZ2VMaW5lKGNtLCBo
YW5kbGUsICJ3aWRnZXQiLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICB2YXIgd2lkZ2V0cyA9IGxp
bmUud2lkZ2V0cyB8fCAobGluZS53aWRnZXRzID0gW10pOwogICAgICAgaWYgKHdpZGdldC5pbnNl
cnRBdCA9PSBudWxsKSB3aWRnZXRzLnB1c2god2lkZ2V0KTsKICAgICAgIGVsc2Ugd2lkZ2V0cy5z
cGxpY2UoTWF0aC5taW4od2lkZ2V0cy5sZW5ndGggLSAxLCBNYXRoLm1heCgwLCB3aWRnZXQuaW5z
ZXJ0QXQpKSwgMCwgd2lkZ2V0KTsKICAgICAgIHdpZGdldC5saW5lID0gbGluZTsKLSAgICAgIGlm
ICghbGluZUlzSGlkZGVuKGNtLmRvYywgbGluZSkgfHwgd2lkZ2V0LnNob3dJZkhpZGRlbikgewot
ICAgICAgICB2YXIgYWJvdmVWaXNpYmxlID0gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lKSA8IGNtLmRv
Yy5zY3JvbGxUb3A7CisgICAgICBpZiAoIWxpbmVJc0hpZGRlbihjbS5kb2MsIGxpbmUpKSB7Cisg
ICAgICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUobGluZSkgPCBjbS5kb2Muc2Ny
b2xsVG9wOwogICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgd2lk
Z2V0SGVpZ2h0KHdpZGdldCkpOwotICAgICAgICBpZiAoYWJvdmVWaXNpYmxlKSBhZGRUb1Njcm9s
bFBvcyhjbSwgMCwgd2lkZ2V0LmhlaWdodCk7CisgICAgICAgIGlmIChhYm92ZVZpc2libGUpIGFk
ZFRvU2Nyb2xsUG9zKGNtLCBudWxsLCB3aWRnZXQuaGVpZ2h0KTsKKyAgICAgICAgY20uY3VyT3Au
Zm9yY2VVcGRhdGUgPSB0cnVlOwogICAgICAgfQogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7
CkBAIC00MjY0LDYgKzU1MTEsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgZXZlbnRNaXhpbihMaW5lKTsKICAgTGluZS5wcm90b3R5cGUubGluZU5vID0gZnVuY3Rpb24o
KSB7IHJldHVybiBsaW5lTm8odGhpcyk7IH07CiAKKyAgLy8gQ2hhbmdlIHRoZSBjb250ZW50ICh0
ZXh0LCBtYXJrZXJzKSBvZiBhIGxpbmUuIEF1dG9tYXRpY2FsbHkKKyAgLy8gaW52YWxpZGF0ZXMg
Y2FjaGVkIGluZm9ybWF0aW9uIGFuZCB0cmllcyB0byByZS1lc3RpbWF0ZSB0aGUKKyAgLy8gbGlu
ZSdzIGhlaWdodC4KICAgZnVuY3Rpb24gdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBtYXJrZWRTcGFu
cywgZXN0aW1hdGVIZWlnaHQpIHsKICAgICBsaW5lLnRleHQgPSB0ZXh0OwogICAgIGlmIChsaW5l
LnN0YXRlQWZ0ZXIpIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7CkBAIC00Mjc1LDIwICs1NTI1LDQ3
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmIChlc3RIZWlnaHQg
IT0gbGluZS5oZWlnaHQpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZXN0SGVpZ2h0KTsKICAgfQog
CisgIC8vIERldGFjaCBhIGxpbmUgZnJvbSB0aGUgZG9jdW1lbnQgdHJlZSBhbmQgaXRzIG1hcmtl
cnMuCiAgIGZ1bmN0aW9uIGNsZWFuVXBMaW5lKGxpbmUpIHsKICAgICBsaW5lLnBhcmVudCA9IG51
bGw7CiAgICAgZGV0YWNoTWFya2VkU3BhbnMobGluZSk7CiAgIH0KIAotICAvLyBSdW4gdGhlIGdp
dmVuIG1vZGUncyBwYXJzZXIgb3ZlciBhIGxpbmUsIHVwZGF0ZSB0aGUgc3R5bGVzCi0gIC8vIGFy
cmF5LCB3aGljaCBjb250YWlucyBhbHRlcm5hdGluZyBmcmFnbWVudHMgb2YgdGV4dCBhbmQgQ1NT
Ci0gIC8vIGNsYXNzZXMuCi0gIGZ1bmN0aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUsIHN0YXRl
LCBmLCBmb3JjZVRvRW5kKSB7CisgIGZ1bmN0aW9uIGV4dHJhY3RMaW5lQ2xhc3Nlcyh0eXBlLCBv
dXRwdXQpIHsKKyAgICBpZiAodHlwZSkgZm9yICg7OykgeworICAgICAgdmFyIGxpbmVDbGFzcyA9
IHR5cGUubWF0Y2goLyg/Ol58XHMrKWxpbmUtKGJhY2tncm91bmQtKT8oXFMrKS8pOworICAgICAg
aWYgKCFsaW5lQ2xhc3MpIGJyZWFrOworICAgICAgdHlwZSA9IHR5cGUuc2xpY2UoMCwgbGluZUNs
YXNzLmluZGV4KSArIHR5cGUuc2xpY2UobGluZUNsYXNzLmluZGV4ICsgbGluZUNsYXNzWzBdLmxl
bmd0aCk7CisgICAgICB2YXIgcHJvcCA9IGxpbmVDbGFzc1sxXSA/ICJiZ0NsYXNzIiA6ICJ0ZXh0
Q2xhc3MiOworICAgICAgaWYgKG91dHB1dFtwcm9wXSA9PSBudWxsKQorICAgICAgICBvdXRwdXRb
cHJvcF0gPSBsaW5lQ2xhc3NbMl07CisgICAgICBlbHNlIGlmICghKG5ldyBSZWdFeHAoIig/Ol58
XHMpIiArIGxpbmVDbGFzc1syXSArICIoPzokfFxzKSIpKS50ZXN0KG91dHB1dFtwcm9wXSkpCisg
ICAgICAgIG91dHB1dFtwcm9wXSArPSAiICIgKyBsaW5lQ2xhc3NbMl07CisgICAgfQorICAgIHJl
dHVybiB0eXBlOworICB9CisKKyAgZnVuY3Rpb24gY2FsbEJsYW5rTGluZShtb2RlLCBzdGF0ZSkg
eworICAgIGlmIChtb2RlLmJsYW5rTGluZSkgcmV0dXJuIG1vZGUuYmxhbmtMaW5lKHN0YXRlKTsK
KyAgICBpZiAoIW1vZGUuaW5uZXJNb2RlKSByZXR1cm47CisgICAgdmFyIGlubmVyID0gQ29kZU1p
cnJvci5pbm5lck1vZGUobW9kZSwgc3RhdGUpOworICAgIGlmIChpbm5lci5tb2RlLmJsYW5rTGlu
ZSkgcmV0dXJuIGlubmVyLm1vZGUuYmxhbmtMaW5lKGlubmVyLnN0YXRlKTsKKyAgfQorCisgIGZ1
bmN0aW9uIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgdmFyIHN0eWxlID0g
bW9kZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKKyAgICBpZiAoc3RyZWFtLnBvcyA8PSBzdHJlYW0u
c3RhcnQpCisgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1vZGUgIiArIG1vZGUubmFtZSArICIgZmFp
bGVkIHRvIGFkdmFuY2Ugc3RyZWFtLiIpOworICAgIHJldHVybiBzdHlsZTsKKyAgfQorCisgIC8v
IFJ1biB0aGUgZ2l2ZW4gbW9kZSdzIHBhcnNlciBvdmVyIGEgbGluZSwgY2FsbGluZyBmIGZvciBl
YWNoIHRva2VuLgorICBmdW5jdGlvbiBydW5Nb2RlKGNtLCB0ZXh0LCBtb2RlLCBzdGF0ZSwgZiwg
bGluZUNsYXNzZXMsIGZvcmNlVG9FbmQpIHsKICAgICB2YXIgZmxhdHRlblNwYW5zID0gbW9kZS5m
bGF0dGVuU3BhbnM7CiAgICAgaWYgKGZsYXR0ZW5TcGFucyA9PSBudWxsKSBmbGF0dGVuU3BhbnMg
PSBjbS5vcHRpb25zLmZsYXR0ZW5TcGFuczsKICAgICB2YXIgY3VyU3RhcnQgPSAwLCBjdXJTdHls
ZSA9IG51bGw7CiAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0
aW9ucy50YWJTaXplKSwgc3R5bGU7Ci0gICAgaWYgKHRleHQgPT0gIiIgJiYgbW9kZS5ibGFua0xp
bmUpIG1vZGUuYmxhbmtMaW5lKHN0YXRlKTsKKyAgICBpZiAodGV4dCA9PSAiIikgZXh0cmFjdExp
bmVDbGFzc2VzKGNhbGxCbGFua0xpbmUobW9kZSwgc3RhdGUpLCBsaW5lQ2xhc3Nlcyk7CiAgICAg
d2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgIGlmIChzdHJlYW0ucG9zID4gY20ub3B0aW9u
cy5tYXhIaWdobGlnaHRMZW5ndGgpIHsKICAgICAgICAgZmxhdHRlblNwYW5zID0gZmFsc2U7CkBA
IC00Mjk2LDcgKzU1NzMsMTEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICAgIHN0cmVhbS5wb3MgPSB0ZXh0Lmxlbmd0aDsKICAgICAgICAgc3R5bGUgPSBudWxsOwog
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUp
OworICAgICAgICBzdHlsZSA9IGV4dHJhY3RMaW5lQ2xhc3NlcyhyZWFkVG9rZW4obW9kZSwgc3Ry
ZWFtLCBzdGF0ZSksIGxpbmVDbGFzc2VzKTsKKyAgICAgIH0KKyAgICAgIGlmIChjbS5vcHRpb25z
LmFkZE1vZGVDbGFzcykgeworICAgICAgICB2YXIgbU5hbWUgPSBDb2RlTWlycm9yLmlubmVyTW9k
ZShtb2RlLCBzdGF0ZSkubW9kZS5uYW1lOworICAgICAgICBpZiAobU5hbWUpIHN0eWxlID0gIm0t
IiArIChzdHlsZSA/IG1OYW1lICsgIiAiICsgc3R5bGUgOiBtTmFtZSk7CiAgICAgICB9CiAgICAg
ICBpZiAoIWZsYXR0ZW5TcGFucyB8fCBjdXJTdHlsZSAhPSBzdHlsZSkgewogICAgICAgICBpZiAo
Y3VyU3RhcnQgPCBzdHJlYW0uc3RhcnQpIGYoc3RyZWFtLnN0YXJ0LCBjdXJTdHlsZSk7CkBAIC00
MzEyLDE0ICs1NTkzLDE4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
IH0KICAgfQogCisgIC8vIENvbXB1dGUgYSBzdHlsZSBhcnJheSAoYW4gYXJyYXkgc3RhcnRpbmcg
d2l0aCBhIG1vZGUgZ2VuZXJhdGlvbgorICAvLyAtLSBmb3IgaW52YWxpZGF0aW9uIC0tIGZvbGxv
d2VkIGJ5IHBhaXJzIG9mIGVuZCBwb3NpdGlvbnMgYW5kCisgIC8vIHN0eWxlIHN0cmluZ3MpLCB3
aGljaCBpcyB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgdG9rZW5zIG9uIHRoZQorICAvLyBsaW5lLgog
ICBmdW5jdGlvbiBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBzdGF0ZSwgZm9yY2VUb0VuZCkgewog
ICAgIC8vIEEgc3R5bGVzIGFycmF5IGFsd2F5cyBzdGFydHMgd2l0aCBhIG51bWJlciBpZGVudGlm
eWluZyB0aGUKICAgICAvLyBtb2RlL292ZXJsYXlzIHRoYXQgaXQgaXMgYmFzZWQgb24gKGZvciBl
YXN5IGludmFsaWRhdGlvbikuCi0gICAgdmFyIHN0ID0gW2NtLnN0YXRlLm1vZGVHZW5dOworICAg
IHZhciBzdCA9IFtjbS5zdGF0ZS5tb2RlR2VuXSwgbGluZUNsYXNzZXMgPSB7fTsKICAgICAvLyBD
b21wdXRlIHRoZSBiYXNlIGFycmF5IG9mIHN0eWxlcwogICAgIHJ1bk1vZGUoY20sIGxpbmUudGV4
dCwgY20uZG9jLm1vZGUsIHN0YXRlLCBmdW5jdGlvbihlbmQsIHN0eWxlKSB7CiAgICAgICBzdC5w
dXNoKGVuZCwgc3R5bGUpOwotICAgIH0sIGZvcmNlVG9FbmQpOworICAgIH0sIGxpbmVDbGFzc2Vz
LCBmb3JjZVRvRW5kKTsKIAogICAgIC8vIFJ1biBvdmVybGF5cywgYWRqdXN0IHN0eWxlIGFycmF5
LgogICAgIGZvciAodmFyIG8gPSAwOyBvIDwgY20uc3RhdGUub3ZlcmxheXMubGVuZ3RoOyArK28p
IHsKQEAgLTQzNDQsOTYgKzU2MjksOTUgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICBzdFtzdGFydCsxXSA9IGN1ciA/IGN1ciArICIgIiArIHN0eWxlIDog
c3R5bGU7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICB9KTsKKyAgICAgIH0sIGxpbmVD
bGFzc2VzKTsKICAgICB9CiAKLSAgICByZXR1cm4gc3Q7CisgICAgcmV0dXJuIHtzdHlsZXM6IHN0
LCBjbGFzc2VzOiBsaW5lQ2xhc3Nlcy5iZ0NsYXNzIHx8IGxpbmVDbGFzc2VzLnRleHRDbGFzcyA/
IGxpbmVDbGFzc2VzIDogbnVsbH07CiAgIH0KIAogICBmdW5jdGlvbiBnZXRMaW5lU3R5bGVzKGNt
LCBsaW5lKSB7Ci0gICAgaWYgKCFsaW5lLnN0eWxlcyB8fCBsaW5lLnN0eWxlc1swXSAhPSBjbS5z
dGF0ZS5tb2RlR2VuKQotICAgICAgbGluZS5zdHlsZXMgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5l
LCBsaW5lLnN0YXRlQWZ0ZXIgPSBnZXRTdGF0ZUJlZm9yZShjbSwgbGluZU5vKGxpbmUpKSk7Cisg
ICAgaWYgKCFsaW5lLnN0eWxlcyB8fCBsaW5lLnN0eWxlc1swXSAhPSBjbS5zdGF0ZS5tb2RlR2Vu
KSB7CisgICAgICB2YXIgcmVzdWx0ID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgbGluZS5zdGF0
ZUFmdGVyID0gZ2V0U3RhdGVCZWZvcmUoY20sIGxpbmVObyhsaW5lKSkpOworICAgICAgbGluZS5z
dHlsZXMgPSByZXN1bHQuc3R5bGVzOworICAgICAgaWYgKHJlc3VsdC5jbGFzc2VzKSBsaW5lLnN0
eWxlQ2xhc3NlcyA9IHJlc3VsdC5jbGFzc2VzOworICAgICAgZWxzZSBpZiAobGluZS5zdHlsZUNs
YXNzZXMpIGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsKKyAgICB9CiAgICAgcmV0dXJuIGxpbmUu
c3R5bGVzOwogICB9CiAKICAgLy8gTGlnaHR3ZWlnaHQgZm9ybSBvZiBoaWdobGlnaHQgLS0gcHJv
Y2VlZCBvdmVyIHRoaXMgbGluZSBhbmQKLSAgLy8gdXBkYXRlIHN0YXRlLCBidXQgZG9uJ3Qgc2F2
ZSBhIHN0eWxlIGFycmF5LgorICAvLyB1cGRhdGUgc3RhdGUsIGJ1dCBkb24ndCBzYXZlIGEgc3R5
bGUgYXJyYXkuIFVzZWQgZm9yIGxpbmVzIHRoYXQKKyAgLy8gYXJlbid0IGN1cnJlbnRseSB2aXNp
YmxlLgogICBmdW5jdGlvbiBwcm9jZXNzTGluZShjbSwgdGV4dCwgc3RhdGUsIHN0YXJ0QXQpIHsK
ICAgICB2YXIgbW9kZSA9IGNtLmRvYy5tb2RlOwogICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5n
U3RyZWFtKHRleHQsIGNtLm9wdGlvbnMudGFiU2l6ZSk7CiAgICAgc3RyZWFtLnN0YXJ0ID0gc3Ry
ZWFtLnBvcyA9IHN0YXJ0QXQgfHwgMDsKLSAgICBpZiAodGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5r
TGluZSkgbW9kZS5ibGFua0xpbmUoc3RhdGUpOworICAgIGlmICh0ZXh0ID09ICIiKSBjYWxsQmxh
bmtMaW5lKG1vZGUsIHN0YXRlKTsKICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiBzdHJlYW0u
cG9zIDw9IGNtLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoKSB7Ci0gICAgICBtb2RlLnRva2Vu
KHN0cmVhbSwgc3RhdGUpOworICAgICAgcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUpOwog
ICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKICAgICB9CiAgIH0KIAotICB2YXIgc3R5
bGVUb0NsYXNzQ2FjaGUgPSB7fTsKLSAgZnVuY3Rpb24gaW50ZXJwcmV0VG9rZW5TdHlsZShzdHls
ZSwgYnVpbGRlcikgewotICAgIGlmICghc3R5bGUpIHJldHVybiBudWxsOwotICAgIGZvciAoOzsp
IHsKLSAgICAgIHZhciBsaW5lQ2xhc3MgPSBzdHlsZS5tYXRjaCgvKD86XnxccylsaW5lLShiYWNr
Z3JvdW5kLSk/KFxTKykvKTsKLSAgICAgIGlmICghbGluZUNsYXNzKSBicmVhazsKLSAgICAgIHN0
eWxlID0gc3R5bGUuc2xpY2UoMCwgbGluZUNsYXNzLmluZGV4KSArIHN0eWxlLnNsaWNlKGxpbmVD
bGFzcy5pbmRleCArIGxpbmVDbGFzc1swXS5sZW5ndGgpOwotICAgICAgdmFyIHByb3AgPSBsaW5l
Q2xhc3NbMV0gPyAiYmdDbGFzcyIgOiAidGV4dENsYXNzIjsKLSAgICAgIGlmIChidWlsZGVyW3By
b3BdID09IG51bGwpCi0gICAgICAgIGJ1aWxkZXJbcHJvcF0gPSBsaW5lQ2xhc3NbMl07Ci0gICAg
ICBlbHNlIGlmICghKG5ldyBSZWdFeHAoIig/Ol58XHMpIiArIGxpbmVDbGFzc1syXSArICIoPzok
fFxzKSIpKS50ZXN0KGJ1aWxkZXJbcHJvcF0pKQotICAgICAgICBidWlsZGVyW3Byb3BdICs9ICIg
IiArIGxpbmVDbGFzc1syXTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0eWxlVG9DbGFzc0NhY2hlW3N0
eWxlXSB8fAotICAgICAgKHN0eWxlVG9DbGFzc0NhY2hlW3N0eWxlXSA9ICJjbS0iICsgc3R5bGUu
cmVwbGFjZSgvICsvZywgIiBjbS0iKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBidWlsZExpbmVDb250
ZW50KGNtLCByZWFsTGluZSwgbWVhc3VyZSwgY29weVdpZGdldHMpIHsKLSAgICB2YXIgbWVyZ2Vk
LCBsaW5lID0gcmVhbExpbmUsIGVtcHR5ID0gdHJ1ZTsKLSAgICB3aGlsZSAobWVyZ2VkID0gY29s
bGFwc2VkU3BhbkF0U3RhcnQobGluZSkpCi0gICAgICBsaW5lID0gZ2V0TGluZShjbS5kb2MsIG1l
cmdlZC5maW5kKCkuZnJvbS5saW5lKTsKLQotICAgIHZhciBidWlsZGVyID0ge3ByZTogZWx0KCJw
cmUiKSwgY29sOiAwLCBwb3M6IDAsCi0gICAgICAgICAgICAgICAgICAgbWVhc3VyZTogbnVsbCwg
bWVhc3VyZWRTb21ldGhpbmc6IGZhbHNlLCBjbTogY20sCi0gICAgICAgICAgICAgICAgICAgY29w
eVdpZGdldHM6IGNvcHlXaWRnZXRzfTsKLQotICAgIGRvIHsKLSAgICAgIGlmIChsaW5lLnRleHQp
IGVtcHR5ID0gZmFsc2U7Ci0gICAgICBidWlsZGVyLm1lYXN1cmUgPSBsaW5lID09IHJlYWxMaW5l
ICYmIG1lYXN1cmU7CisgIC8vIENvbnZlcnQgYSBzdHlsZSBhcyByZXR1cm5lZCBieSBhIG1vZGUg
KGVpdGhlciBudWxsLCBvciBhIHN0cmluZworICAvLyBjb250YWluaW5nIG9uZSBvciBtb3JlIHN0
eWxlcykgdG8gYSBDU1Mgc3R5bGUuIFRoaXMgaXMgY2FjaGVkLAorICAvLyBhbmQgYWxzbyBsb29r
cyBmb3IgbGluZS13aWRlIHN0eWxlcy4KKyAgdmFyIHN0eWxlVG9DbGFzc0NhY2hlID0ge30sIHN0
eWxlVG9DbGFzc0NhY2hlV2l0aE1vZGUgPSB7fTsKKyAgZnVuY3Rpb24gaW50ZXJwcmV0VG9rZW5T
dHlsZShzdHlsZSwgb3B0aW9ucykgeworICAgIGlmICghc3R5bGUgfHwgL15ccyokLy50ZXN0KHN0
eWxlKSkgcmV0dXJuIG51bGw7CisgICAgdmFyIGNhY2hlID0gb3B0aW9ucy5hZGRNb2RlQ2xhc3Mg
PyBzdHlsZVRvQ2xhc3NDYWNoZVdpdGhNb2RlIDogc3R5bGVUb0NsYXNzQ2FjaGU7CisgICAgcmV0
dXJuIGNhY2hlW3N0eWxlXSB8fAorICAgICAgKGNhY2hlW3N0eWxlXSA9IHN0eWxlLnJlcGxhY2Uo
L1xTKy9nLCAiY20tJCYiKSk7CisgIH0KKworICAvLyBSZW5kZXIgdGhlIERPTSByZXByZXNlbnRh
dGlvbiBvZiB0aGUgdGV4dCBvZiBhIGxpbmUuIEFsc28gYnVpbGRzCisgIC8vIHVwIGEgJ2xpbmUg
bWFwJywgd2hpY2ggcG9pbnRzIGF0IHRoZSBET00gbm9kZXMgdGhhdCByZXByZXNlbnQKKyAgLy8g
c3BlY2lmaWMgc3RyZXRjaGVzIG9mIHRleHQsIGFuZCBpcyB1c2VkIGJ5IHRoZSBtZWFzdXJpbmcg
Y29kZS4KKyAgLy8gVGhlIHJldHVybmVkIG9iamVjdCBjb250YWlucyB0aGUgRE9NIG5vZGUsIHRo
aXMgbWFwLCBhbmQKKyAgLy8gaW5mb3JtYXRpb24gYWJvdXQgbGluZS13aWRlIHN0eWxlcyB0aGF0
IHdlcmUgc2V0IGJ5IHRoZSBtb2RlLgorICBmdW5jdGlvbiBidWlsZExpbmVDb250ZW50KGNtLCBs
aW5lVmlldykgeworICAgIC8vIFRoZSBwYWRkaW5nLXJpZ2h0IGZvcmNlcyB0aGUgZWxlbWVudCB0
byBoYXZlIGEgJ2JvcmRlcicsIHdoaWNoCisgICAgLy8gaXMgbmVlZGVkIG9uIFdlYmtpdCB0byBi
ZSBhYmxlIHRvIGdldCBsaW5lLWxldmVsIGJvdW5kaW5nCisgICAgLy8gcmVjdGFuZ2xlcyBmb3Ig
aXQgKGluIG1lYXN1cmVDaGFyKS4KKyAgICB2YXIgY29udGVudCA9IGVsdCgic3BhbiIsIG51bGws
IG51bGwsIHdlYmtpdCA/ICJwYWRkaW5nLXJpZ2h0OiAuMXB4IiA6IG51bGwpOworICAgIHZhciBi
dWlsZGVyID0ge3ByZTogZWx0KCJwcmUiLCBbY29udGVudF0pLCBjb250ZW50OiBjb250ZW50LCBj
b2w6IDAsIHBvczogMCwgY206IGNtfTsKKyAgICBsaW5lVmlldy5tZWFzdXJlID0ge307CisKKyAg
ICAvLyBJdGVyYXRlIG92ZXIgdGhlIGxvZ2ljYWwgbGluZXMgdGhhdCBtYWtlIHVwIHRoaXMgdmlz
dWFsIGxpbmUuCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gKGxpbmVWaWV3LnJlc3QgPyBsaW5l
Vmlldy5yZXN0Lmxlbmd0aCA6IDApOyBpKyspIHsKKyAgICAgIHZhciBsaW5lID0gaSA/IGxpbmVW
aWV3LnJlc3RbaSAtIDFdIDogbGluZVZpZXcubGluZSwgb3JkZXI7CiAgICAgICBidWlsZGVyLnBv
cyA9IDA7Ci0gICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRlci5tZWFzdXJlID8gYnVpbGRU
b2tlbk1lYXN1cmUgOiBidWlsZFRva2VuOworICAgICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxk
VG9rZW47CisgICAgICAvLyBPcHRpb25hbGx5IHdpcmUgaW4gc29tZSBoYWNrcyBpbnRvIHRoZSB0
b2tlbi1yZW5kZXJpbmcKKyAgICAgIC8vIGFsZ29yaXRobSwgdG8gZGVhbCB3aXRoIGJyb3dzZXIg
cXVpcmtzLgogICAgICAgaWYgKChpZSB8fCB3ZWJraXQpICYmIGNtLmdldE9wdGlvbigibGluZVdy
YXBwaW5nIikpCiAgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZFRva2VuU3BsaXRTcGFj
ZXMoYnVpbGRlci5hZGRUb2tlbik7Ci0gICAgICB2YXIgbmV4dCA9IGluc2VydExpbmVDb250ZW50
KGxpbmUsIGJ1aWxkZXIsIGdldExpbmVTdHlsZXMoY20sIGxpbmUpKTsKLSAgICAgIGlmIChtZWFz
dXJlICYmIGxpbmUgPT0gcmVhbExpbmUgJiYgIWJ1aWxkZXIubWVhc3VyZWRTb21ldGhpbmcpIHsK
LSAgICAgICAgbWVhc3VyZVswXSA9IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHplcm9XaWR0aEVs
ZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSk7Ci0gICAgICAgIGJ1aWxkZXIubWVhc3VyZWRTb21l
dGhpbmcgPSB0cnVlOwotICAgICAgfQotICAgICAgaWYgKG5leHQpIGxpbmUgPSBnZXRMaW5lKGNt
LmRvYywgbmV4dC50by5saW5lKTsKLSAgICB9IHdoaWxlIChuZXh0KTsKLQotICAgIGlmIChtZWFz
dXJlICYmICFidWlsZGVyLm1lYXN1cmVkU29tZXRoaW5nICYmICFtZWFzdXJlWzBdKQotICAgICAg
bWVhc3VyZVswXSA9IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGVtcHR5ID8gZWx0KCJzcGFuIiwg
Ilx1MDBhMCIpIDogemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKTsKLSAgICBp
ZiAoIWJ1aWxkZXIucHJlLmZpcnN0Q2hpbGQgJiYgIWxpbmVJc0hpZGRlbihjbS5kb2MsIHJlYWxM
aW5lKSkKLSAgICAgIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKCJcdTAwYTAiKSk7Ci0KLSAgICB2YXIgb3JkZXI7Ci0gICAgLy8gV29yayBhcm91bmQgcHJv
YmxlbSB3aXRoIHRoZSByZXBvcnRlZCBkaW1lbnNpb25zIG9mIHNpbmdsZS1jaGFyCi0gICAgLy8g
ZGlyZWN0aW9uIHNwYW5zIG9uIElFIChpc3N1ZSAjMTEyOSkuIFNlZSBhbHNvIHRoZSBjb21tZW50
IGluCi0gICAgLy8gY3Vyc29yQ29vcmRzLgotICAgIGlmIChtZWFzdXJlICYmIChpZSB8fCBpZV9n
dDEwKSAmJiAob3JkZXIgPSBnZXRPcmRlcihsaW5lKSkpIHsKLSAgICAgIHZhciBsID0gb3JkZXIu
bGVuZ3RoIC0gMTsKLSAgICAgIGlmIChvcmRlcltsXS5mcm9tID09IG9yZGVyW2xdLnRvKSAtLWw7
Ci0gICAgICB2YXIgbGFzdCA9IG9yZGVyW2xdLCBwcmV2ID0gb3JkZXJbbCAtIDFdOwotICAgICAg
aWYgKGxhc3QuZnJvbSArIDEgPT0gbGFzdC50byAmJiBwcmV2ICYmIGxhc3QubGV2ZWwgPCBwcmV2
LmxldmVsKSB7Ci0gICAgICAgIHZhciBzcGFuID0gbWVhc3VyZVtidWlsZGVyLnBvcyAtIDFdOwot
ICAgICAgICBpZiAoc3Bhbikgc3Bhbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzcGFuLm1lYXN1
cmVSaWdodCA9IHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5uZXh0U2libGluZyk7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdmFyIHRleHRDbGFzcyA9IGJ1aWxkZXIudGV4dENsYXNz
ID8gYnVpbGRlci50ZXh0Q2xhc3MgKyAiICIgKyAocmVhbExpbmUudGV4dENsYXNzIHx8ICIiKSA6
IHJlYWxMaW5lLnRleHRDbGFzczsKLSAgICBpZiAodGV4dENsYXNzKSBidWlsZGVyLnByZS5jbGFz
c05hbWUgPSB0ZXh0Q2xhc3M7Ci0KLSAgICBzaWduYWwoY20sICJyZW5kZXJMaW5lIiwgY20sIHJl
YWxMaW5lLCBidWlsZGVyLnByZSk7CisgICAgICBpZiAoaGFzQmFkQmlkaVJlY3RzKGNtLmRpc3Bs
YXkubWVhc3VyZSkgJiYgKG9yZGVyID0gZ2V0T3JkZXIobGluZSkpKQorICAgICAgICBidWlsZGVy
LmFkZFRva2VuID0gYnVpbGRUb2tlbkJhZEJpZGkoYnVpbGRlci5hZGRUb2tlbiwgb3JkZXIpOwor
ICAgICAgYnVpbGRlci5tYXAgPSBbXTsKKyAgICAgIGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1
aWxkZXIsIGdldExpbmVTdHlsZXMoY20sIGxpbmUpKTsKKyAgICAgIGlmIChsaW5lLnN0eWxlQ2xh
c3NlcykgeworICAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMuYmdDbGFzcykKKyAgICAgICAg
ICBidWlsZGVyLmJnQ2xhc3MgPSBqb2luQ2xhc3NlcyhsaW5lLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNz
LCBidWlsZGVyLmJnQ2xhc3MgfHwgIiIpOworICAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMu
dGV4dENsYXNzKQorICAgICAgICAgIGJ1aWxkZXIudGV4dENsYXNzID0gam9pbkNsYXNzZXMobGlu
ZS5zdHlsZUNsYXNzZXMudGV4dENsYXNzLCBidWlsZGVyLnRleHRDbGFzcyB8fCAiIik7CisgICAg
ICB9CisKKyAgICAgIC8vIEVuc3VyZSBhdCBsZWFzdCBhIHNpbmdsZSBub2RlIGlzIHByZXNlbnQs
IGZvciBtZWFzdXJpbmcuCisgICAgICBpZiAoYnVpbGRlci5tYXAubGVuZ3RoID09IDApCisgICAg
ICAgIGJ1aWxkZXIubWFwLnB1c2goMCwgMCwgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHpl
cm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSkpOworCisgICAgICAvLyBTdG9yZSB0
aGUgbWFwIGFuZCBhIGNhY2hlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgbG9naWNhbCBsaW5lCisg
ICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgIGxpbmVWaWV3Lm1lYXN1cmUubWFwID0gYnVpbGRl
ci5tYXA7CisgICAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGUgPSB7fTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIChsaW5lVmlldy5tZWFzdXJlLm1hcHMgfHwgKGxpbmVWaWV3Lm1lYXN1cmUu
bWFwcyA9IFtdKSkucHVzaChidWlsZGVyLm1hcCk7CisgICAgICAgIChsaW5lVmlldy5tZWFzdXJl
LmNhY2hlcyB8fCAobGluZVZpZXcubWVhc3VyZS5jYWNoZXMgPSBbXSkpLnB1c2goe30pOworICAg
ICAgfQorICAgIH0KKworICAgIHNpZ25hbChjbSwgInJlbmRlckxpbmUiLCBjbSwgbGluZVZpZXcu
bGluZSwgYnVpbGRlci5wcmUpOwogICAgIHJldHVybiBidWlsZGVyOwogICB9CiAKQEAgLTQ0NDMs
MTIgKzU3MjcsMTcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0
dXJuIHRva2VuOwogICB9CiAKKyAgLy8gQnVpbGQgdXAgdGhlIERPTSByZXByZXNlbnRhdGlvbiBm
b3IgYSBzaW5nbGUgdG9rZW4sIGFuZCBhZGQgaXQgdG8KKyAgLy8gdGhlIGxpbmUgbWFwLiBUYWtl
cyBjYXJlIHRvIHJlbmRlciBzcGVjaWFsIGNoYXJhY3RlcnMgc2VwYXJhdGVseS4KICAgZnVuY3Rp
b24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUs
IHRpdGxlKSB7CiAgICAgaWYgKCF0ZXh0KSByZXR1cm47Ci0gICAgdmFyIHNwZWNpYWwgPSBidWls
ZGVyLmNtLm9wdGlvbnMuc3BlY2lhbENoYXJzOworICAgIHZhciBzcGVjaWFsID0gYnVpbGRlci5j
bS5vcHRpb25zLnNwZWNpYWxDaGFycywgbXVzdFdyYXAgPSBmYWxzZTsKICAgICBpZiAoIXNwZWNp
YWwudGVzdCh0ZXh0KSkgewogICAgICAgYnVpbGRlci5jb2wgKz0gdGV4dC5sZW5ndGg7CiAgICAg
ICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOworICAgICAgYnVp
bGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyB0ZXh0Lmxlbmd0aCwgY29u
dGVudCk7CisgICAgICBpZiAoaWVfdXB0bzgpIG11c3RXcmFwID0gdHJ1ZTsKKyAgICAgIGJ1aWxk
ZXIucG9zICs9IHRleHQubGVuZ3RoOwogICAgIH0gZWxzZSB7CiAgICAgICB2YXIgY29udGVudCA9
IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgcG9zID0gMDsKICAgICAgIHdoaWxl
ICh0cnVlKSB7CkBAIC00NDU2LDU3ICs1NzQ1LDM4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgICAgICB2YXIgbSA9IHNwZWNpYWwuZXhlYyh0ZXh0KTsKICAgICAgICAg
dmFyIHNraXBwZWQgPSBtID8gbS5pbmRleCAtIHBvcyA6IHRleHQubGVuZ3RoIC0gcG9zOwogICAg
ICAgICBpZiAoc2tpcHBlZCkgewotICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUodGV4dC5zbGljZShwb3MsIHBvcyArIHNraXBwZWQpKSk7CisgICAg
ICAgICAgdmFyIHR4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQuc2xpY2UocG9zLCBw
b3MgKyBza2lwcGVkKSk7CisgICAgICAgICAgaWYgKGllX3VwdG84KSBjb250ZW50LmFwcGVuZENo
aWxkKGVsdCgic3BhbiIsIFt0eHRdKSk7CisgICAgICAgICAgZWxzZSBjb250ZW50LmFwcGVuZENo
aWxkKHR4dCk7CisgICAgICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRl
ci5wb3MgKyBza2lwcGVkLCB0eHQpOwogICAgICAgICAgIGJ1aWxkZXIuY29sICs9IHNraXBwZWQ7
CisgICAgICAgICAgYnVpbGRlci5wb3MgKz0gc2tpcHBlZDsKICAgICAgICAgfQogICAgICAgICBp
ZiAoIW0pIGJyZWFrOwogICAgICAgICBwb3MgKz0gc2tpcHBlZCArIDE7CiAgICAgICAgIGlmICht
WzBdID09ICJcdCIpIHsKICAgICAgICAgICB2YXIgdGFiU2l6ZSA9IGJ1aWxkZXIuY20ub3B0aW9u
cy50YWJTaXplLCB0YWJXaWR0aCA9IHRhYlNpemUgLSBidWlsZGVyLmNvbCAlIHRhYlNpemU7Ci0g
ICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBzcGFjZVN0cih0YWJXaWR0
aCksICJjbS10YWIiKSk7CisgICAgICAgICAgdmFyIHR4dCA9IGNvbnRlbnQuYXBwZW5kQ2hpbGQo
ZWx0KCJzcGFuIiwgc3BhY2VTdHIodGFiV2lkdGgpLCAiY20tdGFiIikpOwogICAgICAgICAgIGJ1
aWxkZXIuY29sICs9IHRhYldpZHRoOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHZhciB0
b2tlbiA9IGJ1aWxkZXIuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKG1bMF0pOwot
ICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAgIHZhciB0eHQg
PSBidWlsZGVyLmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcihtWzBdKTsKKyAgICAg
ICAgICBpZiAoaWVfdXB0bzgpIGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgW3R4dF0p
KTsKKyAgICAgICAgICBlbHNlIGNvbnRlbnQuYXBwZW5kQ2hpbGQodHh0KTsKICAgICAgICAgICBi
dWlsZGVyLmNvbCArPSAxOwogICAgICAgICB9CisgICAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVp
bGRlci5wb3MsIGJ1aWxkZXIucG9zICsgMSwgdHh0KTsKKyAgICAgICAgYnVpbGRlci5wb3MrKzsK
ICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHN0eWxlIHx8IHN0YXJ0U3R5bGUgfHwgZW5kU3R5bGUg
fHwgYnVpbGRlci5tZWFzdXJlKSB7CisgICAgaWYgKHN0eWxlIHx8IHN0YXJ0U3R5bGUgfHwgZW5k
U3R5bGUgfHwgbXVzdFdyYXApIHsKICAgICAgIHZhciBmdWxsU3R5bGUgPSBzdHlsZSB8fCAiIjsK
ICAgICAgIGlmIChzdGFydFN0eWxlKSBmdWxsU3R5bGUgKz0gc3RhcnRTdHlsZTsKICAgICAgIGlm
IChlbmRTdHlsZSkgZnVsbFN0eWxlICs9IGVuZFN0eWxlOwogICAgICAgdmFyIHRva2VuID0gZWx0
KCJzcGFuIiwgW2NvbnRlbnRdLCBmdWxsU3R5bGUpOwogICAgICAgaWYgKHRpdGxlKSB0b2tlbi50
aXRsZSA9IHRpdGxlOwotICAgICAgcmV0dXJuIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHRva2Vu
KTsKLSAgICB9Ci0gICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoY29udGVudCk7Ci0gIH0KLQot
ICBmdW5jdGlvbiBidWlsZFRva2VuTWVhc3VyZShidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRT
dHlsZSwgZW5kU3R5bGUpIHsKLSAgICB2YXIgd3JhcHBpbmcgPSBidWlsZGVyLmNtLm9wdGlvbnMu
bGluZVdyYXBwaW5nOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7ICsraSkg
ewotICAgICAgdmFyIGNoID0gdGV4dC5jaGFyQXQoaSksIHN0YXJ0ID0gaSA9PSAwOwotICAgICAg
aWYgKGNoID49ICJcdWQ4MDAiICYmIGNoIDwgIlx1ZGJmZiIgJiYgaSA8IHRleHQubGVuZ3RoIC0g
MSkgewotICAgICAgICBjaCA9IHRleHQuc2xpY2UoaSwgaSArIDIpOwotICAgICAgICArK2k7Ci0g
ICAgICB9IGVsc2UgaWYgKGkgJiYgd3JhcHBpbmcgJiYgc3BhbkFmZmVjdHNXcmFwcGluZyh0ZXh0
LCBpKSkgewotICAgICAgICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChlbHQoIndiciIpKTsKLSAg
ICAgIH0KLSAgICAgIHZhciBvbGQgPSBidWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdOwotICAg
ICAgdmFyIHNwYW4gPSBidWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdID0KLSAgICAgICAgYnVp
bGRUb2tlbihidWlsZGVyLCBjaCwgc3R5bGUsCi0gICAgICAgICAgICAgICAgICAgc3RhcnQgJiYg
c3RhcnRTdHlsZSwgaSA9PSB0ZXh0Lmxlbmd0aCAtIDEgJiYgZW5kU3R5bGUpOwotICAgICAgaWYg
KG9sZCkgc3Bhbi5sZWZ0U2lkZSA9IG9sZC5sZWZ0U2lkZSB8fCBvbGQ7Ci0gICAgICAvLyBJbiBJ
RSBzaW5nbGUtc3BhY2Ugbm9kZXMgd3JhcCBkaWZmZXJlbnRseSB0aGFuIHNwYWNlcwotICAgICAg
Ly8gZW1iZWRkZWQgaW4gbGFyZ2VyIHRleHQgbm9kZXMsIGV4Y2VwdCB3aGVuIHNldCB0bwotICAg
ICAgLy8gd2hpdGUtc3BhY2U6IG5vcm1hbCAoaXNzdWUgIzEyNjgpLgotICAgICAgaWYgKGllICYm
IHdyYXBwaW5nICYmIGNoID09ICIgIiAmJiBpICYmICEvXHMvLnRlc3QodGV4dC5jaGFyQXQoaSAt
IDEpKSAmJgotICAgICAgICAgIGkgPCB0ZXh0Lmxlbmd0aCAtIDEgJiYgIS9ccy8udGVzdCh0ZXh0
LmNoYXJBdChpICsgMSkpKQotICAgICAgICBzcGFuLnN0eWxlLndoaXRlU3BhY2UgPSAibm9ybWFs
IjsKLSAgICAgIGJ1aWxkZXIucG9zICs9IGNoLmxlbmd0aDsKKyAgICAgIHJldHVybiBidWlsZGVy
LmNvbnRlbnQuYXBwZW5kQ2hpbGQodG9rZW4pOwogICAgIH0KLSAgICBpZiAodGV4dC5sZW5ndGgp
IGJ1aWxkZXIubWVhc3VyZWRTb21ldGhpbmcgPSB0cnVlOworICAgIGJ1aWxkZXIuY29udGVudC5h
cHBlbmRDaGlsZChjb250ZW50KTsKICAgfQogCiAgIGZ1bmN0aW9uIGJ1aWxkVG9rZW5TcGxpdFNw
YWNlcyhpbm5lcikgewpAQCAtNDUxNywyOSArNTc4NywzNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiBvdXQ7CiAgICAgfQogICAgIHJldHVybiBmdW5j
dGlvbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlKSB7
Ci0gICAgICByZXR1cm4gaW5uZXIoYnVpbGRlciwgdGV4dC5yZXBsYWNlKC8gezMsfS9nLCBzcGxp
dCksIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUpOworICAgICAgaW5uZXIoYnVp
bGRlciwgdGV4dC5yZXBsYWNlKC8gezMsfS9nLCBzcGxpdCksIHN0eWxlLCBzdGFydFN0eWxlLCBl
bmRTdHlsZSwgdGl0bGUpOwogICAgIH07CiAgIH0KIAotICBmdW5jdGlvbiBidWlsZENvbGxhcHNl
ZFNwYW4oYnVpbGRlciwgc2l6ZSwgbWFya2VyLCBpZ25vcmVXaWRnZXQpIHsKLSAgICB2YXIgd2lk
Z2V0ID0gIWlnbm9yZVdpZGdldCAmJiBtYXJrZXIucmVwbGFjZWRXaXRoOwotICAgIGlmICh3aWRn
ZXQpIHsKLSAgICAgIGlmIChidWlsZGVyLmNvcHlXaWRnZXRzKSB3aWRnZXQgPSB3aWRnZXQuY2xv
bmVOb2RlKHRydWUpOwotICAgICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQod2lkZ2V0KTsKLSAg
ICAgIGlmIChidWlsZGVyLm1lYXN1cmUpIHsKLSAgICAgICAgaWYgKHNpemUpIHsKLSAgICAgICAg
ICBidWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdID0gd2lkZ2V0OwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIHZhciBlbHQgPSB6ZXJvV2lkdGhFbGVtZW50KGJ1aWxkZXIuY20uZGlzcGxh
eS5tZWFzdXJlKTsKLSAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gImJvb2ttYXJrIiAmJiAh
bWFya2VyLmluc2VydExlZnQpCi0gICAgICAgICAgICBidWlsZGVyLm1lYXN1cmVbYnVpbGRlci5w
b3NdID0gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZWx0KTsKLSAgICAgICAgICBlbHNlIGlmIChi
dWlsZGVyLm1lYXN1cmVbYnVpbGRlci5wb3NdKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGJ1aWxkZXIubWVhc3VyZVtidWlsZGVyLnBvc10gPSBidWls
ZGVyLnByZS5pbnNlcnRCZWZvcmUoZWx0LCB3aWRnZXQpOworICAvLyBXb3JrIGFyb3VuZCBub25z
ZW5zZSBkaW1lbnNpb25zIGJlaW5nIHJlcG9ydGVkIGZvciBzdHJldGNoZXMgb2YKKyAgLy8gcmln
aHQtdG8tbGVmdCB0ZXh0LgorICBmdW5jdGlvbiBidWlsZFRva2VuQmFkQmlkaShpbm5lciwgb3Jk
ZXIpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5
bGUsIGVuZFN0eWxlLCB0aXRsZSkgeworICAgICAgc3R5bGUgPSBzdHlsZSA/IHN0eWxlICsgIiBj
bS1mb3JjZS1ib3JkZXIiIDogImNtLWZvcmNlLWJvcmRlciI7CisgICAgICB2YXIgc3RhcnQgPSBi
dWlsZGVyLnBvcywgZW5kID0gc3RhcnQgKyB0ZXh0Lmxlbmd0aDsKKyAgICAgIGZvciAoOzspIHsK
KyAgICAgICAgLy8gRmluZCB0aGUgcGFydCB0aGF0IG92ZXJsYXBzIHdpdGggdGhlIHN0YXJ0IG9m
IHRoaXMgdGV4dAorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXTsKKyAgICAgICAgICBpZiAocGFydC50
byA+IHN0YXJ0ICYmIHBhcnQuZnJvbSA8PSBzdGFydCkgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgYnVpbGRlci5tZWFzdXJlZFNvbWV0aGluZyA9IHRydWU7CisgICAgICAgIGlmIChwYXJ0LnRv
ID49IGVuZCkgcmV0dXJuIGlubmVyKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBl
bmRTdHlsZSwgdGl0bGUpOworICAgICAgICBpbm5lcihidWlsZGVyLCB0ZXh0LnNsaWNlKDAsIHBh
cnQudG8gLSBzdGFydCksIHN0eWxlLCBzdGFydFN0eWxlLCBudWxsLCB0aXRsZSk7CisgICAgICAg
IHN0YXJ0U3R5bGUgPSBudWxsOworICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZShwYXJ0LnRvIC0g
c3RhcnQpOworICAgICAgICBzdGFydCA9IHBhcnQudG87CiAgICAgICB9CisgICAgfTsKKyAgfQor
CisgIGZ1bmN0aW9uIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCBzaXplLCBtYXJrZXIsIGln
bm9yZVdpZGdldCkgeworICAgIHZhciB3aWRnZXQgPSAhaWdub3JlV2lkZ2V0ICYmIG1hcmtlci53
aWRnZXROb2RlOworICAgIGlmICh3aWRnZXQpIHsKKyAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVp
bGRlci5wb3MsIGJ1aWxkZXIucG9zICsgc2l6ZSwgd2lkZ2V0KTsKKyAgICAgIGJ1aWxkZXIuY29u
dGVudC5hcHBlbmRDaGlsZCh3aWRnZXQpOwogICAgIH0KICAgICBidWlsZGVyLnBvcyArPSBzaXpl
OwogICB9CkBAIC00NTUwLDcgKzU4MjcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICB2YXIgc3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zLCBhbGxUZXh0ID0gbGluZS50
ZXh0LCBhdCA9IDA7CiAgICAgaWYgKCFzcGFucykgewogICAgICAgZm9yICh2YXIgaSA9IDE7IGkg
PCBzdHlsZXMubGVuZ3RoOyBpKz0yKQotICAgICAgICBidWlsZGVyLmFkZFRva2VuKGJ1aWxkZXIs
IGFsbFRleHQuc2xpY2UoYXQsIGF0ID0gc3R5bGVzW2ldKSwgaW50ZXJwcmV0VG9rZW5TdHlsZShz
dHlsZXNbaSsxXSwgYnVpbGRlcikpOworICAgICAgICBidWlsZGVyLmFkZFRva2VuKGJ1aWxkZXIs
IGFsbFRleHQuc2xpY2UoYXQsIGF0ID0gc3R5bGVzW2ldKSwgaW50ZXJwcmV0VG9rZW5TdHlsZShz
dHlsZXNbaSsxXSwgYnVpbGRlci5jbS5vcHRpb25zKSk7CiAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC00NTY5LDE3ICs1ODQ2LDE3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgaWYgKG0uc3RhcnRTdHlsZSAmJiBzcC5mcm9tID09IHBvcykgc3BhblN0
YXJ0U3R5bGUgKz0gIiAiICsgbS5zdGFydFN0eWxlOwogICAgICAgICAgICAgaWYgKG0uZW5kU3R5
bGUgJiYgc3AudG8gPT0gbmV4dENoYW5nZSkgc3BhbkVuZFN0eWxlICs9ICIgIiArIG0uZW5kU3R5
bGU7CiAgICAgICAgICAgICBpZiAobS50aXRsZSAmJiAhdGl0bGUpIHRpdGxlID0gbS50aXRsZTsK
LSAgICAgICAgICAgIGlmIChtLmNvbGxhcHNlZCAmJiAoIWNvbGxhcHNlZCB8fCBjb2xsYXBzZWQu
bWFya2VyLnNpemUgPCBtLnNpemUpKQorICAgICAgICAgICAgaWYgKG0uY29sbGFwc2VkICYmICgh
Y29sbGFwc2VkIHx8IGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGNvbGxhcHNlZC5tYXJrZXIsIG0p
IDwgMCkpCiAgICAgICAgICAgICAgIGNvbGxhcHNlZCA9IHNwOwogICAgICAgICAgIH0gZWxzZSBp
ZiAoc3AuZnJvbSA+IHBvcyAmJiBuZXh0Q2hhbmdlID4gc3AuZnJvbSkgewogICAgICAgICAgICAg
bmV4dENoYW5nZSA9IHNwLmZyb207CiAgICAgICAgICAgfQotICAgICAgICAgIGlmIChtLnR5cGUg
PT0gImJvb2ttYXJrIiAmJiBzcC5mcm9tID09IHBvcyAmJiBtLnJlcGxhY2VkV2l0aCkgZm91bmRC
b29rbWFya3MucHVzaChtKTsKKyAgICAgICAgICBpZiAobS50eXBlID09ICJib29rbWFyayIgJiYg
c3AuZnJvbSA9PSBwb3MgJiYgbS53aWRnZXROb2RlKSBmb3VuZEJvb2ttYXJrcy5wdXNoKG0pOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChjb2xsYXBzZWQgJiYgKGNvbGxhcHNlZC5mcm9tIHx8IDAp
ID09IHBvcykgewotICAgICAgICAgIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCAoY29sbGFw
c2VkLnRvID09IG51bGwgPyBsZW4gOiBjb2xsYXBzZWQudG8pIC0gcG9zLAorICAgICAgICAgIGJ1
aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCAoY29sbGFwc2VkLnRvID09IG51bGwgPyBsZW4gKyAx
IDogY29sbGFwc2VkLnRvKSAtIHBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s
bGFwc2VkLm1hcmtlciwgY29sbGFwc2VkLmZyb20gPT0gbnVsbCk7Ci0gICAgICAgICAgaWYgKGNv
bGxhcHNlZC50byA9PSBudWxsKSByZXR1cm4gY29sbGFwc2VkLm1hcmtlci5maW5kKCk7CisgICAg
ICAgICAgaWYgKGNvbGxhcHNlZC50byA9PSBudWxsKSByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKCFjb2xsYXBzZWQgJiYgZm91bmRCb29rbWFya3MubGVuZ3RoKSBmb3IgKHZhciBqID0g
MDsgaiA8IGZvdW5kQm9va21hcmtzLmxlbmd0aDsgKytqKQogICAgICAgICAgIGJ1aWxkQ29sbGFw
c2VkU3BhbihidWlsZGVyLCAwLCBmb3VuZEJvb2ttYXJrc1tqXSk7CkBAIC00NjAwLDE0ICs1ODc3
LDIzIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgIHNwYW5T
dGFydFN0eWxlID0gIiI7CiAgICAgICAgIH0KICAgICAgICAgdGV4dCA9IGFsbFRleHQuc2xpY2Uo
YXQsIGF0ID0gc3R5bGVzW2krK10pOwotICAgICAgICBzdHlsZSA9IGludGVycHJldFRva2VuU3R5
bGUoc3R5bGVzW2krK10sIGJ1aWxkZXIpOworICAgICAgICBzdHlsZSA9IGludGVycHJldFRva2Vu
U3R5bGUoc3R5bGVzW2krK10sIGJ1aWxkZXIuY20ub3B0aW9ucyk7CiAgICAgICB9CiAgICAgfQog
ICB9CiAKICAgLy8gRE9DVU1FTlQgREFUQSBTVFJVQ1RVUkUKIAotICBmdW5jdGlvbiB1cGRhdGVE
b2MoZG9jLCBjaGFuZ2UsIG1hcmtlZFNwYW5zLCBzZWxBZnRlciwgZXN0aW1hdGVIZWlnaHQpIHsK
KyAgLy8gQnkgZGVmYXVsdCwgdXBkYXRlcyB0aGF0IHN0YXJ0IGFuZCBlbmQgYXQgdGhlIGJlZ2lu
bmluZyBvZiBhIGxpbmUKKyAgLy8gYXJlIHRyZWF0ZWQgc3BlY2lhbGx5LCBpbiBvcmRlciB0byBt
YWtlIHRoZSBhc3NvY2lhdGlvbiBvZiBsaW5lCisgIC8vIHdpZGdldHMgYW5kIG1hcmtlciBlbGVt
ZW50cyB3aXRoIHRoZSB0ZXh0IGJlaGF2ZSBtb3JlIGludHVpdGl2ZS4KKyAgZnVuY3Rpb24gaXNX
aG9sZUxpbmVVcGRhdGUoZG9jLCBjaGFuZ2UpIHsKKyAgICByZXR1cm4gY2hhbmdlLmZyb20uY2gg
PT0gMCAmJiBjaGFuZ2UudG8uY2ggPT0gMCAmJiBsc3QoY2hhbmdlLnRleHQpID09ICIiICYmCisg
ICAgICAoIWRvYy5jbSB8fCBkb2MuY20ub3B0aW9ucy53aG9sZUxpbmVVcGRhdGVCZWZvcmUpOwor
ICB9CisKKyAgLy8gUGVyZm9ybSBhIGNoYW5nZSBvbiB0aGUgZG9jdW1lbnQgZGF0YSBzdHJ1Y3R1
cmUuCisgIGZ1bmN0aW9uIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgbWFya2VkU3BhbnMsIGVzdGlt
YXRlSGVpZ2h0KSB7CiAgICAgZnVuY3Rpb24gc3BhbnNGb3Iobikge3JldHVybiBtYXJrZWRTcGFu
cyA/IG1hcmtlZFNwYW5zW25dIDogbnVsbDt9CiAgICAgZnVuY3Rpb24gdXBkYXRlKGxpbmUsIHRl
eHQsIHNwYW5zKSB7CiAgICAgICB1cGRhdGVMaW5lKGxpbmUsIHRleHQsIHNwYW5zLCBlc3RpbWF0
ZUhlaWdodCk7CkBAIC00NjE4LDEyICs1OTA0LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgIHZhciBmaXJzdExpbmUgPSBnZXRMaW5lKGRvYywgZnJvbS5saW5lKSwg
bGFzdExpbmUgPSBnZXRMaW5lKGRvYywgdG8ubGluZSk7CiAgICAgdmFyIGxhc3RUZXh0ID0gbHN0
KHRleHQpLCBsYXN0U3BhbnMgPSBzcGFuc0Zvcih0ZXh0Lmxlbmd0aCAtIDEpLCBubGluZXMgPSB0
by5saW5lIC0gZnJvbS5saW5lOwogCi0gICAgLy8gRmlyc3QgYWRqdXN0IHRoZSBsaW5lIHN0cnVj
dHVyZQotICAgIGlmIChmcm9tLmNoID09IDAgJiYgdG8uY2ggPT0gMCAmJiBsYXN0VGV4dCA9PSAi
IiAmJgotICAgICAgICAoIWRvYy5jbSB8fCBkb2MuY20ub3B0aW9ucy53aG9sZUxpbmVVcGRhdGVC
ZWZvcmUpKSB7CisgICAgLy8gQWRqdXN0IHRoZSBsaW5lIHN0cnVjdHVyZQorICAgIGlmIChpc1do
b2xlTGluZVVwZGF0ZShkb2MsIGNoYW5nZSkpIHsKICAgICAgIC8vIFRoaXMgaXMgYSB3aG9sZS1s
aW5lIHJlcGxhY2UuIFRyZWF0ZWQgc3BlY2lhbGx5IHRvIG1ha2UKICAgICAgIC8vIHN1cmUgbGlu
ZSBvYmplY3RzIG1vdmUgdGhlIHdheSB0aGV5IGFyZSBzdXBwb3NlZCB0by4KLSAgICAgIGZvciAo
dmFyIGkgPSAwLCBlID0gdGV4dC5sZW5ndGggLSAxLCBhZGRlZCA9IFtdOyBpIDwgZTsgKytpKQor
ICAgICAgZm9yICh2YXIgaSA9IDAsIGFkZGVkID0gW107IGkgPCB0ZXh0Lmxlbmd0aCAtIDE7ICsr
aSkKICAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0
aW1hdGVIZWlnaHQpKTsKICAgICAgIHVwZGF0ZShsYXN0TGluZSwgbGFzdExpbmUudGV4dCwgbGFz
dFNwYW5zKTsKICAgICAgIGlmIChubGluZXMpIGRvYy5yZW1vdmUoZnJvbS5saW5lLCBubGluZXMp
OwpAQCAtNDYzMiw3ICs1OTE3LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gMSkgewogICAgICAgICB1cGRhdGUoZmlyc3RMaW5l
LCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIGxhc3RUZXh0ICsgZmlyc3RMaW5l
LnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMpOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAg
Zm9yICh2YXIgYWRkZWQgPSBbXSwgaSA9IDEsIGUgPSB0ZXh0Lmxlbmd0aCAtIDE7IGkgPCBlOyAr
K2kpCisgICAgICAgIGZvciAodmFyIGFkZGVkID0gW10sIGkgPSAxOyBpIDwgdGV4dC5sZW5ndGgg
LSAxOyArK2kpCiAgICAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0Zv
cihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKICAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZShsYXN0
VGV4dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhl
aWdodCkpOwogICAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgw
LCBmcm9tLmNoKSArIHRleHRbMF0sIHNwYW5zRm9yKDApKTsKQEAgLTQ2NDQsMjAgKzU5MjksMzIg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfSBlbHNlIHsKICAgICAg
IHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4
dFswXSwgc3BhbnNGb3IoMCkpOwogICAgICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0VGV4dCArIGxh
c3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMpOwotICAgICAgZm9yICh2YXIgaSA9
IDEsIGUgPSB0ZXh0Lmxlbmd0aCAtIDEsIGFkZGVkID0gW107IGkgPCBlOyArK2kpCisgICAgICBm
b3IgKHZhciBpID0gMSwgYWRkZWQgPSBbXTsgaSA8IHRleHQubGVuZ3RoIC0gMTsgKytpKQogICAg
ICAgICBhZGRlZC5wdXNoKG5ldyBMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhl
aWdodCkpOwogICAgICAgaWYgKG5saW5lcyA+IDEpIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwg
bmxpbmVzIC0gMSk7CiAgICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAg
ICB9CiAKICAgICBzaWduYWxMYXRlcihkb2MsICJjaGFuZ2UiLCBkb2MsIGNoYW5nZSk7Ci0gICAg
c2V0U2VsZWN0aW9uKGRvYywgc2VsQWZ0ZXIuYW5jaG9yLCBzZWxBZnRlci5oZWFkLCBudWxsLCB0
cnVlKTsKICAgfQogCisgIC8vIFRoZSBkb2N1bWVudCBpcyByZXByZXNlbnRlZCBhcyBhIEJUcmVl
IGNvbnNpc3Rpbmcgb2YgbGVhdmVzLCB3aXRoCisgIC8vIGNodW5rIG9mIGxpbmVzIGluIHRoZW0s
IGFuZCBicmFuY2hlcywgd2l0aCB1cCB0byB0ZW4gbGVhdmVzIG9yCisgIC8vIG90aGVyIGJyYW5j
aCBub2RlcyBiZWxvdyB0aGVtLiBUaGUgdG9wIG5vZGUgaXMgYWx3YXlzIGEgYnJhbmNoCisgIC8v
IG5vZGUsIGFuZCBpcyB0aGUgZG9jdW1lbnQgb2JqZWN0IGl0c2VsZiAobWVhbmluZyBpdCBoYXMK
KyAgLy8gYWRkaXRpb25hbCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzKS4KKyAgLy8KKyAgLy8gQWxs
IG5vZGVzIGhhdmUgcGFyZW50IGxpbmtzLiBUaGUgdHJlZSBpcyB1c2VkIGJvdGggdG8gZ28gZnJv
bQorICAvLyBsaW5lIG51bWJlcnMgdG8gbGluZSBvYmplY3RzLCBhbmQgdG8gZ28gZnJvbSBvYmpl
Y3RzIHRvIG51bWJlcnMuCisgIC8vIEl0IGFsc28gaW5kZXhlcyBieSBoZWlnaHQsIGFuZCBpcyB1
c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBoZWlnaHQKKyAgLy8gYW5kIGxpbmUgb2JqZWN0LCBhbmQg
dG8gZmluZCB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudC4KKyAgLy8KKyAgLy8gU2Vl
IGFsc28gaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9ibG9nL2NvZGVtaXJyb3ItbGluZS10cmVl
Lmh0bWwKKwogICBmdW5jdGlvbiBMZWFmQ2h1bmsobGluZXMpIHsKICAgICB0aGlzLmxpbmVzID0g
bGluZXM7CiAgICAgdGhpcy5wYXJlbnQgPSBudWxsOwotICAgIGZvciAodmFyIGkgPSAwLCBlID0g
bGluZXMubGVuZ3RoLCBoZWlnaHQgPSAwOyBpIDwgZTsgKytpKSB7CisgICAgZm9yICh2YXIgaSA9
IDAsIGhlaWdodCA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgewogICAgICAgbGluZXNbaV0u
cGFyZW50ID0gdGhpczsKICAgICAgIGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7CiAgICAgfQpA
QCAtNDY2Niw2ICs1OTYzLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAK
ICAgTGVhZkNodW5rLnByb3RvdHlwZSA9IHsKICAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gdGhpcy5saW5lcy5sZW5ndGg7IH0sCisgICAgLy8gUmVtb3ZlIHRoZSBuIGxpbmVzIGF0
IG9mZnNldCAnYXQnLgogICAgIHJlbW92ZUlubmVyOiBmdW5jdGlvbihhdCwgbikgewogICAgICAg
Zm9yICh2YXIgaSA9IGF0LCBlID0gYXQgKyBuOyBpIDwgZTsgKytpKSB7CiAgICAgICAgIHZhciBs
aW5lID0gdGhpcy5saW5lc1tpXTsKQEAgLTQ2NzUsMTQgKzU5NzMsMTggQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB9CiAgICAgICB0aGlzLmxpbmVzLnNwbGljZShh
dCwgbik7CiAgICAgfSwKKyAgICAvLyBIZWxwZXIgdXNlZCB0byBjb2xsYXBzZSBhIHNtYWxsIGJy
YW5jaCBpbnRvIGEgc2luZ2xlIGxlYWYuCiAgICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7
Ci0gICAgICBsaW5lcy5zcGxpY2UuYXBwbHkobGluZXMsIFtsaW5lcy5sZW5ndGgsIDBdLmNvbmNh
dCh0aGlzLmxpbmVzKSk7CisgICAgICBsaW5lcy5wdXNoLmFwcGx5KGxpbmVzLCB0aGlzLmxpbmVz
KTsKICAgICB9LAorICAgIC8vIEluc2VydCB0aGUgZ2l2ZW4gYXJyYXkgb2YgbGluZXMgYXQgb2Zm
c2V0ICdhdCcsIGNvdW50IHRoZW0gYXMKKyAgICAvLyBoYXZpbmcgdGhlIGdpdmVuIGhlaWdodC4K
ICAgICBpbnNlcnRJbm5lcjogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKICAgICAgIHRo
aXMuaGVpZ2h0ICs9IGhlaWdodDsKICAgICAgIHRoaXMubGluZXMgPSB0aGlzLmxpbmVzLnNsaWNl
KDAsIGF0KS5jb25jYXQobGluZXMpLmNvbmNhdCh0aGlzLmxpbmVzLnNsaWNlKGF0KSk7Ci0gICAg
ICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgbGluZXNbaV0u
cGFyZW50ID0gdGhpczsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyAr
K2kpIGxpbmVzW2ldLnBhcmVudCA9IHRoaXM7CiAgICAgfSwKKyAgICAvLyBVc2VkIHRvIGl0ZXJh
dGUgb3ZlciBhIHBhcnQgb2YgdGhlIHRyZWUuCiAgICAgaXRlck46IGZ1bmN0aW9uKGF0LCBuLCBv
cCkgewogICAgICAgZm9yICh2YXIgZSA9IGF0ICsgbjsgYXQgPCBlOyArK2F0KQogICAgICAgICBp
ZiAob3AodGhpcy5saW5lc1thdF0pKSByZXR1cm4gdHJ1ZTsKQEAgLTQ2OTIsNyArNTk5NCw3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBCcmFuY2hDaHVu
ayhjaGlsZHJlbikgewogICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKICAgICB2YXIgc2l6
ZSA9IDAsIGhlaWdodCA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaGlsZHJlbi5sZW5n
dGg7IGkgPCBlOyArK2kpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0
aDsgKytpKSB7CiAgICAgICB2YXIgY2ggPSBjaGlsZHJlbltpXTsKICAgICAgIHNpemUgKz0gY2gu
Y2h1bmtTaXplKCk7IGhlaWdodCArPSBjaC5oZWlnaHQ7CiAgICAgICBjaC5wYXJlbnQgPSB0aGlz
OwpAQCAtNDcxNyw3ICs2MDE5LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgICAgIGF0ID0gMDsKICAgICAgICAgfSBlbHNlIGF0IC09IHN6OwogICAgICAgfQot
ICAgICAgaWYgKHRoaXMuc2l6ZSAtIG4gPCAyNSkgeworICAgICAgLy8gSWYgdGhlIHJlc3VsdCBp
cyBzbWFsbGVyIHRoYW4gMjUgbGluZXMsIGVuc3VyZSB0aGF0IGl0IGlzIGEKKyAgICAgIC8vIHNp
bmdsZSBsZWFmIG5vZGUuCisgICAgICBpZiAodGhpcy5zaXplIC0gbiA8IDI1ICYmCisgICAgICAg
ICAgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMSB8fCAhKHRoaXMuY2hpbGRyZW5bMF0gaW5zdGFu
Y2VvZiBMZWFmQ2h1bmspKSkgewogICAgICAgICB2YXIgbGluZXMgPSBbXTsKICAgICAgICAgdGhp
cy5jb2xsYXBzZShsaW5lcyk7CiAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbbmV3IExlYWZDaHVu
ayhsaW5lcyldOwpAQCAtNDcyNSwxMiArNjAzMCwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIH0KICAgICB9LAogICAgIGNvbGxhcHNlOiBmdW5jdGlvbihsaW5l
cykgewotICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8
IGU7ICsraSkgdGhpcy5jaGlsZHJlbltpXS5jb2xsYXBzZShsaW5lcyk7CisgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHRoaXMuY2hpbGRyZW5baV0u
Y29sbGFwc2UobGluZXMpOwogICAgIH0sCiAgICAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9uKGF0LCBs
aW5lcywgaGVpZ2h0KSB7CiAgICAgICB0aGlzLnNpemUgKz0gbGluZXMubGVuZ3RoOwogICAgICAg
dGhpcy5oZWlnaHQgKz0gaGVpZ2h0OwotICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLmNo
aWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7CiAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hp
bGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAgIGlmIChhdCA8PSBzeikg
ewogICAgICAgICAgIGNoaWxkLmluc2VydElubmVyKGF0LCBsaW5lcywgaGVpZ2h0KTsKQEAgLTQ3
NDksNiArNjA1NCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAg
ICBhdCAtPSBzejsKICAgICAgIH0KICAgICB9LAorICAgIC8vIFdoZW4gYSBub2RlIGhhcyBncm93
biwgY2hlY2sgd2hldGhlciBpdCBzaG91bGQgYmUgc3BsaXQuCiAgICAgbWF5YmVTcGlsbDogZnVu
Y3Rpb24oKSB7CiAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPD0gMTApIHJldHVybjsK
ICAgICAgIHZhciBtZSA9IHRoaXM7CkBAIC00NzcxLDcgKzYwNzcsNyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIG1lLnBhcmVudC5tYXliZVNwaWxsKCk7CiAgICAg
fSwKICAgICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7Ci0gICAgICBmb3IgKHZhciBpID0g
MCwgZSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7CisgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKICAgICAgICAgdmFyIGNo
aWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgICAg
aWYgKGF0IDwgc3opIHsKICAgICAgICAgICB2YXIgdXNlZCA9IE1hdGgubWluKG4sIHN6IC0gYXQp
OwpAQCAtNDc5Miw0MyArNjA5OCw1MiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICB0aGlzLmZpcnN0ID0gZmlyc3RMaW5lOwogICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhp
cy5zY3JvbGxMZWZ0ID0gMDsKICAgICB0aGlzLmNhbnRFZGl0ID0gZmFsc2U7Ci0gICAgdGhpcy5o
aXN0b3J5ID0gbWFrZUhpc3RvcnkoKTsKICAgICB0aGlzLmNsZWFuR2VuZXJhdGlvbiA9IDE7CiAg
ICAgdGhpcy5mcm9udGllciA9IGZpcnN0TGluZTsKICAgICB2YXIgc3RhcnQgPSBQb3MoZmlyc3RM
aW5lLCAwKTsKLSAgICB0aGlzLnNlbCA9IHtmcm9tOiBzdGFydCwgdG86IHN0YXJ0LCBoZWFkOiBz
dGFydCwgYW5jaG9yOiBzdGFydCwgc2hpZnQ6IGZhbHNlLCBleHRlbmQ6IGZhbHNlLCBnb2FsQ29s
dW1uOiBudWxsfTsKKyAgICB0aGlzLnNlbCA9IHNpbXBsZVNlbGVjdGlvbihzdGFydCk7CisgICAg
dGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkobnVsbCk7CiAgICAgdGhpcy5pZCA9ICsrbmV4dERv
Y0lkOwogICAgIHRoaXMubW9kZU9wdGlvbiA9IG1vZGU7CiAKICAgICBpZiAodHlwZW9mIHRleHQg
PT0gInN0cmluZyIpIHRleHQgPSBzcGxpdExpbmVzKHRleHQpOwotICAgIHVwZGF0ZURvYyh0aGlz
LCB7ZnJvbTogc3RhcnQsIHRvOiBzdGFydCwgdGV4dDogdGV4dH0sIG51bGwsIHtoZWFkOiBzdGFy
dCwgYW5jaG9yOiBzdGFydH0pOworICAgIHVwZGF0ZURvYyh0aGlzLCB7ZnJvbTogc3RhcnQsIHRv
OiBzdGFydCwgdGV4dDogdGV4dH0pOworICAgIHNldFNlbGVjdGlvbih0aGlzLCBzaW1wbGVTZWxl
Y3Rpb24oc3RhcnQpLCBzZWxfZG9udFNjcm9sbCk7CiAgIH07CiAKICAgRG9jLnByb3RvdHlwZSA9
IGNyZWF0ZU9iaihCcmFuY2hDaHVuay5wcm90b3R5cGUsIHsKICAgICBjb25zdHJ1Y3RvcjogRG9j
LAorICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgZG9jdW1lbnQuIFN1cHBvcnRzIHR3byBmb3JtcyAt
LSB3aXRoIG9ubHkgb25lCisgICAgLy8gYXJndW1lbnQsIGl0IGNhbGxzIHRoYXQgZm9yIGVhY2gg
bGluZSBpbiB0aGUgZG9jdW1lbnQuIFdpdGgKKyAgICAvLyB0aHJlZSwgaXQgaXRlcmF0ZXMgb3Zl
ciB0aGUgcmFuZ2UgZ2l2ZW4gYnkgdGhlIGZpcnN0IHR3byAod2l0aAorICAgIC8vIHRoZSBzZWNv
bmQgYmVpbmcgbm9uLWluY2x1c2l2ZSkuCiAgICAgaXRlcjogZnVuY3Rpb24oZnJvbSwgdG8sIG9w
KSB7CiAgICAgICBpZiAob3ApIHRoaXMuaXRlck4oZnJvbSAtIHRoaXMuZmlyc3QsIHRvIC0gZnJv
bSwgb3ApOwogICAgICAgZWxzZSB0aGlzLml0ZXJOKHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0
aGlzLnNpemUsIGZyb20pOwogICAgIH0sCiAKKyAgICAvLyBOb24tcHVibGljIGludGVyZmFjZSBm
b3IgYWRkaW5nIGFuZCByZW1vdmluZyBsaW5lcy4KICAgICBpbnNlcnQ6IGZ1bmN0aW9uKGF0LCBs
aW5lcykgewogICAgICAgdmFyIGhlaWdodCA9IDA7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgZSA9
IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgaGVpZ2h0ICs9IGxpbmVzW2ldLmhlaWdodDsKKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIGhlaWdodCArPSBsaW5l
c1tpXS5oZWlnaHQ7CiAgICAgICB0aGlzLmluc2VydElubmVyKGF0IC0gdGhpcy5maXJzdCwgbGlu
ZXMsIGhlaWdodCk7CiAgICAgfSwKICAgICByZW1vdmU6IGZ1bmN0aW9uKGF0LCBuKSB7IHRoaXMu
cmVtb3ZlSW5uZXIoYXQgLSB0aGlzLmZpcnN0LCBuKTsgfSwKIAorICAgIC8vIEZyb20gaGVyZSwg
dGhlIG1ldGhvZHMgYXJlIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIE1vc3QKKyAgICAv
LyBhcmUgYWxzbyBhdmFpbGFibGUgZnJvbSBDb2RlTWlycm9yIChlZGl0b3IpIGluc3RhbmNlcy4K
KwogICAgIGdldFZhbHVlOiBmdW5jdGlvbihsaW5lU2VwKSB7CiAgICAgICB2YXIgbGluZXMgPSBn
ZXRMaW5lcyh0aGlzLCB0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplKTsKICAgICAg
IGlmIChsaW5lU2VwID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzOwogICAgICAgcmV0dXJuIGxpbmVz
LmpvaW4obGluZVNlcCB8fCAiXG4iKTsKICAgICB9LAotICAgIHNldFZhbHVlOiBmdW5jdGlvbihj
b2RlKSB7CisgICAgc2V0VmFsdWU6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGNvZGUpIHsKICAgICAg
IHZhciB0b3AgPSBQb3ModGhpcy5maXJzdCwgMCksIGxhc3QgPSB0aGlzLmZpcnN0ICsgdGhpcy5z
aXplIC0gMTsKICAgICAgIG1ha2VDaGFuZ2UodGhpcywge2Zyb206IHRvcCwgdG86IFBvcyhsYXN0
LCBnZXRMaW5lKHRoaXMsIGxhc3QpLnRleHQubGVuZ3RoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHQ6IHNwbGl0TGluZXMoY29kZSksIG9yaWdpbjogInNldFZhbHVlIn0sCi0gICAgICAg
ICAgICAgICAgIHtoZWFkOiB0b3AsIGFuY2hvcjogdG9wfSwgdHJ1ZSk7Ci0gICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHQ6IHNwbGl0TGluZXMoY29kZSksIG9yaWdpbjogInNldFZh
bHVlIn0sIHRydWUpOworICAgICAgc2V0U2VsZWN0aW9uKHRoaXMsIHNpbXBsZVNlbGVjdGlvbih0
b3ApKTsKKyAgICB9KSwKICAgICByZXBsYWNlUmFuZ2U6IGZ1bmN0aW9uKGNvZGUsIGZyb20sIHRv
LCBvcmlnaW4pIHsKICAgICAgIGZyb20gPSBjbGlwUG9zKHRoaXMsIGZyb20pOwogICAgICAgdG8g
PSB0byA/IGNsaXBQb3ModGhpcywgdG8pIDogZnJvbTsKQEAgLTQ4NDEsMjEgKzYxNTYsMTMgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfSwKIAogICAgIGdldExpbmU6
IGZ1bmN0aW9uKGxpbmUpIHt2YXIgbCA9IHRoaXMuZ2V0TGluZUhhbmRsZShsaW5lKTsgcmV0dXJu
IGwgJiYgbC50ZXh0O30sCi0gICAgc2V0TGluZTogZnVuY3Rpb24obGluZSwgdGV4dCkgewotICAg
ICAgaWYgKGlzTGluZSh0aGlzLCBsaW5lKSkKLSAgICAgICAgcmVwbGFjZVJhbmdlKHRoaXMsIHRl
eHQsIFBvcyhsaW5lLCAwKSwgY2xpcFBvcyh0aGlzLCBQb3MobGluZSkpKTsKLSAgICB9LAotICAg
IHJlbW92ZUxpbmU6IGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIGlmIChsaW5lKSByZXBsYWNlUmFu
Z2UodGhpcywgIiIsIGNsaXBQb3ModGhpcywgUG9zKGxpbmUgLSAxKSksIGNsaXBQb3ModGhpcywg
UG9zKGxpbmUpKSk7Ci0gICAgICBlbHNlIHJlcGxhY2VSYW5nZSh0aGlzLCAiIiwgUG9zKDAsIDAp
LCBjbGlwUG9zKHRoaXMsIFBvcygxLCAwKSkpOwotICAgIH0sCiAKICAgICBnZXRMaW5lSGFuZGxl
OiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZSh0aGlzLCBsaW5lKSkgcmV0dXJuIGdldExpbmUo
dGhpcywgbGluZSk7fSwKICAgICBnZXRMaW5lTnVtYmVyOiBmdW5jdGlvbihsaW5lKSB7cmV0dXJu
IGxpbmVObyhsaW5lKTt9LAogCiAgICAgZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OiBmdW5jdGlv
bihsaW5lKSB7CiAgICAgICBpZiAodHlwZW9mIGxpbmUgPT0gIm51bWJlciIpIGxpbmUgPSBnZXRM
aW5lKHRoaXMsIGxpbmUpOwotICAgICAgcmV0dXJuIHZpc3VhbExpbmUodGhpcywgbGluZSk7Cisg
ICAgICByZXR1cm4gdmlzdWFsTGluZShsaW5lKTsKICAgICB9LAogCiAgICAgbGluZUNvdW50OiBm
dW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zaXplO30sCkBAIC00ODY1LDQ3ICs2MTcyLDEwMyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBjbGlwUG9zOiBmdW5jdGlvbihw
b3MpIHtyZXR1cm4gY2xpcFBvcyh0aGlzLCBwb3MpO30sCiAKICAgICBnZXRDdXJzb3I6IGZ1bmN0
aW9uKHN0YXJ0KSB7Ci0gICAgICB2YXIgc2VsID0gdGhpcy5zZWwsIHBvczsKLSAgICAgIGlmIChz
dGFydCA9PSBudWxsIHx8IHN0YXJ0ID09ICJoZWFkIikgcG9zID0gc2VsLmhlYWQ7Ci0gICAgICBl
bHNlIGlmIChzdGFydCA9PSAiYW5jaG9yIikgcG9zID0gc2VsLmFuY2hvcjsKLSAgICAgIGVsc2Ug
aWYgKHN0YXJ0ID09ICJlbmQiIHx8IHN0YXJ0ID09PSBmYWxzZSkgcG9zID0gc2VsLnRvOwotICAg
ICAgZWxzZSBwb3MgPSBzZWwuZnJvbTsKLSAgICAgIHJldHVybiBjb3B5UG9zKHBvcyk7CisgICAg
ICB2YXIgcmFuZ2UgPSB0aGlzLnNlbC5wcmltYXJ5KCksIHBvczsKKyAgICAgIGlmIChzdGFydCA9
PSBudWxsIHx8IHN0YXJ0ID09ICJoZWFkIikgcG9zID0gcmFuZ2UuaGVhZDsKKyAgICAgIGVsc2Ug
aWYgKHN0YXJ0ID09ICJhbmNob3IiKSBwb3MgPSByYW5nZS5hbmNob3I7CisgICAgICBlbHNlIGlm
IChzdGFydCA9PSAiZW5kIiB8fCBzdGFydCA9PSAidG8iIHx8IHN0YXJ0ID09PSBmYWxzZSkgcG9z
ID0gcmFuZ2UudG8oKTsKKyAgICAgIGVsc2UgcG9zID0gcmFuZ2UuZnJvbSgpOworICAgICAgcmV0
dXJuIHBvczsKICAgICB9LAotICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHtyZXR1
cm4gIXBvc0VxKHRoaXMuc2VsLmhlYWQsIHRoaXMuc2VsLmFuY2hvcik7fSwKKyAgICBsaXN0U2Vs
ZWN0aW9uczogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnNlbC5yYW5nZXM7IH0sCisgICAgc29t
ZXRoaW5nU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnNlbC5zb21ldGhpbmdTZWxl
Y3RlZCgpO30sCiAKLSAgICBzZXRDdXJzb3I6IGRvY09wZXJhdGlvbihmdW5jdGlvbihsaW5lLCBj
aCwgZXh0ZW5kKSB7Ci0gICAgICB2YXIgcG9zID0gY2xpcFBvcyh0aGlzLCB0eXBlb2YgbGluZSA9
PSAibnVtYmVyIiA/IFBvcyhsaW5lLCBjaCB8fCAwKSA6IGxpbmUpOwotICAgICAgaWYgKGV4dGVu
ZCkgZXh0ZW5kU2VsZWN0aW9uKHRoaXMsIHBvcyk7Ci0gICAgICBlbHNlIHNldFNlbGVjdGlvbih0
aGlzLCBwb3MsIHBvcyk7CisgICAgc2V0Q3Vyc29yOiBkb2NNZXRob2RPcChmdW5jdGlvbihsaW5l
LCBjaCwgb3B0aW9ucykgeworICAgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3Mo
dGhpcywgdHlwZW9mIGxpbmUgPT0gIm51bWJlciIgPyBQb3MobGluZSwgY2ggfHwgMCkgOiBsaW5l
KSwgbnVsbCwgb3B0aW9ucyk7CisgICAgfSksCisgICAgc2V0U2VsZWN0aW9uOiBkb2NNZXRob2RP
cChmdW5jdGlvbihhbmNob3IsIGhlYWQsIG9wdGlvbnMpIHsKKyAgICAgIHNldFNpbXBsZVNlbGVj
dGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGFuY2hvciksIGNsaXBQb3ModGhpcywgaGVhZCB8fCBh
bmNob3IpLCBvcHRpb25zKTsKKyAgICB9KSwKKyAgICBleHRlbmRTZWxlY3Rpb246IGRvY01ldGhv
ZE9wKGZ1bmN0aW9uKGhlYWQsIG90aGVyLCBvcHRpb25zKSB7CisgICAgICBleHRlbmRTZWxlY3Rp
b24odGhpcywgY2xpcFBvcyh0aGlzLCBoZWFkKSwgb3RoZXIgJiYgY2xpcFBvcyh0aGlzLCBvdGhl
ciksIG9wdGlvbnMpOworICAgIH0pLAorICAgIGV4dGVuZFNlbGVjdGlvbnM6IGRvY01ldGhvZE9w
KGZ1bmN0aW9uKGhlYWRzLCBvcHRpb25zKSB7CisgICAgICBleHRlbmRTZWxlY3Rpb25zKHRoaXMs
IGNsaXBQb3NBcnJheSh0aGlzLCBoZWFkcywgb3B0aW9ucykpOwogICAgIH0pLAotICAgIHNldFNl
bGVjdGlvbjogZG9jT3BlcmF0aW9uKGZ1bmN0aW9uKGFuY2hvciwgaGVhZCwgYmlhcykgewotICAg
ICAgc2V0U2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgYW5jaG9yKSwgY2xpcFBvcyh0aGlz
LCBoZWFkIHx8IGFuY2hvciksIGJpYXMpOworICAgIGV4dGVuZFNlbGVjdGlvbnNCeTogZG9jTWV0
aG9kT3AoZnVuY3Rpb24oZiwgb3B0aW9ucykgeworICAgICAgZXh0ZW5kU2VsZWN0aW9ucyh0aGlz
LCBtYXAodGhpcy5zZWwucmFuZ2VzLCBmKSwgb3B0aW9ucyk7CiAgICAgfSksCi0gICAgZXh0ZW5k
U2VsZWN0aW9uOiBkb2NPcGVyYXRpb24oZnVuY3Rpb24oZnJvbSwgdG8sIGJpYXMpIHsKLSAgICAg
IGV4dGVuZFNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGZyb20pLCB0byAmJiBjbGlwUG9z
KHRoaXMsIHRvKSwgYmlhcyk7CisgICAgc2V0U2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rp
b24ocmFuZ2VzLCBwcmltYXJ5LCBvcHRpb25zKSB7CisgICAgICBpZiAoIXJhbmdlcy5sZW5ndGgp
IHJldHVybjsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBvdXQgPSBbXTsgaSA8IHJhbmdlcy5sZW5n
dGg7IGkrKykKKyAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGNsaXBQb3ModGhpcywgcmFuZ2Vz
W2ldLmFuY2hvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9zKHRoaXMsIHJh
bmdlc1tpXS5oZWFkKSk7CisgICAgICBpZiAocHJpbWFyeSA9PSBudWxsKSBwcmltYXJ5ID0gTWF0
aC5taW4ocmFuZ2VzLmxlbmd0aCAtIDEsIHRoaXMuc2VsLnByaW1JbmRleCk7CisgICAgICBzZXRT
ZWxlY3Rpb24odGhpcywgbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgcHJpbWFyeSksIG9wdGlvbnMp
OworICAgIH0pLAorICAgIGFkZFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oYW5jaG9y
LCBoZWFkLCBvcHRpb25zKSB7CisgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLnNs
aWNlKDApOworICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKGNsaXBQb3ModGhpcywgYW5jaG9y
KSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvcikpKTsKKyAgICAgIHNldFNlbGVjdGlvbih0
aGlzLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLCByYW5nZXMubGVuZ3RoIC0gMSksIG9wdGlv
bnMpOwogICAgIH0pLAogCi0gICAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsaW5lU2VwKSB7cmV0
dXJuIHRoaXMuZ2V0UmFuZ2UodGhpcy5zZWwuZnJvbSwgdGhpcy5zZWwudG8sIGxpbmVTZXApO30s
Ci0gICAgcmVwbGFjZVNlbGVjdGlvbjogZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikg
ewotICAgICAgbWFrZUNoYW5nZSh0aGlzLCB7ZnJvbTogdGhpcy5zZWwuZnJvbSwgdG86IHRoaXMu
c2VsLnRvLCB0ZXh0OiBzcGxpdExpbmVzKGNvZGUpLCBvcmlnaW46IG9yaWdpbn0sIGNvbGxhcHNl
IHx8ICJhcm91bmQiKTsKKyAgICBnZXRTZWxlY3Rpb246IGZ1bmN0aW9uKGxpbmVTZXApIHsKKyAg
ICAgIHZhciByYW5nZXMgPSB0aGlzLnNlbC5yYW5nZXMsIGxpbmVzOworICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHNlbCA9IGdldEJl
dHdlZW4odGhpcywgcmFuZ2VzW2ldLmZyb20oKSwgcmFuZ2VzW2ldLnRvKCkpOworICAgICAgICBs
aW5lcyA9IGxpbmVzID8gbGluZXMuY29uY2F0KHNlbCkgOiBzZWw7CisgICAgICB9CisgICAgICBp
ZiAobGluZVNlcCA9PT0gZmFsc2UpIHJldHVybiBsaW5lczsKKyAgICAgIGVsc2UgcmV0dXJuIGxp
bmVzLmpvaW4obGluZVNlcCB8fCAiXG4iKTsKKyAgICB9LAorICAgIGdldFNlbGVjdGlvbnM6IGZ1
bmN0aW9uKGxpbmVTZXApIHsKKyAgICAgIHZhciBwYXJ0cyA9IFtdLCByYW5nZXMgPSB0aGlzLnNl
bC5yYW5nZXM7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykg
eworICAgICAgICB2YXIgc2VsID0gZ2V0QmV0d2Vlbih0aGlzLCByYW5nZXNbaV0uZnJvbSgpLCBy
YW5nZXNbaV0udG8oKSk7CisgICAgICAgIGlmIChsaW5lU2VwICE9PSBmYWxzZSkgc2VsID0gc2Vs
LmpvaW4obGluZVNlcCB8fCAiXG4iKTsKKyAgICAgICAgcGFydHNbaV0gPSBzZWw7CisgICAgICB9
CisgICAgICByZXR1cm4gcGFydHM7CisgICAgfSwKKyAgICByZXBsYWNlU2VsZWN0aW9uOiBkb2NN
ZXRob2RPcChmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSwgb3JpZ2luKSB7CisgICAgICB2YXIgZHVw
ID0gW107CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2VsLnJhbmdlcy5sZW5ndGg7
IGkrKykKKyAgICAgICAgZHVwW2ldID0gY29kZTsKKyAgICAgIHRoaXMucmVwbGFjZVNlbGVjdGlv
bnMoZHVwLCBjb2xsYXBzZSwgb3JpZ2luIHx8ICIraW5wdXQiKTsKKyAgICB9KSwKKyAgICByZXBs
YWNlU2VsZWN0aW9uczogZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikgeworICAgICAg
dmFyIGNoYW5nZXMgPSBbXSwgc2VsID0gdGhpcy5zZWw7CisgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHJhbmdlID0gc2VsLnJh
bmdlc1tpXTsKKyAgICAgICAgY2hhbmdlc1tpXSA9IHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiBy
YW5nZS50bygpLCB0ZXh0OiBzcGxpdExpbmVzKGNvZGVbaV0pLCBvcmlnaW46IG9yaWdpbn07Cisg
ICAgICB9CisgICAgICB2YXIgbmV3U2VsID0gY29sbGFwc2UgJiYgY29sbGFwc2UgIT0gImVuZCIg
JiYgY29tcHV0ZVJlcGxhY2VkU2VsKHRoaXMsIGNoYW5nZXMsIGNvbGxhcHNlKTsKKyAgICAgIGZv
ciAodmFyIGkgPSBjaGFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQorICAgICAgICBtYWtl
Q2hhbmdlKHRoaXMsIGNoYW5nZXNbaV0pOworICAgICAgaWYgKG5ld1NlbCkgc2V0U2VsZWN0aW9u
UmVwbGFjZUhpc3RvcnkodGhpcywgbmV3U2VsKTsKKyAgICAgIGVsc2UgaWYgKHRoaXMuY20pIGVu
c3VyZUN1cnNvclZpc2libGUodGhpcy5jbSk7CiAgICAgfSwKLSAgICB1bmRvOiBkb2NPcGVyYXRp
b24oZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJ1bmRvIik7fSksCi0g
ICAgcmVkbzogZG9jT3BlcmF0aW9uKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0
aGlzLCAicmVkbyIpO30pLAorICAgIHVuZG86IGRvY01ldGhvZE9wKGZ1bmN0aW9uKCkge21ha2VD
aGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCAidW5kbyIpO30pLAorICAgIHJlZG86IGRvY01ldGhvZE9w
KGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCAicmVkbyIpO30pLAorICAg
IHVuZG9TZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlz
dG9yeSh0aGlzLCAidW5kbyIsIHRydWUpO30pLAorICAgIHJlZG9TZWxlY3Rpb246IGRvY01ldGhv
ZE9wKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCAicmVkbyIsIHRydWUp
O30pLAogCi0gICAgc2V0RXh0ZW5kaW5nOiBmdW5jdGlvbih2YWwpIHt0aGlzLnNlbC5leHRlbmQg
PSB2YWw7fSwKKyAgICBzZXRFeHRlbmRpbmc6IGZ1bmN0aW9uKHZhbCkge3RoaXMuZXh0ZW5kID0g
dmFsO30sCisgICAgZ2V0RXh0ZW5kaW5nOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5leHRlbmQ7
fSwKIAogICAgIGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBoaXN0ID0gdGhp
cy5oaXN0b3J5OwotICAgICAgcmV0dXJuIHt1bmRvOiBoaXN0LmRvbmUubGVuZ3RoLCByZWRvOiBo
aXN0LnVuZG9uZS5sZW5ndGh9OworICAgICAgdmFyIGhpc3QgPSB0aGlzLmhpc3RvcnksIGRvbmUg
PSAwLCB1bmRvbmUgPSAwOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaXN0LmRvbmUubGVu
Z3RoOyBpKyspIGlmICghaGlzdC5kb25lW2ldLnJhbmdlcykgKytkb25lOworICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBoaXN0LnVuZG9uZS5sZW5ndGg7IGkrKykgaWYgKCFoaXN0LnVuZG9uZVtp
XS5yYW5nZXMpICsrdW5kb25lOworICAgICAgcmV0dXJuIHt1bmRvOiBkb25lLCByZWRvOiB1bmRv
bmV9OwogICAgIH0sCi0gICAgY2xlYXJIaXN0b3J5OiBmdW5jdGlvbigpIHt0aGlzLmhpc3Rvcnkg
PSBtYWtlSGlzdG9yeSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7fSwKKyAgICBjbGVhckhp
c3Rvcnk6IGZ1bmN0aW9uKCkge3RoaXMuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KHRoaXMuaGlzdG9y
eS5tYXhHZW5lcmF0aW9uKTt9LAogCiAgICAgbWFya0NsZWFuOiBmdW5jdGlvbigpIHsKLSAgICAg
IHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gdGhpcy5jaGFuZ2VHZW5lcmF0aW9uKCk7CisgICAgICB0
aGlzLmNsZWFuR2VuZXJhdGlvbiA9IHRoaXMuY2hhbmdlR2VuZXJhdGlvbih0cnVlKTsKICAgICB9
LAotICAgIGNoYW5nZUdlbmVyYXRpb246IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5oaXN0b3J5
Lmxhc3RPcCA9IHRoaXMuaGlzdG9yeS5sYXN0T3JpZ2luID0gbnVsbDsKKyAgICBjaGFuZ2VHZW5l
cmF0aW9uOiBmdW5jdGlvbihmb3JjZVNwbGl0KSB7CisgICAgICBpZiAoZm9yY2VTcGxpdCkKKyAg
ICAgICAgdGhpcy5oaXN0b3J5Lmxhc3RPcCA9IHRoaXMuaGlzdG9yeS5sYXN0T3JpZ2luID0gbnVs
bDsKICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbjsKICAgICB9LAogICAgIGlz
Q2xlYW46IGZ1bmN0aW9uIChnZW4pIHsKQEAgLTQ5MTcsOSArNjI4MCw5IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICB1bmRvbmU6IGNvcHlIaXN0b3J5
QXJyYXkodGhpcy5oaXN0b3J5LnVuZG9uZSl9OwogICAgIH0sCiAgICAgc2V0SGlzdG9yeTogZnVu
Y3Rpb24oaGlzdERhdGEpIHsKLSAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5ID0gbWFrZUhp
c3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pOwotICAgICAgaGlzdC5kb25lID0gaGlz
dERhdGEuZG9uZS5zbGljZSgwKTsKLSAgICAgIGhpc3QudW5kb25lID0gaGlzdERhdGEudW5kb25l
LnNsaWNlKDApOworICAgICAgdmFyIGhpc3QgPSB0aGlzLmhpc3RvcnkgPSBuZXcgSGlzdG9yeSh0
aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7CisgICAgICBoaXN0LmRvbmUgPSBjb3B5SGlzdG9y
eUFycmF5KGhpc3REYXRhLmRvbmUuc2xpY2UoMCksIG51bGwsIHRydWUpOworICAgICAgaGlzdC51
bmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KGhpc3REYXRhLnVuZG9uZS5zbGljZSgwKSwgbnVsbCwg
dHJ1ZSk7CiAgICAgfSwKIAogICAgIG1hcmtUZXh0OiBmdW5jdGlvbihmcm9tLCB0bywgb3B0aW9u
cykgewpAQCAtNDkyNyw3ICs2MjkwLDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgfSwKICAgICBzZXRCb29rbWFyazogZnVuY3Rpb24ocG9zLCBvcHRpb25zKSB7CiAg
ICAgICB2YXIgcmVhbE9wdHMgPSB7cmVwbGFjZWRXaXRoOiBvcHRpb25zICYmIChvcHRpb25zLm5v
ZGVUeXBlID09IG51bGwgPyBvcHRpb25zLndpZGdldCA6IG9wdGlvbnMpLAotICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydExlZnQ6IG9wdGlvbnMgJiYgb3B0aW9ucy5pbnNlcnRMZWZ0fTsKKyAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRMZWZ0OiBvcHRpb25zICYmIG9wdGlvbnMuaW5zZXJ0
TGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICBjbGVhcldoZW5FbXB0eTogZmFsc2UsIHNoYXJl
ZDogb3B0aW9ucyAmJiBvcHRpb25zLnNoYXJlZH07CiAgICAgICBwb3MgPSBjbGlwUG9zKHRoaXMs
IHBvcyk7CiAgICAgICByZXR1cm4gbWFya1RleHQodGhpcywgcG9zLCBwb3MsIHJlYWxPcHRzLCAi
Ym9va21hcmsiKTsKICAgICB9LApAQCAtNDk0Miw2ICs2MzA2LDIzIEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgfQogICAgICAgcmV0dXJuIG1hcmtlcnM7CiAgICAg
fSwKKyAgICBmaW5kTWFya3M6IGZ1bmN0aW9uKGZyb20sIHRvLCBmaWx0ZXIpIHsKKyAgICAgIGZy
b20gPSBjbGlwUG9zKHRoaXMsIGZyb20pOyB0byA9IGNsaXBQb3ModGhpcywgdG8pOworICAgICAg
dmFyIGZvdW5kID0gW10sIGxpbmVObyA9IGZyb20ubGluZTsKKyAgICAgIHRoaXMuaXRlcihmcm9t
LmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7CisgICAgICAgIHZhciBzcGFucyA9
IGxpbmUubWFya2VkU3BhbnM7CisgICAgICAgIGlmIChzcGFucykgZm9yICh2YXIgaSA9IDA7IGkg
PCBzcGFucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHZhciBzcGFuID0gc3BhbnNbaV07Cisg
ICAgICAgICAgaWYgKCEobGluZU5vID09IGZyb20ubGluZSAmJiBmcm9tLmNoID4gc3Bhbi50byB8
fAorICAgICAgICAgICAgICAgIHNwYW4uZnJvbSA9PSBudWxsICYmIGxpbmVObyAhPSBmcm9tLmxp
bmV8fAorICAgICAgICAgICAgICAgIGxpbmVObyA9PSB0by5saW5lICYmIHNwYW4uZnJvbSA+IHRv
LmNoKSAmJgorICAgICAgICAgICAgICAoIWZpbHRlciB8fCBmaWx0ZXIoc3Bhbi5tYXJrZXIpKSkK
KyAgICAgICAgICAgIGZvdW5kLnB1c2goc3Bhbi5tYXJrZXIucGFyZW50IHx8IHNwYW4ubWFya2Vy
KTsKKyAgICAgICAgfQorICAgICAgICArK2xpbmVObzsKKyAgICAgIH0pOworICAgICAgcmV0dXJu
IGZvdW5kOworICAgIH0sCiAgICAgZ2V0QWxsTWFya3M6IGZ1bmN0aW9uKCkgewogICAgICAgdmFy
IG1hcmtlcnMgPSBbXTsKICAgICAgIHRoaXMuaXRlcihmdW5jdGlvbihsaW5lKSB7CkBAIC00OTc1
LDggKzYzNTYsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBjb3B5
OiBmdW5jdGlvbihjb3B5SGlzdG9yeSkgewogICAgICAgdmFyIGRvYyA9IG5ldyBEb2MoZ2V0TGlu
ZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSksIHRoaXMubW9kZU9w
dGlvbiwgdGhpcy5maXJzdCk7CiAgICAgICBkb2Muc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxUb3A7
IGRvYy5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0OwotICAgICAgZG9jLnNlbCA9IHtmcm9t
OiB0aGlzLnNlbC5mcm9tLCB0bzogdGhpcy5zZWwudG8sIGhlYWQ6IHRoaXMuc2VsLmhlYWQsIGFu
Y2hvcjogdGhpcy5zZWwuYW5jaG9yLAotICAgICAgICAgICAgICAgICBzaGlmdDogdGhpcy5zZWwu
c2hpZnQsIGV4dGVuZDogZmFsc2UsIGdvYWxDb2x1bW46IHRoaXMuc2VsLmdvYWxDb2x1bW59Owor
ICAgICAgZG9jLnNlbCA9IHRoaXMuc2VsOworICAgICAgZG9jLmV4dGVuZCA9IGZhbHNlOwogICAg
ICAgaWYgKGNvcHlIaXN0b3J5KSB7CiAgICAgICAgIGRvYy5oaXN0b3J5LnVuZG9EZXB0aCA9IHRo
aXMuaGlzdG9yeS51bmRvRGVwdGg7CiAgICAgICAgIGRvYy5zZXRIaXN0b3J5KHRoaXMuZ2V0SGlz
dG9yeSgpKTsKQEAgLTQ5OTMsNiArNjM3NCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgICAgaWYgKG9wdGlvbnMuc2hhcmVkSGlzdCkgY29weS5oaXN0b3J5ID0gdGhp
cy5oaXN0b3J5OwogICAgICAgKHRoaXMubGlua2VkIHx8ICh0aGlzLmxpbmtlZCA9IFtdKSkucHVz
aCh7ZG9jOiBjb3B5LCBzaGFyZWRIaXN0OiBvcHRpb25zLnNoYXJlZEhpc3R9KTsKICAgICAgIGNv
cHkubGlua2VkID0gW3tkb2M6IHRoaXMsIGlzUGFyZW50OiB0cnVlLCBzaGFyZWRIaXN0OiBvcHRp
b25zLnNoYXJlZEhpc3R9XTsKKyAgICAgIGNvcHlTaGFyZWRNYXJrZXJzKGNvcHksIGZpbmRTaGFy
ZWRNYXJrZXJzKHRoaXMpKTsKICAgICAgIHJldHVybiBjb3B5OwogICAgIH0sCiAgICAgdW5saW5r
RG9jOiBmdW5jdGlvbihvdGhlcikgewpAQCAtNTAwMiwxMyArNjM4NCwxNCBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgaWYgKGxpbmsuZG9jICE9IG90aGVyKSBj
b250aW51ZTsKICAgICAgICAgdGhpcy5saW5rZWQuc3BsaWNlKGksIDEpOwogICAgICAgICBvdGhl
ci51bmxpbmtEb2ModGhpcyk7CisgICAgICAgIGRldGFjaFNoYXJlZE1hcmtlcnMoZmluZFNoYXJl
ZE1hcmtlcnModGhpcykpOwogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIC8vIElmIHRo
ZSBoaXN0b3JpZXMgd2VyZSBzaGFyZWQsIHNwbGl0IHRoZW0gYWdhaW4KICAgICAgIGlmIChvdGhl
ci5oaXN0b3J5ID09IHRoaXMuaGlzdG9yeSkgewogICAgICAgICB2YXIgc3BsaXRJZHMgPSBbb3Ro
ZXIuaWRdOwogICAgICAgICBsaW5rZWREb2NzKG90aGVyLCBmdW5jdGlvbihkb2MpIHtzcGxpdElk
cy5wdXNoKGRvYy5pZCk7fSwgdHJ1ZSk7Ci0gICAgICAgIG90aGVyLmhpc3RvcnkgPSBtYWtlSGlz
dG9yeSgpOworICAgICAgICBvdGhlci5oaXN0b3J5ID0gbmV3IEhpc3RvcnkobnVsbCk7CiAgICAg
ICAgIG90aGVyLmhpc3RvcnkuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LmRv
bmUsIHNwbGl0SWRzKTsKICAgICAgICAgb3RoZXIuaGlzdG9yeS51bmRvbmUgPSBjb3B5SGlzdG9y
eUFycmF5KHRoaXMuaGlzdG9yeS51bmRvbmUsIHNwbGl0SWRzKTsKICAgICAgIH0KQEAgLTUwMTks
OSArNjQwMiwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBnZXRF
ZGl0b3I6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmNtO30KICAgfSk7CiAKKyAgLy8gUHVibGlj
IGFsaWFzLgogICBEb2MucHJvdG90eXBlLmVhY2hMaW5lID0gRG9jLnByb3RvdHlwZS5pdGVyOwog
Ci0gIC8vIFRoZSBEb2MgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUgb24gQ29kZU1p
cnJvciBpbnN0YW5jZXMKKyAgLy8gU2V0IHVwIG1ldGhvZHMgb24gQ29kZU1pcnJvcidzIHByb3Rv
dHlwZSB0byByZWRpcmVjdCB0byB0aGUgZWRpdG9yJ3MgZG9jdW1lbnQuCiAgIHZhciBkb250RGVs
ZWdhdGUgPSAiaXRlciBpbnNlcnQgcmVtb3ZlIGNvcHkgZ2V0RWRpdG9yIi5zcGxpdCgiICIpOwog
ICBmb3IgKHZhciBwcm9wIGluIERvYy5wcm90b3R5cGUpIGlmIChEb2MucHJvdG90eXBlLmhhc093
blByb3BlcnR5KHByb3ApICYmIGluZGV4T2YoZG9udERlbGVnYXRlLCBwcm9wKSA8IDApCiAgICAg
Q29kZU1pcnJvci5wcm90b3R5cGVbcHJvcF0gPSAoZnVuY3Rpb24obWV0aG9kKSB7CkBAIC01MDMw
LDYgKzY0MTQsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICBldmVu
dE1peGluKERvYyk7CiAKKyAgLy8gQ2FsbCBmIGZvciBhbGwgbGlua2VkIGRvY3VtZW50cy4KICAg
ZnVuY3Rpb24gbGlua2VkRG9jcyhkb2MsIGYsIHNoYXJlZEhpc3RPbmx5KSB7CiAgICAgZnVuY3Rp
b24gcHJvcGFnYXRlKGRvYywgc2tpcCwgc2hhcmVkSGlzdCkgewogICAgICAgaWYgKGRvYy5saW5r
ZWQpIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsraSkgewpAQCAtNTA0
NCwyMiArNjQyOSwyNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBw
cm9wYWdhdGUoZG9jLCBudWxsLCB0cnVlKTsKICAgfQogCisgIC8vIEF0dGFjaCBhIGRvY3VtZW50
IHRvIGFuIGVkaXRvci4KICAgZnVuY3Rpb24gYXR0YWNoRG9jKGNtLCBkb2MpIHsKICAgICBpZiAo
ZG9jLmNtKSB0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2Uu
Iik7CiAgICAgY20uZG9jID0gZG9jOwogICAgIGRvYy5jbSA9IGNtOwogICAgIGVzdGltYXRlTGlu
ZUhlaWdodHMoY20pOwogICAgIGxvYWRNb2RlKGNtKTsKLSAgICBpZiAoIWNtLm9wdGlvbnMubGlu
ZVdyYXBwaW5nKSBjb21wdXRlTWF4TGVuZ3RoKGNtKTsKKyAgICBpZiAoIWNtLm9wdGlvbnMubGlu
ZVdyYXBwaW5nKSBmaW5kTWF4TGluZShjbSk7CiAgICAgY20ub3B0aW9ucy5tb2RlID0gZG9jLm1v
ZGVPcHRpb247CiAgICAgcmVnQ2hhbmdlKGNtKTsKICAgfQogCiAgIC8vIExJTkUgVVRJTElUSUVT
CiAKLSAgZnVuY3Rpb24gZ2V0TGluZShjaHVuaywgbikgewotICAgIG4gLT0gY2h1bmsuZmlyc3Q7
Ci0gICAgd2hpbGUgKCFjaHVuay5saW5lcykgeworICAvLyBGaW5kIHRoZSBsaW5lIG9iamVjdCBj
b3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIG51bWJlci4KKyAgZnVuY3Rpb24gZ2V0TGlu
ZShkb2MsIG4pIHsKKyAgICBuIC09IGRvYy5maXJzdDsKKyAgICBpZiAobiA8IDAgfHwgbiA+PSBk
b2Muc2l6ZSkgdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyBsaW5lICIgKyAobiArIGRvYy5m
aXJzdCkgKyAiIGluIHRoZSBkb2N1bWVudC4iKTsKKyAgICBmb3IgKHZhciBjaHVuayA9IGRvYzsg
IWNodW5rLmxpbmVzOykgewogICAgICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHsKICAgICAgICAg
dmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAg
ICAgICAgIGlmIChuIDwgc3opIHsgY2h1bmsgPSBjaGlsZDsgYnJlYWs7IH0KQEAgLTUwNjksNiAr
NjQ1Nyw4IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBj
aHVuay5saW5lc1tuXTsKICAgfQogCisgIC8vIEdldCB0aGUgcGFydCBvZiBhIGRvY3VtZW50IGJl
dHdlZW4gdHdvIHBvc2l0aW9ucywgYXMgYW4gYXJyYXkgb2YKKyAgLy8gc3RyaW5ncy4KICAgZnVu
Y3Rpb24gZ2V0QmV0d2Vlbihkb2MsIHN0YXJ0LCBlbmQpIHsKICAgICB2YXIgb3V0ID0gW10sIG4g
PSBzdGFydC5saW5lOwogICAgIGRvYy5pdGVyKHN0YXJ0LmxpbmUsIGVuZC5saW5lICsgMSwgZnVu
Y3Rpb24obGluZSkgewpAQCAtNTA4MCwxNyArNjQ3MCwyMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICB9KTsKICAgICByZXR1cm4gb3V0OwogICB9CisgIC8vIEdldCB0
aGUgbGluZXMgYmV0d2VlbiBmcm9tIGFuZCB0bywgYXMgYXJyYXkgb2Ygc3RyaW5ncy4KICAgZnVu
Y3Rpb24gZ2V0TGluZXMoZG9jLCBmcm9tLCB0bykgewogICAgIHZhciBvdXQgPSBbXTsKICAgICBk
b2MuaXRlcihmcm9tLCB0bywgZnVuY3Rpb24obGluZSkgeyBvdXQucHVzaChsaW5lLnRleHQpOyB9
KTsKICAgICByZXR1cm4gb3V0OwogICB9CiAKKyAgLy8gVXBkYXRlIHRoZSBoZWlnaHQgb2YgYSBs
aW5lLCBwcm9wYWdhdGluZyB0aGUgaGVpZ2h0IGNoYW5nZQorICAvLyB1cHdhcmRzIHRvIHBhcmVu
dCBub2Rlcy4KICAgZnVuY3Rpb24gdXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQpIHsKICAg
ICB2YXIgZGlmZiA9IGhlaWdodCAtIGxpbmUuaGVpZ2h0OwotICAgIGZvciAodmFyIG4gPSBsaW5l
OyBuOyBuID0gbi5wYXJlbnQpIG4uaGVpZ2h0ICs9IGRpZmY7CisgICAgaWYgKGRpZmYpIGZvciAo
dmFyIG4gPSBsaW5lOyBuOyBuID0gbi5wYXJlbnQpIG4uaGVpZ2h0ICs9IGRpZmY7CiAgIH0KIAor
ICAvLyBHaXZlbiBhIGxpbmUgb2JqZWN0LCBmaW5kIGl0cyBsaW5lIG51bWJlciBieSB3YWxraW5n
IHVwIHRocm91Z2gKKyAgLy8gaXRzIHBhcmVudCBsaW5rcy4KICAgZnVuY3Rpb24gbGluZU5vKGxp
bmUpIHsKICAgICBpZiAobGluZS5wYXJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgdmFy
IGN1ciA9IGxpbmUucGFyZW50LCBubyA9IGluZGV4T2YoY3VyLmxpbmVzLCBsaW5lKTsKQEAgLTUx
MDMsMTAgKzY0OTgsMTIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
cmV0dXJuIG5vICsgY3VyLmZpcnN0OwogICB9CiAKKyAgLy8gRmluZCB0aGUgbGluZSBhdCB0aGUg
Z2l2ZW4gdmVydGljYWwgcG9zaXRpb24sIHVzaW5nIHRoZSBoZWlnaHQKKyAgLy8gaW5mb3JtYXRp
b24gaW4gdGhlIGRvY3VtZW50IHRyZWUuCiAgIGZ1bmN0aW9uIGxpbmVBdEhlaWdodChjaHVuaywg
aCkgewogICAgIHZhciBuID0gY2h1bmsuZmlyc3Q7CiAgICAgb3V0ZXI6IGRvIHsKLSAgICAgIGZv
ciAodmFyIGkgPSAwLCBlID0gY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7Cisg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIHZhciBjaGlsZCA9IGNodW5rLmNoaWxkcmVuW2ldLCBjaCA9IGNoaWxkLmhlaWdodDsK
ICAgICAgICAgaWYgKGggPCBjaCkgeyBjaHVuayA9IGNoaWxkOyBjb250aW51ZSBvdXRlcjsgfQog
ICAgICAgICBoIC09IGNoOwpAQCAtNTExNCw3ICs2NTExLDcgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgICB9CiAgICAgICByZXR1cm4gbjsKICAgICB9IHdoaWxlICgh
Y2h1bmsubGluZXMpOwotICAgIGZvciAodmFyIGkgPSAwLCBlID0gY2h1bmsubGluZXMubGVuZ3Ro
OyBpIDwgZTsgKytpKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5n
dGg7ICsraSkgewogICAgICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXSwgbGggPSBsaW5lLmhl
aWdodDsKICAgICAgIGlmIChoIDwgbGgpIGJyZWFrOwogICAgICAgaCAtPSBsaDsKQEAgLTUxMjIs
OCArNjUxOSwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1
cm4gbiArIGk7CiAgIH0KIAotICBmdW5jdGlvbiBoZWlnaHRBdExpbmUoY20sIGxpbmVPYmopIHsK
LSAgICBsaW5lT2JqID0gdmlzdWFsTGluZShjbS5kb2MsIGxpbmVPYmopOworCisgIC8vIEZpbmQg
dGhlIGhlaWdodCBhYm92ZSB0aGUgZ2l2ZW4gbGluZS4KKyAgZnVuY3Rpb24gaGVpZ2h0QXRMaW5l
KGxpbmVPYmopIHsKKyAgICBsaW5lT2JqID0gdmlzdWFsTGluZShsaW5lT2JqKTsKIAogICAgIHZh
ciBoID0gMCwgY2h1bmsgPSBsaW5lT2JqLnBhcmVudDsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNodW5rLmxpbmVzLmxlbmd0aDsgKytpKSB7CkBAIC01MTQxLDYgKzY1NDAsOSBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gaDsKICAgfQogCisgIC8vIEdl
dCB0aGUgYmlkaSBvcmRlcmluZyBmb3IgdGhlIGdpdmVuIGxpbmUgKGFuZCBjYWNoZSBpdCkuIFJl
dHVybnMKKyAgLy8gZmFsc2UgZm9yIGxpbmVzIHRoYXQgYXJlIGZ1bGx5IGxlZnQtdG8tcmlnaHQs
IGFuZCBhbiBhcnJheSBvZgorICAvLyBCaWRpU3BhbiBvYmplY3RzIG90aGVyd2lzZS4KICAgZnVu
Y3Rpb24gZ2V0T3JkZXIobGluZSkgewogICAgIHZhciBvcmRlciA9IGxpbmUub3JkZXI7CiAgICAg
aWYgKG9yZGVyID09IG51bGwpIG9yZGVyID0gbGluZS5vcmRlciA9IGJpZGlPcmRlcmluZyhsaW5l
LnRleHQpOwpAQCAtNTE0OSw1MCArNjU1MSw3MCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKIAogICAvLyBISVNUT1JZCiAKLSAgZnVuY3Rpb24gbWFrZUhpc3Rvcnkoc3RhcnRH
ZW4pIHsKLSAgICByZXR1cm4gewotICAgICAgLy8gQXJyYXlzIG9mIGhpc3RvcnkgZXZlbnRzLiBE
b2luZyBzb21ldGhpbmcgYWRkcyBhbiBldmVudCB0bwotICAgICAgLy8gZG9uZSBhbmQgY2xlYXJz
IHVuZG8uIFVuZG9pbmcgbW92ZXMgZXZlbnRzIGZyb20gZG9uZSB0bwotICAgICAgLy8gdW5kb25l
LCByZWRvaW5nIG1vdmVzIHRoZW0gaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4KLSAgICAgIGRvbmU6
IFtdLCB1bmRvbmU6IFtdLCB1bmRvRGVwdGg6IEluZmluaXR5LAotICAgICAgLy8gVXNlZCB0byB0
cmFjayB3aGVuIGNoYW5nZXMgY2FuIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIHVuZG8KLSAgICAg
IC8vIGV2ZW50Ci0gICAgICBsYXN0VGltZTogMCwgbGFzdE9wOiBudWxsLCBsYXN0T3JpZ2luOiBu
dWxsLAotICAgICAgLy8gVXNlZCBieSB0aGUgaXNDbGVhbigpIG1ldGhvZAotICAgICAgZ2VuZXJh
dGlvbjogc3RhcnRHZW4gfHwgMSwgbWF4R2VuZXJhdGlvbjogc3RhcnRHZW4gfHwgMQotICAgIH07
Ci0gIH0KLQotICBmdW5jdGlvbiBhdHRhY2hMb2NhbFNwYW5zKGRvYywgY2hhbmdlLCBmcm9tLCB0
bykgewotICAgIHZhciBleGlzdGluZyA9IGNoYW5nZVsic3BhbnNfIiArIGRvYy5pZF0sIG4gPSAw
OwotICAgIGRvYy5pdGVyKE1hdGgubWF4KGRvYy5maXJzdCwgZnJvbSksIE1hdGgubWluKGRvYy5m
aXJzdCArIGRvYy5zaXplLCB0byksIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIGlmIChsaW5lLm1h
cmtlZFNwYW5zKQotICAgICAgICAoZXhpc3RpbmcgfHwgKGV4aXN0aW5nID0gY2hhbmdlWyJzcGFu
c18iICsgZG9jLmlkXSA9IHt9KSlbbl0gPSBsaW5lLm1hcmtlZFNwYW5zOwotICAgICAgKytuOwot
ICAgIH0pOwotICB9Ci0KKyAgZnVuY3Rpb24gSGlzdG9yeShzdGFydEdlbikgeworICAgIC8vIEFy
cmF5cyBvZiBjaGFuZ2UgZXZlbnRzIGFuZCBzZWxlY3Rpb25zLiBEb2luZyBzb21ldGhpbmcgYWRk
cyBhbgorICAgIC8vIGV2ZW50IHRvIGRvbmUgYW5kIGNsZWFycyB1bmRvLiBVbmRvaW5nIG1vdmVz
IGV2ZW50cyBmcm9tIGRvbmUKKyAgICAvLyB0byB1bmRvbmUsIHJlZG9pbmcgbW92ZXMgdGhlbSBp
biB0aGUgb3RoZXIgZGlyZWN0aW9uLgorICAgIHRoaXMuZG9uZSA9IFtdOyB0aGlzLnVuZG9uZSA9
IFtdOworICAgIHRoaXMudW5kb0RlcHRoID0gSW5maW5pdHk7CisgICAgLy8gVXNlZCB0byB0cmFj
ayB3aGVuIGNoYW5nZXMgY2FuIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIHVuZG8KKyAgICAvLyBl
dmVudAorICAgIHRoaXMubGFzdE1vZFRpbWUgPSB0aGlzLmxhc3RTZWxUaW1lID0gMDsKKyAgICB0
aGlzLmxhc3RPcCA9IG51bGw7CisgICAgdGhpcy5sYXN0T3JpZ2luID0gdGhpcy5sYXN0U2VsT3Jp
Z2luID0gbnVsbDsKKyAgICAvLyBVc2VkIGJ5IHRoZSBpc0NsZWFuKCkgbWV0aG9kCisgICAgdGhp
cy5nZW5lcmF0aW9uID0gdGhpcy5tYXhHZW5lcmF0aW9uID0gc3RhcnRHZW4gfHwgMTsKKyAgfQor
CisgIC8vIENyZWF0ZSBhIGhpc3RvcnkgY2hhbmdlIGV2ZW50IGZyb20gYW4gdXBkYXRlRG9jLXN0
eWxlIGNoYW5nZQorICAvLyBvYmplY3QuCiAgIGZ1bmN0aW9uIGhpc3RvcnlDaGFuZ2VGcm9tQ2hh
bmdlKGRvYywgY2hhbmdlKSB7Ci0gICAgdmFyIGZyb20gPSB7IGxpbmU6IGNoYW5nZS5mcm9tLmxp
bmUsIGNoOiBjaGFuZ2UuZnJvbS5jaCB9OwotICAgIHZhciBoaXN0Q2hhbmdlID0ge2Zyb206IGZy
b20sIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKSwgdGV4dDogZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5m
cm9tLCBjaGFuZ2UudG8pfTsKKyAgICB2YXIgaGlzdENoYW5nZSA9IHtmcm9tOiBjb3B5UG9zKGNo
YW5nZS5mcm9tKSwgdG86IGNoYW5nZUVuZChjaGFuZ2UpLCB0ZXh0OiBnZXRCZXR3ZWVuKGRvYywg
Y2hhbmdlLmZyb20sIGNoYW5nZS50byl9OwogICAgIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0
Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpOwogICAgIGxpbmtl
ZERvY3MoZG9jLCBmdW5jdGlvbihkb2MpIHthdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlzdENoYW5n
ZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTt9LCB0cnVlKTsKICAgICBy
ZXR1cm4gaGlzdENoYW5nZTsKICAgfQogCi0gIGZ1bmN0aW9uIGFkZFRvSGlzdG9yeShkb2MsIGNo
YW5nZSwgc2VsQWZ0ZXIsIG9wSWQpIHsKKyAgLy8gUG9wIGFsbCBzZWxlY3Rpb24gZXZlbnRzIG9m
ZiB0aGUgZW5kIG9mIGEgaGlzdG9yeSBhcnJheS4gU3RvcCBhdAorICAvLyBhIGNoYW5nZSBldmVu
dC4KKyAgZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb25FdmVudHMoYXJyYXkpIHsKKyAgICB3aGlsZSAo
YXJyYXkubGVuZ3RoKSB7CisgICAgICB2YXIgbGFzdCA9IGxzdChhcnJheSk7CisgICAgICBpZiAo
bGFzdC5yYW5nZXMpIGFycmF5LnBvcCgpOworICAgICAgZWxzZSBicmVhazsKKyAgICB9CisgIH0K
KworICAvLyBGaW5kIHRoZSB0b3AgY2hhbmdlIGV2ZW50IGluIHRoZSBoaXN0b3J5LiBQb3Agb2Zm
IHNlbGVjdGlvbgorICAvLyBldmVudHMgdGhhdCBhcmUgaW4gdGhlIHdheS4KKyAgZnVuY3Rpb24g
bGFzdENoYW5nZUV2ZW50KGhpc3QsIGZvcmNlKSB7CisgICAgaWYgKGZvcmNlKSB7CisgICAgICBj
bGVhclNlbGVjdGlvbkV2ZW50cyhoaXN0LmRvbmUpOworICAgICAgcmV0dXJuIGxzdChoaXN0LmRv
bmUpOworICAgIH0gZWxzZSBpZiAoaGlzdC5kb25lLmxlbmd0aCAmJiAhbHN0KGhpc3QuZG9uZSku
cmFuZ2VzKSB7CisgICAgICByZXR1cm4gbHN0KGhpc3QuZG9uZSk7CisgICAgfSBlbHNlIGlmICho
aXN0LmRvbmUubGVuZ3RoID4gMSAmJiAhaGlzdC5kb25lW2hpc3QuZG9uZS5sZW5ndGggLSAyXS5y
YW5nZXMpIHsKKyAgICAgIGhpc3QuZG9uZS5wb3AoKTsKKyAgICAgIHJldHVybiBsc3QoaGlzdC5k
b25lKTsKKyAgICB9CisgIH0KKworICAvLyBSZWdpc3RlciBhIGNoYW5nZSBpbiB0aGUgaGlzdG9y
eS4gTWVyZ2VzIGNoYW5nZXMgdGhhdCBhcmUgd2l0aGluCisgIC8vIGEgc2luZ2xlIG9wZXJhdGlv
biwgb3JlIGFyZSBjbG9zZSB0b2dldGhlciB3aXRoIGFuIG9yaWdpbiB0aGF0CisgIC8vIGFsbG93
cyBtZXJnaW5nIChzdGFydGluZyB3aXRoICIrIikgaW50byBhIHNpbmdsZSBldmVudC4KKyAgZnVu
Y3Rpb24gYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRlciwgb3BJZCkgewog
ICAgIHZhciBoaXN0ID0gZG9jLmhpc3Rvcnk7CiAgICAgaGlzdC51bmRvbmUubGVuZ3RoID0gMDsK
LSAgICB2YXIgdGltZSA9ICtuZXcgRGF0ZSwgY3VyID0gbHN0KGhpc3QuZG9uZSk7CisgICAgdmFy
IHRpbWUgPSArbmV3IERhdGUsIGN1cjsKIAotICAgIGlmIChjdXIgJiYKLSAgICAgICAgKGhpc3Qu
bGFzdE9wID09IG9wSWQgfHwKKyAgICBpZiAoKGhpc3QubGFzdE9wID09IG9wSWQgfHwKICAgICAg
ICAgIGhpc3QubGFzdE9yaWdpbiA9PSBjaGFuZ2Uub3JpZ2luICYmIGNoYW5nZS5vcmlnaW4gJiYK
LSAgICAgICAgICgoY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gIisiICYmIGRvYy5jbSAmJiBo
aXN0Lmxhc3RUaW1lID4gdGltZSAtIGRvYy5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5KSB8
fAotICAgICAgICAgIGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09ICIqIikpKSB7CisgICAgICAg
ICAoKGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09ICIrIiAmJiBkb2MuY20gJiYgaGlzdC5sYXN0
TW9kVGltZSA+IHRpbWUgLSBkb2MuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheSkgfHwKKyAg
ICAgICAgICBjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKiIpKSAmJgorICAgICAgICAoY3Vy
ID0gbGFzdENoYW5nZUV2ZW50KGhpc3QsIGhpc3QubGFzdE9wID09IG9wSWQpKSkgewogICAgICAg
Ly8gTWVyZ2UgdGhpcyBjaGFuZ2UgaW50byB0aGUgbGFzdCBldmVudAogICAgICAgdmFyIGxhc3Qg
PSBsc3QoY3VyLmNoYW5nZXMpOwotICAgICAgaWYgKHBvc0VxKGNoYW5nZS5mcm9tLCBjaGFuZ2Uu
dG8pICYmIHBvc0VxKGNoYW5nZS5mcm9tLCBsYXN0LnRvKSkgeworICAgICAgaWYgKGNtcChjaGFu
Z2UuZnJvbSwgY2hhbmdlLnRvKSA9PSAwICYmIGNtcChjaGFuZ2UuZnJvbSwgbGFzdC50bykgPT0g
MCkgewogICAgICAgICAvLyBPcHRpbWl6ZWQgY2FzZSBmb3Igc2ltcGxlIGluc2VydGlvbiAtLSBk
b24ndCB3YW50IHRvIGFkZAogICAgICAgICAvLyBuZXcgY2hhbmdlc2V0cyBmb3IgZXZlcnkgY2hh
cmFjdGVyIHR5cGVkCiAgICAgICAgIGxhc3QudG8gPSBjaGFuZ2VFbmQoY2hhbmdlKTsKQEAgLTUy
MDAsMjMgKzY2MjIsODEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICAgIC8vIEFkZCBuZXcgc3ViLWV2ZW50CiAgICAgICAgIGN1ci5jaGFuZ2VzLnB1c2goaGlzdG9y
eUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpKTsKICAgICAgIH0KLSAgICAgIGN1ci5hbmNo
b3JBZnRlciA9IHNlbEFmdGVyLmFuY2hvcjsgY3VyLmhlYWRBZnRlciA9IHNlbEFmdGVyLmhlYWQ7
CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIENhbiBub3QgYmUgbWVyZ2VkLCBzdGFydCBhIG5ldyBl
dmVudC4KKyAgICAgIHZhciBiZWZvcmUgPSBsc3QoaGlzdC5kb25lKTsKKyAgICAgIGlmICghYmVm
b3JlIHx8ICFiZWZvcmUucmFuZ2VzKQorICAgICAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KGRv
Yy5zZWwsIGhpc3QuZG9uZSk7CiAgICAgICBjdXIgPSB7Y2hhbmdlczogW2hpc3RvcnlDaGFuZ2VG
cm9tQ2hhbmdlKGRvYywgY2hhbmdlKV0sCi0gICAgICAgICAgICAgZ2VuZXJhdGlvbjogaGlzdC5n
ZW5lcmF0aW9uLAotICAgICAgICAgICAgIGFuY2hvckJlZm9yZTogZG9jLnNlbC5hbmNob3IsIGhl
YWRCZWZvcmU6IGRvYy5zZWwuaGVhZCwKLSAgICAgICAgICAgICBhbmNob3JBZnRlcjogc2VsQWZ0
ZXIuYW5jaG9yLCBoZWFkQWZ0ZXI6IHNlbEFmdGVyLmhlYWR9OworICAgICAgICAgICAgIGdlbmVy
YXRpb246IGhpc3QuZ2VuZXJhdGlvbn07CiAgICAgICBoaXN0LmRvbmUucHVzaChjdXIpOwotICAg
ICAgaGlzdC5nZW5lcmF0aW9uID0gKytoaXN0Lm1heEdlbmVyYXRpb247Ci0gICAgICB3aGlsZSAo
aGlzdC5kb25lLmxlbmd0aCA+IGhpc3QudW5kb0RlcHRoKQorICAgICAgd2hpbGUgKGhpc3QuZG9u
ZS5sZW5ndGggPiBoaXN0LnVuZG9EZXB0aCkgewogICAgICAgICBoaXN0LmRvbmUuc2hpZnQoKTsK
KyAgICAgICAgaWYgKCFoaXN0LmRvbmVbMF0ucmFuZ2VzKSBoaXN0LmRvbmUuc2hpZnQoKTsKKyAg
ICAgIH0KICAgICB9Ci0gICAgaGlzdC5sYXN0VGltZSA9IHRpbWU7CisgICAgaGlzdC5kb25lLnB1
c2goc2VsQWZ0ZXIpOworICAgIGhpc3QuZ2VuZXJhdGlvbiA9ICsraGlzdC5tYXhHZW5lcmF0aW9u
OworICAgIGhpc3QubGFzdE1vZFRpbWUgPSBoaXN0Lmxhc3RTZWxUaW1lID0gdGltZTsKKyAgICBo
aXN0Lmxhc3RPcCA9IG9wSWQ7CisgICAgaGlzdC5sYXN0T3JpZ2luID0gaGlzdC5sYXN0U2VsT3Jp
Z2luID0gY2hhbmdlLm9yaWdpbjsKKworICAgIGlmICghbGFzdCkgc2lnbmFsKGRvYywgImhpc3Rv
cnlBZGRlZCIpOworICB9CisKKyAgZnVuY3Rpb24gc2VsZWN0aW9uRXZlbnRDYW5CZU1lcmdlZChk
b2MsIG9yaWdpbiwgcHJldiwgc2VsKSB7CisgICAgdmFyIGNoID0gb3JpZ2luLmNoYXJBdCgwKTsK
KyAgICByZXR1cm4gY2ggPT0gIioiIHx8CisgICAgICBjaCA9PSAiKyIgJiYKKyAgICAgIHByZXYu
cmFuZ2VzLmxlbmd0aCA9PSBzZWwucmFuZ2VzLmxlbmd0aCAmJgorICAgICAgcHJldi5zb21ldGhp
bmdTZWxlY3RlZCgpID09IHNlbC5zb21ldGhpbmdTZWxlY3RlZCgpICYmCisgICAgICBuZXcgRGF0
ZSAtIGRvYy5oaXN0b3J5Lmxhc3RTZWxUaW1lIDw9IChkb2MuY20gPyBkb2MuY20ub3B0aW9ucy5o
aXN0b3J5RXZlbnREZWxheSA6IDUwMCk7CisgIH0KKworICAvLyBDYWxsZWQgd2hlbmV2ZXIgdGhl
IHNlbGVjdGlvbiBjaGFuZ2VzLCBzZXRzIHRoZSBuZXcgc2VsZWN0aW9uIGFzCisgIC8vIHRoZSBw
ZW5kaW5nIHNlbGVjdGlvbiBpbiB0aGUgaGlzdG9yeSwgYW5kIHB1c2hlcyB0aGUgb2xkIHBlbmRp
bmcKKyAgLy8gc2VsZWN0aW9uIGludG8gdGhlICdkb25lJyBhcnJheSB3aGVuIGl0IHdhcyBzaWdu
aWZpY2FudGx5CisgIC8vIGRpZmZlcmVudCAoaW4gbnVtYmVyIG9mIHNlbGVjdGVkIHJhbmdlcywg
ZW1wdGluZXNzLCBvciB0aW1lKS4KKyAgZnVuY3Rpb24gYWRkU2VsZWN0aW9uVG9IaXN0b3J5KGRv
Yywgc2VsLCBvcElkLCBvcHRpb25zKSB7CisgICAgdmFyIGhpc3QgPSBkb2MuaGlzdG9yeSwgb3Jp
Z2luID0gb3B0aW9ucyAmJiBvcHRpb25zLm9yaWdpbjsKKworICAgIC8vIEEgbmV3IGV2ZW50IGlz
IHN0YXJ0ZWQgd2hlbiB0aGUgcHJldmlvdXMgb3JpZ2luIGRvZXMgbm90IG1hdGNoCisgICAgLy8g
dGhlIGN1cnJlbnQsIG9yIHRoZSBvcmlnaW5zIGRvbid0IGFsbG93IG1hdGNoaW5nLiBPcmlnaW5z
CisgICAgLy8gc3RhcnRpbmcgd2l0aCAqIGFyZSBhbHdheXMgbWVyZ2VkLCB0aG9zZSBzdGFydGlu
ZyB3aXRoICsgYXJlCisgICAgLy8gbWVyZ2VkIHdoZW4gc2ltaWxhciBhbmQgY2xvc2UgdG9nZXRo
ZXIgaW4gdGltZS4KKyAgICBpZiAob3BJZCA9PSBoaXN0Lmxhc3RPcCB8fAorICAgICAgICAob3Jp
Z2luICYmIGhpc3QubGFzdFNlbE9yaWdpbiA9PSBvcmlnaW4gJiYKKyAgICAgICAgIChoaXN0Lmxh
c3RNb2RUaW1lID09IGhpc3QubGFzdFNlbFRpbWUgJiYgaGlzdC5sYXN0T3JpZ2luID09IG9yaWdp
biB8fAorICAgICAgICAgIHNlbGVjdGlvbkV2ZW50Q2FuQmVNZXJnZWQoZG9jLCBvcmlnaW4sIGxz
dChoaXN0LmRvbmUpLCBzZWwpKSkpCisgICAgICBoaXN0LmRvbmVbaGlzdC5kb25lLmxlbmd0aCAt
IDFdID0gc2VsOworICAgIGVsc2UKKyAgICAgIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsLCBo
aXN0LmRvbmUpOworCisgICAgaGlzdC5sYXN0U2VsVGltZSA9ICtuZXcgRGF0ZTsKKyAgICBoaXN0
Lmxhc3RTZWxPcmlnaW4gPSBvcmlnaW47CiAgICAgaGlzdC5sYXN0T3AgPSBvcElkOwotICAgIGhp
c3QubGFzdE9yaWdpbiA9IGNoYW5nZS5vcmlnaW47CisgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9u
cy5jbGVhclJlZG8gIT09IGZhbHNlKQorICAgICAgY2xlYXJTZWxlY3Rpb25FdmVudHMoaGlzdC51
bmRvbmUpOworICB9CisKKyAgZnVuY3Rpb24gcHVzaFNlbGVjdGlvblRvSGlzdG9yeShzZWwsIGRl
c3QpIHsKKyAgICB2YXIgdG9wID0gbHN0KGRlc3QpOworICAgIGlmICghKHRvcCAmJiB0b3AucmFu
Z2VzICYmIHRvcC5lcXVhbHMoc2VsKSkpCisgICAgICBkZXN0LnB1c2goc2VsKTsKKyAgfQorCisg
IC8vIFVzZWQgdG8gc3RvcmUgbWFya2VkIHNwYW4gaW5mb3JtYXRpb24gaW4gdGhlIGhpc3Rvcnku
CisgIGZ1bmN0aW9uIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBjaGFuZ2UsIGZyb20sIHRvKSB7Cisg
ICAgdmFyIGV4aXN0aW5nID0gY2hhbmdlWyJzcGFuc18iICsgZG9jLmlkXSwgbiA9IDA7CisgICAg
ZG9jLml0ZXIoTWF0aC5tYXgoZG9jLmZpcnN0LCBmcm9tKSwgTWF0aC5taW4oZG9jLmZpcnN0ICsg
ZG9jLnNpemUsIHRvKSwgZnVuY3Rpb24obGluZSkgeworICAgICAgaWYgKGxpbmUubWFya2VkU3Bh
bnMpCisgICAgICAgIChleGlzdGluZyB8fCAoZXhpc3RpbmcgPSBjaGFuZ2VbInNwYW5zXyIgKyBk
b2MuaWRdID0ge30pKVtuXSA9IGxpbmUubWFya2VkU3BhbnM7CisgICAgICArK247CisgICAgfSk7
CiAgIH0KIAorICAvLyBXaGVuIHVuL3JlLWRvaW5nIHJlc3RvcmVzIHRleHQgY29udGFpbmluZyBt
YXJrZWQgc3BhbnMsIHRob3NlCisgIC8vIHRoYXQgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgY2xlYXJl
ZCBzaG91bGQgbm90IGJlIHJlc3RvcmVkLgogICBmdW5jdGlvbiByZW1vdmVDbGVhcmVkU3BhbnMo
c3BhbnMpIHsKICAgICBpZiAoIXNwYW5zKSByZXR1cm4gbnVsbDsKICAgICBmb3IgKHZhciBpID0g
MCwgb3V0OyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHsKQEAgLTUyMjYsNiArNjcwNiw3IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiAhb3V0ID8gc3BhbnMg
OiBvdXQubGVuZ3RoID8gb3V0IDogbnVsbDsKICAgfQogCisgIC8vIFJldHJpZXZlIGFuZCBmaWx0
ZXIgdGhlIG9sZCBtYXJrZWQgc3BhbnMgc3RvcmVkIGluIGEgY2hhbmdlIGV2ZW50LgogICBmdW5j
dGlvbiBnZXRPbGRTcGFucyhkb2MsIGNoYW5nZSkgewogICAgIHZhciBmb3VuZCA9IGNoYW5nZVsi
c3BhbnNfIiArIGRvYy5pZF07CiAgICAgaWYgKCFmb3VuZCkgcmV0dXJuIG51bGw7CkBAIC01MjM2
LDExICs2NzE3LDE1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIC8v
IFVzZWQgYm90aCB0byBwcm92aWRlIGEgSlNPTi1zYWZlIG9iamVjdCBpbiAuZ2V0SGlzdG9yeSwg
YW5kLCB3aGVuCiAgIC8vIGRldGFjaGluZyBhIGRvY3VtZW50LCB0byBzcGxpdCB0aGUgaGlzdG9y
eSBpbiB0d28KLSAgZnVuY3Rpb24gY29weUhpc3RvcnlBcnJheShldmVudHMsIG5ld0dyb3VwKSB7
CisgIGZ1bmN0aW9uIGNvcHlIaXN0b3J5QXJyYXkoZXZlbnRzLCBuZXdHcm91cCwgaW5zdGFudGlh
dGVTZWwpIHsKICAgICBmb3IgKHZhciBpID0gMCwgY29weSA9IFtdOyBpIDwgZXZlbnRzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICB2YXIgZXZlbnQgPSBldmVudHNbaV0sIGNoYW5nZXMgPSBldmVudC5j
aGFuZ2VzLCBuZXdDaGFuZ2VzID0gW107Ci0gICAgICBjb3B5LnB1c2goe2NoYW5nZXM6IG5ld0No
YW5nZXMsIGFuY2hvckJlZm9yZTogZXZlbnQuYW5jaG9yQmVmb3JlLCBoZWFkQmVmb3JlOiBldmVu
dC5oZWFkQmVmb3JlLAotICAgICAgICAgICAgICAgICBhbmNob3JBZnRlcjogZXZlbnQuYW5jaG9y
QWZ0ZXIsIGhlYWRBZnRlcjogZXZlbnQuaGVhZEFmdGVyfSk7CisgICAgICB2YXIgZXZlbnQgPSBl
dmVudHNbaV07CisgICAgICBpZiAoZXZlbnQucmFuZ2VzKSB7CisgICAgICAgIGNvcHkucHVzaChp
bnN0YW50aWF0ZVNlbCA/IFNlbGVjdGlvbi5wcm90b3R5cGUuZGVlcENvcHkuY2FsbChldmVudCkg
OiBldmVudCk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgdmFyIGNoYW5nZXMg
PSBldmVudC5jaGFuZ2VzLCBuZXdDaGFuZ2VzID0gW107CisgICAgICBjb3B5LnB1c2goe2NoYW5n
ZXM6IG5ld0NoYW5nZXN9KTsKICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hhbmdlcy5sZW5n
dGg7ICsraikgewogICAgICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tqXSwgbTsKICAgICAgICAg
bmV3Q2hhbmdlcy5wdXNoKHtmcm9tOiBjaGFuZ2UuZnJvbSwgdG86IGNoYW5nZS50bywgdGV4dDog
Y2hhbmdlLnRleHR9KTsKQEAgLTUyNTcsNyArNjc0Miw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogCiAgIC8vIFJlYmFzaW5nL3Jlc2V0dGluZyBoaXN0b3J5IHRvIGRlYWwg
d2l0aCBleHRlcm5hbGx5LXNvdXJjZWQgY2hhbmdlcwogCi0gIGZ1bmN0aW9uIHJlYmFzZUhpc3RT
ZWwocG9zLCBmcm9tLCB0bywgZGlmZikgeworICBmdW5jdGlvbiByZWJhc2VIaXN0U2VsU2luZ2xl
KHBvcywgZnJvbSwgdG8sIGRpZmYpIHsKICAgICBpZiAodG8gPCBwb3MubGluZSkgewogICAgICAg
cG9zLmxpbmUgKz0gZGlmZjsKICAgICB9IGVsc2UgaWYgKGZyb20gPCBwb3MubGluZSkgewpAQCAt
NTI3NiwyOCArNjc2MSwyNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ZnVuY3Rpb24gcmViYXNlSGlzdEFycmF5KGFycmF5LCBmcm9tLCB0bywgZGlmZikgewogICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBzdWIgPSBh
cnJheVtpXSwgb2sgPSB0cnVlOworICAgICAgaWYgKHN1Yi5yYW5nZXMpIHsKKyAgICAgICAgaWYg
KCFzdWIuY29waWVkKSB7IHN1YiA9IGFycmF5W2ldID0gc3ViLmRlZXBDb3B5KCk7IHN1Yi5jb3Bp
ZWQgPSB0cnVlOyB9CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ViLnJhbmdlcy5sZW5n
dGg7IGorKykgeworICAgICAgICAgIHJlYmFzZUhpc3RTZWxTaW5nbGUoc3ViLnJhbmdlc1tqXS5h
bmNob3IsIGZyb20sIHRvLCBkaWZmKTsKKyAgICAgICAgICByZWJhc2VIaXN0U2VsU2luZ2xlKHN1
Yi5yYW5nZXNbal0uaGVhZCwgZnJvbSwgdG8sIGRpZmYpOworICAgICAgICB9CisgICAgICAgIGNv
bnRpbnVlOworICAgICAgfQogICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdWIuY2hhbmdlcy5s
ZW5ndGg7ICsraikgewogICAgICAgICB2YXIgY3VyID0gc3ViLmNoYW5nZXNbal07Ci0gICAgICAg
IGlmICghc3ViLmNvcGllZCkgeyBjdXIuZnJvbSA9IGNvcHlQb3MoY3VyLmZyb20pOyBjdXIudG8g
PSBjb3B5UG9zKGN1ci50byk7IH0KICAgICAgICAgaWYgKHRvIDwgY3VyLmZyb20ubGluZSkgewot
ICAgICAgICAgIGN1ci5mcm9tLmxpbmUgKz0gZGlmZjsKLSAgICAgICAgICBjdXIudG8ubGluZSAr
PSBkaWZmOworICAgICAgICAgIGN1ci5mcm9tID0gUG9zKGN1ci5mcm9tLmxpbmUgKyBkaWZmLCBj
dXIuZnJvbS5jaCk7CisgICAgICAgICAgY3VyLnRvID0gUG9zKGN1ci50by5saW5lICsgZGlmZiwg
Y3VyLnRvLmNoKTsKICAgICAgICAgfSBlbHNlIGlmIChmcm9tIDw9IGN1ci50by5saW5lKSB7CiAg
ICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
fQotICAgICAgaWYgKCFzdWIuY29waWVkKSB7Ci0gICAgICAgIHN1Yi5hbmNob3JCZWZvcmUgPSBj
b3B5UG9zKHN1Yi5hbmNob3JCZWZvcmUpOyBzdWIuaGVhZEJlZm9yZSA9IGNvcHlQb3Moc3ViLmhl
YWRCZWZvcmUpOwotICAgICAgICBzdWIuYW5jaG9yQWZ0ZXIgPSBjb3B5UG9zKHN1Yi5hbmNob3JB
ZnRlcik7IHN1Yi5yZWFkQWZ0ZXIgPSBjb3B5UG9zKHN1Yi5oZWFkQWZ0ZXIpOwotICAgICAgICBz
dWIuY29waWVkID0gdHJ1ZTsKLSAgICAgIH0KICAgICAgIGlmICghb2spIHsKICAgICAgICAgYXJy
YXkuc3BsaWNlKDAsIGkgKyAxKTsKICAgICAgICAgaSA9IDA7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICByZWJhc2VIaXN0U2VsKHN1Yi5hbmNob3JCZWZvcmUpOyByZWJhc2VIaXN0U2VsKHN1Yi5o
ZWFkQmVmb3JlKTsKLSAgICAgICAgcmViYXNlSGlzdFNlbChzdWIuYW5jaG9yQWZ0ZXIpOyByZWJh
c2VIaXN0U2VsKHN1Yi5oZWFkQWZ0ZXIpOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtNTMwOCwz
MCArNjc5MiwyMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZWJh
c2VIaXN0QXJyYXkoaGlzdC51bmRvbmUsIGZyb20sIHRvLCBkaWZmKTsKICAgfQogCi0gIC8vIEVW
RU5UIE9QRVJBVE9SUworICAvLyBFVkVOVCBVVElMSVRJRVMKIAotICBmdW5jdGlvbiBzdG9wTWV0
aG9kKCkge2Vfc3RvcCh0aGlzKTt9Ci0gIC8vIEVuc3VyZSBhbiBldmVudCBoYXMgYSBzdG9wIG1l
dGhvZC4KLSAgZnVuY3Rpb24gYWRkU3RvcChldmVudCkgewotICAgIGlmICghZXZlbnQuc3RvcCkg
ZXZlbnQuc3RvcCA9IHN0b3BNZXRob2Q7Ci0gICAgcmV0dXJuIGV2ZW50OwotICB9CisgIC8vIER1
ZSB0byB0aGUgZmFjdCB0aGF0IHdlIHN0aWxsIHN1cHBvcnQganVyYXNzaWMgSUUgdmVyc2lvbnMs
IHNvbWUKKyAgLy8gY29tcGF0aWJpbGl0eSB3cmFwcGVycyBhcmUgbmVlZGVkLgogCi0gIGZ1bmN0
aW9uIGVfcHJldmVudERlZmF1bHQoZSkgeworICB2YXIgZV9wcmV2ZW50RGVmYXVsdCA9IENvZGVN
aXJyb3IuZV9wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKGUpIHsKICAgICBpZiAoZS5wcmV2ZW50
RGVmYXVsdCkgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgIGVsc2UgZS5yZXR1cm5WYWx1ZSA9IGZh
bHNlOwotICB9Ci0gIGZ1bmN0aW9uIGVfc3RvcFByb3BhZ2F0aW9uKGUpIHsKKyAgfTsKKyAgdmFy
IGVfc3RvcFByb3BhZ2F0aW9uID0gQ29kZU1pcnJvci5lX3N0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0
aW9uKGUpIHsKICAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pIGUuc3RvcFByb3BhZ2F0aW9uKCk7
CiAgICAgZWxzZSBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7Ci0gIH0KKyAgfTsKICAgZnVuY3Rpb24g
ZV9kZWZhdWx0UHJldmVudGVkKGUpIHsKICAgICByZXR1cm4gZS5kZWZhdWx0UHJldmVudGVkICE9
IG51bGwgPyBlLmRlZmF1bHRQcmV2ZW50ZWQgOiBlLnJldHVyblZhbHVlID09IGZhbHNlOwogICB9
Ci0gIGZ1bmN0aW9uIGVfc3RvcChlKSB7ZV9wcmV2ZW50RGVmYXVsdChlKTsgZV9zdG9wUHJvcGFn
YXRpb24oZSk7fQotICBDb2RlTWlycm9yLmVfc3RvcCA9IGVfc3RvcDsKLSAgQ29kZU1pcnJvci5l
X3ByZXZlbnREZWZhdWx0ID0gZV9wcmV2ZW50RGVmYXVsdDsKLSAgQ29kZU1pcnJvci5lX3N0b3BQ
cm9wYWdhdGlvbiA9IGVfc3RvcFByb3BhZ2F0aW9uOworICB2YXIgZV9zdG9wID0gQ29kZU1pcnJv
ci5lX3N0b3AgPSBmdW5jdGlvbihlKSB7ZV9wcmV2ZW50RGVmYXVsdChlKTsgZV9zdG9wUHJvcGFn
YXRpb24oZSk7fTsKIAogICBmdW5jdGlvbiBlX3RhcmdldChlKSB7cmV0dXJuIGUudGFyZ2V0IHx8
IGUuc3JjRWxlbWVudDt9CiAgIGZ1bmN0aW9uIGVfYnV0dG9uKGUpIHsKQEAgLTUzNDcsNyArNjgy
NCwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAvLyBFVkVOVCBI
QU5ETElORwogCi0gIGZ1bmN0aW9uIG9uKGVtaXR0ZXIsIHR5cGUsIGYpIHsKKyAgLy8gTGlnaHR3
ZWlnaHQgZXZlbnQgZnJhbWV3b3JrLiBvbi9vZmYgYWxzbyB3b3JrIG9uIERPTSBub2RlcywKKyAg
Ly8gcmVnaXN0ZXJpbmcgbmF0aXZlIERPTSBoYW5kbGVycy4KKworICB2YXIgb24gPSBDb2RlTWly
cm9yLm9uID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSwgZikgewogICAgIGlmIChlbWl0dGVyLmFk
ZEV2ZW50TGlzdGVuZXIpCiAgICAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZiwg
ZmFsc2UpOwogICAgIGVsc2UgaWYgKGVtaXR0ZXIuYXR0YWNoRXZlbnQpCkBAIC01MzU3LDkgKzY4
MzcsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciBhcnIg
PSBtYXBbdHlwZV0gfHwgKG1hcFt0eXBlXSA9IFtdKTsKICAgICAgIGFyci5wdXNoKGYpOwogICAg
IH0KLSAgfQorICB9OwogCi0gIGZ1bmN0aW9uIG9mZihlbWl0dGVyLCB0eXBlLCBmKSB7CisgIHZh
ciBvZmYgPSBDb2RlTWlycm9yLm9mZiA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUsIGYpIHsKICAg
ICBpZiAoZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKQogICAgICAgZW1pdHRlci5yZW1vdmVF
dmVudExpc3RlbmVyKHR5cGUsIGYsIGZhbHNlKTsKICAgICBlbHNlIGlmIChlbWl0dGVyLmRldGFj
aEV2ZW50KQpAQCAtNTM3MCwxNSArNjg1MCwyMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKQogICAg
ICAgICBpZiAoYXJyW2ldID09IGYpIHsgYXJyLnNwbGljZShpLCAxKTsgYnJlYWs7IH0KICAgICB9
Ci0gIH0KKyAgfTsKIAotICBmdW5jdGlvbiBzaWduYWwoZW1pdHRlciwgdHlwZSAvKiwgdmFsdWVz
Li4uKi8pIHsKKyAgdmFyIHNpZ25hbCA9IENvZGVNaXJyb3Iuc2lnbmFsID0gZnVuY3Rpb24oZW1p
dHRlciwgdHlwZSAvKiwgdmFsdWVzLi4uKi8pIHsKICAgICB2YXIgYXJyID0gZW1pdHRlci5faGFu
ZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV07CiAgICAgaWYgKCFhcnIpIHJldHVybjsK
ICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7
CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIGFycltpXS5hcHBseShu
dWxsLCBhcmdzKTsKLSAgfQorICB9OwogCisgIC8vIE9mdGVuLCB3ZSB3YW50IHRvIHNpZ25hbCBl
dmVudHMgYXQgYSBwb2ludCB3aGVyZSB3ZSBhcmUgaW4gdGhlCisgIC8vIG1pZGRsZSBvZiBzb21l
IHdvcmssIGJ1dCBkb24ndCB3YW50IHRoZSBoYW5kbGVyIHRvIHN0YXJ0IGNhbGxpbmcKKyAgLy8g
b3RoZXIgbWV0aG9kcyBvbiB0aGUgZWRpdG9yLCB3aGljaCBtaWdodCBiZSBpbiBhbiBpbmNvbnNp
c3RlbnQKKyAgLy8gc3RhdGUgb3Igc2ltcGx5IG5vdCBleHBlY3QgYW55IG90aGVyIGV2ZW50cyB0
byBoYXBwZW4uCisgIC8vIHNpZ25hbExhdGVyIGxvb2tzIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBo
YW5kbGVycywgYW5kIHNjaGVkdWxlcworICAvLyB0aGVtIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhl
IGxhc3Qgb3BlcmF0aW9uIGVuZHMsIG9yLCBpZiBubworICAvLyBvcGVyYXRpb24gaXMgYWN0aXZl
LCB3aGVuIGEgdGltZW91dCBmaXJlcy4KICAgdmFyIGRlbGF5ZWRDYWxsYmFja3MsIGRlbGF5ZWRD
YWxsYmFja0RlcHRoID0gMDsKICAgZnVuY3Rpb24gc2lnbmFsTGF0ZXIoZW1pdHRlciwgdHlwZSAv
KiwgdmFsdWVzLi4uKi8pIHsKICAgICB2YXIgYXJyID0gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1p
dHRlci5faGFuZGxlcnNbdHlwZV07CkBAIC01Mzk0LDExICs2ODgxLDYgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBkZWxheWVkQ2FsbGJhY2tzLnB1c2goYm5kKGFy
cltpXSkpOwogICB9CiAKLSAgZnVuY3Rpb24gc2lnbmFsRE9NRXZlbnQoY20sIGUsIG92ZXJyaWRl
KSB7Ci0gICAgc2lnbmFsKGNtLCBvdmVycmlkZSB8fCBlLnR5cGUsIGNtLCBlKTsKLSAgICByZXR1
cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpIHx8IGUuY29kZW1pcnJvcklnbm9yZTsKLSAgfQotCiAg
IGZ1bmN0aW9uIGZpcmVEZWxheWVkKCkgewogICAgIC0tZGVsYXllZENhbGxiYWNrRGVwdGg7CiAg
ICAgdmFyIGRlbGF5ZWQgPSBkZWxheWVkQ2FsbGJhY2tzOwpAQCAtNTQwNiwxMyArNjg4OCwyMSBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGRlbGF5ZWQubGVuZ3RoOyArK2kpIGRlbGF5ZWRbaV0oKTsKICAgfQogCisgIC8vIFRoZSBE
T00gZXZlbnRzIHRoYXQgQ29kZU1pcnJvciBoYW5kbGVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5Cisg
IC8vIHJlZ2lzdGVyaW5nIGEgKG5vbi1ET00pIGhhbmRsZXIgb24gdGhlIGVkaXRvciBmb3IgdGhl
IGV2ZW50IG5hbWUsCisgIC8vIGFuZCBwcmV2ZW50RGVmYXVsdC1pbmcgdGhlIGV2ZW50IGluIHRo
YXQgaGFuZGxlci4KKyAgZnVuY3Rpb24gc2lnbmFsRE9NRXZlbnQoY20sIGUsIG92ZXJyaWRlKSB7
CisgICAgc2lnbmFsKGNtLCBvdmVycmlkZSB8fCBlLnR5cGUsIGNtLCBlKTsKKyAgICByZXR1cm4g
ZV9kZWZhdWx0UHJldmVudGVkKGUpIHx8IGUuY29kZW1pcnJvcklnbm9yZTsKKyAgfQorCiAgIGZ1
bmN0aW9uIGhhc0hhbmRsZXIoZW1pdHRlciwgdHlwZSkgewogICAgIHZhciBhcnIgPSBlbWl0dGVy
Ll9oYW5kbGVycyAmJiBlbWl0dGVyLl9oYW5kbGVyc1t0eXBlXTsKICAgICByZXR1cm4gYXJyICYm
IGFyci5sZW5ndGggPiAwOwogICB9CiAKLSAgQ29kZU1pcnJvci5vbiA9IG9uOyBDb2RlTWlycm9y
Lm9mZiA9IG9mZjsgQ29kZU1pcnJvci5zaWduYWwgPSBzaWduYWw7Ci0KKyAgLy8gQWRkIG9uIGFu
ZCBvZmYgbWV0aG9kcyB0byBhIGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlLCB0byBtYWtlCisgIC8v
IHJlZ2lzdGVyaW5nIGV2ZW50cyBvbiBzdWNoIG9iamVjdHMgbW9yZSBjb252ZW5pZW50LgogICBm
dW5jdGlvbiBldmVudE1peGluKGN0b3IpIHsKICAgICBjdG9yLnByb3RvdHlwZS5vbiA9IGZ1bmN0
aW9uKHR5cGUsIGYpIHtvbih0aGlzLCB0eXBlLCBmKTt9OwogICAgIGN0b3IucHJvdG90eXBlLm9m
ZiA9IGZ1bmN0aW9uKHR5cGUsIGYpIHtvZmYodGhpcywgdHlwZSwgZik7fTsKQEAgLTU0MjcsMjMg
KzY5MTcsNDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vIGhhbmRs
aW5nIHRoaXMnLgogICB2YXIgUGFzcyA9IENvZGVNaXJyb3IuUGFzcyA9IHt0b1N0cmluZzogZnVu
Y3Rpb24oKXtyZXR1cm4gIkNvZGVNaXJyb3IuUGFzcyI7fX07CiAKKyAgLy8gUmV1c2VkIG9wdGlv
biBvYmplY3RzIGZvciBzZXRTZWxlY3Rpb24gJiBmcmllbmRzCisgIHZhciBzZWxfZG9udFNjcm9s
bCA9IHtzY3JvbGw6IGZhbHNlfSwgc2VsX21vdXNlID0ge29yaWdpbjogIiptb3VzZSJ9LCBzZWxf
bW92ZSA9IHtvcmlnaW46ICIrbW92ZSJ9OworCiAgIGZ1bmN0aW9uIERlbGF5ZWQoKSB7dGhpcy5p
ZCA9IG51bGw7fQotICBEZWxheWVkLnByb3RvdHlwZSA9IHtzZXQ6IGZ1bmN0aW9uKG1zLCBmKSB7
Y2xlYXJUaW1lb3V0KHRoaXMuaWQpOyB0aGlzLmlkID0gc2V0VGltZW91dChmLCBtcyk7fX07Cisg
IERlbGF5ZWQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG1zLCBmKSB7CisgICAgY2xlYXJUaW1l
b3V0KHRoaXMuaWQpOworICAgIHRoaXMuaWQgPSBzZXRUaW1lb3V0KGYsIG1zKTsKKyAgfTsKIAog
ICAvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGlu
dG8gYWNjb3VudC4KICAgLy8gVXNlZCBtb3N0bHkgdG8gZmluZCBpbmRlbnRhdGlvbi4KLSAgZnVu
Y3Rpb24gY291bnRDb2x1bW4oc3RyaW5nLCBlbmQsIHRhYlNpemUsIHN0YXJ0SW5kZXgsIHN0YXJ0
VmFsdWUpIHsKKyAgdmFyIGNvdW50Q29sdW1uID0gQ29kZU1pcnJvci5jb3VudENvbHVtbiA9IGZ1
bmN0aW9uKHN0cmluZywgZW5kLCB0YWJTaXplLCBzdGFydEluZGV4LCBzdGFydFZhbHVlKSB7CiAg
ICAgaWYgKGVuZCA9PSBudWxsKSB7CiAgICAgICBlbmQgPSBzdHJpbmcuc2VhcmNoKC9bXlxzXHUw
MGEwXS8pOwogICAgICAgaWYgKGVuZCA9PSAtMSkgZW5kID0gc3RyaW5nLmxlbmd0aDsKICAgICB9
Ci0gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbiA9IHN0YXJ0VmFsdWUgfHwgMDsg
aSA8IGVuZDsgKytpKSB7Ci0gICAgICBpZiAoc3RyaW5nLmNoYXJBdChpKSA9PSAiXHQiKSBuICs9
IHRhYlNpemUgLSAobiAlIHRhYlNpemUpOwotICAgICAgZWxzZSArK247CisgICAgZm9yICh2YXIg
aSA9IHN0YXJ0SW5kZXggfHwgMCwgbiA9IHN0YXJ0VmFsdWUgfHwgMDs7KSB7CisgICAgICB2YXIg
bmV4dFRhYiA9IHN0cmluZy5pbmRleE9mKCJcdCIsIGkpOworICAgICAgaWYgKG5leHRUYWIgPCAw
IHx8IG5leHRUYWIgPj0gZW5kKQorICAgICAgICByZXR1cm4gbiArIChlbmQgLSBpKTsKKyAgICAg
IG4gKz0gbmV4dFRhYiAtIGk7CisgICAgICBuICs9IHRhYlNpemUgLSAobiAlIHRhYlNpemUpOwor
ICAgICAgaSA9IG5leHRUYWIgKyAxOworICAgIH0KKyAgfTsKKworICAvLyBUaGUgaW52ZXJzZSBv
ZiBjb3VudENvbHVtbiAtLSBmaW5kIHRoZSBvZmZzZXQgdGhhdCBjb3JyZXNwb25kcyB0bworICAv
LyBhIHBhcnRpY3VsYXIgY29sdW1uLgorICBmdW5jdGlvbiBmaW5kQ29sdW1uKHN0cmluZywgZ29h
bCwgdGFiU2l6ZSkgeworICAgIGZvciAodmFyIHBvcyA9IDAsIGNvbCA9IDA7OykgeworICAgICAg
dmFyIG5leHRUYWIgPSBzdHJpbmcuaW5kZXhPZigiXHQiLCBwb3MpOworICAgICAgaWYgKG5leHRU
YWIgPT0gLTEpIG5leHRUYWIgPSBzdHJpbmcubGVuZ3RoOworICAgICAgdmFyIHNraXBwZWQgPSBu
ZXh0VGFiIC0gcG9zOworICAgICAgaWYgKG5leHRUYWIgPT0gc3RyaW5nLmxlbmd0aCB8fCBjb2wg
KyBza2lwcGVkID49IGdvYWwpCisgICAgICAgIHJldHVybiBwb3MgKyBNYXRoLm1pbihza2lwcGVk
LCBnb2FsIC0gY29sKTsKKyAgICAgIGNvbCArPSBuZXh0VGFiIC0gcG9zOworICAgICAgY29sICs9
IHRhYlNpemUgLSAoY29sICUgdGFiU2l6ZSk7CisgICAgICBwb3MgPSBuZXh0VGFiICsgMTsKKyAg
ICAgIGlmIChjb2wgPj0gZ29hbCkgcmV0dXJuIHBvczsKICAgICB9Ci0gICAgcmV0dXJuIG47CiAg
IH0KLSAgQ29kZU1pcnJvci5jb3VudENvbHVtbiA9IGNvdW50Q29sdW1uOwogCiAgIHZhciBzcGFj
ZVN0cnMgPSBbIiJdOwogICBmdW5jdGlvbiBzcGFjZVN0cihuKSB7CkBAIC01NDU0LDYwICs2OTY4
LDY5IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIGxz
dChhcnIpIHsgcmV0dXJuIGFyclthcnIubGVuZ3RoLTFdOyB9CiAKLSAgZnVuY3Rpb24gc2VsZWN0
SW5wdXQobm9kZSkgewotICAgIGlmIChpb3MpIHsgLy8gTW9iaWxlIFNhZmFyaSBhcHBhcmVudGx5
IGhhcyBhIGJ1ZyB3aGVyZSBzZWxlY3QoKSBpcyBicm9rZW4uCi0gICAgICBub2RlLnNlbGVjdGlv
blN0YXJ0ID0gMDsKLSAgICAgIG5vZGUuc2VsZWN0aW9uRW5kID0gbm9kZS52YWx1ZS5sZW5ndGg7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFN1cHByZXNzIG15c3RlcmlvdXMgSUUxMCBlcnJvcnMK
LSAgICAgIHRyeSB7IG5vZGUuc2VsZWN0KCk7IH0KLSAgICAgIGNhdGNoKF9lKSB7fQotICAgIH0K
LSAgfQorICB2YXIgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IG5vZGUuc2VsZWN0KCk7
IH07CisgIGlmIChpb3MpIC8vIE1vYmlsZSBTYWZhcmkgYXBwYXJlbnRseSBoYXMgYSBidWcgd2hl
cmUgc2VsZWN0KCkgaXMgYnJva2VuLgorICAgIHNlbGVjdElucHV0ID0gZnVuY3Rpb24obm9kZSkg
eyBub2RlLnNlbGVjdGlvblN0YXJ0ID0gMDsgbm9kZS5zZWxlY3Rpb25FbmQgPSBub2RlLnZhbHVl
Lmxlbmd0aDsgfTsKKyAgZWxzZSBpZiAoaWUpIC8vIFN1cHByZXNzIG15c3RlcmlvdXMgSUUxMCBl
cnJvcnMKKyAgICBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9uKG5vZGUpIHsgdHJ5IHsgbm9kZS5zZWxl
Y3QoKTsgfSBjYXRjaChfZSkge30gfTsKIAotICBmdW5jdGlvbiBpbmRleE9mKGNvbGxlY3Rpb24s
IGVsdCkgewotICAgIGlmIChjb2xsZWN0aW9uLmluZGV4T2YpIHJldHVybiBjb2xsZWN0aW9uLmlu
ZGV4T2YoZWx0KTsKLSAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBp
IDwgZTsgKytpKQotICAgICAgaWYgKGNvbGxlY3Rpb25baV0gPT0gZWx0KSByZXR1cm4gaTsKKyAg
ZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgZWx0KSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
cnJheS5sZW5ndGg7ICsraSkKKyAgICAgIGlmIChhcnJheVtpXSA9PSBlbHQpIHJldHVybiBpOwog
ICAgIHJldHVybiAtMTsKICAgfQorICBpZiAoW10uaW5kZXhPZikgaW5kZXhPZiA9IGZ1bmN0aW9u
KGFycmF5LCBlbHQpIHsgcmV0dXJuIGFycmF5LmluZGV4T2YoZWx0KTsgfTsKKyAgZnVuY3Rpb24g
bWFwKGFycmF5LCBmKSB7CisgICAgdmFyIG91dCA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJyYXkubGVuZ3RoOyBpKyspIG91dFtpXSA9IGYoYXJyYXlbaV0sIGkpOworICAgIHJldHVy
biBvdXQ7CisgIH0KKyAgaWYgKFtdLm1hcCkgbWFwID0gZnVuY3Rpb24oYXJyYXksIGYpIHsgcmV0
dXJuIGFycmF5Lm1hcChmKTsgfTsKIAogICBmdW5jdGlvbiBjcmVhdGVPYmooYmFzZSwgcHJvcHMp
IHsKLSAgICBmdW5jdGlvbiBPYmooKSB7fQotICAgIE9iai5wcm90b3R5cGUgPSBiYXNlOwotICAg
IHZhciBpbnN0ID0gbmV3IE9iaigpOworICAgIHZhciBpbnN0OworICAgIGlmIChPYmplY3QuY3Jl
YXRlKSB7CisgICAgICBpbnN0ID0gT2JqZWN0LmNyZWF0ZShiYXNlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgdmFyIGN0b3IgPSBmdW5jdGlvbigpIHt9OworICAgICAgY3Rvci5wcm90b3R5cGUgPSBi
YXNlOworICAgICAgaW5zdCA9IG5ldyBjdG9yKCk7CisgICAgfQogICAgIGlmIChwcm9wcykgY29w
eU9iaihwcm9wcywgaW5zdCk7CiAgICAgcmV0dXJuIGluc3Q7Ci0gIH0KKyAgfTsKIAotICBmdW5j
dGlvbiBjb3B5T2JqKG9iaiwgdGFyZ2V0KSB7CisgIGZ1bmN0aW9uIGNvcHlPYmoob2JqLCB0YXJn
ZXQsIG92ZXJ3cml0ZSkgewogICAgIGlmICghdGFyZ2V0KSB0YXJnZXQgPSB7fTsKLSAgICBmb3Ig
KHZhciBwcm9wIGluIG9iaikgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgdGFyZ2V0W3By
b3BdID0gb2JqW3Byb3BdOworICAgIGZvciAodmFyIHByb3AgaW4gb2JqKQorICAgICAgaWYgKG9i
ai5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiAob3ZlcndyaXRlICE9PSBmYWxzZSB8fCAhdGFyZ2V0
Lmhhc093blByb3BlcnR5KHByb3ApKSkKKyAgICAgICAgdGFyZ2V0W3Byb3BdID0gb2JqW3Byb3Bd
OwogICAgIHJldHVybiB0YXJnZXQ7CiAgIH0KIAotICBmdW5jdGlvbiBlbXB0eUFycmF5KHNpemUp
IHsKLSAgICBmb3IgKHZhciBhID0gW10sIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSBhLnB1c2godW5k
ZWZpbmVkKTsKLSAgICByZXR1cm4gYTsKLSAgfQotCiAgIGZ1bmN0aW9uIGJpbmQoZikgewogICAg
IHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICAg
ICByZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTt9OwogICB9CiAK
LSAgdmFyIG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyID0gL1tcdTMwNDAtXHUzMDlmXHUzMGEw
LVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vOwotICBmdW5j
dGlvbiBpc1dvcmRDaGFyKGNoKSB7CisgIHZhciBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhciA9
IC9bXHUwMGRmXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1
OWZjY1x1YWMwMC1cdWQ3YWZdLzsKKyAgdmFyIGlzV29yZENoYXIgPSBDb2RlTWlycm9yLmlzV29y
ZENoYXIgPSBmdW5jdGlvbihjaCkgewogICAgIHJldHVybiAvXHcvLnRlc3QoY2gpIHx8IGNoID4g
Ilx4ODAiICYmCiAgICAgICAoY2gudG9VcHBlckNhc2UoKSAhPSBjaC50b0xvd2VyQ2FzZSgpIHx8
IG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyLnRlc3QoY2gpKTsKLSAgfQorICB9OwogCiAgIGZ1
bmN0aW9uIGlzRW1wdHkob2JqKSB7CiAgICAgZm9yICh2YXIgbiBpbiBvYmopIGlmIChvYmouaGFz
T3duUHJvcGVydHkobikgJiYgb2JqW25dKSByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7
CiAgIH0KIAotICB2YXIgaXNFeHRlbmRpbmdDaGFyID0gL1tcdTAzMDAtXHUwMzZGXHUwNDgzLVx1
MDQ4N1x1MDQ4OC1cdTA0ODlcdTA1OTEtXHUwNUJEXHUwNUJGXHUwNUMxLVx1MDVDMlx1MDVDNC1c
dTA1QzVcdTA1QzdcdTA2MTAtXHUwNjFBXHUwNjRCLVx1MDY1Rlx1MDY3MFx1MDZENi1cdTA2RENc
dTA2REYtXHUwNkU0XHUwNkU3LVx1MDZFOFx1MDZFQS1cdTA2RURcdUE2NkZcdTFEQzDigJNcdTFE
RkZcdTIwRDDigJNcdTIwRkZcdUE2NzAtXHVBNjcyXHVBNjc0LVx1QTY3RFx1QTY5Rlx1ZGMwMC1c
dWRmZmZcdUZFMjDigJNcdUZFMkZdLzsKKyAgLy8gRXh0ZW5kaW5nIHVuaWNvZGUgY2hhcmFjdGVy
cy4gQSBzZXJpZXMgb2YgYSBub24tZXh0ZW5kaW5nIGNoYXIgKworICAvLyBhbnkgbnVtYmVyIG9m
IGV4dGVuZGluZyBjaGFycyBpcyB0cmVhdGVkIGFzIGEgc2luZ2xlIHVuaXQgYXMgZmFyCisgIC8v
IGFzIGVkaXRpbmcgYW5kIG1lYXN1cmluZyBpcyBjb25jZXJuZWQuIFRoaXMgaXMgbm90IGZ1bGx5
IGNvcnJlY3QsCisgIC8vIHNpbmNlIHNvbWUgc2NyaXB0cy9mb250cy9icm93c2VycyBhbHNvIHRy
ZWF0IG90aGVyIGNvbmZpZ3VyYXRpb25zCisgIC8vIG9mIGNvZGUgcG9pbnRzIGFzIGEgZ3JvdXAu
CisgIHZhciBleHRlbmRpbmdDaGFycyA9IC9bXHUwMzAwLVx1MDM2Zlx1MDQ4My1cdTA0ODlcdTA1
OTEtXHUwNWJkXHUwNWJmXHUwNWMxXHUwNWMyXHUwNWM0XHUwNWM1XHUwNWM3XHUwNjEwLVx1MDYx
YVx1MDY0Yi1cdTA2NWVcdTA2NzBcdTA2ZDYtXHUwNmRjXHUwNmRlLVx1MDZlNFx1MDZlN1x1MDZl
OFx1MDZlYS1cdTA2ZWRcdTA3MTFcdTA3MzAtXHUwNzRhXHUwN2E2LVx1MDdiMFx1MDdlYi1cdTA3
ZjNcdTA4MTYtXHUwODE5XHUwODFiLVx1MDgyM1x1MDgyNS1cdTA4MjdcdTA4MjktXHUwODJkXHUw
OTAwLVx1MDkwMlx1MDkzY1x1MDk0MS1cdTA5NDhcdTA5NGRcdTA5NTEtXHUwOTU1XHUwOTYyXHUw
OTYzXHUwOTgxXHUwOWJjXHUwOWJlXHUwOWMxLVx1MDljNFx1MDljZFx1MDlkN1x1MDllMlx1MDll
M1x1MGEwMVx1MGEwMlx1MGEzY1x1MGE0MVx1MGE0Mlx1MGE0N1x1MGE0OFx1MGE0Yi1cdTBhNGRc
dTBhNTFcdTBhNzBcdTBhNzFcdTBhNzVcdTBhODFcdTBhODJcdTBhYmNcdTBhYzEtXHUwYWM1XHUw
YWM3XHUwYWM4XHUwYWNkXHUwYWUyXHUwYWUzXHUwYjAxXHUwYjNjXHUwYjNlXHUwYjNmXHUwYjQx
LVx1MGI0NFx1MGI0ZFx1MGI1Nlx1MGI1N1x1MGI2Mlx1MGI2M1x1MGI4Mlx1MGJiZVx1MGJjMFx1
MGJjZFx1MGJkN1x1MGMzZS1cdTBjNDBcdTBjNDYtXHUwYzQ4XHUwYzRhLVx1MGM0ZFx1MGM1NVx1
MGM1Nlx1MGM2Mlx1MGM2M1x1MGNiY1x1MGNiZlx1MGNjMlx1MGNjNlx1MGNjY1x1MGNjZFx1MGNk
NVx1MGNkNlx1MGNlMlx1MGNlM1x1MGQzZVx1MGQ0MS1cdTBkNDRcdTBkNGRcdTBkNTdcdTBkNjJc
dTBkNjNcdTBkY2FcdTBkY2ZcdTBkZDItXHUwZGQ0XHUwZGQ2XHUwZGRmXHUwZTMxXHUwZTM0LVx1
MGUzYVx1MGU0Ny1cdTBlNGVcdTBlYjFcdTBlYjQtXHUwZWI5XHUwZWJiXHUwZWJjXHUwZWM4LVx1
MGVjZFx1MGYxOFx1MGYxOVx1MGYzNVx1MGYzN1x1MGYzOVx1MGY3MS1cdTBmN2VcdTBmODAtXHUw
Zjg0XHUwZjg2XHUwZjg3XHUwZjkwLVx1MGY5N1x1MGY5OS1cdTBmYmNcdTBmYzZcdTEwMmQtXHUx
MDMwXHUxMDMyLVx1MTAzN1x1MTAzOVx1MTAzYVx1MTAzZFx1MTAzZVx1MTA1OFx1MTA1OVx1MTA1
ZS1cdTEwNjBcdTEwNzEtXHUxMDc0XHUxMDgyXHUxMDg1XHUxMDg2XHUxMDhkXHUxMDlkXHUxMzVm
XHUxNzEyLVx1MTcxNFx1MTczMi1cdTE3MzRcdTE3NTJcdTE3NTNcdTE3NzJcdTE3NzNcdTE3Yjct
XHUxN2JkXHUxN2M2XHUxN2M5LVx1MTdkM1x1MTdkZFx1MTgwYi1cdTE4MGRcdTE4YTlcdTE5MjAt
XHUxOTIyXHUxOTI3XHUxOTI4XHUxOTMyXHUxOTM5LVx1MTkzYlx1MWExN1x1MWExOFx1MWE1Nlx1
MWE1OC1cdTFhNWVcdTFhNjBcdTFhNjJcdTFhNjUtXHUxYTZjXHUxYTczLVx1MWE3Y1x1MWE3Zlx1
MWIwMC1cdTFiMDNcdTFiMzRcdTFiMzYtXHUxYjNhXHUxYjNjXHUxYjQyXHUxYjZiLVx1MWI3M1x1
MWI4MFx1MWI4MVx1MWJhMi1cdTFiYTVcdTFiYThcdTFiYTlcdTFjMmMtXHUxYzMzXHUxYzM2XHUx
YzM3XHUxY2QwLVx1MWNkMlx1MWNkNC1cdTFjZTBcdTFjZTItXHUxY2U4XHUxY2VkXHUxZGMwLVx1
MWRlNlx1MWRmZC1cdTFkZmZcdTIwMGNcdTIwMGRcdTIwZDAtXHUyMGYwXHUyY2VmLVx1MmNmMVx1
MmRlMC1cdTJkZmZcdTMwMmEtXHUzMDJmXHUzMDk5XHUzMDlhXHVhNjZmLVx1YTY3Mlx1YTY3Y1x1
YTY3ZFx1YTZmMFx1YTZmMVx1YTgwMlx1YTgwNlx1YTgwYlx1YTgyNVx1YTgyNlx1YThjNFx1YThl
MC1cdWE4ZjFcdWE5MjYtXHVhOTJkXHVhOTQ3LVx1YTk1MVx1YTk4MC1cdWE5ODJcdWE5YjNcdWE5
YjYtXHVhOWI5XHVhOWJjXHVhYTI5LVx1YWEyZVx1YWEzMVx1YWEzMlx1YWEzNVx1YWEzNlx1YWE0
M1x1YWE0Y1x1YWFiMFx1YWFiMi1cdWFhYjRcdWFhYjdcdWFhYjhcdWFhYmVcdWFhYmZcdWFhYzFc
dWFiZTVcdWFiZThcdWFiZWRcdWRjMDAtXHVkZmZmXHVmYjFlXHVmZTAwLVx1ZmUwZlx1ZmUyMC1c
dWZlMjZcdWZmOWVcdWZmOWZdLzsKKyAgZnVuY3Rpb24gaXNFeHRlbmRpbmdDaGFyKGNoKSB7IHJl
dHVybiBjaC5jaGFyQ29kZUF0KDApID49IDc2OCAmJiBleHRlbmRpbmdDaGFycy50ZXN0KGNoKTsg
fQogCiAgIC8vIERPTSBVVElMSVRJRVMKIApAQCAtNTUxNSwxMSArNzAzOCwyNyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQodGFnKTsKICAgICBpZiAoY2xhc3NOYW1lKSBlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsK
ICAgICBpZiAoc3R5bGUpIGUuc3R5bGUuY3NzVGV4dCA9IHN0eWxlOwotICAgIGlmICh0eXBlb2Yg
Y29udGVudCA9PSAic3RyaW5nIikgc2V0VGV4dENvbnRlbnQoZSwgY29udGVudCk7CisgICAgaWYg
KHR5cGVvZiBjb250ZW50ID09ICJzdHJpbmciKSBlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKGNvbnRlbnQpKTsKICAgICBlbHNlIGlmIChjb250ZW50KSBmb3IgKHZhciBpID0g
MDsgaSA8IGNvbnRlbnQubGVuZ3RoOyArK2kpIGUuYXBwZW5kQ2hpbGQoY29udGVudFtpXSk7CiAg
ICAgcmV0dXJuIGU7CiAgIH0KIAorICB2YXIgcmFuZ2U7CisgIGlmIChkb2N1bWVudC5jcmVhdGVS
YW5nZSkgcmFuZ2UgPSBmdW5jdGlvbihub2RlLCBzdGFydCwgZW5kKSB7CisgICAgdmFyIHIgPSBk
b2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgIHIuc2V0RW5kKG5vZGUsIGVuZCk7CisgICAgci5z
ZXRTdGFydChub2RlLCBzdGFydCk7CisgICAgcmV0dXJuIHI7CisgIH07CisgIGVsc2UgcmFuZ2Ug
PSBmdW5jdGlvbihub2RlLCBzdGFydCwgZW5kKSB7CisgICAgdmFyIHIgPSBkb2N1bWVudC5ib2R5
LmNyZWF0ZVRleHRSYW5nZSgpOworICAgIHIubW92ZVRvRWxlbWVudFRleHQobm9kZS5wYXJlbnRO
b2RlKTsKKyAgICByLmNvbGxhcHNlKHRydWUpOworICAgIHIubW92ZUVuZCgiY2hhcmFjdGVyIiwg
ZW5kKTsKKyAgICByLm1vdmVTdGFydCgiY2hhcmFjdGVyIiwgc3RhcnQpOworICAgIHJldHVybiBy
OworICB9OworCiAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkcmVuKGUpIHsKICAgICBmb3IgKHZhciBj
b3VudCA9IGUuY2hpbGROb2Rlcy5sZW5ndGg7IGNvdW50ID4gMDsgLS1jb3VudCkKICAgICAgIGUu
cmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTsKQEAgLTU1MzAsMTcgKzcwNjksMzUgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKHBh
cmVudCkuYXBwZW5kQ2hpbGQoZSk7CiAgIH0KIAotICBmdW5jdGlvbiBzZXRUZXh0Q29udGVudChl
LCBzdHIpIHsKLSAgICBpZiAoaWVfbHQ5KSB7Ci0gICAgICBlLmlubmVySFRNTCA9ICIiOwotICAg
ICAgZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKLSAgICB9IGVs
c2UgZS50ZXh0Q29udGVudCA9IHN0cjsKKyAgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGls
ZCkgeworICAgIGlmIChwYXJlbnQuY29udGFpbnMpCisgICAgICByZXR1cm4gcGFyZW50LmNvbnRh
aW5zKGNoaWxkKTsKKyAgICB3aGlsZSAoY2hpbGQgPSBjaGlsZC5wYXJlbnROb2RlKQorICAgICAg
aWYgKGNoaWxkID09IHBhcmVudCkgcmV0dXJuIHRydWU7CiAgIH0KIAotICBmdW5jdGlvbiBnZXRS
ZWN0KG5vZGUpIHsKLSAgICByZXR1cm4gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAg
ZnVuY3Rpb24gYWN0aXZlRWx0KCkgeyByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsgfQor
ICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBJRSB0aHJvd3MgdW5zcGVjaWZpZWQgZXJyb3Igd2hlbiB0
b3VjaGluZworICAvLyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIHNvbWUgY2FzZXMgKGR1cmlu
ZyBsb2FkaW5nLCBpbiBpZnJhbWUpCisgIGlmIChpZV91cHRvMTApIGFjdGl2ZUVsdCA9IGZ1bmN0
aW9uKCkgeworICAgIHRyeSB7IHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50OyB9CisgICAg
Y2F0Y2goZSkgeyByZXR1cm4gZG9jdW1lbnQuYm9keTsgfQorICB9OworCisgIGZ1bmN0aW9uIGNs
YXNzVGVzdChjbHMpIHsgcmV0dXJuIG5ldyBSZWdFeHAoIlxcYiIgKyBjbHMgKyAiXFxiXFxzKiIp
OyB9CisgIGZ1bmN0aW9uIHJtQ2xhc3Mobm9kZSwgY2xzKSB7CisgICAgdmFyIHRlc3QgPSBjbGFz
c1Rlc3QoY2xzKTsKKyAgICBpZiAodGVzdC50ZXN0KG5vZGUuY2xhc3NOYW1lKSkgbm9kZS5jbGFz
c05hbWUgPSBub2RlLmNsYXNzTmFtZS5yZXBsYWNlKHRlc3QsICIiKTsKKyAgfQorICBmdW5jdGlv
biBhZGRDbGFzcyhub2RlLCBjbHMpIHsKKyAgICBpZiAoIWNsYXNzVGVzdChjbHMpLnRlc3Qobm9k
ZS5jbGFzc05hbWUpKSBub2RlLmNsYXNzTmFtZSArPSAiICIgKyBjbHM7CisgIH0KKyAgZnVuY3Rp
b24gam9pbkNsYXNzZXMoYSwgYikgeworICAgIHZhciBhcyA9IGEuc3BsaXQoIiAiKTsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGFzLmxlbmd0aDsgaSsrKQorICAgICAgaWYgKGFzW2ldICYmICFj
bGFzc1Rlc3QoYXNbaV0pLnRlc3QoYikpIGIgKz0gIiAiICsgYXNbaV07CisgICAgcmV0dXJuIGI7
CiAgIH0KLSAgQ29kZU1pcnJvci5yZXBsYWNlR2V0UmVjdCA9IGZ1bmN0aW9uKGYpIHsgZ2V0UmVj
dCA9IGY7IH07CiAKICAgLy8gRkVBVFVSRSBERVRFQ1RJT04KIApAQCAtNTU0OCw0MyArNzEwNSwx
MSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgdmFyIGRyYWdBbmREcm9w
ID0gZnVuY3Rpb24oKSB7CiAgICAgLy8gVGhlcmUgaXMgKnNvbWUqIGtpbmQgb2YgZHJhZy1hbmQt
ZHJvcCBzdXBwb3J0IGluIElFNi04LCBidXQgSQogICAgIC8vIGNvdWxkbid0IGdldCBpdCB0byB3
b3JrIHlldC4KLSAgICBpZiAoaWVfbHQ5KSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGllX3VwdG84
KSByZXR1cm4gZmFsc2U7CiAgICAgdmFyIGRpdiA9IGVsdCgnZGl2Jyk7CiAgICAgcmV0dXJuICJk
cmFnZ2FibGUiIGluIGRpdiB8fCAiZHJhZ0Ryb3AiIGluIGRpdjsKICAgfSgpOwogCi0gIC8vIEZv
ciBhIHJlYXNvbiBJIGhhdmUgeWV0IHRvIGZpZ3VyZSBvdXQsIHNvbWUgYnJvd3NlcnMgZGlzYWxs
b3cKLSAgLy8gd29yZCB3cmFwcGluZyBiZXR3ZWVuIGNlcnRhaW4gY2hhcmFjdGVycyAqb25seSog
aWYgYSBuZXcgaW5saW5lCi0gIC8vIGVsZW1lbnQgaXMgc3RhcnRlZCBiZXR3ZWVuIHRoZW0uIFRo
aXMgbWFrZXMgaXQgaGFyZCB0byByZWxpYWJseQotICAvLyBtZWFzdXJlIHRoZSBwb3NpdGlvbiBv
ZiB0aGluZ3MsIHNpbmNlIHRoYXQgcmVxdWlyZXMgaW5zZXJ0aW5nIGFuCi0gIC8vIGV4dHJhIHNw
YW4uIFRoaXMgdGVycmlibHkgZnJhZ2lsZSBzZXQgb2YgdGVzdHMgbWF0Y2hlcyB0aGUKLSAgLy8g
Y2hhcmFjdGVyIGNvbWJpbmF0aW9ucyB0aGF0IHN1ZmZlciBmcm9tIHRoaXMgcGhlbm9tZW5vbiBv
biB0aGUKLSAgLy8gdmFyaW91cyBicm93c2Vycy4KLSAgZnVuY3Rpb24gc3BhbkFmZmVjdHNXcmFw
cGluZygpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gIGlmIChnZWNrbykgLy8gT25seSBmb3IgIiQnIgot
ICAgIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSBmdW5jdGlvbihzdHIsIGkpIHsKLSAgICAgIHJldHVy
biBzdHIuY2hhckNvZGVBdChpIC0gMSkgPT0gMzYgJiYgc3RyLmNoYXJDb2RlQXQoaSkgPT0gMzk7
Ci0gICAgfTsKLSAgZWxzZSBpZiAoc2FmYXJpICYmICEvVmVyc2lvblwvKFs2LTldfFxkXGQpXGIv
LnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpCi0gICAgc3BhbkFmZmVjdHNXcmFwcGluZyA9IGZ1
bmN0aW9uKHN0ciwgaSkgewotICAgICAgdmFyIHJlc3VsdCA9IC9cLVteIFwtP118XD9bXiAhXCdc
IlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHN0ci5zbGljZShpIC0gMSwgaSArIDEpKTsKLSAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLSAgZWxzZSBpZiAod2Via2l0ICYmIC9DaHJvbWVcLyg/
OjI5fFszLTldXGR8XGRcZFxkKVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKQotICAgIHNw
YW5BZmZlY3RzV3JhcHBpbmcgPSBmdW5jdGlvbihzdHIsIGkpIHsKLSAgICAgIHZhciBjb2RlID0g
c3RyLmNoYXJDb2RlQXQoaSAtIDEpOwotICAgICAgcmV0dXJuIGNvZGUgPj0gODIwOCAmJiBjb2Rl
IDw9IDgyMTI7Ci0gICAgfTsKLSAgZWxzZSBpZiAod2Via2l0KQotICAgIHNwYW5BZmZlY3RzV3Jh
cHBpbmcgPSBmdW5jdGlvbihzdHIsIGkpIHsKLSAgICAgIGlmIChpID4gMSAmJiBzdHIuY2hhckNv
ZGVBdChpIC0gMSkgPT0gNDUpIHsKLSAgICAgICAgaWYgKC9cdy8udGVzdChzdHIuY2hhckF0KGkg
LSAyKSkgJiYgL1teXC0/XC5dLy50ZXN0KHN0ci5jaGFyQXQoaSkpKSByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgaWYgKGkgPiAyICYmIC9bXGRcLixdLy50ZXN0KHN0ci5jaGFyQXQoaSAtIDIpKSAmJiAv
W1xkXC4sXS8udGVzdChzdHIuY2hhckF0KGkpKSkgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAg
ICAgdmFyIHJlc3VsdCA9IC9bfiEjJSYqKT0rfVxdXFx8XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wu
XHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZbXHd+YEAj
JCVcXiYqKF89K3tbPjxdLy50ZXN0KHN0ci5zbGljZShpIC0gMSwgaSArIDEpKTsKLSAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfTsKLQogICB2YXIga25vd25TY3JvbGxiYXJXaWR0aDsKICAgZnVu
Y3Rpb24gc2Nyb2xsYmFyV2lkdGgobWVhc3VyZSkgewogICAgIGlmIChrbm93blNjcm9sbGJhcldp
ZHRoICE9IG51bGwpIHJldHVybiBrbm93blNjcm9sbGJhcldpZHRoOwpAQCAtNTYwMSwxNSArNzEy
NiwyNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHZhciB0ZXN0
ID0gZWx0KCJzcGFuIiwgIlx1MjAwYiIpOwogICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVh
c3VyZSwgZWx0KCJzcGFuIiwgW3Rlc3QsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IildKSk7
CiAgICAgICBpZiAobWVhc3VyZS5maXJzdENoaWxkLm9mZnNldEhlaWdodCAhPSAwKQotICAgICAg
ICB6d3NwU3VwcG9ydGVkID0gdGVzdC5vZmZzZXRXaWR0aCA8PSAxICYmIHRlc3Qub2Zmc2V0SGVp
Z2h0ID4gMiAmJiAhaWVfbHQ4OworICAgICAgICB6d3NwU3VwcG9ydGVkID0gdGVzdC5vZmZzZXRX
aWR0aCA8PSAxICYmIHRlc3Qub2Zmc2V0SGVpZ2h0ID4gMiAmJiAhaWVfdXB0bzc7CiAgICAgfQog
ICAgIGlmICh6d3NwU3VwcG9ydGVkKSByZXR1cm4gZWx0KCJzcGFuIiwgIlx1MjAwYiIpOwogICAg
IGVsc2UgcmV0dXJuIGVsdCgic3BhbiIsICJcdTAwYTAiLCBudWxsLCAiZGlzcGxheTogaW5saW5l
LWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgiKTsKICAgfQogCisgIC8vIEZl
YXR1cmUtZGV0ZWN0IElFJ3MgY3J1bW15IGNsaWVudCByZWN0IHJlcG9ydGluZyBmb3IgYmlkaSB0
ZXh0CisgIHZhciBiYWRCaWRpUmVjdHM7CisgIGZ1bmN0aW9uIGhhc0JhZEJpZGlSZWN0cyhtZWFz
dXJlKSB7CisgICAgaWYgKGJhZEJpZGlSZWN0cyAhPSBudWxsKSByZXR1cm4gYmFkQmlkaVJlY3Rz
OworICAgIHZhciB0eHQgPSByZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFzdXJlLCBkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgiQVx1MDYyZUEiKSk7CisgICAgdmFyIHIwID0gcmFuZ2UodHh0LCAwLCAx
KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICBpZiAocjAubGVmdCA9PSByMC5yaWdodCkg
cmV0dXJuIGZhbHNlOworICAgIHZhciByMSA9IHJhbmdlKHR4dCwgMSwgMikuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCk7CisgICAgcmV0dXJuIGJhZEJpZGlSZWN0cyA9IChyMS5yaWdodCAtIHIwLnJp
Z2h0IDwgMyk7CisgIH0KKwogICAvLyBTZWUgaWYgIiIuc3BsaXQgaXMgdGhlIGJyb2tlbiBJRSB2
ZXJzaW9uLCBpZiBzbywgcHJvdmlkZSBhbgogICAvLyBhbHRlcm5hdGl2ZSB3YXkgdG8gc3BsaXQg
bGluZXMuCi0gIHZhciBzcGxpdExpbmVzID0gIlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGggIT0g
MyA/IGZ1bmN0aW9uKHN0cmluZykgeworICB2YXIgc3BsaXRMaW5lcyA9IENvZGVNaXJyb3Iuc3Bs
aXRMaW5lcyA9ICJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoICE9IDMgPyBmdW5jdGlvbihzdHJp
bmcpIHsKICAgICB2YXIgcG9zID0gMCwgcmVzdWx0ID0gW10sIGwgPSBzdHJpbmcubGVuZ3RoOwog
ICAgIHdoaWxlIChwb3MgPD0gbCkgewogICAgICAgdmFyIG5sID0gc3RyaW5nLmluZGV4T2YoIlxu
IiwgcG9zKTsKQEAgLTU2MjYsNyArNzE2Miw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogICB9IDogZnVuY3Rpb24oc3RyaW5n
KXtyZXR1cm4gc3RyaW5nLnNwbGl0KC9cclxuP3xcbi8pO307Ci0gIENvZGVNaXJyb3Iuc3BsaXRM
aW5lcyA9IHNwbGl0TGluZXM7CiAKICAgdmFyIGhhc1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxl
Y3Rpb24gPyBmdW5jdGlvbih0ZSkgewogICAgIHRyeSB7IHJldHVybiB0ZS5zZWxlY3Rpb25TdGFy
dCAhPSB0ZS5zZWxlY3Rpb25FbmQ7IH0KQEAgLTU2NDIsMjIgKzcxNzcsMjIgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGUgPSBlbHQoImRpdiIpOwogICAgIGlm
ICgib25jb3B5IiBpbiBlKSByZXR1cm4gdHJ1ZTsKICAgICBlLnNldEF0dHJpYnV0ZSgib25jb3B5
IiwgInJldHVybjsiKTsKLSAgICByZXR1cm4gdHlwZW9mIGUub25jb3B5ID09ICdmdW5jdGlvbic7
CisgICAgcmV0dXJuIHR5cGVvZiBlLm9uY29weSA9PSAiZnVuY3Rpb24iOwogICB9KSgpOwogCi0g
IC8vIEtFWSBOQU1JTkcKKyAgLy8gS0VZIE5BTUVTCiAKICAgdmFyIGtleU5hbWVzID0gezM6ICJF
bnRlciIsIDg6ICJCYWNrc3BhY2UiLCA5OiAiVGFiIiwgMTM6ICJFbnRlciIsIDE2OiAiU2hpZnQi
LCAxNzogIkN0cmwiLCAxODogIkFsdCIsCiAgICAgICAgICAgICAgICAgICAxOTogIlBhdXNlIiwg
MjA6ICJDYXBzTG9jayIsIDI3OiAiRXNjIiwgMzI6ICJTcGFjZSIsIDMzOiAiUGFnZVVwIiwgMzQ6
ICJQYWdlRG93biIsIDM1OiAiRW5kIiwKICAgICAgICAgICAgICAgICAgIDM2OiAiSG9tZSIsIDM3
OiAiTGVmdCIsIDM4OiAiVXAiLCAzOTogIlJpZ2h0IiwgNDA6ICJEb3duIiwgNDQ6ICJQcmludFNj
cm4iLCA0NTogIkluc2VydCIsCi0gICAgICAgICAgICAgICAgICA0NjogIkRlbGV0ZSIsIDU5OiAi
OyIsIDkxOiAiTW9kIiwgOTI6ICJNb2QiLCA5MzogIk1vZCIsIDEwOTogIi0iLCAxMDc6ICI9Iiwg
MTI3OiAiRGVsZXRlIiwKLSAgICAgICAgICAgICAgICAgIDE4NjogIjsiLCAxODc6ICI9IiwgMTg4
OiAiLCIsIDE4OTogIi0iLCAxOTA6ICIuIiwgMTkxOiAiLyIsIDE5MjogImAiLCAyMTk6ICJbIiwg
MjIwOiAiXFwiLAotICAgICAgICAgICAgICAgICAgMjIxOiAiXSIsIDIyMjogIiciLCA2MzI3Njog
IlBhZ2VVcCIsIDYzMjc3OiAiUGFnZURvd24iLCA2MzI3NTogIkVuZCIsIDYzMjczOiAiSG9tZSIs
Ci0gICAgICAgICAgICAgICAgICA2MzIzNDogIkxlZnQiLCA2MzIzMjogIlVwIiwgNjMyMzU6ICJS
aWdodCIsIDYzMjMzOiAiRG93biIsIDYzMzAyOiAiSW5zZXJ0IiwgNjMyNzI6ICJEZWxldGUifTsK
KyAgICAgICAgICAgICAgICAgIDQ2OiAiRGVsZXRlIiwgNTk6ICI7IiwgNjE6ICI9IiwgOTE6ICJN
b2QiLCA5MjogIk1vZCIsIDkzOiAiTW9kIiwgMTA3OiAiPSIsIDEwOTogIi0iLCAxMjc6ICJEZWxl
dGUiLAorICAgICAgICAgICAgICAgICAgMTczOiAiLSIsIDE4NjogIjsiLCAxODc6ICI9IiwgMTg4
OiAiLCIsIDE4OTogIi0iLCAxOTA6ICIuIiwgMTkxOiAiLyIsIDE5MjogImAiLCAyMTk6ICJbIiwg
MjIwOiAiXFwiLAorICAgICAgICAgICAgICAgICAgMjIxOiAiXSIsIDIyMjogIiciLCA2MzIzMjog
IlVwIiwgNjMyMzM6ICJEb3duIiwgNjMyMzQ6ICJMZWZ0IiwgNjMyMzU6ICJSaWdodCIsIDYzMjcy
OiAiRGVsZXRlIiwKKyAgICAgICAgICAgICAgICAgIDYzMjczOiAiSG9tZSIsIDYzMjc1OiAiRW5k
IiwgNjMyNzY6ICJQYWdlVXAiLCA2MzI3NzogIlBhZ2VEb3duIiwgNjMzMDI6ICJJbnNlcnQifTsK
ICAgQ29kZU1pcnJvci5rZXlOYW1lcyA9IGtleU5hbWVzOwogICAoZnVuY3Rpb24oKSB7CiAgICAg
Ly8gTnVtYmVyIGtleXMKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIGtleU5hbWVz
W2kgKyA0OF0gPSBTdHJpbmcoaSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSBr
ZXlOYW1lc1tpICsgNDhdID0ga2V5TmFtZXNbaSArIDk2XSA9IFN0cmluZyhpKTsKICAgICAvLyBB
bHBoYWJldGljIGtleXMKICAgICBmb3IgKHZhciBpID0gNjU7IGkgPD0gOTA7IGkrKykga2V5TmFt
ZXNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpOwogICAgIC8vIEZ1bmN0aW9uIGtleXMKQEAg
LTU2OTEsMTkgKzcyMjYsMjEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAK
ICAgZnVuY3Rpb24gbGluZVN0YXJ0KGNtLCBsaW5lTikgewogICAgIHZhciBsaW5lID0gZ2V0TGlu
ZShjbS5kb2MsIGxpbmVOKTsKLSAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZShjbS5kb2MsIGxp
bmUpOworICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKGxpbmUpOwogICAgIGlmICh2aXN1YWwg
IT0gbGluZSkgbGluZU4gPSBsaW5lTm8odmlzdWFsKTsKICAgICB2YXIgb3JkZXIgPSBnZXRPcmRl
cih2aXN1YWwpOwogICAgIHZhciBjaCA9ICFvcmRlciA/IDAgOiBvcmRlclswXS5sZXZlbCAlIDIg
PyBsaW5lUmlnaHQodmlzdWFsKSA6IGxpbmVMZWZ0KHZpc3VhbCk7CiAgICAgcmV0dXJuIFBvcyhs
aW5lTiwgY2gpOwogICB9CiAgIGZ1bmN0aW9uIGxpbmVFbmQoY20sIGxpbmVOKSB7Ci0gICAgdmFy
IG1lcmdlZCwgbGluZTsKLSAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxp
bmUgPSBnZXRMaW5lKGNtLmRvYywgbGluZU4pKSkKLSAgICAgIGxpbmVOID0gbWVyZ2VkLmZpbmQo
KS50by5saW5lOworICAgIHZhciBtZXJnZWQsIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbGluZU4p
OworICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkpIHsKKyAgICAg
IGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lOworICAgICAgbGluZU4gPSBudWxsOwor
ICAgIH0KICAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lKTsKICAgICB2YXIgY2ggPSAhb3Jk
ZXIgPyBsaW5lLnRleHQubGVuZ3RoIDogb3JkZXJbMF0ubGV2ZWwgJSAyID8gbGluZUxlZnQobGlu
ZSkgOiBsaW5lUmlnaHQobGluZSk7Ci0gICAgcmV0dXJuIFBvcyhsaW5lTiwgY2gpOworICAgIHJl
dHVybiBQb3MobGluZU4gPT0gbnVsbCA/IGxpbmVObyhsaW5lKSA6IGxpbmVOLCBjaCk7CiAgIH0K
IAogICBmdW5jdGlvbiBjb21wYXJlQmlkaUxldmVsKG9yZGVyLCBhLCBiKSB7CkBAIC01NzE0LDM4
ICs3MjUxLDM3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9CiAgIHZh
ciBiaWRpT3RoZXI7CiAgIGZ1bmN0aW9uIGdldEJpZGlQYXJ0QXQob3JkZXIsIHBvcykgeworICAg
IGJpZGlPdGhlciA9IG51bGw7CiAgICAgZm9yICh2YXIgaSA9IDAsIGZvdW5kOyBpIDwgb3JkZXIu
bGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBjdXIgPSBvcmRlcltpXTsKLSAgICAgIGlmIChjdXIu
ZnJvbSA8IHBvcyAmJiBjdXIudG8gPiBwb3MpIHsgYmlkaU90aGVyID0gbnVsbDsgcmV0dXJuIGk7
IH0KLSAgICAgIGlmIChjdXIuZnJvbSA9PSBwb3MgfHwgY3VyLnRvID09IHBvcykgeworICAgICAg
aWYgKGN1ci5mcm9tIDwgcG9zICYmIGN1ci50byA+IHBvcykgcmV0dXJuIGk7CisgICAgICBpZiAo
KGN1ci5mcm9tID09IHBvcyB8fCBjdXIudG8gPT0gcG9zKSkgewogICAgICAgICBpZiAoZm91bmQg
PT0gbnVsbCkgewogICAgICAgICAgIGZvdW5kID0gaTsKICAgICAgICAgfSBlbHNlIGlmIChjb21w
YXJlQmlkaUxldmVsKG9yZGVyLCBjdXIubGV2ZWwsIG9yZGVyW2ZvdW5kXS5sZXZlbCkpIHsKLSAg
ICAgICAgICBiaWRpT3RoZXIgPSBmb3VuZDsKKyAgICAgICAgICBpZiAoY3VyLmZyb20gIT0gY3Vy
LnRvKSBiaWRpT3RoZXIgPSBmb3VuZDsKICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICBiaWRpT3RoZXIgPSBpOworICAgICAgICAgIGlmIChjdXIuZnJvbSAh
PSBjdXIudG8pIGJpZGlPdGhlciA9IGk7CiAgICAgICAgICAgcmV0dXJuIGZvdW5kOwogICAgICAg
ICB9CiAgICAgICB9CiAgICAgfQotICAgIGJpZGlPdGhlciA9IG51bGw7CiAgICAgcmV0dXJuIGZv
dW5kOwogICB9CiAKICAgZnVuY3Rpb24gbW92ZUluTGluZShsaW5lLCBwb3MsIGRpciwgYnlVbml0
KSB7CiAgICAgaWYgKCFieVVuaXQpIHJldHVybiBwb3MgKyBkaXI7CiAgICAgZG8gcG9zICs9IGRp
cjsKLSAgICB3aGlsZSAocG9zID4gMCAmJiBpc0V4dGVuZGluZ0NoYXIudGVzdChsaW5lLnRleHQu
Y2hhckF0KHBvcykpKTsKKyAgICB3aGlsZSAocG9zID4gMCAmJiBpc0V4dGVuZGluZ0NoYXIobGlu
ZS50ZXh0LmNoYXJBdChwb3MpKSk7CiAgICAgcmV0dXJuIHBvczsKICAgfQogCi0gIC8vIFRoaXMg
aXMgc29tZXdoYXQgaW52b2x2ZWQuIEl0IGlzIG5lZWRlZCBpbiBvcmRlciB0byBtb3ZlCi0gIC8v
ICd2aXN1YWxseScgdGhyb3VnaCBiaS1kaXJlY3Rpb25hbCB0ZXh0IC0tIGkuZS4sIHByZXNzaW5n
IGxlZnQKLSAgLy8gc2hvdWxkIG1ha2UgdGhlIGN1cnNvciBnbyBsZWZ0LCBldmVuIHdoZW4gaW4g
UlRMIHRleHQuIFRoZQotICAvLyB0cmlja3kgcGFydCBpcyB0aGUgJ2p1bXBzJywgd2hlcmUgUlRM
IGFuZCBMVFIgdGV4dCB0b3VjaCBlYWNoCi0gIC8vIG90aGVyLiBUaGlzIG9mdGVuIHJlcXVpcmVz
IHRoZSBjdXJzb3Igb2Zmc2V0IHRvIG1vdmUgbW9yZSB0aGFuCi0gIC8vIG9uZSB1bml0LCBpbiBv
cmRlciB0byB2aXN1YWxseSBtb3ZlIG9uZSB1bml0LgorICAvLyBUaGlzIGlzIG5lZWRlZCBpbiBv
cmRlciB0byBtb3ZlICd2aXN1YWxseScgdGhyb3VnaCBiaS1kaXJlY3Rpb25hbAorICAvLyB0ZXh0
IC0tIGkuZS4sIHByZXNzaW5nIGxlZnQgc2hvdWxkIG1ha2UgdGhlIGN1cnNvciBnbyBsZWZ0LCBl
dmVuCisgIC8vIHdoZW4gaW4gUlRMIHRleHQuIFRoZSB0cmlja3kgcGFydCBpcyB0aGUgJ2p1bXBz
Jywgd2hlcmUgUlRMIGFuZAorICAvLyBMVFIgdGV4dCB0b3VjaCBlYWNoIG90aGVyLiBUaGlzIG9m
dGVuIHJlcXVpcmVzIHRoZSBjdXJzb3Igb2Zmc2V0CisgIC8vIHRvIG1vdmUgbW9yZSB0aGFuIG9u
ZSB1bml0LCBpbiBvcmRlciB0byB2aXN1YWxseSBtb3ZlIG9uZSB1bml0LgogICBmdW5jdGlvbiBt
b3ZlVmlzdWFsbHkobGluZSwgc3RhcnQsIGRpciwgYnlVbml0KSB7CiAgICAgdmFyIGJpZGkgPSBn
ZXRPcmRlcihsaW5lKTsKICAgICBpZiAoIWJpZGkpIHJldHVybiBtb3ZlTG9naWNhbGx5KGxpbmUs
IHN0YXJ0LCBkaXIsIGJ5VW5pdCk7CkBAIC01NzcxLDcgKzczMDcsNyBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKIAogICBmdW5jdGlvbiBtb3ZlTG9naWNhbGx5KGxpbmUsIHN0
YXJ0LCBkaXIsIGJ5VW5pdCkgewogICAgIHZhciB0YXJnZXQgPSBzdGFydCArIGRpcjsKLSAgICBp
ZiAoYnlVbml0KSB3aGlsZSAodGFyZ2V0ID4gMCAmJiBpc0V4dGVuZGluZ0NoYXIudGVzdChsaW5l
LnRleHQuY2hhckF0KHRhcmdldCkpKSB0YXJnZXQgKz0gZGlyOworICAgIGlmIChieVVuaXQpIHdo
aWxlICh0YXJnZXQgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhcihsaW5lLnRleHQuY2hhckF0KHRhcmdl
dCkpKSB0YXJnZXQgKz0gZGlyOwogICAgIHJldHVybiB0YXJnZXQgPCAwIHx8IHRhcmdldCA+IGxp
bmUudGV4dC5sZW5ndGggPyBudWxsIDogdGFyZ2V0OwogICB9CiAKQEAgLTU4MDAsMTQgKzczMzYs
MTYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vIG9iamVjdHMpIGlu
IHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IG9jY3VyIHZpc3VhbGx5LgogICB2YXIgYmlkaU9yZGVy
aW5nID0gKGZ1bmN0aW9uKCkgewogICAgIC8vIENoYXJhY3RlciB0eXBlcyBmb3IgY29kZXBvaW50
cyAwIHRvIDB4ZmYKLSAgICB2YXIgbG93VHlwZXMgPSAiYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJi
YmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExM
TExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJi
YmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExM
TExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE5MTExM
TExMTCI7CisgICAgdmFyIGxvd1R5cGVzID0gImJiYmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJz
c3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExMTExMTExMTExMTExM
TExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJi
YmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExM
TExMTExMTExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExOIjsKICAgICAv
LyBDaGFyYWN0ZXIgdHlwZXMgZm9yIGNvZGVwb2ludHMgMHg2MDAgdG8gMHg2ZmYKLSAgICB2YXIg
YXJhYmljVHlwZXMgPSAicnJycnJycnJycnJyLHJOTm1tbW1tbXJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1ycnJycnJybm5u
bm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cm1tbW1tbW1tbW1tbW1tbW1tbW1ObW1tbXJycnJycnJycnJycnJycnJyciI7CisgICAgdmFyIGFy
YWJpY1R5cGVzID0gInJycnJycnJycnJycixyTk5tbW1tbW1ycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tcnJycnJycm5ubm5u
bm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJt
bW1tbW1tbW1tbW1tbW1tbW1tTm1tbW0iOwogICAgIGZ1bmN0aW9uIGNoYXJUeXBlKGNvZGUpIHsK
LSAgICAgIGlmIChjb2RlIDw9IDB4ZmYpIHJldHVybiBsb3dUeXBlcy5jaGFyQXQoY29kZSk7Cisg
ICAgICBpZiAoY29kZSA8PSAweGY3KSByZXR1cm4gbG93VHlwZXMuY2hhckF0KGNvZGUpOwogICAg
ICAgZWxzZSBpZiAoMHg1OTAgPD0gY29kZSAmJiBjb2RlIDw9IDB4NWY0KSByZXR1cm4gIlIiOwot
ICAgICAgZWxzZSBpZiAoMHg2MDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4NmZmKSByZXR1cm4gYXJh
YmljVHlwZXMuY2hhckF0KGNvZGUgLSAweDYwMCk7Ci0gICAgICBlbHNlIGlmICgweDcwMCA8PSBj
b2RlICYmIGNvZGUgPD0gMHg4YWMpIHJldHVybiAiciI7CisgICAgICBlbHNlIGlmICgweDYwMCA8
PSBjb2RlICYmIGNvZGUgPD0gMHg2ZWQpIHJldHVybiBhcmFiaWNUeXBlcy5jaGFyQXQoY29kZSAt
IDB4NjAwKTsKKyAgICAgIGVsc2UgaWYgKDB4NmVlIDw9IGNvZGUgJiYgY29kZSA8PSAweDhhYykg
cmV0dXJuICJyIjsKKyAgICAgIGVsc2UgaWYgKDB4MjAwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHgy
MDBiKSByZXR1cm4gInciOworICAgICAgZWxzZSBpZiAoY29kZSA9PSAweDIwMGMpIHJldHVybiAi
YiI7CiAgICAgICBlbHNlIHJldHVybiAiTCI7CiAgICAgfQogCkBAIC01ODE2LDYgKzczNTQsMTEg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgLy8gQnJvd3NlcnMgc2Vl
bSB0byBhbHdheXMgdHJlYXQgdGhlIGJvdW5kYXJpZXMgb2YgYmxvY2sgZWxlbWVudHMgYXMgYmVp
bmcgTC4KICAgICB2YXIgb3V0ZXJUeXBlID0gIkwiOwogCisgICAgZnVuY3Rpb24gQmlkaVNwYW4o
bGV2ZWwsIGZyb20sIHRvKSB7CisgICAgICB0aGlzLmxldmVsID0gbGV2ZWw7CisgICAgICB0aGlz
LmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG87CisgICAgfQorCiAgICAgcmV0dXJuIGZ1bmN0aW9u
KHN0cikgewogICAgICAgaWYgKCFiaWRpUkUudGVzdChzdHIpKSByZXR1cm4gZmFsc2U7CiAgICAg
ICB2YXIgbGVuID0gc3RyLmxlbmd0aCwgdHlwZXMgPSBbXTsKQEAgLTU4NjMsNyArNzQwNiw3IEBA
IHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAodHlwZSA9PSAi
LCIpIHR5cGVzW2ldID0gIk4iOwogICAgICAgICBlbHNlIGlmICh0eXBlID09ICIlIikgewogICAg
ICAgICAgIGZvciAodmFyIGVuZCA9IGkgKyAxOyBlbmQgPCBsZW4gJiYgdHlwZXNbZW5kXSA9PSAi
JSI7ICsrZW5kKSB7fQotICAgICAgICAgIHZhciByZXBsYWNlID0gKGkgJiYgdHlwZXNbaS0xXSA9
PSAiISIpIHx8IChlbmQgPCBsZW4gLSAxICYmIHR5cGVzW2VuZF0gPT0gIjEiKSA/ICIxIiA6ICJO
IjsKKyAgICAgICAgICB2YXIgcmVwbGFjZSA9IChpICYmIHR5cGVzW2ktMV0gPT0gIiEiKSB8fCAo
ZW5kIDwgbGVuICYmIHR5cGVzW2VuZF0gPT0gIjEiKSA/ICIxIiA6ICJOIjsKICAgICAgICAgICBm
b3IgKHZhciBqID0gaTsgaiA8IGVuZDsgKytqKSB0eXBlc1tqXSA9IHJlcGxhY2U7CiAgICAgICAg
ICAgaSA9IGVuZCAtIDE7CiAgICAgICAgIH0KQEAgLTU4ODgsNyArNzQzMSw3IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAoaXNOZXV0cmFsLnRlc3QodHlw
ZXNbaV0pKSB7CiAgICAgICAgICAgZm9yICh2YXIgZW5kID0gaSArIDE7IGVuZCA8IGxlbiAmJiBp
c05ldXRyYWwudGVzdCh0eXBlc1tlbmRdKTsgKytlbmQpIHt9CiAgICAgICAgICAgdmFyIGJlZm9y
ZSA9IChpID8gdHlwZXNbaS0xXSA6IG91dGVyVHlwZSkgPT0gIkwiOwotICAgICAgICAgIHZhciBh
ZnRlciA9IChlbmQgPCBsZW4gLSAxID8gdHlwZXNbZW5kXSA6IG91dGVyVHlwZSkgPT0gIkwiOwor
ICAgICAgICAgIHZhciBhZnRlciA9IChlbmQgPCBsZW4gPyB0eXBlc1tlbmRdIDogb3V0ZXJUeXBl
KSA9PSAiTCI7CiAgICAgICAgICAgdmFyIHJlcGxhY2UgPSBiZWZvcmUgfHwgYWZ0ZXIgPyAiTCIg
OiAiUiI7CiAgICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBlbmQ7ICsraikgdHlwZXNbal0g
PSByZXBsYWNlOwogICAgICAgICAgIGkgPSBlbmQgLSAxOwpAQCAtNTkwNSwzMiArNzQ0OCwzMiBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgaWYgKGNvdW50c0Fz
TGVmdC50ZXN0KHR5cGVzW2ldKSkgewogICAgICAgICAgIHZhciBzdGFydCA9IGk7CiAgICAgICAg
ICAgZm9yICgrK2k7IGkgPCBsZW4gJiYgY291bnRzQXNMZWZ0LnRlc3QodHlwZXNbaV0pOyArK2kp
IHt9Ci0gICAgICAgICAgb3JkZXIucHVzaCh7ZnJvbTogc3RhcnQsIHRvOiBpLCBsZXZlbDogMH0p
OworICAgICAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKDAsIHN0YXJ0LCBpKSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgdmFyIHBvcyA9IGksIGF0ID0gb3JkZXIubGVuZ3RoOwog
ICAgICAgICAgIGZvciAoKytpOyBpIDwgbGVuICYmIHR5cGVzW2ldICE9ICJMIjsgKytpKSB7fQog
ICAgICAgICAgIGZvciAodmFyIGogPSBwb3M7IGogPCBpOykgewogICAgICAgICAgICAgaWYgKGNv
dW50c0FzTnVtLnRlc3QodHlwZXNbal0pKSB7Ci0gICAgICAgICAgICAgIGlmIChwb3MgPCBqKSBv
cmRlci5zcGxpY2UoYXQsIDAsIHtmcm9tOiBwb3MsIHRvOiBqLCBsZXZlbDogMX0pOworICAgICAg
ICAgICAgICBpZiAocG9zIDwgaikgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4oMSwg
cG9zLCBqKSk7CiAgICAgICAgICAgICAgIHZhciBuc3RhcnQgPSBqOwogICAgICAgICAgICAgICBm
b3IgKCsrajsgaiA8IGkgJiYgY291bnRzQXNOdW0udGVzdCh0eXBlc1tqXSk7ICsraikge30KLSAg
ICAgICAgICAgICAgb3JkZXIuc3BsaWNlKGF0LCAwLCB7ZnJvbTogbnN0YXJ0LCB0bzogaiwgbGV2
ZWw6IDJ9KTsKKyAgICAgICAgICAgICAgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4o
MiwgbnN0YXJ0LCBqKSk7CiAgICAgICAgICAgICAgIHBvcyA9IGo7CiAgICAgICAgICAgICB9IGVs
c2UgKytqOwogICAgICAgICAgIH0KLSAgICAgICAgICBpZiAocG9zIDwgaSkgb3JkZXIuc3BsaWNl
KGF0LCAwLCB7ZnJvbTogcG9zLCB0bzogaSwgbGV2ZWw6IDF9KTsKKyAgICAgICAgICBpZiAocG9z
IDwgaSkgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4oMSwgcG9zLCBpKSk7CiAgICAg
ICAgIH0KICAgICAgIH0KICAgICAgIGlmIChvcmRlclswXS5sZXZlbCA9PSAxICYmIChtID0gc3Ry
Lm1hdGNoKC9eXHMrLykpKSB7CiAgICAgICAgIG9yZGVyWzBdLmZyb20gPSBtWzBdLmxlbmd0aDsK
LSAgICAgICAgb3JkZXIudW5zaGlmdCh7ZnJvbTogMCwgdG86IG1bMF0ubGVuZ3RoLCBsZXZlbDog
MH0pOworICAgICAgICBvcmRlci51bnNoaWZ0KG5ldyBCaWRpU3BhbigwLCAwLCBtWzBdLmxlbmd0
aCkpOwogICAgICAgfQogICAgICAgaWYgKGxzdChvcmRlcikubGV2ZWwgPT0gMSAmJiAobSA9IHN0
ci5tYXRjaCgvXHMrJC8pKSkgewogICAgICAgICBsc3Qob3JkZXIpLnRvIC09IG1bMF0ubGVuZ3Ro
OwotICAgICAgICBvcmRlci5wdXNoKHtmcm9tOiBsZW4gLSBtWzBdLmxlbmd0aCwgdG86IGxlbiwg
bGV2ZWw6IDB9KTsKKyAgICAgICAgb3JkZXIucHVzaChuZXcgQmlkaVNwYW4oMCwgbGVuIC0gbVsw
XS5sZW5ndGgsIGxlbikpOwogICAgICAgfQogICAgICAgaWYgKG9yZGVyWzBdLmxldmVsICE9IGxz
dChvcmRlcikubGV2ZWwpCi0gICAgICAgIG9yZGVyLnB1c2goe2Zyb206IGxlbiwgdG86IGxlbiwg
bGV2ZWw6IG9yZGVyWzBdLmxldmVsfSk7CisgICAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFu
KG9yZGVyWzBdLmxldmVsLCBsZW4sIGxlbikpOwogCiAgICAgICByZXR1cm4gb3JkZXI7CiAgICAg
fTsKQEAgLTU5MzgsNyArNzQ4MSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogCiAgIC8vIFRIRSBFTkQKIAotICBDb2RlTWlycm9yLnZlcnNpb24gPSAiMy4yMC4wIjsKKyAg
Q29kZU1pcnJvci52ZXJzaW9uID0gIjQuMC40IjsKIAogICByZXR1cm4gQ29kZU1pcnJvcjsKLX0p
KCk7Cit9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2ZmZWVzY3JpcHQuanMKaW5k
ZXggZThiZmU0OC4uYzZkYThmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2ZmZWVzY3JpcHQuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2Zm
ZWVzY3JpcHQuanMKQEAgLTIsNiArMiwxNiBAQAogICogTGluayB0byB0aGUgcHJvamVjdCdzIEdp
dEh1YiBwYWdlOgogICogaHR0cHM6Ly9naXRodWIuY29tL3BpY2toYXJkdC9jb2ZmZWVzY3JpcHQt
Y29kZW1pcnJvci1tb2RlCiAgKi8KKyhmdW5jdGlvbihtb2QpIHsKKyAgaWYgKHR5cGVvZiBleHBv
cnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpT
CisgICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikpOworICBlbHNlIGlmICh0
eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgLy8gQU1ECisgICAgZGVm
aW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBicm93
c2VyIGVudgorICAgIG1vZChDb2RlTWlycm9yKTsKK30pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsK
KyJ1c2Ugc3RyaWN0IjsKKwogQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBm
dW5jdGlvbihjb25mKSB7CiAgIHZhciBFUlJPUkNMQVNTID0gImVycm9yIjsKIApAQCAtMTE5LDEz
ICsxMjksMTMgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlv
bihjb25mKSB7CiAKICAgICAvLyBIYW5kbGUgc3RyaW5ncwogICAgIGlmIChzdHJlYW0ubWF0Y2go
c3RyaW5nUHJlZml4ZXMpKSB7Ci0gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuRmFjdG9yeShz
dHJlYW0uY3VycmVudCgpLCAic3RyaW5nIik7CisgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2Vu
RmFjdG9yeShzdHJlYW0uY3VycmVudCgpLCBmYWxzZSwgInN0cmluZyIpOwogICAgICAgcmV0dXJu
IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgIH0KICAgICAvLyBIYW5kbGUgcmVn
ZXggbGl0ZXJhbHMKICAgICBpZiAoc3RyZWFtLm1hdGNoKHJlZ2V4UHJlZml4ZXMpKSB7CiAgICAg
ICBpZiAoc3RyZWFtLmN1cnJlbnQoKSAhPSAiLyIgfHwgc3RyZWFtLm1hdGNoKC9eLipcLy8sIGZh
bHNlKSkgeyAvLyBwcmV2ZW50IGhpZ2hsaWdodCBvZiBkaXZpc2lvbgotICAgICAgICBzdGF0ZS50
b2tlbml6ZSA9IHRva2VuRmFjdG9yeShzdHJlYW0uY3VycmVudCgpLCAic3RyaW5nLTIiKTsKKyAg
ICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkZhY3Rvcnkoc3RyZWFtLmN1cnJlbnQoKSwgdHJ1
ZSwgInN0cmluZy0yIik7CiAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0
YXRlKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CkBAIC0xNjEs
OCArMTcxLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlv
bihjb25mKSB7CiAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgIH0KIAotICBmdW5jdGlvbiB0b2tl
bkZhY3RvcnkoZGVsaW1pdGVyLCBvdXRjbGFzcykgewotICAgIHZhciBzaW5nbGVsaW5lID0gZGVs
aW1pdGVyLmxlbmd0aCA9PSAxOworICBmdW5jdGlvbiB0b2tlbkZhY3RvcnkoZGVsaW1pdGVyLCBz
aW5nbGVsaW5lLCBvdXRjbGFzcykgewogICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRl
KSB7CiAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICBzdHJlYW0uZWF0V2hp
bGUoL1teJyJcL1xcXS8pOwpAQCAtMzUyLDMgKzM2MSw1IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9k
ZSgiY29mZmVlc2NyaXB0IiwgZnVuY3Rpb24oY29uZikgewogfSk7CiAKIENvZGVNaXJyb3IuZGVm
aW5lTUlNRSgidGV4dC94LWNvZmZlZXNjcmlwdCIsICJjb2ZmZWVzY3JpcHQiKTsKKworfSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9D
b2RlTWlycm9yL2NvbW1lbnQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvbW1lbnQuanMKaW5kZXggY2QyMTIzZS4uMWViOWEwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
Q29kZU1pcnJvci9jb21tZW50LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29tbWVudC5qcwpAQCAtMSw0ICsxLDExIEBACi0o
ZnVuY3Rpb24oKSB7CisoZnVuY3Rpb24obW9kKSB7CisgIGlmICh0eXBlb2YgZXhwb3J0cyA9PSAi
b2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiKSAvLyBDb21tb25KUworICAgIG1v
ZChyZXF1aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpKTsKKyAgZWxzZSBpZiAodHlwZW9mIGRl
ZmluZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAorICAgIGRlZmluZShbIi4u
Ly4uL2xpYi9jb2RlbWlycm9yIl0sIG1vZCk7CisgIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnYK
KyAgICBtb2QoQ29kZU1pcnJvcik7Cit9KShmdW5jdGlvbihDb2RlTWlycm9yKSB7CiAgICJ1c2Ug
c3RyaWN0IjsKIAogICB2YXIgbm9PcHRpb25zID0ge307CkBAIC0xMSw4ICsxOCwyMSBAQAogICB9
CiAKICAgQ29kZU1pcnJvci5jb21tYW5kcy50b2dnbGVDb21tZW50ID0gZnVuY3Rpb24oY20pIHsK
LSAgICB2YXIgZnJvbSA9IGNtLmdldEN1cnNvcigic3RhcnQiKSwgdG8gPSBjbS5nZXRDdXJzb3Io
ImVuZCIpOwotICAgIGNtLnVuY29tbWVudChmcm9tLCB0bykgfHwgY20ubGluZUNvbW1lbnQoZnJv
bSwgdG8pOworICAgIHZhciBtaW5MaW5lID0gSW5maW5pdHksIHJhbmdlcyA9IGNtLmxpc3RTZWxl
Y3Rpb25zKCksIG1vZGUgPSBudWxsOworICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoIC0g
MTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgIHZhciBmcm9tID0gcmFuZ2VzW2ldLmZyb20oKSwgdG8g
PSByYW5nZXNbaV0udG8oKTsKKyAgICAgIGlmIChmcm9tLmxpbmUgPj0gbWluTGluZSkgY29udGlu
dWU7CisgICAgICBpZiAodG8ubGluZSA+PSBtaW5MaW5lKSB0byA9IFBvcyhtaW5MaW5lLCAwKTsK
KyAgICAgIG1pbkxpbmUgPSBmcm9tLmxpbmU7CisgICAgICBpZiAobW9kZSA9PSBudWxsKSB7Cisg
ICAgICAgIGlmIChjbS51bmNvbW1lbnQoZnJvbSwgdG8pKSBtb2RlID0gInVuIjsKKyAgICAgICAg
ZWxzZSB7IGNtLmxpbmVDb21tZW50KGZyb20sIHRvKTsgbW9kZSA9ICJsaW5lIjsgfQorICAgICAg
fSBlbHNlIGlmIChtb2RlID09ICJ1biIpIHsKKyAgICAgICAgY20udW5jb21tZW50KGZyb20sIHRv
KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNtLmxpbmVDb21tZW50KGZyb20sIHRvKTsKKyAg
ICAgIH0KKyAgICB9CiAgIH07CiAKICAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oImxpbmVD
b21tZW50IiwgZnVuY3Rpb24oZnJvbSwgdG8sIG9wdGlvbnMpIHsKQEAgLTk2LDggKzExNiw5IEBA
CiAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyArK2kpIHsKICAgICAgICAgdmFy
IGxpbmUgPSBzZWxmLmdldExpbmUoaSk7CiAgICAgICAgIHZhciBmb3VuZCA9IGxpbmUuaW5kZXhP
ZihsaW5lU3RyaW5nKTsKKyAgICAgICAgaWYgKGZvdW5kID4gLTEgJiYgIS9jb21tZW50Ly50ZXN0
KHNlbGYuZ2V0VG9rZW5UeXBlQXQoUG9zKGksIGZvdW5kICsgMSkpKSkgZm91bmQgPSAtMTsKICAg
ICAgICAgaWYgKGZvdW5kID09IC0xICYmIChpICE9IGVuZCB8fCBpID09IHN0YXJ0KSAmJiBub25X
Uy50ZXN0KGxpbmUpKSBicmVhayBsaW5lQ29tbWVudDsKLSAgICAgICAgaWYgKGkgIT0gc3RhcnQg
JiYgZm91bmQgPiAtMSAmJiBub25XUy50ZXN0KGxpbmUuc2xpY2UoMCwgZm91bmQpKSkgYnJlYWsg
bGluZUNvbW1lbnQ7CisgICAgICAgIGlmIChmb3VuZCA+IC0xICYmIG5vbldTLnRlc3QobGluZS5z
bGljZSgwLCBmb3VuZCkpKSBicmVhayBsaW5lQ29tbWVudDsKICAgICAgICAgbGluZXMucHVzaChs
aW5lKTsKICAgICAgIH0KICAgICAgIHNlbGYub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewpAQCAtMTI0
LDcgKzE0NSwxMCBAQAogICAgICAgZW5kTGluZSA9IHNlbGYuZ2V0TGluZSgtLWVuZCk7CiAgICAg
ICBjbG9zZSA9IGVuZExpbmUubGFzdEluZGV4T2YoZW5kU3RyaW5nKTsKICAgICB9Ci0gICAgaWYg
KG9wZW4gPT0gLTEgfHwgY2xvc2UgPT0gLTEpIHJldHVybiBmYWxzZTsKKyAgICBpZiAob3BlbiA9
PSAtMSB8fCBjbG9zZSA9PSAtMSB8fAorICAgICAgICAhL2NvbW1lbnQvLnRlc3Qoc2VsZi5nZXRU
b2tlblR5cGVBdChQb3Moc3RhcnQsIG9wZW4gKyAxKSkpIHx8CisgICAgICAgICEvY29tbWVudC8u
dGVzdChzZWxmLmdldFRva2VuVHlwZUF0KFBvcyhlbmQsIGNsb3NlICsgMSkpKSkKKyAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHNlbGYub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgc2Vs
Zi5yZXBsYWNlUmFuZ2UoIiIsIFBvcyhlbmQsIGNsb3NlIC0gKHBhZCAmJiBlbmRMaW5lLnNsaWNl
KGNsb3NlIC0gcGFkLmxlbmd0aCwgY2xvc2UpID09IHBhZCA/IHBhZC5sZW5ndGggOiAwKSksCkBA
IC0xNDIsNCArMTY2LDQgQEAKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfSk7Ci19KSgp
OworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzCmluZGV4IDVkZGVmNjguLjM0MjY3MzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IvY3NzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzCkBAIC0xLDg5ICsxLDkxIEBACi1Db2RlTWly
cm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7Ci0g
ICJ1c2Ugc3RyaWN0IjsKKyhmdW5jdGlvbihtb2QpIHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09
ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCisgICAg
bW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikpOworICBlbHNlIGlmICh0eXBlb2Yg
ZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgLy8gQU1ECisgICAgZGVmaW5lKFsi
Li4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVu
dgorICAgIG1vZChDb2RlTWlycm9yKTsKK30pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKKyJ1c2Ug
c3RyaWN0IjsKIAorQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcs
IHBhcnNlckNvbmZpZykgewogICBpZiAoIXBhcnNlckNvbmZpZy5wcm9wZXJ0eUtleXdvcmRzKSBw
YXJzZXJDb25maWcgPSBDb2RlTWlycm9yLnJlc29sdmVNb2RlKCJ0ZXh0L2NzcyIpOwogCi0gIHZh
ciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQgfHwgY29uZmlnLnRhYlNpemUgfHwgMiwK
LSAgICAgIGhvb2tzID0gcGFyc2VyQ29uZmlnLmhvb2tzIHx8IHt9LAotICAgICAgYXRNZWRpYVR5
cGVzID0gcGFyc2VyQ29uZmlnLmF0TWVkaWFUeXBlcyB8fCB7fSwKLSAgICAgIGF0TWVkaWFGZWF0
dXJlcyA9IHBhcnNlckNvbmZpZy5hdE1lZGlhRmVhdHVyZXMgfHwge30sCisgIHZhciBpbmRlbnRV
bml0ID0gY29uZmlnLmluZGVudFVuaXQsCisgICAgICB0b2tlbkhvb2tzID0gcGFyc2VyQ29uZmln
LnRva2VuSG9va3MsCisgICAgICBtZWRpYVR5cGVzID0gcGFyc2VyQ29uZmlnLm1lZGlhVHlwZXMg
fHwge30sCisgICAgICBtZWRpYUZlYXR1cmVzID0gcGFyc2VyQ29uZmlnLm1lZGlhRmVhdHVyZXMg
fHwge30sCiAgICAgICBwcm9wZXJ0eUtleXdvcmRzID0gcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5
d29yZHMgfHwge30sCisgICAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBwYXJzZXJD
b25maWcubm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzIHx8IHt9LAogICAgICAgY29sb3JLZXl3
b3JkcyA9IHBhcnNlckNvbmZpZy5jb2xvcktleXdvcmRzIHx8IHt9LAogICAgICAgdmFsdWVLZXl3
b3JkcyA9IHBhcnNlckNvbmZpZy52YWx1ZUtleXdvcmRzIHx8IHt9LAotICAgICAgYWxsb3dOZXN0
ZWQgPSAhIXBhcnNlckNvbmZpZy5hbGxvd05lc3RlZCwKLSAgICAgIHR5cGUgPSBudWxsOworICAg
ICAgZm9udFByb3BlcnRpZXMgPSBwYXJzZXJDb25maWcuZm9udFByb3BlcnRpZXMgfHwge30sCisg
ICAgICBhbGxvd05lc3RlZCA9IHBhcnNlckNvbmZpZy5hbGxvd05lc3RlZDsKIAorICB2YXIgdHlw
ZSwgb3ZlcnJpZGU7CiAgIGZ1bmN0aW9uIHJldChzdHlsZSwgdHApIHsgdHlwZSA9IHRwOyByZXR1
cm4gc3R5bGU7IH0KIAorICAvLyBUb2tlbml6ZXJzCisKICAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0
cmVhbSwgc3RhdGUpIHsKICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwotICAgIGlmIChob29r
c1tjaF0pIHsKLSAgICAgIC8vIHJlc3VsdFswXSBpcyBzdHlsZSBhbmQgcmVzdWx0WzFdIGlzIHR5
cGUKLSAgICAgIHZhciByZXN1bHQgPSBob29rc1tjaF0oc3RyZWFtLCBzdGF0ZSk7CisgICAgaWYg
KHRva2VuSG9va3NbY2hdKSB7CisgICAgICB2YXIgcmVzdWx0ID0gdG9rZW5Ib29rc1tjaF0oc3Ry
ZWFtLCBzdGF0ZSk7CiAgICAgICBpZiAocmVzdWx0ICE9PSBmYWxzZSkgcmV0dXJuIHJlc3VsdDsK
ICAgICB9Ci0gICAgaWYgKGNoID09ICJAIikge3N0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsg
cmV0dXJuIHJldCgiZGVmIiwgc3RyZWFtLmN1cnJlbnQoKSk7fQotICAgIGVsc2UgaWYgKGNoID09
ICI9IikgcmV0KG51bGwsICJjb21wYXJlIik7Ci0gICAgZWxzZSBpZiAoKGNoID09ICJ+IiB8fCBj
aCA9PSAifCIpICYmIHN0cmVhbS5lYXQoIj0iKSkgcmV0dXJuIHJldChudWxsLCAiY29tcGFyZSIp
OwotICAgIGVsc2UgaWYgKGNoID09ICJcIiIgfHwgY2ggPT0gIiciKSB7CisgICAgaWYgKGNoID09
ICJAIikgeworICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOworICAgICAgcmV0dXJu
IHJldCgiZGVmIiwgc3RyZWFtLmN1cnJlbnQoKSk7CisgICAgfSBlbHNlIGlmIChjaCA9PSAiPSIg
fHwgKGNoID09ICJ+IiB8fCBjaCA9PSAifCIpICYmIHN0cmVhbS5lYXQoIj0iKSkgeworICAgICAg
cmV0dXJuIHJldChudWxsLCAiY29tcGFyZSIpOworICAgIH0gZWxzZSBpZiAoY2ggPT0gIlwiIiB8
fCBjaCA9PSAiJyIpIHsKICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpOwog
ICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwotICAgIH0KLSAgICBl
bHNlIGlmIChjaCA9PSAiIyIpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICIjIikgewogICAgICAg
c3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwogICAgICAgcmV0dXJuIHJldCgiYXRvbSIsICJo
YXNoIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNoID09ICIhIikgeworICAgIH0gZWxzZSBpZiAo
Y2ggPT0gIiEiKSB7CiAgICAgICBzdHJlYW0ubWF0Y2goL15ccypcdyovKTsKICAgICAgIHJldHVy
biByZXQoImtleXdvcmQiLCAiaW1wb3J0YW50Iik7Ci0gICAgfQotICAgIGVsc2UgaWYgKC9cZC8u
dGVzdChjaCkgfHwgY2ggPT0gIi4iICYmIHN0cmVhbS5lYXQoL1xkLykpIHsKKyAgICB9IGVsc2Ug
aWYgKC9cZC8udGVzdChjaCkgfHwgY2ggPT0gIi4iICYmIHN0cmVhbS5lYXQoL1xkLykpIHsKICAg
ICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgICByZXR1cm4gcmV0KCJudW1iZXIi
LCAidW5pdCIpOwotICAgIH0KLSAgICBlbHNlIGlmIChjaCA9PT0gIi0iKSB7Ci0gICAgICBpZiAo
L1xkLy50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7CisgICAgfSBlbHNlIGlmIChjaCA9PT0gIi0iKSB7
CisgICAgICBpZiAoL1tcZC5dLy50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7CiAgICAgICAgIHN0cmVh
bS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJ1bml0
Iik7CiAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXlteLV0rLS8pKSB7CiAgICAgICAg
IHJldHVybiByZXQoIm1ldGEiLCAibWV0YSIpOwogICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlm
ICgvWywrPipcL10vLnRlc3QoY2gpKSB7CisgICAgfSBlbHNlIGlmICgvWywrPipcL10vLnRlc3Qo
Y2gpKSB7CiAgICAgICByZXR1cm4gcmV0KG51bGwsICJzZWxlY3Qtb3AiKTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAoY2ggPT0gIi4iICYmIHN0cmVhbS5tYXRjaCgvXi0/W19hLXpdW19hLXowLTktXSov
aSkpIHsKKyAgICB9IGVsc2UgaWYgKGNoID09ICIuIiAmJiBzdHJlYW0ubWF0Y2goL14tP1tfYS16
XVtfYS16MC05LV0qL2kpKSB7CiAgICAgICByZXR1cm4gcmV0KCJxdWFsaWZpZXIiLCAicXVhbGlm
aWVyIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNoID09ICI6IikgewotICAgICAgcmV0dXJuIHJl
dCgib3BlcmF0b3IiLCBjaCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKC9bO3t9XFtcXVwoXCldLy50
ZXN0KGNoKSkgeworICAgIH0gZWxzZSBpZiAoL1s6O3t9XFtcXVwoXCldLy50ZXN0KGNoKSkgewog
ICAgICAgcmV0dXJuIHJldChudWxsLCBjaCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNoID09ICJ1
IiAmJiBzdHJlYW0ubWF0Y2goInJsKCIpKSB7CisgICAgfSBlbHNlIGlmIChjaCA9PSAidSIgJiYg
c3RyZWFtLm1hdGNoKCJybCgiKSkgewogICAgICAgc3RyZWFtLmJhY2tVcCgxKTsKICAgICAgIHN0
YXRlLnRva2VuaXplID0gdG9rZW5QYXJlbnRoZXNpemVkOwotICAgICAgcmV0dXJuIHJldCgicHJv
cGVydHkiLCAidmFyaWFibGUiKTsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgICByZXR1cm4gcmV0
KCJwcm9wZXJ0eSIsICJ3b3JkIik7CisgICAgfSBlbHNlIGlmICgvW1x3XFxcLV0vLnRlc3QoY2gp
KSB7CiAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7Ci0gICAgICByZXR1cm4gcmV0
KCJwcm9wZXJ0eSIsICJ2YXJpYWJsZSIpOworICAgICAgcmV0dXJuIHJldCgicHJvcGVydHkiLCAi
d29yZCIpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gcmV0KG51bGwsIG51bGwpOwogICAg
IH0KICAgfQogCi0gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlLCBub25JbmNsdXNpdmUpIHsK
KyAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgICByZXR1cm4gZnVuY3Rpb24oc3Ry
ZWFtLCBzdGF0ZSkgewogICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgICB3aGls
ZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewotICAgICAgICBpZiAoY2ggPT0gcXVv
dGUgJiYgIWVzY2FwZWQpCisgICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgewor
ICAgICAgICAgIGlmIChxdW90ZSA9PSAiKSIpIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJc
XCI7CiAgICAgICB9Ci0gICAgICBpZiAoIWVzY2FwZWQpIHsKLSAgICAgICAgaWYgKG5vbkluY2x1
c2l2ZSkgc3RyZWFtLmJhY2tVcCgxKTsKLSAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJh
c2U7Ci0gICAgICB9CisgICAgICBpZiAoY2ggPT0gcXVvdGUgfHwgIWVzY2FwZWQgJiYgcXVvdGUg
IT0gIikiKSBzdGF0ZS50b2tlbml6ZSA9IG51bGw7CiAgICAgICByZXR1cm4gcmV0KCJzdHJpbmci
LCAic3RyaW5nIik7CiAgICAgfTsKICAgfQpAQCAtOTEsMjE4ICs5MywyNTEgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICBm
dW5jdGlvbiB0b2tlblBhcmVudGhlc2l6ZWQoc3RyZWFtLCBzdGF0ZSkgewogICAgIHN0cmVhbS5u
ZXh0KCk7IC8vIE11c3QgYmUgJygnCiAgICAgaWYgKCFzdHJlYW0ubWF0Y2goL1xzKltcIlwnXS8s
IGZhbHNlKSkKLSAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoIikiLCB0cnVlKTsK
KyAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoIikiKTsKICAgICBlbHNlCi0gICAg
ICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKKyAgICAgIHN0YXRlLnRva2VuaXplID0gbnVs
bDsKICAgICByZXR1cm4gcmV0KG51bGwsICIoIik7CiAgIH0KIAorICAvLyBDb250ZXh0IG1hbmFn
ZW1lbnQKKworICBmdW5jdGlvbiBDb250ZXh0KHR5cGUsIGluZGVudCwgcHJldikgeworICAgIHRo
aXMudHlwZSA9IHR5cGU7CisgICAgdGhpcy5pbmRlbnQgPSBpbmRlbnQ7CisgICAgdGhpcy5wcmV2
ID0gcHJldjsKKyAgfQorCisgIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIHR5
cGUpIHsKKyAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQodHlwZSwgc3RyZWFtLmluZGVu
dGF0aW9uKCkgKyBpbmRlbnRVbml0LCBzdGF0ZS5jb250ZXh0KTsKKyAgICByZXR1cm4gdHlwZTsK
KyAgfQorCisgIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKKyAgICBzdGF0ZS5jb250ZXh0
ID0gc3RhdGUuY29udGV4dC5wcmV2OworICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7Cisg
IH0KKworICBmdW5jdGlvbiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICByZXR1cm4g
c3RhdGVzW3N0YXRlLmNvbnRleHQudHlwZV0odHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgIH0KKyAg
ZnVuY3Rpb24gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCBuKSB7CisgICAgZm9yICh2
YXIgaSA9IG4gfHwgMTsgaSA+IDA7IGktLSkKKyAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5j
b250ZXh0LnByZXY7CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgIH0K
KworICAvLyBQYXJzZXIKKworICBmdW5jdGlvbiB3b3JkQXNWYWx1ZShzdHJlYW0pIHsKKyAgICB2
YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTsKKyAgICBpZiAodmFsdWVL
ZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkKKyAgICAgIG92ZXJyaWRlID0gImF0b20iOwor
ICAgIGVsc2UgaWYgKGNvbG9yS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpCisgICAgICBv
dmVycmlkZSA9ICJrZXl3b3JkIjsKKyAgICBlbHNlCisgICAgICBvdmVycmlkZSA9ICJ2YXJpYWJs
ZSI7CisgIH0KKworICB2YXIgc3RhdGVzID0ge307CisKKyAgc3RhdGVzLnRvcCA9IGZ1bmN0aW9u
KHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAieyIpIHsKKyAgICAgIHJl
dHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAiYmxvY2siKTsKKyAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gIn0iICYmIHN0YXRlLmNvbnRleHQucHJldikgeworICAgICAgcmV0dXJuIHBvcENv
bnRleHQoc3RhdGUpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiQG1lZGlhIikgeworICAgICAg
cmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJtZWRpYSIpOworICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSAiQGZvbnQtZmFjZSIpIHsKKyAgICAgIHJldHVybiAiZm9udF9mYWNlX2JlZm9y
ZSI7CisgICAgfSBlbHNlIGlmICgvXkAoLShtb3p8bXN8b3x3ZWJraXQpLSk/a2V5ZnJhbWVzJC8u
dGVzdCh0eXBlKSkgeworICAgICAgcmV0dXJuICJrZXlmcmFtZXMiOworICAgIH0gZWxzZSBpZiAo
dHlwZSAmJiB0eXBlLmNoYXJBdCgwKSA9PSAiQCIpIHsKKyAgICAgIHJldHVybiBwdXNoQ29udGV4
dChzdGF0ZSwgc3RyZWFtLCAiYXQiKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImhhc2giKSB7
CisgICAgICBvdmVycmlkZSA9ICJidWlsdGluIjsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIndv
cmQiKSB7CisgICAgICBvdmVycmlkZSA9ICJ0YWciOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAi
dmFyaWFibGUtZGVmaW5pdGlvbiIpIHsKKyAgICAgIHJldHVybiAibWF5YmVwcm9wIjsKKyAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gImludGVycG9sYXRpb24iKSB7CisgICAgICByZXR1cm4gcHVzaENv
bnRleHQoc3RhdGUsIHN0cmVhbSwgImludGVycG9sYXRpb24iKTsKKyAgICB9IGVsc2UgaWYgKHR5
cGUgPT0gIjoiKSB7CisgICAgICByZXR1cm4gInBzZXVkbyI7CisgICAgfSBlbHNlIGlmIChhbGxv
d05lc3RlZCAmJiB0eXBlID09ICIoIikgeworICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRl
LCBzdHJlYW0sICJwYXJhbXMiKTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQudHlw
ZTsKKyAgfTsKKworICBzdGF0ZXMuYmxvY2sgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRl
KSB7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CisgICAgICB2YXIgd29yZCA9IHN0cmVhbS5j
dXJyZW50KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgIGlmIChwcm9wZXJ0eUtleXdvcmRzLmhhc093
blByb3BlcnR5KHdvcmQpKSB7CisgICAgICAgIG92ZXJyaWRlID0gInByb3BlcnR5IjsKKyAgICAg
ICAgcmV0dXJuICJtYXliZXByb3AiOworICAgICAgfSBlbHNlIGlmIChub25TdGFuZGFyZFByb3Bl
cnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKKyAgICAgICAgb3ZlcnJpZGUgPSAi
c3RyaW5nLTIiOworICAgICAgICByZXR1cm4gIm1heWJlcHJvcCI7CisgICAgICB9IGVsc2UgaWYg
KGFsbG93TmVzdGVkKSB7CisgICAgICAgIG92ZXJyaWRlID0gc3RyZWFtLm1hdGNoKC9eXHMqOi8s
IGZhbHNlKSA/ICJwcm9wZXJ0eSIgOiAidGFnIjsKKyAgICAgICAgcmV0dXJuICJibG9jayI7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBvdmVycmlkZSArPSAiIGVycm9yIjsKKyAgICAgICAgcmV0
dXJuICJtYXliZXByb3AiOworICAgICAgfQorICAgIH0gZWxzZSBpZiAodHlwZSA9PSAibWV0YSIp
IHsKKyAgICAgIHJldHVybiAiYmxvY2siOworICAgIH0gZWxzZSBpZiAoIWFsbG93TmVzdGVkICYm
ICh0eXBlID09ICJoYXNoIiB8fCB0eXBlID09ICJxdWFsaWZpZXIiKSkgeworICAgICAgb3ZlcnJp
ZGUgPSAiZXJyb3IiOworICAgICAgcmV0dXJuICJibG9jayI7CisgICAgfSBlbHNlIHsKKyAgICAg
IHJldHVybiBzdGF0ZXMudG9wKHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIH0KKyAgfTsKKwor
ICBzdGF0ZXMubWF5YmVwcm9wID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICAg
IGlmICh0eXBlID09ICI6IikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJwcm9w
Iik7CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgIH07CisKKyAgc3Rh
dGVzLnByb3AgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUg
PT0gIjsiKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gInsiICYm
IGFsbG93TmVzdGVkKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInByb3BCbG9j
ayIpOworICAgIGlmICh0eXBlID09ICJ9IiB8fCB0eXBlID09ICJ7IikgcmV0dXJuIHBvcEFuZFBh
c3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gcHVz
aENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInBhcmVucyIpOworCisgICAgaWYgKHR5cGUgPT0gImhh
c2giICYmICEvXiMoWzAtOWEtZkEtZl17M318WzAtOWEtZkEtZl17Nn0pJC8udGVzdChzdHJlYW0u
Y3VycmVudCgpKSkgeworICAgICAgb3ZlcnJpZGUgKz0gIiBlcnJvciI7CisgICAgfSBlbHNlIGlm
ICh0eXBlID09ICJ3b3JkIikgeworICAgICAgd29yZEFzVmFsdWUoc3RyZWFtKTsKKyAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gImludGVycG9sYXRpb24iKSB7CisgICAgICByZXR1cm4gcHVzaENvbnRl
eHQoc3RhdGUsIHN0cmVhbSwgImludGVycG9sYXRpb24iKTsKKyAgICB9CisgICAgcmV0dXJuICJw
cm9wIjsKKyAgfTsKKworICBzdGF0ZXMucHJvcEJsb2NrID0gZnVuY3Rpb24odHlwZSwgX3N0cmVh
bSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAifSIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRl
KTsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHsgb3ZlcnJpZGUgPSAicHJvcGVydHkiOyByZXR1
cm4gIm1heWJlcHJvcCI7IH0KKyAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlOworICB9Owor
CisgIHN0YXRlcy5wYXJlbnMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAg
aWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBz
dHJlYW0sIHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAiKSIpIHJldHVybiBwb3BDb250ZXh0KHN0
YXRlKTsKKyAgICByZXR1cm4gInBhcmVucyI7CisgIH07CisKKyAgc3RhdGVzLnBzZXVkbyA9IGZ1
bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHsK
KyAgICAgIG92ZXJyaWRlID0gInZhcmlhYmxlLTMiOworICAgICAgcmV0dXJuIHN0YXRlLmNvbnRl
eHQudHlwZTsKKyAgICB9CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7Cisg
IH07CisKKyAgc3RhdGVzLm1lZGlhID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgewor
ICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJt
ZWRpYV9wYXJlbnMiKTsKKyAgICBpZiAodHlwZSA9PSAifSIpIHJldHVybiBwb3BBbmRQYXNzKHR5
cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIHBvcENvbnRl
eHQoc3RhdGUpICYmIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIGFsbG93TmVzdGVkID8gImJs
b2NrIiA6ICJ0b3AiKTsKKworICAgIGlmICh0eXBlID09ICJ3b3JkIikgeworICAgICAgdmFyIHdv
cmQgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7CisgICAgICBpZiAod29yZCA9PSAi
b25seSIgfHwgd29yZCA9PSAibm90IiB8fCB3b3JkID09ICJhbmQiKQorICAgICAgICBvdmVycmlk
ZSA9ICJrZXl3b3JkIjsKKyAgICAgIGVsc2UgaWYgKG1lZGlhVHlwZXMuaGFzT3duUHJvcGVydHko
d29yZCkpCisgICAgICAgIG92ZXJyaWRlID0gImF0dHJpYnV0ZSI7CisgICAgICBlbHNlIGlmICht
ZWRpYUZlYXR1cmVzLmhhc093blByb3BlcnR5KHdvcmQpKQorICAgICAgICBvdmVycmlkZSA9ICJw
cm9wZXJ0eSI7CisgICAgICBlbHNlCisgICAgICAgIG92ZXJyaWRlID0gImVycm9yIjsKKyAgICB9
CisgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQudHlwZTsKKyAgfTsKKworICBzdGF0ZXMubWVkaWFf
cGFyZW5zID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09
ICIpIikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpOworICAgIGlmICh0eXBlID09ICJ7IiB8fCB0
eXBlID09ICJ9IikgcmV0dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSwgMik7Cisg
ICAgcmV0dXJuIHN0YXRlcy5tZWRpYSh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKKyAgfTsKKworICBz
dGF0ZXMuZm9udF9mYWNlX2JlZm9yZSA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsK
KyAgICBpZiAodHlwZSA9PSAieyIpCisgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0
cmVhbSwgImZvbnRfZmFjZSIpOworICAgIHJldHVybiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUp
OworICB9OworCisgIHN0YXRlcy5mb250X2ZhY2UgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0
YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7Cisg
ICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CisgICAgICBpZiAoIWZvbnRQcm9wZXJ0aWVzLmhhc093
blByb3BlcnR5KHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSkpCisgICAgICAgIG92ZXJy
aWRlID0gImVycm9yIjsKKyAgICAgIGVsc2UKKyAgICAgICAgb3ZlcnJpZGUgPSAicHJvcGVydHki
OworICAgICAgcmV0dXJuICJtYXliZXByb3AiOworICAgIH0KKyAgICByZXR1cm4gImZvbnRfZmFj
ZSI7CisgIH07CisKKyAgc3RhdGVzLmtleWZyYW1lcyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwg
c3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHsgb3ZlcnJpZGUgPSAidmFyaWFibGUi
OyByZXR1cm4gImtleWZyYW1lcyI7IH0KKyAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBwdXNo
Q29udGV4dChzdGF0ZSwgc3RyZWFtLCAidG9wIik7CisgICAgcmV0dXJuIHBhc3ModHlwZSwgc3Ry
ZWFtLCBzdGF0ZSk7CisgIH07CisKKyAgc3RhdGVzLmF0ID0gZnVuY3Rpb24odHlwZSwgc3RyZWFt
LCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUp
OworICAgIGlmICh0eXBlID09ICJ7IiB8fCB0eXBlID09ICJ9IikgcmV0dXJuIHBvcEFuZFBhc3Mo
dHlwZSwgc3RyZWFtLCBzdGF0ZSk7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSBvdmVycmlkZSA9
ICJ0YWciOworICAgIGVsc2UgaWYgKHR5cGUgPT0gImhhc2giKSBvdmVycmlkZSA9ICJidWlsdGlu
IjsKKyAgICByZXR1cm4gImF0IjsKKyAgfTsKKworICBzdGF0ZXMuaW50ZXJwb2xhdGlvbiA9IGZ1
bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAifSIpIHJldHVy
biBwb3BDb250ZXh0KHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAieyIgfHwgdHlwZSA9PSAiOyIp
IHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIGlmICh0eXBlICE9
ICJ2YXJpYWJsZSIpIG92ZXJyaWRlID0gImVycm9yIjsKKyAgICByZXR1cm4gImludGVycG9sYXRp
b24iOworICB9OworCisgIHN0YXRlcy5wYXJhbXMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0
YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIikiKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7Cisg
ICAgaWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBl
LCBzdHJlYW0sIHN0YXRlKTsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHdvcmRBc1ZhbHVlKHN0
cmVhbSk7CisgICAgcmV0dXJuICJwYXJhbXMiOworICB9OworCiAgIHJldHVybiB7CiAgICAgc3Rh
cnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewotICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5C
YXNlLAotICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCi0gICAgICAgICAgICAg
IHN0YWNrOiBbXSwKLSAgICAgICAgICAgICAgbGFzdFRva2VuOiBudWxsfTsKKyAgICAgIHJldHVy
biB7dG9rZW5pemU6IG51bGwsCisgICAgICAgICAgICAgIHN0YXRlOiAidG9wIiwKKyAgICAgICAg
ICAgICAgY29udGV4dDogbmV3IENvbnRleHQoInRvcCIsIGJhc2UgfHwgMCwgbnVsbCl9OwogICAg
IH0sCiAKICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotCi0gICAgICAvLyBV
c2UgdGhlc2UgdGVybXMgd2hlbiBhcHBsaWNhYmxlIChzZWUgaHR0cDovL3d3dy54YW50aGlyLmNv
bS9ibG9nL2I0RTUwKQotICAgICAgLy8KLSAgICAgIC8vIHJ1bGUqKiBvciAqKnJ1bGVzZXQ6Ci0g
ICAgICAvLyBBIHNlbGVjdG9yICsgYnJhY2VzIGNvbWJvLCBvciBhbiBhdC1ydWxlLgotICAgICAg
Ly8KLSAgICAgIC8vIGRlY2xhcmF0aW9uIGJsb2NrOgotICAgICAgLy8gQSBzZXF1ZW5jZSBvZiBk
ZWNsYXJhdGlvbnMuCi0gICAgICAvLwotICAgICAgLy8gZGVjbGFyYXRpb246Ci0gICAgICAvLyBB
IHByb3BlcnR5ICsgY29sb24gKyB2YWx1ZSBjb21iby4KLSAgICAgIC8vCi0gICAgICAvLyBwcm9w
ZXJ0eSB2YWx1ZToKLSAgICAgIC8vIFRoZSBlbnRpcmUgdmFsdWUgb2YgYSBwcm9wZXJ0eS4KLSAg
ICAgIC8vCi0gICAgICAvLyBjb21wb25lbnQgdmFsdWU6Ci0gICAgICAvLyBBIHNpbmdsZSBwaWVj
ZSBvZiBhIHByb3BlcnR5IHZhbHVlLiBMaWtlIHRoZSA1cHggaW4KLSAgICAgIC8vIHRleHQtc2hh
ZG93OiAwIDAgNXB4IGJsdWU7LiBDYW4gYWxzbyByZWZlciB0byB0aGluZ3MgdGhhdCBhcmUKLSAg
ICAgIC8vIG11bHRpcGxlIHRlcm1zLCBsaWtlIHRoZSAxLTQgdGVybXMgdGhhdCBtYWtlIHVwIHRo
ZSBiYWNrZ3JvdW5kLXNpemUKLSAgICAgIC8vIHBvcnRpb24gb2YgdGhlIGJhY2tncm91bmQgc2hv
cnRoYW5kLgotICAgICAgLy8KLSAgICAgIC8vIHRlcm06Ci0gICAgICAvLyBUaGUgYmFzaWMgdW5p
dCBvZiBhdXRob3ItZmFjaW5nIENTUywgbGlrZSBhIHNpbmdsZSBudW1iZXIgKDUpLAotICAgICAg
Ly8gZGltZW5zaW9uICg1cHgpLCBzdHJpbmcgKCJmb28iKSwgb3IgZnVuY3Rpb24uIE9mZmljaWFs
bHkgZGVmaW5lZAotICAgICAgLy8gIGJ5IHRoZSBDU1MgMi4xIGdyYW1tYXIgKGxvb2sgZm9yIHRo
ZSAndGVybScgcHJvZHVjdGlvbikKLSAgICAgIC8vCi0gICAgICAvLwotICAgICAgLy8gc2ltcGxl
IHNlbGVjdG9yOgotICAgICAgLy8gQSBzaW5nbGUgYXRvbWljIHNlbGVjdG9yLCBsaWtlIGEgdHlw
ZSBzZWxlY3RvciwgYW4gYXR0ciBzZWxlY3RvciwgYQotICAgICAgLy8gY2xhc3Mgc2VsZWN0b3Is
IGV0Yy4KLSAgICAgIC8vCi0gICAgICAvLyBjb21wb3VuZCBzZWxlY3RvcjoKLSAgICAgIC8vIE9u
ZSBvciBtb3JlIHNpbXBsZSBzZWxlY3RvcnMgd2l0aG91dCBhIGNvbWJpbmF0b3IuIGRpdi5leGFt
cGxlIGlzCi0gICAgICAvLyBjb21wb3VuZCwgZGl2ID4gLmV4YW1wbGUgaXMgbm90LgotICAgICAg
Ly8KLSAgICAgIC8vIGNvbXBsZXggc2VsZWN0b3I6Ci0gICAgICAvLyBPbmUgb3IgbW9yZSBjb21w
b3VuZCBzZWxlY3RvcnMgY2hhaW5lZCB3aXRoIGNvbWJpbmF0b3JzLgotICAgICAgLy8KLSAgICAg
IC8vIGNvbWJpbmF0b3I6Ci0gICAgICAvLyBUaGUgcGFydHMgb2Ygc2VsZWN0b3JzIHRoYXQgZXhw
cmVzcyByZWxhdGlvbnNoaXBzLiBUaGVyZSBhcmUgZm91cgotICAgICAgLy8gY3VycmVudGx5IC0g
dGhlIHNwYWNlIChkZXNjZW5kYW50IGNvbWJpbmF0b3IpLCB0aGUgZ3JlYXRlci10aGFuCi0gICAg
ICAvLyBicmFja2V0IChjaGlsZCBjb21iaW5hdG9yKSwgdGhlIHBsdXMgc2lnbiAobmV4dCBzaWJs
aW5nIGNvbWJpbmF0b3IpLAotICAgICAgLy8gYW5kIHRoZSB0aWxkYSAoZm9sbG93aW5nIHNpYmxp
bmcgY29tYmluYXRvcikuCi0gICAgICAvLwotICAgICAgLy8gc2VxdWVuY2Ugb2Ygc2VsZWN0b3Jz
OgotICAgICAgLy8gT25lIG9yIG1vcmUgb2YgdGhlIG5hbWVkIHR5cGUgb2Ygc2VsZWN0b3IgY2hh
aW5lZCB3aXRoIGNvbW1hcy4KLQotICAgICAgc3RhdGUudG9rZW5pemUgPSBzdGF0ZS50b2tlbml6
ZSB8fCB0b2tlbkJhc2U7Ci0gICAgICBpZiAoc3RhdGUudG9rZW5pemUgPT0gdG9rZW5CYXNlICYm
IHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKLSAgICAgIHZhciBzdHlsZSA9IHN0YXRl
LnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwotICAgICAgaWYgKHN0eWxlICYmIHR5cGVvZiBzdHls
ZSAhPSAic3RyaW5nIikgc3R5bGUgPSByZXQoc3R5bGVbMF0sIHN0eWxlWzFdKTsKLQotICAgICAg
Ly8gQ2hhbmdpbmcgc3R5bGUgcmV0dXJuZWQgYmFzZWQgb24gY29udGV4dAotICAgICAgdmFyIGNv
bnRleHQgPSBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV07Ci0gICAgICBpZiAoc3R5
bGUgPT0gInZhcmlhYmxlIikgewotICAgICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUtZGVmaW5p
dGlvbiIpIHN0YXRlLnN0YWNrLnB1c2goInByb3BlcnR5VmFsdWUiKTsKLSAgICAgICAgcmV0dXJu
IHN0YXRlLmxhc3RUb2tlbiA9ICJ2YXJpYWJsZS0yIjsKLSAgICAgIH0gZWxzZSBpZiAoc3R5bGUg
PT0gInByb3BlcnR5IikgewotICAgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9M
b3dlckNhc2UoKTsKLSAgICAgICAgaWYgKGNvbnRleHQgPT0gInByb3BlcnR5VmFsdWUiKSB7Ci0g
ICAgICAgICAgaWYgKHZhbHVlS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAgICAg
ICAgICAgIHN0eWxlID0gInN0cmluZy0yIjsKLSAgICAgICAgICB9IGVsc2UgaWYgKGNvbG9yS2V5
d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAgICAgICAgICAgIHN0eWxlID0gImtleXdv
cmQiOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZSA9ICJ2YXJpYWJsZS0y
IjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAicnVsZSIpIHsK
LSAgICAgICAgICBpZiAoIXByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsK
LSAgICAgICAgICAgIHN0eWxlICs9ICIgZXJyb3IiOwotICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmIChjb250ZXh0ID09ICJibG9jayIpIHsKLSAgICAgICAgICAvLyBpZiBhIHZhbHVlIGlz
IHByZXNlbnQgaW4gYm90aCBwcm9wZXJ0eSwgdmFsdWUsIG9yIGNvbG9yLCB0aGUgb3JkZXIKLSAg
ICAgICAgICAvLyBvZiBwcmVmZXJlbmNlIGlzIHByb3BlcnR5IC0+IGNvbG9yIC0+IHZhbHVlCi0g
ICAgICAgICAgaWYgKHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAg
ICAgICAgICAgIHN0eWxlID0gInByb3BlcnR5IjsKLSAgICAgICAgICB9IGVsc2UgaWYgKGNvbG9y
S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAgICAgICAgICAgIHN0eWxlID0gImtl
eXdvcmQiOwotICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0
eSh3b3JkKSkgewotICAgICAgICAgICAgc3R5bGUgPSAic3RyaW5nLTIiOwotICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZSA9ICJ0YWciOwotICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmICghY29udGV4dCB8fCBjb250ZXh0ID09ICJAbWVkaWF7IikgewotICAgICAgICAg
IHN0eWxlID0gInRhZyI7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhIikg
ewotICAgICAgICAgIGlmIChhdE1lZGlhVHlwZXNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKLSAgICAg
ICAgICAgIHN0eWxlID0gImF0dHJpYnV0ZSI7IC8vIEtub3duIGF0dHJpYnV0ZQotICAgICAgICAg
IH0gZWxzZSBpZiAoL14ob25seXxub3QpJC8udGVzdCh3b3JkKSkgewotICAgICAgICAgICAgc3R5
bGUgPSAia2V5d29yZCI7Ci0gICAgICAgICAgfSBlbHNlIGlmICh3b3JkID09ICJhbmQiKSB7Ci0g
ICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7IC8vICJhbmQiIGlzIG9ubHkgYWxsb3dlZCBpbiBA
bWVkaWFUeXBlCi0gICAgICAgICAgfSBlbHNlIGlmIChhdE1lZGlhRmVhdHVyZXMuaGFzT3duUHJv
cGVydHkod29yZCkpIHsKLSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gS25vd24gcHJv
cGVydHksIHNob3VsZCBiZSBpbiBAbWVkaWFUeXBlKAotICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBVbmtub3duLCBleHBlY3Rpbmcga2V5d29yZCBvciBhdHRyaWJ1dGUsIGFzc3Vt
aW5nIGF0dHJpYnV0ZQotICAgICAgICAgICAgc3R5bGUgPSAiYXR0cmlidXRlIGVycm9yIjsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhVHlwZSIpIHsK
LSAgICAgICAgICBpZiAoYXRNZWRpYVR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKSB7Ci0gICAg
ICAgICAgICBzdHlsZSA9ICJhdHRyaWJ1dGUiOwotICAgICAgICAgIH0gZWxzZSBpZiAod29yZCA9
PSAiYW5kIikgewotICAgICAgICAgICAgc3R5bGUgPSAib3BlcmF0b3IiOwotICAgICAgICAgIH0g
ZWxzZSBpZiAoL14ob25seXxub3QpJC8udGVzdCh3b3JkKSkgewotICAgICAgICAgICAgc3R5bGUg
PSAiZXJyb3IiOyAvLyBPbmx5IGFsbG93ZWQgaW4gQG1lZGlhCi0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIFVua25vd24gYXR0cmlidXRlIG9yIHByb3BlcnR5LCBidXQgZXhwZWN0
aW5nIHByb3BlcnR5IChwcmVjZWRlZAotICAgICAgICAgICAgLy8gYnkgImFuZCIpLiBTaG91bGQg
YmUgaW4gcGFyZW50aGVzZXMKLSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhVHlwZSgiKSB7Ci0gICAg
ICAgICAgaWYgKHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAgICAg
ICAgICAgIC8vIGRvIG5vdGhpbmcsIHJlbWFpbnMgInByb3BlcnR5IgotICAgICAgICAgIH0gZWxz
ZSBpZiAoYXRNZWRpYVR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKSB7Ci0gICAgICAgICAgICBz
dHlsZSA9ICJlcnJvciI7IC8vIEtub3duIHByb3BlcnR5LCBzaG91bGQgYmUgaW4gcGFyZW50aGVz
ZXMKLSAgICAgICAgICB9IGVsc2UgaWYgKHdvcmQgPT0gImFuZCIpIHsKLSAgICAgICAgICAgIHN0
eWxlID0gIm9wZXJhdG9yIjsKLSAgICAgICAgICB9IGVsc2UgaWYgKC9eKG9ubHl8bm90KSQvLnRl
c3Qod29yZCkpIHsKLSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gT25seSBhbGxvd2Vk
IGluIEBtZWRpYQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZSArPSAiIGVy
cm9yIjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQGltcG9y
dCIpIHsKLSAgICAgICAgICBzdHlsZSA9ICJ0YWciOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIHN0eWxlID0gImVycm9yIjsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChzdHlsZSA9
PSAiYXRvbSIpIHsKLSAgICAgICAgaWYoIWNvbnRleHQgfHwgY29udGV4dCA9PSAiQG1lZGlheyIg
fHwgY29udGV4dCA9PSAiYmxvY2siKSB7Ci0gICAgICAgICAgc3R5bGUgPSAiYnVpbHRpbiI7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAicHJvcGVydHlWYWx1ZSIpIHsKLSAgICAgICAg
ICBpZiAoIS9eIyhbMC05YS1mQS1mXXszfXxbMC05YS1mQS1mXXs2fSkkLy50ZXN0KHN0cmVhbS5j
dXJyZW50KCkpKSB7Ci0gICAgICAgICAgICBzdHlsZSArPSAiIGVycm9yIjsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOwotICAgICAgICB9
Ci0gICAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYSIgJiYgdHlwZSA9PSAieyIpIHsK
LSAgICAgICAgc3R5bGUgPSAiZXJyb3IiOwotICAgICAgfQotCi0gICAgICAvLyBQdXNoL3BvcCBj
b250ZXh0IHN0YWNrCi0gICAgICBpZiAodHlwZSA9PSAieyIpIHsKLSAgICAgICAgaWYgKGNvbnRl
eHQgPT0gIkBtZWRpYSIgfHwgY29udGV4dCA9PSAiQG1lZGlhVHlwZSIpIHsKLSAgICAgICAgICBz
dGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPSAiQG1lZGlheyI7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgdmFyIG5ld0NvbnRleHQgPSBhbGxvd05lc3RlZCA/
ICJibG9jayIgOiAicnVsZSI7Ci0gICAgICAgICAgc3RhdGUuc3RhY2sucHVzaChuZXdDb250ZXh0
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZSA9PSAifSIpIHsKLSAg
ICAgICAgaWYgKGNvbnRleHQgPT0gImludGVycG9sYXRpb24iKSBzdHlsZSA9ICJvcGVyYXRvciI7
Ci0gICAgICAgIC8vIFBvcCBvZmYgZW5kIG9mIGFycmF5IHVudGlsIHsgaXMgcmVhY2hlZAotICAg
ICAgICB3aGlsZShzdGF0ZS5zdGFjay5sZW5ndGgpewotICAgICAgICAgIHZhciByZW1vdmVkID0g
c3RhdGUuc3RhY2sucG9wKCk7Ci0gICAgICAgICAgaWYocmVtb3ZlZC5pbmRleE9mKCJ7IikgPiAt
MSB8fCByZW1vdmVkID09ICJibG9jayIgfHwgcmVtb3ZlZCA9PSAicnVsZSIpewotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlm
ICh0eXBlID09ICJpbnRlcnBvbGF0aW9uIikgc3RhdGUuc3RhY2sucHVzaCgiaW50ZXJwb2xhdGlv
biIpOwotICAgICAgZWxzZSBpZiAodHlwZSA9PSAiQG1lZGlhIikgc3RhdGUuc3RhY2sucHVzaCgi
QG1lZGlhIik7Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICJAaW1wb3J0Iikgc3RhdGUuc3RhY2su
cHVzaCgiQGltcG9ydCIpOwotICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhIiAmJiAv
XGIoa2V5d29yZHxhdHRyaWJ1dGUpXGIvLnRlc3Qoc3R5bGUpKQotICAgICAgICBzdGF0ZS5zdGFj
a1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPSAiQG1lZGlhVHlwZSI7Ci0gICAgICBlbHNlIGlmIChj
b250ZXh0ID09ICJAbWVkaWFUeXBlIiAmJiBzdHJlYW0uY3VycmVudCgpID09ICIsIikKLSAgICAg
ICAgc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID0gIkBtZWRpYSI7Ci0gICAgICBl
bHNlIGlmICh0eXBlID09ICIoIikgewotICAgICAgICBpZiAoY29udGV4dCA9PSAiQG1lZGlhIiB8
fCBjb250ZXh0ID09ICJAbWVkaWFUeXBlIikgewotICAgICAgICAgIC8vIE1ha2Ugc3VyZSBAbWVk
aWFUeXBlIGlzIHVzZWQgdG8gYXZvaWQgZXJyb3Igb24gewotICAgICAgICAgIHN0YXRlLnN0YWNr
W3N0YXRlLnN0YWNrLmxlbmd0aC0xXSA9ICJAbWVkaWFUeXBlIjsKLSAgICAgICAgICBzdGF0ZS5z
dGFjay5wdXNoKCJAbWVkaWFUeXBlKCIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ugc3RhdGUu
c3RhY2sucHVzaCgiKCIpOworICAgICAgaWYgKCFzdGF0ZS50b2tlbml6ZSAmJiBzdHJlYW0uZWF0
U3BhY2UoKSkgcmV0dXJuIG51bGw7CisgICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUg
fHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTsKKyAgICAgIGlmIChzdHlsZSAmJiB0eXBlb2Yg
c3R5bGUgPT0gIm9iamVjdCIpIHsKKyAgICAgICAgdHlwZSA9IHN0eWxlWzFdOworICAgICAgICBz
dHlsZSA9IHN0eWxlWzBdOwogICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZSA9PSAiKSIpIHsK
LSAgICAgICAgLy8gUG9wIG9mZiBlbmQgb2YgYXJyYXkgdW50aWwgKCBpcyByZWFjaGVkCi0gICAg
ICAgIHdoaWxlKHN0YXRlLnN0YWNrLmxlbmd0aCl7Ci0gICAgICAgICAgdmFyIHJlbW92ZWQgPSBz
dGF0ZS5zdGFjay5wb3AoKTsKLSAgICAgICAgICBpZihyZW1vdmVkLmluZGV4T2YoIigiKSA+IC0x
KXsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgZWxzZSBpZiAodHlwZSA9PSAiOiIgJiYgc3RhdGUubGFzdFRva2VuID09ICJwcm9wZXJ0
eSIpIHN0YXRlLnN0YWNrLnB1c2goInByb3BlcnR5VmFsdWUiKTsKLSAgICAgIGVsc2UgaWYgKGNv
bnRleHQgPT0gInByb3BlcnR5VmFsdWUiICYmIHR5cGUgPT0gIjsiKSBzdGF0ZS5zdGFjay5wb3Ao
KTsKLSAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gIkBpbXBvcnQiICYmIHR5cGUgPT0gIjsiKSBz
dGF0ZS5zdGFjay5wb3AoKTsKLQotICAgICAgcmV0dXJuIHN0YXRlLmxhc3RUb2tlbiA9IHN0eWxl
OworICAgICAgb3ZlcnJpZGUgPSBzdHlsZTsKKyAgICAgIHN0YXRlLnN0YXRlID0gc3RhdGVzW3N0
YXRlLnN0YXRlXSh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKKyAgICAgIHJldHVybiBvdmVycmlkZTsK
ICAgICB9LAogCiAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7Ci0gICAg
ICB2YXIgbiA9IHN0YXRlLnN0YWNrLmxlbmd0aDsKLSAgICAgIGlmICgvXlx9Ly50ZXN0KHRleHRB
ZnRlcikpCi0gICAgICAgIG4gLT0gc3RhdGUuc3RhY2tbbi0xXSA9PSAicHJvcGVydHlWYWx1ZSIg
PyAyIDogMTsKLSAgICAgIHJldHVybiBzdGF0ZS5iYXNlSW5kZW50ICsgbiAqIGluZGVudFVuaXQ7
CisgICAgICB2YXIgY3ggPSBzdGF0ZS5jb250ZXh0LCBjaCA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0
ZXIuY2hhckF0KDApOworICAgICAgdmFyIGluZGVudCA9IGN4LmluZGVudDsKKyAgICAgIGlmIChj
eC50eXBlID09ICJwcm9wIiAmJiBjaCA9PSAifSIpIGN4ID0gY3gucHJldjsKKyAgICAgIGlmIChj
eC5wcmV2ICYmCisgICAgICAgICAgKGNoID09ICJ9IiAmJiAoY3gudHlwZSA9PSAiYmxvY2siIHx8
IGN4LnR5cGUgPT0gInRvcCIgfHwgY3gudHlwZSA9PSAiaW50ZXJwb2xhdGlvbiIgfHwgY3gudHlw
ZSA9PSAiZm9udF9mYWNlIikgfHwKKyAgICAgICAgICAgY2ggPT0gIikiICYmIChjeC50eXBlID09
ICJwYXJlbnMiIHx8IGN4LnR5cGUgPT0gInBhcmFtcyIgfHwgY3gudHlwZSA9PSAibWVkaWFfcGFy
ZW5zIikgfHwKKyAgICAgICAgICAgY2ggPT0gInsiICYmIChjeC50eXBlID09ICJhdCIgfHwgY3gu
dHlwZSA9PSAibWVkaWEiKSkpIHsKKyAgICAgICAgaW5kZW50ID0gY3guaW5kZW50IC0gaW5kZW50
VW5pdDsKKyAgICAgICAgY3ggPSBjeC5wcmV2OworICAgICAgfQorICAgICAgcmV0dXJuIGluZGVu
dDsKICAgICB9LAogCiAgICAgZWxlY3RyaWNDaGFyczogIn0iLApAQCAtMzEyLDcgKzM0Nyw2IEBA
IENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgfTsKIH0pOwogCi0oZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIGtleVNldChhcnJh
eSkgewogICAgIHZhciBrZXlzID0ge307CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5s
ZW5ndGg7ICsraSkgewpAQCAtMzIxLDEyICszNTUsMTIgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2Rl
KCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHJldHVybiBrZXlz
OwogICB9CiAKLSAgdmFyIGF0TWVkaWFUeXBlcyA9IGtleVNldChbCisgIHZhciBtZWRpYVR5cGVz
XyA9IFsKICAgICAiYWxsIiwgImF1cmFsIiwgImJyYWlsbGUiLCAiaGFuZGhlbGQiLCAicHJpbnQi
LCAicHJvamVjdGlvbiIsICJzY3JlZW4iLAogICAgICJ0dHkiLCAidHYiLCAiZW1ib3NzZWQiCi0g
IF0pOworICBdLCBtZWRpYVR5cGVzID0ga2V5U2V0KG1lZGlhVHlwZXNfKTsKIAotICB2YXIgYXRN
ZWRpYUZlYXR1cmVzID0ga2V5U2V0KFsKKyAgdmFyIG1lZGlhRmVhdHVyZXNfID0gWwogICAgICJ3
aWR0aCIsICJtaW4td2lkdGgiLCAibWF4LXdpZHRoIiwgImhlaWdodCIsICJtaW4taGVpZ2h0Iiwg
Im1heC1oZWlnaHQiLAogICAgICJkZXZpY2Utd2lkdGgiLCAibWluLWRldmljZS13aWR0aCIsICJt
YXgtZGV2aWNlLXdpZHRoIiwgImRldmljZS1oZWlnaHQiLAogICAgICJtaW4tZGV2aWNlLWhlaWdo
dCIsICJtYXgtZGV2aWNlLWhlaWdodCIsICJhc3BlY3QtcmF0aW8iLApAQCAtMzM1LDE1ICszNjks
MTUgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgICJtYXgtY29sb3IiLCAiY29sb3ItaW5kZXgiLCAibWluLWNvbG9yLWlu
ZGV4IiwgIm1heC1jb2xvci1pbmRleCIsCiAgICAgIm1vbm9jaHJvbWUiLCAibWluLW1vbm9jaHJv
bWUiLCAibWF4LW1vbm9jaHJvbWUiLCAicmVzb2x1dGlvbiIsCiAgICAgIm1pbi1yZXNvbHV0aW9u
IiwgIm1heC1yZXNvbHV0aW9uIiwgInNjYW4iLCAiZ3JpZCIKLSAgXSk7CisgIF0sIG1lZGlhRmVh
dHVyZXMgPSBrZXlTZXQobWVkaWFGZWF0dXJlc18pOwogCi0gIHZhciBwcm9wZXJ0eUtleXdvcmRz
ID0ga2V5U2V0KFsKKyAgdmFyIHByb3BlcnR5S2V5d29yZHNfID0gWwogICAgICJhbGlnbi1jb250
ZW50IiwgImFsaWduLWl0ZW1zIiwgImFsaWduLXNlbGYiLCAiYWxpZ25tZW50LWFkanVzdCIsCiAg
ICAgImFsaWdubWVudC1iYXNlbGluZSIsICJhbmNob3ItcG9pbnQiLCAiYW5pbWF0aW9uIiwgImFu
aW1hdGlvbi1kZWxheSIsCi0gICAgImFuaW1hdGlvbi1kaXJlY3Rpb24iLCAiYW5pbWF0aW9uLWR1
cmF0aW9uIiwgImFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiLAotICAgICJhbmltYXRpb24tbmFt
ZSIsICJhbmltYXRpb24tcGxheS1zdGF0ZSIsICJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwK
LSAgICAiYXBwZWFyYW5jZSIsICJhemltdXRoIiwgImJhY2tmYWNlLXZpc2liaWxpdHkiLCAiYmFj
a2dyb3VuZCIsCi0gICAgImJhY2tncm91bmQtYXR0YWNobWVudCIsICJiYWNrZ3JvdW5kLWNsaXAi
LCAiYmFja2dyb3VuZC1jb2xvciIsCisgICAgImFuaW1hdGlvbi1kaXJlY3Rpb24iLCAiYW5pbWF0
aW9uLWR1cmF0aW9uIiwgImFuaW1hdGlvbi1maWxsLW1vZGUiLAorICAgICJhbmltYXRpb24taXRl
cmF0aW9uLWNvdW50IiwgImFuaW1hdGlvbi1uYW1lIiwgImFuaW1hdGlvbi1wbGF5LXN0YXRlIiwK
KyAgICAiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsICJhcHBlYXJhbmNlIiwgImF6aW11dGgi
LCAiYmFja2ZhY2UtdmlzaWJpbGl0eSIsCisgICAgImJhY2tncm91bmQiLCAiYmFja2dyb3VuZC1h
dHRhY2htZW50IiwgImJhY2tncm91bmQtY2xpcCIsICJiYWNrZ3JvdW5kLWNvbG9yIiwKICAgICAi
YmFja2dyb3VuZC1pbWFnZSIsICJiYWNrZ3JvdW5kLW9yaWdpbiIsICJiYWNrZ3JvdW5kLXBvc2l0
aW9uIiwKICAgICAiYmFja2dyb3VuZC1yZXBlYXQiLCAiYmFja2dyb3VuZC1zaXplIiwgImJhc2Vs
aW5lLXNoaWZ0IiwgImJpbmRpbmciLAogICAgICJibGVlZCIsICJib29rbWFyay1sYWJlbCIsICJi
b29rbWFyay1sZXZlbCIsICJib29rbWFyay1zdGF0ZSIsCkBAIC0zNzQsMTAgKzQwOCwxMSBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgICAgImZvbnQtc3RyZXRjaCIsICJmb250LXN0eWxlIiwgImZvbnQtc3ludGhlc2lzIiwg
ImZvbnQtdmFyaWFudCIsCiAgICAgImZvbnQtdmFyaWFudC1hbHRlcm5hdGVzIiwgImZvbnQtdmFy
aWFudC1jYXBzIiwgImZvbnQtdmFyaWFudC1lYXN0LWFzaWFuIiwKICAgICAiZm9udC12YXJpYW50
LWxpZ2F0dXJlcyIsICJmb250LXZhcmlhbnQtbnVtZXJpYyIsICJmb250LXZhcmlhbnQtcG9zaXRp
b24iLAotICAgICJmb250LXdlaWdodCIsICJncmlkLWNlbGwiLCAiZ3JpZC1jb2x1bW4iLCAiZ3Jp
ZC1jb2x1bW4tYWxpZ24iLAotICAgICJncmlkLWNvbHVtbi1zaXppbmciLCAiZ3JpZC1jb2x1bW4t
c3BhbiIsICJncmlkLWNvbHVtbnMiLCAiZ3JpZC1mbG93IiwKLSAgICAiZ3JpZC1yb3ciLCAiZ3Jp
ZC1yb3ctYWxpZ24iLCAiZ3JpZC1yb3ctc2l6aW5nIiwgImdyaWQtcm93LXNwYW4iLAotICAgICJn
cmlkLXJvd3MiLCAiZ3JpZC10ZW1wbGF0ZS1hcmVhcyIsICJoYW5naW5nLXB1bmN0dWF0aW9uIiwg
ImhlaWdodCIsICJoeXBoZW5zIiwKKyAgICAiZm9udC13ZWlnaHQiLCAiZ3JpZCIsICJncmlkLWFy
ZWEiLCAiZ3JpZC1hdXRvLWNvbHVtbnMiLCAiZ3JpZC1hdXRvLWZsb3ciLAorICAgICJncmlkLWF1
dG8tcG9zaXRpb24iLCAiZ3JpZC1hdXRvLXJvd3MiLCAiZ3JpZC1jb2x1bW4iLCAiZ3JpZC1jb2x1
bW4tZW5kIiwKKyAgICAiZ3JpZC1jb2x1bW4tc3RhcnQiLCAiZ3JpZC1yb3ciLCAiZ3JpZC1yb3ct
ZW5kIiwgImdyaWQtcm93LXN0YXJ0IiwKKyAgICAiZ3JpZC10ZW1wbGF0ZSIsICJncmlkLXRlbXBs
YXRlLWFyZWFzIiwgImdyaWQtdGVtcGxhdGUtY29sdW1ucyIsCisgICAgImdyaWQtdGVtcGxhdGUt
cm93cyIsICJoYW5naW5nLXB1bmN0dWF0aW9uIiwgImhlaWdodCIsICJoeXBoZW5zIiwKICAgICAi
aWNvbiIsICJpbWFnZS1vcmllbnRhdGlvbiIsICJpbWFnZS1yZW5kZXJpbmciLCAiaW1hZ2UtcmVz
b2x1dGlvbiIsCiAgICAgImlubGluZS1ib3gtYWxpZ24iLCAianVzdGlmeS1jb250ZW50IiwgImxl
ZnQiLCAibGV0dGVyLXNwYWNpbmciLAogICAgICJsaW5lLWJyZWFrIiwgImxpbmUtaGVpZ2h0Iiwg
ImxpbmUtc3RhY2tpbmciLCAibGluZS1zdGFja2luZy1ydWJ5IiwKQEAgLTQxNCw3ICs0NDksNyBA
QCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29u
ZmlnKSB7CiAgICAgInZlcnRpY2FsLWFsaWduIiwgInZpc2liaWxpdHkiLCAidm9pY2UtYmFsYW5j
ZSIsICJ2b2ljZS1kdXJhdGlvbiIsCiAgICAgInZvaWNlLWZhbWlseSIsICJ2b2ljZS1waXRjaCIs
ICJ2b2ljZS1yYW5nZSIsICJ2b2ljZS1yYXRlIiwgInZvaWNlLXN0cmVzcyIsCiAgICAgInZvaWNl
LXZvbHVtZSIsICJ2b2x1bWUiLCAid2hpdGUtc3BhY2UiLCAid2lkb3dzIiwgIndpZHRoIiwgIndv
cmQtYnJlYWsiLAotICAgICJ3b3JkLXNwYWNpbmciLCAid29yZC13cmFwIiwgInotaW5kZXgiLCAi
em9vbSIsCisgICAgIndvcmQtc3BhY2luZyIsICJ3b3JkLXdyYXAiLCAiei1pbmRleCIsCiAgICAg
Ly8gU1ZHLXNwZWNpZmljCiAgICAgImNsaXAtcGF0aCIsICJjbGlwLXJ1bGUiLCAibWFzayIsICJl
bmFibGUtYmFja2dyb3VuZCIsICJmaWx0ZXIiLCAiZmxvb2QtY29sb3IiLAogICAgICJmbG9vZC1v
cGFjaXR5IiwgImxpZ2h0aW5nLWNvbG9yIiwgInN0b3AtY29sb3IiLCAic3RvcC1vcGFjaXR5Iiwg
InBvaW50ZXItZXZlbnRzIiwKQEAgLTQyNSw5ICs0NjAsMTcgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJzdHJva2Ut
bWl0ZXJsaW1pdCIsICJzdHJva2Utb3BhY2l0eSIsICJzdHJva2Utd2lkdGgiLCAidGV4dC1yZW5k
ZXJpbmciLAogICAgICJiYXNlbGluZS1zaGlmdCIsICJkb21pbmFudC1iYXNlbGluZSIsICJnbHlw
aC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwKICAgICAiZ2x5cGgtb3JpZW50YXRpb24tdmVydGlj
YWwiLCAia2VybmluZyIsICJ0ZXh0LWFuY2hvciIsICJ3cml0aW5nLW1vZGUiCi0gIF0pOworICBd
LCBwcm9wZXJ0eUtleXdvcmRzID0ga2V5U2V0KHByb3BlcnR5S2V5d29yZHNfKTsKIAotICB2YXIg
Y29sb3JLZXl3b3JkcyA9IGtleVNldChbCisgIHZhciBub25TdGFuZGFyZFByb3BlcnR5S2V5d29y
ZHMgPSBbCisgICAgInNjcm9sbGJhci1hcnJvdy1jb2xvciIsICJzY3JvbGxiYXItYmFzZS1jb2xv
ciIsICJzY3JvbGxiYXItZGFyay1zaGFkb3ctY29sb3IiLAorICAgICJzY3JvbGxiYXItZmFjZS1j
b2xvciIsICJzY3JvbGxiYXItaGlnaGxpZ2h0LWNvbG9yIiwgInNjcm9sbGJhci1zaGFkb3ctY29s
b3IiLAorICAgICJzY3JvbGxiYXItM2QtbGlnaHQtY29sb3IiLCAic2Nyb2xsYmFyLXRyYWNrLWNv
bG9yIiwgInNoYXBlLWluc2lkZSIsCisgICAgInNlYXJjaGZpZWxkLWNhbmNlbC1idXR0b24iLCAi
c2VhcmNoZmllbGQtZGVjb3JhdGlvbiIsICJzZWFyY2hmaWVsZC1yZXN1bHRzLWJ1dHRvbiIsCisg
ICAgInNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3JhdGlvbiIsICJ6b29tIgorICBdLCBub25TdGFu
ZGFyZFByb3BlcnR5S2V5d29yZHMgPSBrZXlTZXQobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRz
KTsKKworICB2YXIgY29sb3JLZXl3b3Jkc18gPSBbCiAgICAgImFsaWNlYmx1ZSIsICJhbnRpcXVl
d2hpdGUiLCAiYXF1YSIsICJhcXVhbWFyaW5lIiwgImF6dXJlIiwgImJlaWdlIiwKICAgICAiYmlz
cXVlIiwgImJsYWNrIiwgImJsYW5jaGVkYWxtb25kIiwgImJsdWUiLCAiYmx1ZXZpb2xldCIsICJi
cm93biIsCiAgICAgImJ1cmx5d29vZCIsICJjYWRldGJsdWUiLCAiY2hhcnRyZXVzZSIsICJjaG9j
b2xhdGUiLCAiY29yYWwiLCAiY29ybmZsb3dlcmJsdWUiLApAQCAtNDU0LDkgKzQ5Nyw5IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKICAgICAic2xhdGVibHVlIiwgInNsYXRlZ3JheSIsICJzbm93IiwgInNwcmluZ2dyZWVuIiwg
InN0ZWVsYmx1ZSIsICJ0YW4iLAogICAgICJ0ZWFsIiwgInRoaXN0bGUiLCAidG9tYXRvIiwgInR1
cnF1b2lzZSIsICJ2aW9sZXQiLCAid2hlYXQiLCAid2hpdGUiLAogICAgICJ3aGl0ZXNtb2tlIiwg
InllbGxvdyIsICJ5ZWxsb3dncmVlbiIKLSAgXSk7CisgIF0sIGNvbG9yS2V5d29yZHMgPSBrZXlT
ZXQoY29sb3JLZXl3b3Jkc18pOwogCi0gIHZhciB2YWx1ZUtleXdvcmRzID0ga2V5U2V0KFsKKyAg
dmFyIHZhbHVlS2V5d29yZHNfID0gWwogICAgICJhYm92ZSIsICJhYnNvbHV0ZSIsICJhY3RpdmVi
b3JkZXIiLCAiYWN0aXZlY2FwdGlvbiIsICJhZmFyIiwKICAgICAiYWZ0ZXItd2hpdGUtc3BhY2Ui
LCAiYWhlYWQiLCAiYWxpYXMiLCAiYWxsIiwgImFsbC1zY3JvbGwiLCAiYWx0ZXJuYXRlIiwKICAg
ICAiYWx3YXlzIiwgImFtaGFyaWMiLCAiYW1oYXJpYy1hYmVnZWRlIiwgImFudGlhbGlhc2VkIiwg
ImFwcHdvcmtzcGFjZSIsCkBAIC01MTUsNyArNTU4LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2Rl
KCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJwb2x5Z29uIiwg
InBvcnRyYWl0IiwgInByZSIsICJwcmUtbGluZSIsICJwcmUtd3JhcCIsICJwcmVzZXJ2ZS0zZCIs
ICJwcm9ncmVzcyIsICJwdXNoLWJ1dHRvbiIsCiAgICAgInJhZGlvIiwgInJlYWQtb25seSIsICJy
ZWFkLXdyaXRlIiwgInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHkiLCAicmVjdGFuZ2xlIiwgInJl
Z2lvbiIsCiAgICAgInJlbGF0aXZlIiwgInJlcGVhdCIsICJyZXBlYXQteCIsICJyZXBlYXQteSIs
ICJyZXNldCIsICJyZXZlcnNlIiwgInJnYiIsICJyZ2JhIiwKLSAgICAicmlkZ2UiLCAicmlnaHQi
LCAicm91bmQiLCAicm93LXJlc2l6ZSIsICJydGwiLCAicnVubmluZyIsCisgICAgInJpZGdlIiwg
InJpZ2h0IiwgInJvdW5kIiwgInJvdy1yZXNpemUiLCAicnRsIiwgInJ1bi1pbiIsICJydW5uaW5n
IiwKICAgICAicy1yZXNpemUiLCAic2Fucy1zZXJpZiIsICJzY3JvbGwiLCAic2Nyb2xsYmFyIiwg
InNlLXJlc2l6ZSIsICJzZWFyY2hmaWVsZCIsCiAgICAgInNlYXJjaGZpZWxkLWNhbmNlbC1idXR0
b24iLCAic2VhcmNoZmllbGQtZGVjb3JhdGlvbiIsCiAgICAgInNlYXJjaGZpZWxkLXJlc3VsdHMt
YnV0dG9uIiwgInNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3JhdGlvbiIsCkBAIC01MzksNyArNTgy
LDE2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgICAidmlzaWJsZVN0cm9rZSIsICJ2aXN1YWwiLCAidy1yZXNpemUiLCAi
d2FpdCIsICJ3YXZlIiwgIndpZGVyIiwKICAgICAid2luZG93IiwgIndpbmRvd2ZyYW1lIiwgIndp
bmRvd3RleHQiLCAieC1sYXJnZSIsICJ4LXNtYWxsIiwgInhvciIsCiAgICAgInh4LWxhcmdlIiwg
Inh4LXNtYWxsIgotICBdKTsKKyAgXSwgdmFsdWVLZXl3b3JkcyA9IGtleVNldCh2YWx1ZUtleXdv
cmRzXyk7CisKKyAgdmFyIGZvbnRQcm9wZXJ0aWVzXyA9IFsKKyAgICAiZm9udC1mYW1pbHkiLCAi
c3JjIiwgInVuaWNvZGUtcmFuZ2UiLCAiZm9udC12YXJpYW50IiwgImZvbnQtZmVhdHVyZS1zZXR0
aW5ncyIsCisgICAgImZvbnQtc3RyZXRjaCIsICJmb250LXdlaWdodCIsICJmb250LXN0eWxlIgor
ICBdLCBmb250UHJvcGVydGllcyA9IGtleVNldChmb250UHJvcGVydGllc18pOworCisgIHZhciBh
bGxXb3JkcyA9IG1lZGlhVHlwZXNfLmNvbmNhdChtZWRpYUZlYXR1cmVzXykuY29uY2F0KHByb3Bl
cnR5S2V5d29yZHNfKQorICAgIC5jb25jYXQobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzKS5j
b25jYXQoY29sb3JLZXl3b3Jkc18pLmNvbmNhdCh2YWx1ZUtleXdvcmRzXyk7CisgIENvZGVNaXJy
b3IucmVnaXN0ZXJIZWxwZXIoImhpbnRXb3JkcyIsICJjc3MiLCBhbGxXb3Jkcyk7CiAKICAgZnVu
Y3Rpb24gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICAgdmFyIG1heWJlRW5kID0g
ZmFsc2UsIGNoOwpAQCAtNTUzLDY3ICs2MDUsOTAgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJj
c3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHJldHVybiBbImNvbW1l
bnQiLCAiY29tbWVudCJdOwogICB9CiAKKyAgZnVuY3Rpb24gdG9rZW5TR01MQ29tbWVudChzdHJl
YW0sIHN0YXRlKSB7CisgICAgaWYgKHN0cmVhbS5za2lwVG8oIi0tPiIpKSB7CisgICAgICBzdHJl
YW0ubWF0Y2goIi0tPiIpOworICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOworICAgIH0gZWxz
ZSB7CisgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CisgICAgfQorICAgIHJldHVybiBbImNvbW1l
bnQiLCAiY29tbWVudCJdOworICB9CisKICAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2Nz
cyIsIHsKLSAgICBhdE1lZGlhVHlwZXM6IGF0TWVkaWFUeXBlcywKLSAgICBhdE1lZGlhRmVhdHVy
ZXM6IGF0TWVkaWFGZWF0dXJlcywKKyAgICBtZWRpYVR5cGVzOiBtZWRpYVR5cGVzLAorICAgIG1l
ZGlhRmVhdHVyZXM6IG1lZGlhRmVhdHVyZXMsCiAgICAgcHJvcGVydHlLZXl3b3JkczogcHJvcGVy
dHlLZXl3b3JkcywKKyAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHM6IG5vblN0YW5kYXJk
UHJvcGVydHlLZXl3b3JkcywKICAgICBjb2xvcktleXdvcmRzOiBjb2xvcktleXdvcmRzLAogICAg
IHZhbHVlS2V5d29yZHM6IHZhbHVlS2V5d29yZHMsCi0gICAgaG9va3M6IHsKKyAgICBmb250UHJv
cGVydGllczogZm9udFByb3BlcnRpZXMsCisgICAgdG9rZW5Ib29rczogewogICAgICAgIjwiOiBm
dW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0gICAgICAgIGZ1bmN0aW9uIHRva2VuU0dNTENvbW1l
bnQoc3RyZWFtLCBzdGF0ZSkgewotICAgICAgICAgIHZhciBkYXNoZXMgPSAwLCBjaDsKLSAgICAg
ICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewotICAgICAgICAgICAg
aWYgKGRhc2hlcyA+PSAyICYmIGNoID09ICI+IikgewotICAgICAgICAgICAgICBzdGF0ZS50b2tl
bml6ZSA9IG51bGw7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZGFzaGVzID0gKGNoID09ICItIikgPyBkYXNoZXMgKyAxIDogMDsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgcmV0dXJuIFsiY29tbWVudCIsICJjb21tZW50Il07Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHN0cmVhbS5lYXQoIiEiKSkgewotICAgICAgICAgIHN0YXRlLnRva2VuaXplID0g
dG9rZW5TR01MQ29tbWVudDsKLSAgICAgICAgICByZXR1cm4gdG9rZW5TR01MQ29tbWVudChzdHJl
YW0sIHN0YXRlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIXN0cmVhbS5tYXRjaCgiIS0tIikp
IHJldHVybiBmYWxzZTsKKyAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblNHTUxDb21tZW50
OworICAgICAgICByZXR1cm4gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAg
IH0sCiAgICAgICAiLyI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKLSAgICAgICAgaWYgKHN0
cmVhbS5lYXQoIioiKSkgewotICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVu
dDsKLSAgICAgICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghc3RyZWFtLmVhdCgiKiIp
KSByZXR1cm4gZmFsc2U7CisgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDsK
KyAgICAgICAgcmV0dXJuIHRva2VuQ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICB9CiAg
ICAgfSwKICAgICBuYW1lOiAiY3NzIgogICB9KTsKIAogICBDb2RlTWlycm9yLmRlZmluZU1JTUUo
InRleHQveC1zY3NzIiwgewotICAgIGF0TWVkaWFUeXBlczogYXRNZWRpYVR5cGVzLAotICAgIGF0
TWVkaWFGZWF0dXJlczogYXRNZWRpYUZlYXR1cmVzLAorICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlw
ZXMsCisgICAgbWVkaWFGZWF0dXJlczogbWVkaWFGZWF0dXJlcywKICAgICBwcm9wZXJ0eUtleXdv
cmRzOiBwcm9wZXJ0eUtleXdvcmRzLAorICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczog
bm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLAogICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5
d29yZHMsCiAgICAgdmFsdWVLZXl3b3JkczogdmFsdWVLZXl3b3JkcywKKyAgICBmb250UHJvcGVy
dGllczogZm9udFByb3BlcnRpZXMsCiAgICAgYWxsb3dOZXN0ZWQ6IHRydWUsCi0gICAgaG9va3M6
IHsKKyAgICB0b2tlbkhvb2tzOiB7CisgICAgICAiLyI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUp
IHsKKyAgICAgICAgaWYgKHN0cmVhbS5lYXQoIi8iKSkgeworICAgICAgICAgIHN0cmVhbS5za2lw
VG9FbmQoKTsKKyAgICAgICAgICByZXR1cm4gWyJjb21tZW50IiwgImNvbW1lbnQiXTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKKyAgICAgICAgICBzdGF0ZS50b2tlbml6
ZSA9IHRva2VuQ0NvbW1lbnQ7CisgICAgICAgICAgcmV0dXJuIHRva2VuQ0NvbW1lbnQoc3RyZWFt
LCBzdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIFsib3BlcmF0b3Ii
LCAib3BlcmF0b3IiXTsKKyAgICAgICAgfQorICAgICAgfSwKICAgICAgICI6IjogZnVuY3Rpb24o
c3RyZWFtKSB7Ci0gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1xzKnsvKSkgeworICAgICAgICBp
ZiAoc3RyZWFtLm1hdGNoKC9ccyp7LykpCiAgICAgICAgICAgcmV0dXJuIFtudWxsLCAieyJdOwot
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0sCiAgICAgICAiJCI6IGZ1
bmN0aW9uKHN0cmVhbSkgewogICAgICAgICBzdHJlYW0ubWF0Y2goL15bXHctXSsvKTsKLSAgICAg
ICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gIjoiKSB7Ci0gICAgICAgICAgcmV0dXJuIFsidmFyaWFi
bGUiLCAidmFyaWFibGUtZGVmaW5pdGlvbiJdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBb
InZhcmlhYmxlIiwgInZhcmlhYmxlIl07Ci0gICAgICB9LAotICAgICAgIiwiOiBmdW5jdGlvbihz
dHJlYW0sIHN0YXRlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5n
dGggLSAxXSA9PSAicHJvcGVydHlWYWx1ZSIgJiYgc3RyZWFtLm1hdGNoKC9eICpcJC8sIGZhbHNl
KSkgewotICAgICAgICAgIHJldHVybiBbIm9wZXJhdG9yIiwgIjsiXTsKLSAgICAgICAgfQorICAg
ICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXHMqOi8sIGZhbHNlKSkKKyAgICAgICAgICByZXR1cm4g
WyJ2YXJpYWJsZS0yIiwgInZhcmlhYmxlLWRlZmluaXRpb24iXTsKKyAgICAgICAgcmV0dXJuIFsi
dmFyaWFibGUtMiIsICJ2YXJpYWJsZSJdOwogICAgICAgfSwKKyAgICAgICIjIjogZnVuY3Rpb24o
c3RyZWFtKSB7CisgICAgICAgIGlmICghc3RyZWFtLmVhdCgieyIpKSByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBbbnVsbCwgImludGVycG9sYXRpb24iXTsKKyAgICAgIH0KKyAgICB9LAor
ICAgIG5hbWU6ICJjc3MiLAorICAgIGhlbHBlclR5cGU6ICJzY3NzIgorICB9KTsKKworICBDb2Rl
TWlycm9yLmRlZmluZU1JTUUoInRleHQveC1sZXNzIiwgeworICAgIG1lZGlhVHlwZXM6IG1lZGlh
VHlwZXMsCisgICAgbWVkaWFGZWF0dXJlczogbWVkaWFGZWF0dXJlcywKKyAgICBwcm9wZXJ0eUtl
eXdvcmRzOiBwcm9wZXJ0eUtleXdvcmRzLAorICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jk
czogbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLAorICAgIGNvbG9yS2V5d29yZHM6IGNvbG9y
S2V5d29yZHMsCisgICAgdmFsdWVLZXl3b3JkczogdmFsdWVLZXl3b3JkcywKKyAgICBmb250UHJv
cGVydGllczogZm9udFByb3BlcnRpZXMsCisgICAgYWxsb3dOZXN0ZWQ6IHRydWUsCisgICAgdG9r
ZW5Ib29rczogewogICAgICAgIi8iOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAg
IGlmIChzdHJlYW0uZWF0KCIvIikpIHsKICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CkBA
IC02MjUsMTUgKzcwMCwxOSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICAgICAgcmV0dXJuIFsib3BlcmF0b3IiLCAi
b3BlcmF0b3IiXTsKICAgICAgICAgfQogICAgICAgfSwKLSAgICAgICIjIjogZnVuY3Rpb24oc3Ry
ZWFtKSB7Ci0gICAgICAgIGlmIChzdHJlYW0uZWF0KCJ7IikpIHsKLSAgICAgICAgICByZXR1cm4g
WyJvcGVyYXRvciIsICJpbnRlcnBvbGF0aW9uIl07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwotICAgICAgICAgIHJldHVybiBbImF0b20i
LCAiaGFzaCJdOwotICAgICAgICB9CisgICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSkgeworICAg
ICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKGNoYXJzZXR8ZG9jdW1lbnR8Zm9udC1mYWNlfGltcG9y
dHwoLShtb3p8bXN8b3x3ZWJraXQpLSk/a2V5ZnJhbWVzfG1lZGlhfG5hbWVzcGFjZXxwYWdlfHN1
cHBvcnRzKVxiLywgZmFsc2UpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHN0cmVhbS5lYXRXaGls
ZSgvW1x3XFxcLV0vKTsKKyAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxzKjovLCBmYWxzZSkp
CisgICAgICAgICAgcmV0dXJuIFsidmFyaWFibGUtMiIsICJ2YXJpYWJsZS1kZWZpbml0aW9uIl07
CisgICAgICAgIHJldHVybiBbInZhcmlhYmxlLTIiLCAidmFyaWFibGUiXTsKKyAgICAgIH0sCisg
ICAgICAiJiI6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gWyJhdG9tIiwgImF0b20iXTsK
ICAgICAgIH0KICAgICB9LAotICAgIG5hbWU6ICJjc3MiCisgICAgbmFtZTogImNzcyIsCisgICAg
aGVscGVyVHlwZTogImxlc3MiCiAgIH0pOwotfSkoKTsKKworfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2h0bWxt
aXhlZC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0Nv
ZGVNaXJyb3IvaHRtbG1peGVkLmpzCmluZGV4IGI1OWVmMzcuLmQ4MGVmOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Iv
aHRtbG1peGVkLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVkLmpzCkBAIC0xLDUgKzEsMTggQEAKKyhmdW5jdGlv
bihtb2QpIHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1
bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCisgICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9j
b2RlbWlycm9yIiksIHJlcXVpcmUoIi4uL3htbC94bWwiKSwgcmVxdWlyZSgiLi4vamF2YXNjcmlw
dC9qYXZhc2NyaXB0IiksIHJlcXVpcmUoIi4uL2Nzcy9jc3MiKSk7CisgIGVsc2UgaWYgKHR5cGVv
ZiBkZWZpbmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAgICBkZWZpbmUo
WyIuLi8uLi9saWIvY29kZW1pcnJvciIsICIuLi94bWwveG1sIiwgIi4uL2phdmFzY3JpcHQvamF2
YXNjcmlwdCIsICIuLi9jc3MvY3NzIl0sIG1vZCk7CisgIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBl
bnYKKyAgICBtb2QoQ29kZU1pcnJvcik7Cit9KShmdW5jdGlvbihDb2RlTWlycm9yKSB7CisidXNl
IHN0cmljdCI7CisKIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiaHRtbG1peGVkIiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKLSAgdmFyIGh0bWxNb2RlID0gQ29kZU1pcnJvci5nZXRN
b2RlKGNvbmZpZywge25hbWU6ICJ4bWwiLCBodG1sTW9kZTogdHJ1ZX0pOworICB2YXIgaHRtbE1v
ZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCB7bmFtZTogInhtbCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sTW9kZTogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpbGluZVRhZ0luZGVu
dEZhY3RvcjogcGFyc2VyQ29uZmlnLm11bHRpbGluZVRhZ0luZGVudEZhY3RvciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpbGluZVRhZ0luZGVudFBh
c3RUYWc6IHBhcnNlckNvbmZpZy5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnfSk7CiAgIHZhciBj
c3NNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgImNzcyIpOwogCiAgIHZhciBzY3Jp
cHRUeXBlcyA9IFtdLCBzY3JpcHRUeXBlc0NvbmYgPSBwYXJzZXJDb25maWcgJiYgcGFyc2VyQ29u
ZmlnLnNjcmlwdFR5cGVzOwpAQCAtOTMsOCArMTA2LDYgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2Rl
KCJodG1sbWl4ZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgICBy
ZXR1cm4gQ29kZU1pcnJvci5QYXNzOwogICAgIH0sCiAKLSAgICBlbGVjdHJpY0NoYXJzOiAiL3t9
OiIsCi0KICAgICBpbm5lck1vZGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICByZXR1cm4ge3N0
YXRlOiBzdGF0ZS5sb2NhbFN0YXRlIHx8IHN0YXRlLmh0bWxTdGF0ZSwgbW9kZTogc3RhdGUubG9j
YWxNb2RlIHx8IGh0bWxNb2RlfTsKICAgICB9CkBAIC0xMDIsMyArMTEzLDUgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJodG1sbWl4ZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykg
ewogfSwgInhtbCIsICJqYXZhc2NyaXB0IiwgImNzcyIpOwogCiBDb2RlTWlycm9yLmRlZmluZU1J
TUUoInRleHQvaHRtbCIsICJodG1sbWl4ZWQiKTsKKworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3Jp
cHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL2phdmFzY3JpcHQuanMKaW5kZXggZjI3YzA2My4uOTMxOGFhYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9q
YXZhc2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qcwpAQCAtMSw5ICsxLDIwIEBACiAvLyBUT0RP
IGFjdHVhbGx5IHJlY29nbml6ZSBzeW50YXggb2YgVHlwZVNjcmlwdCBjb25zdHJ1Y3RzCiAKKyhm
dW5jdGlvbihtb2QpIHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVv
ZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCisgICAgbW9kKHJlcXVpcmUoIi4uLy4u
L2xpYi9jb2RlbWlycm9yIikpOworICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlv
biIgJiYgZGVmaW5lLmFtZCkgLy8gQU1ECisgICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJy
b3IiXSwgbW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudgorICAgIG1vZChDb2RlTWly
cm9yKTsKK30pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKKyJ1c2Ugc3RyaWN0IjsKKwogQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKICAgdmFyIHN0YXRl
bWVudEluZGVudCA9IHBhcnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnQ7Ci0gIHZhciBqc29uTW9k
ZSA9IHBhcnNlckNvbmZpZy5qc29uOworICB2YXIganNvbmxkTW9kZSA9IHBhcnNlckNvbmZpZy5q
c29ubGQ7CisgIHZhciBqc29uTW9kZSA9IHBhcnNlckNvbmZpZy5qc29uIHx8IGpzb25sZE1vZGU7
CiAgIHZhciBpc1RTID0gcGFyc2VyQ29uZmlnLnR5cGVzY3JpcHQ7CiAKICAgLy8gVG9rZW5pemVy
CkBAIC0xNSw3ICsyNiw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1
bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAKICAgICB2YXIganNLZXl3b3JkcyA9IHsK
ICAgICAgICJpZiI6IGt3KCJpZiIpLCAid2hpbGUiOiBBLCAid2l0aCI6IEEsICJlbHNlIjogQiwg
ImRvIjogQiwgInRyeSI6IEIsICJmaW5hbGx5IjogQiwKLSAgICAgICJyZXR1cm4iOiBDLCAiYnJl
YWsiOiBDLCAiY29udGludWUiOiBDLCAibmV3IjogQywgImRlbGV0ZSI6IEMsICJ0aHJvdyI6IEMs
CisgICAgICAicmV0dXJuIjogQywgImJyZWFrIjogQywgImNvbnRpbnVlIjogQywgIm5ldyI6IEMs
ICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLCAiZGVidWdnZXIiOiBDLAogICAgICAgInZhciI6IGt3
KCJ2YXIiKSwgImNvbnN0Ijoga3coInZhciIpLCAibGV0Ijoga3coInZhciIpLAogICAgICAgImZ1
bmN0aW9uIjoga3coImZ1bmN0aW9uIiksICJjYXRjaCI6IGt3KCJjYXRjaCIpLAogICAgICAgImZv
ciI6IGt3KCJmb3IiKSwgInN3aXRjaCI6IGt3KCJzd2l0Y2giKSwgImNhc2UiOiBrdygiY2FzZSIp
LCAiZGVmYXVsdCI6IGt3KCJkZWZhdWx0IiksCkBAIC01MywxNSArNjQsMTggQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKICAgfSgpOwogCiAgIHZhciBpc09wZXJhdG9yQ2hhciA9IC9bK1wtKiYlPTw+IT98fl5dLzsK
KyAgdmFyIGlzSnNvbmxkS2V5d29yZCA9IC9eQChjb250ZXh0fGlkfHZhbHVlfGxhbmd1YWdlfHR5
cGV8Y29udGFpbmVyfGxpc3R8c2V0fHJldmVyc2V8aW5kZXh8YmFzZXx2b2NhYnxncmFwaCkiLzsK
IAotICBmdW5jdGlvbiBuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCBlbmQpIHsKLSAgICB2YXIg
ZXNjYXBlZCA9IGZhbHNlLCBuZXh0OworICBmdW5jdGlvbiByZWFkUmVnZXhwKHN0cmVhbSkgewor
ICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGluU2V0ID0gZmFsc2U7CiAgICAgd2hpbGUg
KChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewotICAgICAgaWYgKG5leHQgPT0gZW5k
ICYmICFlc2NhcGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBpZiAoIWVzY2FwZWQp
IHsKKyAgICAgICAgaWYgKG5leHQgPT0gIi8iICYmICFpblNldCkgcmV0dXJuOworICAgICAgICBp
ZiAobmV4dCA9PSAiWyIpIGluU2V0ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoaW5TZXQgJiYg
bmV4dCA9PSAiXSIpIGluU2V0ID0gZmFsc2U7CisgICAgICB9CiAgICAgICBlc2NhcGVkID0gIWVz
Y2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgIH0KLSAgICByZXR1cm4gZXNjYXBlZDsKICAgfQog
CiAgIC8vIFVzZWQgYXMgc2NyYXRjaCB2YXJpYWJsZXMgdG8gY29tbXVuaWNhdGUgbXVsdGlwbGUg
dmFsdWVzIHdpdGhvdXQKQEAgLTgzLDcgKzk3LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJq
YXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICB9IGVsc2Ug
aWYgKC9bXFtcXXt9XChcKSw7XDpcLl0vLnRlc3QoY2gpKSB7CiAgICAgICByZXR1cm4gcmV0KGNo
KTsKICAgICB9IGVsc2UgaWYgKGNoID09ICI9IiAmJiBzdHJlYW0uZWF0KCI+IikpIHsKLSAgICAg
IHJldHVybiByZXQoIj0+Iik7CisgICAgICByZXR1cm4gcmV0KCI9PiIsICJvcGVyYXRvciIpOwog
ICAgIH0gZWxzZSBpZiAoY2ggPT0gIjAiICYmIHN0cmVhbS5lYXQoL3gvaSkpIHsKICAgICAgIHN0
cmVhbS5lYXRXaGlsZSgvW1xkYS1mXS9pKTsKICAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJu
dW1iZXIiKTsKQEAgLTk5LDEyICsxMTMsMTIgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZh
c2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgcmV0dXJu
IHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxhc3RU
eXBlID09ICJvcGVyYXRvciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gImtleXdvcmQgYyIgfHwKICAg
ICAgICAgICAgICAgIHN0YXRlLmxhc3RUeXBlID09ICJzb2YiIHx8IC9eW1xbe31cKCw7Ol0kLy50
ZXN0KHN0YXRlLmxhc3RUeXBlKSkgewotICAgICAgICBuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFt
LCAiLyIpOworICAgICAgICByZWFkUmVnZXhwKHN0cmVhbSk7CiAgICAgICAgIHN0cmVhbS5lYXRX
aGlsZSgvW2dpbXldLyk7IC8vICd5JyBpcyAic3RpY2t5IiBvcHRpb24gaW4gTW96aWxsYQogICAg
ICAgICByZXR1cm4gcmV0KCJyZWdleHAiLCAic3RyaW5nLTIiKTsKICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7Ci0gICAgICAgIHJldHVybiBy
ZXQoIm9wZXJhdG9yIiwgbnVsbCwgc3RyZWFtLmN1cnJlbnQoKSk7CisgICAgICAgIHJldHVybiBy
ZXQoIm9wZXJhdG9yIiwgIm9wZXJhdG9yIiwgc3RyZWFtLmN1cnJlbnQoKSk7CiAgICAgICB9CiAg
ICAgfSBlbHNlIGlmIChjaCA9PSAiYCIpIHsKICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5R
dWFzaTsKQEAgLTExNCw3ICsxMjgsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3Jp
cHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgcmV0dXJuIHJldCgi
ZXJyb3IiLCAiZXJyb3IiKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gp
KSB7CiAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwotICAgICAgcmV0dXJu
IHJldCgib3BlcmF0b3IiLCBudWxsLCBzdHJlYW0uY3VycmVudCgpKTsKKyAgICAgIHJldHVybiBy
ZXQoIm9wZXJhdG9yIiwgIm9wZXJhdG9yIiwgc3RyZWFtLmN1cnJlbnQoKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgICAgdmFyIHdvcmQgPSBz
dHJlYW0uY3VycmVudCgpLCBrbm93biA9IGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdv
cmQpICYmIGtleXdvcmRzW3dvcmRdOwpAQCAtMTI1LDggKzEzOSwxNiBAQCBDb2RlTWlycm9yLmRl
ZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewog
CiAgIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0
cmVhbSwgc3RhdGUpIHsKLSAgICAgIGlmICghbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgcXVv
dGUpKQorICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dDsKKyAgICAgIGlmIChqc29ubGRN
b2RlICYmIHN0cmVhbS5wZWVrKCkgPT0gIkAiICYmIHN0cmVhbS5tYXRjaChpc0pzb25sZEtleXdv
cmQpKXsKICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CisgICAgICAgIHJldHVy
biByZXQoImpzb25sZC1rZXl3b3JkIiwgIm1ldGEiKTsKKyAgICAgIH0KKyAgICAgIHdoaWxlICgo
bmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKKyAgICAgICAgaWYgKG5leHQgPT0gcXVv
dGUgJiYgIWVzY2FwZWQpIGJyZWFrOworICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4
dCA9PSAiXFwiOworICAgICAgfQorICAgICAgaWYgKCFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9
IHRva2VuQmFzZTsKICAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKICAgICB9
OwogICB9CkBAIC0xODksNyArMjExLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2Ny
aXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKIAogICAvLyBQYXJzZXIKIAot
ICB2YXIgYXRvbWljVHlwZXMgPSB7ImF0b20iOiB0cnVlLCAibnVtYmVyIjogdHJ1ZSwgInZhcmlh
YmxlIjogdHJ1ZSwgInN0cmluZyI6IHRydWUsICJyZWdleHAiOiB0cnVlLCAidGhpcyI6IHRydWV9
OworICB2YXIgYXRvbWljVHlwZXMgPSB7ImF0b20iOiB0cnVlLCAibnVtYmVyIjogdHJ1ZSwgInZh
cmlhYmxlIjogdHJ1ZSwgInN0cmluZyI6IHRydWUsICJyZWdleHAiOiB0cnVlLCAidGhpcyI6IHRy
dWUsICJqc29ubGQta2V5d29yZCI6IHRydWV9OwogCiAgIGZ1bmN0aW9uIEpTTGV4aWNhbChpbmRl
bnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldiwgaW5mbykgewogICAgIHRoaXMuaW5kZW50
ZWQgPSBpbmRlbnRlZDsKQEAgLTI4OSwxMSArMzExLDEyIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9k
ZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIHBvcGxl
eC5sZXggPSB0cnVlOwogCiAgIGZ1bmN0aW9uIGV4cGVjdCh3YW50ZWQpIHsKLSAgICByZXR1cm4g
ZnVuY3Rpb24odHlwZSkgeworICAgIGZ1bmN0aW9uIGV4cCh0eXBlKSB7CiAgICAgICBpZiAodHlw
ZSA9PSB3YW50ZWQpIHJldHVybiBjb250KCk7CiAgICAgICBlbHNlIGlmICh3YW50ZWQgPT0gIjsi
KSByZXR1cm4gcGFzcygpOwotICAgICAgZWxzZSByZXR1cm4gY29udChhcmd1bWVudHMuY2FsbGVl
KTsKKyAgICAgIGVsc2UgcmV0dXJuIGNvbnQoZXhwKTsKICAgICB9OworICAgIHJldHVybiBleHA7
CiAgIH0KIAogICBmdW5jdGlvbiBzdGF0ZW1lbnQodHlwZSwgdmFsdWUpIHsKQEAgLTMwMiw5ICsz
MjUsMTMgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29u
ZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodHlwZSA9PSAia2V5d29yZCBiIikgcmV0dXJu
IGNvbnQocHVzaGxleCgiZm9ybSIpLCBzdGF0ZW1lbnQsIHBvcGxleCk7CiAgICAgaWYgKHR5cGUg
PT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGJsb2NrLCBwb3BsZXgpOwogICAgIGlm
ICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoKTsKLSAgICBpZiAodHlwZSA9PSAiaWYiKSByZXR1
cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24sIHN0YXRlbWVudCwgcG9wbGV4LCBt
YXliZWVsc2UpOworICAgIGlmICh0eXBlID09ICJpZiIpIHsKKyAgICAgIGlmIChjeC5zdGF0ZS5s
ZXhpY2FsLmluZm8gPT0gImVsc2UiICYmIGN4LnN0YXRlLmNjW2N4LnN0YXRlLmNjLmxlbmd0aCAt
IDFdID09IHBvcGxleCkKKyAgICAgICAgY3guc3RhdGUuY2MucG9wKCkoKTsKKyAgICAgIHJldHVy
biBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwgc3RhdGVtZW50LCBwb3BsZXgsIG1h
eWJlZWxzZSk7CisgICAgfQogICAgIGlmICh0eXBlID09ICJmdW5jdGlvbiIpIHJldHVybiBjb250
KGZ1bmN0aW9uZGVmKTsKLSAgICBpZiAodHlwZSA9PSAiZm9yIikgcmV0dXJuIGNvbnQocHVzaGxl
eCgiZm9ybSIpLCBmb3JzcGVjLCBwb3BsZXgsIHN0YXRlbWVudCwgcG9wbGV4KTsKKyAgICBpZiAo
dHlwZSA9PSAiZm9yIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBmb3JzcGVjLCBzdGF0
ZW1lbnQsIHBvcGxleCk7CiAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQo
cHVzaGxleCgic3RhdCIpLCBtYXliZWxhYmVsKTsKICAgICBpZiAodHlwZSA9PSAic3dpdGNoIikg
cmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBwdXNobGV4KCJ9IiwgInN3
aXRjaCIpLCBleHBlY3QoInsiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmxvY2ssIHBvcGxleCwgcG9wbGV4KTsKQEAgLTMyNywxOCArMzU0LDE4IEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgIGZ1bmN0aW9uIGV4cHJlc3Npb25Jbm5lcih0eXBlLCBub0NvbW1hKSB7CiAgICAgaWYg
KGN4LnN0YXRlLmZhdEFycm93QXQgPT0gY3guc3RyZWFtLnN0YXJ0KSB7CiAgICAgICB2YXIgYm9k
eSA9IG5vQ29tbWEgPyBhcnJvd0JvZHlOb0NvbW1hIDogYXJyb3dCb2R5OwotICAgICAgaWYgKHR5
cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNoY29udGV4dCwgY29tbWFzZXAocGF0dGVybiwgIiki
KSwgZXhwZWN0KCI9PiIpLCBib2R5LCBwb3Bjb250ZXh0KTsKKyAgICAgIGlmICh0eXBlID09ICIo
IikgcmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIHB1c2hsZXgoIikiKSwgY29tbWFzZXAocGF0dGVy
biwgIikiKSwgcG9wbGV4LCBleHBlY3QoIj0+IiksIGJvZHksIHBvcGNvbnRleHQpOwogICAgICAg
ZWxzZSBpZiAodHlwZSA9PSAidmFyaWFibGUiKSByZXR1cm4gcGFzcyhwdXNoY29udGV4dCwgcGF0
dGVybiwgZXhwZWN0KCI9PiIpLCBib2R5LCBwb3Bjb250ZXh0KTsKICAgICB9CiAKICAgICB2YXIg
bWF5YmVvcCA9IG5vQ29tbWEgPyBtYXliZW9wZXJhdG9yTm9Db21tYSA6IG1heWJlb3BlcmF0b3JD
b21tYTsKICAgICBpZiAoYXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBj
b250KG1heWJlb3ApOwotICAgIGlmICh0eXBlID09ICJmdW5jdGlvbiIpIHJldHVybiBjb250KGZ1
bmN0aW9uZGVmKTsKKyAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24iKSByZXR1cm4gY29udChmdW5j
dGlvbmRlZiwgbWF5YmVvcCk7CiAgICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYyIpIHJldHVybiBj
b250KG5vQ29tbWEgPyBtYXliZWV4cHJlc3Npb25Ob0NvbW1hIDogbWF5YmVleHByZXNzaW9uKTsK
ICAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgbWF5YmVleHBy
ZXNzaW9uLCBjb21wcmVoZW5zaW9uLCBleHBlY3QoIikiKSwgcG9wbGV4LCBtYXliZW9wKTsKICAg
ICBpZiAodHlwZSA9PSAib3BlcmF0b3IiIHx8IHR5cGUgPT0gInNwcmVhZCIpIHJldHVybiBjb250
KG5vQ29tbWEgPyBleHByZXNzaW9uTm9Db21tYSA6IGV4cHJlc3Npb24pOwotICAgIGlmICh0eXBl
ID09ICJbIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBleHByZXNzaW9uTm9Db21tYSwgbWF5
YmVBcnJheUNvbXByZWhlbnNpb24sIHBvcGxleCwgbWF5YmVvcCk7Ci0gICAgaWYgKHR5cGUgPT0g
InsiKSByZXR1cm4gY29udChjb21tYXNlcChvYmpwcm9wLCAifSIpLCBtYXliZW9wKTsKKyAgICBp
ZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgYXJyYXlMaXRlcmFsLCBw
b3BsZXgsIG1heWJlb3ApOworICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnRDb21tYXNl
cChvYmpwcm9wLCAifSIsIG51bGwsIG1heWJlb3ApOwogICAgIHJldHVybiBjb250KCk7CiAgIH0K
ICAgZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uKHR5cGUpIHsKQEAgLTM2NSwxMiArMzkyLDExIEBA
IENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFy
c2VyQ29uZmlnKSB7CiAgICAgfQogICAgIGlmICh0eXBlID09ICJxdWFzaSIpIHsgY3guY2MucHVz
aChtZSk7IHJldHVybiBxdWFzaSh2YWx1ZSk7IH0KICAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVy
bjsKLSAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KGNvbW1hc2VwKGV4cHJlc3Npb25O
b0NvbW1hLCAiKSIsICJjYWxsIiksIG1lKTsKKyAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBj
b250Q29tbWFzZXAoZXhwcmVzc2lvbk5vQ29tbWEsICIpIiwgImNhbGwiLCBtZSk7CiAgICAgaWYg
KHR5cGUgPT0gIi4iKSByZXR1cm4gY29udChwcm9wZXJ0eSwgbWUpOwogICAgIGlmICh0eXBlID09
ICJbIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBtYXliZWV4cHJlc3Npb24sIGV4cGVjdCgi
XSIpLCBwb3BsZXgsIG1lKTsKICAgfQogICBmdW5jdGlvbiBxdWFzaSh2YWx1ZSkgewotICAgIGlm
ICghdmFsdWUpIGRlYnVnZ2VyOwogICAgIGlmICh2YWx1ZS5zbGljZSh2YWx1ZS5sZW5ndGggLSAy
KSAhPSAiJHsiKSByZXR1cm4gY29udCgpOwogICAgIHJldHVybiBjb250KGV4cHJlc3Npb24sIGNv
bnRpbnVlUXVhc2kpOwogICB9CkBAIC00MDMsNyArNDI5LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAg
IGN4Lm1hcmtlZCA9ICJwcm9wZXJ0eSI7CiAgICAgICBpZiAodmFsdWUgPT0gImdldCIgfHwgdmFs
dWUgPT0gInNldCIpIHJldHVybiBjb250KGdldHRlclNldHRlcik7CiAgICAgfSBlbHNlIGlmICh0
eXBlID09ICJudW1iZXIiIHx8IHR5cGUgPT0gInN0cmluZyIpIHsKLSAgICAgIGN4Lm1hcmtlZCA9
IHR5cGUgKyAiIHByb3BlcnR5IjsKKyAgICAgIGN4Lm1hcmtlZCA9IGpzb25sZE1vZGUgPyAicHJv
cGVydHkiIDogKHR5cGUgKyAiIHByb3BlcnR5Iik7CiAgICAgfSBlbHNlIGlmICh0eXBlID09ICJb
IikgewogICAgICAgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCJdIiksIGFmdGVycHJv
cCk7CiAgICAgfQpAQCAtNDE4LDcgKzQ0NCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2
YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHR5cGUg
PT0gIjoiKSByZXR1cm4gY29udChleHByZXNzaW9uTm9Db21tYSk7CiAgICAgaWYgKHR5cGUgPT0g
IigiKSByZXR1cm4gcGFzcyhmdW5jdGlvbmRlZik7CiAgIH0KLSAgZnVuY3Rpb24gY29tbWFzZXAo
d2hhdCwgZW5kLCBpbmZvKSB7CisgIGZ1bmN0aW9uIGNvbW1hc2VwKHdoYXQsIGVuZCkgewogICAg
IGZ1bmN0aW9uIHByb2NlZWQodHlwZSkgewogICAgICAgaWYgKHR5cGUgPT0gIiwiKSB7CiAgICAg
ICAgIHZhciBsZXggPSBjeC5zdGF0ZS5sZXhpY2FsOwpAQCAtNDMwLDEwICs0NTYsMTQgQEAgQ29k
ZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJD
b25maWcpIHsKICAgICB9CiAgICAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgIGlmICh0
eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKLSAgICAgIGlmIChpbmZvID09PSBmYWxzZSkgcmV0
dXJuIHBhc3Mod2hhdCwgcHJvY2VlZCk7Ci0gICAgICByZXR1cm4gcGFzcyhwdXNobGV4KGVuZCwg
aW5mbyksIHdoYXQsIHByb2NlZWQsIHBvcGxleCk7CisgICAgICByZXR1cm4gcGFzcyh3aGF0LCBw
cm9jZWVkKTsKICAgICB9OwogICB9CisgIGZ1bmN0aW9uIGNvbnRDb21tYXNlcCh3aGF0LCBlbmQs
IGluZm8pIHsKKyAgICBmb3IgKHZhciBpID0gMzsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykK
KyAgICAgIGN4LmNjLnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICByZXR1cm4gY29udChwdXNobGV4
KGVuZCwgaW5mbyksIGNvbW1hc2VwKHdoYXQsIGVuZCksIHBvcGxleCk7CisgIH0KICAgZnVuY3Rp
b24gYmxvY2sodHlwZSkgewogICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIGNvbnQoKTsKICAg
ICByZXR1cm4gcGFzcyhzdGF0ZW1lbnQsIGJsb2NrKTsKQEAgLTQ0OSw4ICs0NzksOCBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNv
bmZpZykgewogICB9CiAgIGZ1bmN0aW9uIHBhdHRlcm4odHlwZSwgdmFsdWUpIHsKICAgICBpZiAo
dHlwZSA9PSAidmFyaWFibGUiKSB7IHJlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoKTsgfQot
ICAgIGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnQoY29tbWFzZXAocGF0dGVybiwgIl0iKSk7
Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChjb21tYXNlcChwcm9wcGF0dGVybiwg
In0iKSk7CisgICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udENvbW1hc2VwKHBhdHRlcm4s
ICJdIik7CisgICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udENvbW1hc2VwKHByb3BwYXR0
ZXJuLCAifSIpOwogICB9CiAgIGZ1bmN0aW9uIHByb3BwYXR0ZXJuKHR5cGUsIHZhbHVlKSB7CiAg
ICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIiAmJiAhY3guc3RyZWFtLm1hdGNoKC9eXHMqOi8sIGZh
bHNlKSkgewpAQCAtNDY3LDEwICs0OTcsMTAgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZh
c2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAodHlwZSA9
PSAiLCIpIHJldHVybiBjb250KHZhcmRlZik7CiAgIH0KICAgZnVuY3Rpb24gbWF5YmVlbHNlKHR5
cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYiIgJiYgdmFsdWUgPT0gImVs
c2UiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHN0YXRlbWVudCwgcG9wbGV4KTsKKyAg
ICBpZiAodHlwZSA9PSAia2V5d29yZCBiIiAmJiB2YWx1ZSA9PSAiZWxzZSIpIHJldHVybiBjb250
KHB1c2hsZXgoImZvcm0iLCAiZWxzZSIpLCBzdGF0ZW1lbnQsIHBvcGxleCk7CiAgIH0KICAgZnVu
Y3Rpb24gZm9yc3BlYyh0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChw
dXNobGV4KCIpIiksIGZvcnNwZWMxLCBleHBlY3QoIikiKSk7CisgICAgaWYgKHR5cGUgPT0gIigi
KSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIGZvcnNwZWMxLCBleHBlY3QoIikiKSwgcG9wbGV4
KTsKICAgfQogICBmdW5jdGlvbiBmb3JzcGVjMSh0eXBlKSB7CiAgICAgaWYgKHR5cGUgPT0gInZh
ciIpIHJldHVybiBjb250KHZhcmRlZiwgZXhwZWN0KCI7IiksIGZvcnNwZWMyKTsKQEAgLTQ5Myw3
ICs1MjMsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihj
b25maWcsIHBhcnNlckNvbmZpZykgewogICBmdW5jdGlvbiBmdW5jdGlvbmRlZih0eXBlLCB2YWx1
ZSkgewogICAgIGlmICh2YWx1ZSA9PSAiKiIpIHtjeC5tYXJrZWQgPSAia2V5d29yZCI7IHJldHVy
biBjb250KGZ1bmN0aW9uZGVmKTt9CiAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge3JlZ2lz
dGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO30KLSAgICBpZiAodHlwZSA9PSAi
KCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBjb21tYXNlcChmdW5hcmcsICIpIiksIHN0YXRl
bWVudCwgcG9wY29udGV4dCk7CisgICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNo
Y29udGV4dCwgcHVzaGxleCgiKSIpLCBjb21tYXNlcChmdW5hcmcsICIpIiksIHBvcGxleCwgc3Rh
dGVtZW50LCBwb3Bjb250ZXh0KTsKICAgfQogICBmdW5jdGlvbiBmdW5hcmcodHlwZSkgewogICAg
IGlmICh0eXBlID09ICJzcHJlYWQiKSByZXR1cm4gY29udChmdW5hcmcpOwpAQCAtNTA2LDcgKzUz
Niw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHZhbHVlID09ICJleHRlbmRzIikgcmV0dXJuIGNv
bnQoZXhwcmVzc2lvbik7CiAgIH0KICAgZnVuY3Rpb24gb2JqbGl0KHR5cGUpIHsKLSAgICBpZiAo
dHlwZSA9PSAieyIpIHJldHVybiBjb250KGNvbW1hc2VwKG9ianByb3AsICJ9IikpOworICAgIGlm
ICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnRDb21tYXNlcChvYmpwcm9wLCAifSIpOwogICB9CiAg
IGZ1bmN0aW9uIGFmdGVyTW9kdWxlKHR5cGUsIHZhbHVlKSB7CiAgICAgaWYgKHR5cGUgPT0gInN0
cmluZyIpIHJldHVybiBjb250KHN0YXRlbWVudCk7CkBAIC01MjIsMTcgKzU1MiwyMSBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNv
bmZpZykgewogICAgIHJldHVybiBwYXNzKGltcG9ydFNwZWMsIG1heWJlRnJvbSk7CiAgIH0KICAg
ZnVuY3Rpb24gaW1wb3J0U3BlYyh0eXBlLCB2YWx1ZSkgewotICAgIGlmICh0eXBlID09ICJ7Iikg
cmV0dXJuIGNvbnQoY29tbWFzZXAoaW1wb3J0U3BlYywgIn0iKSk7CisgICAgaWYgKHR5cGUgPT0g
InsiKSByZXR1cm4gY29udENvbW1hc2VwKGltcG9ydFNwZWMsICJ9Iik7CiAgICAgaWYgKHR5cGUg
PT0gInZhcmlhYmxlIikgcmVnaXN0ZXIodmFsdWUpOwogICAgIHJldHVybiBjb250KCk7CiAgIH0K
ICAgZnVuY3Rpb24gbWF5YmVGcm9tKF90eXBlLCB2YWx1ZSkgewogICAgIGlmICh2YWx1ZSA9PSAi
ZnJvbSIpIHsgY3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChleHByZXNzaW9uKTsg
fQogICB9CisgIGZ1bmN0aW9uIGFycmF5TGl0ZXJhbCh0eXBlKSB7CisgICAgaWYgKHR5cGUgPT0g
Il0iKSByZXR1cm4gY29udCgpOworICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb25Ob0NvbW1hLCBt
YXliZUFycmF5Q29tcHJlaGVuc2lvbik7CisgIH0KICAgZnVuY3Rpb24gbWF5YmVBcnJheUNvbXBy
ZWhlbnNpb24odHlwZSkgewotICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gcGFzcyhjb21w
cmVoZW5zaW9uKTsKLSAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KGNvbW1hc2VwKGV4
cHJlc3Npb25Ob0NvbW1hLCAiXSIsIGZhbHNlKSk7Ci0gICAgcmV0dXJuIHBhc3MoY29tbWFzZXAo
ZXhwcmVzc2lvbk5vQ29tbWEsICJdIiwgZmFsc2UpKTsKKyAgICBpZiAodHlwZSA9PSAiZm9yIikg
cmV0dXJuIHBhc3MoY29tcHJlaGVuc2lvbiwgZXhwZWN0KCJdIikpOworICAgIGlmICh0eXBlID09
ICIsIikgcmV0dXJuIGNvbnQoY29tbWFzZXAoZXhwcmVzc2lvbk5vQ29tbWEsICJdIikpOworICAg
IHJldHVybiBwYXNzKGNvbW1hc2VwKGV4cHJlc3Npb25Ob0NvbW1hLCAiXSIpKTsKICAgfQogICBm
dW5jdGlvbiBjb21wcmVoZW5zaW9uKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAiZm9yIikgcmV0
dXJuIGNvbnQoZm9yc3BlYywgY29tcHJlaGVuc2lvbik7CkBAIC01NTIsNyArNTg2LDggQEAgQ29k
ZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJD
b25maWcpIHsKICAgICAgICAgY29udGV4dDogcGFyc2VyQ29uZmlnLmxvY2FsVmFycyAmJiB7dmFy
czogcGFyc2VyQ29uZmlnLmxvY2FsVmFyc30sCiAgICAgICAgIGluZGVudGVkOiAwCiAgICAgICB9
OwotICAgICAgaWYgKHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzKSBzdGF0ZS5nbG9iYWxWYXJzID0g
cGFyc2VyQ29uZmlnLmdsb2JhbFZhcnM7CisgICAgICBpZiAocGFyc2VyQ29uZmlnLmdsb2JhbFZh
cnMgJiYgdHlwZW9mIHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzID09ICJvYmplY3QiKQorICAgICAg
ICBzdGF0ZS5nbG9iYWxWYXJzID0gcGFyc2VyQ29uZmlnLmdsb2JhbFZhcnM7CiAgICAgICByZXR1
cm4gc3RhdGU7CiAgICAgfSwKIApAQCAtNTc1LDcgKzYxMCw3IEBAIENvZGVNaXJyb3IuZGVmaW5l
TW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAg
ICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDsKICAgICAgIHZhciBm
aXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0
YXRlLmxleGljYWw7CiAgICAgICAvLyBLbHVkZ2UgdG8gcHJldmVudCAnbWF5YmVsc2UnIGZyb20g
YmxvY2tpbmcgbGV4aWNhbCBzY29wZSBwb3BzCi0gICAgICBmb3IgKHZhciBpID0gc3RhdGUuY2Mu
bGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgIGlmICghL15ccyplbHNlXGIvLnRlc3Qo
dGV4dEFmdGVyKSkgZm9yICh2YXIgaSA9IHN0YXRlLmNjLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1p
KSB7CiAgICAgICAgIHZhciBjID0gc3RhdGUuY2NbaV07CiAgICAgICAgIGlmIChjID09IHBvcGxl
eCkgbGV4aWNhbCA9IGxleGljYWwucHJldjsKICAgICAgICAgZWxzZSBpZiAoYyAhPSBtYXliZWVs
c2UpIGJyZWFrOwpAQCAtNjAzLDYgKzYzOCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2
YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgZm9sZDogImJy
YWNlIiwKIAogICAgIGhlbHBlclR5cGU6IGpzb25Nb2RlID8gImpzb24iIDogImphdmFzY3JpcHQi
LAorICAgIGpzb25sZE1vZGU6IGpzb25sZE1vZGUsCiAgICAganNvbk1vZGU6IGpzb25Nb2RlCiAg
IH07CiB9KTsKQEAgLTYxMyw1ICs2NDksOCBAQCBDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxp
Y2F0aW9uL2phdmFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOwogQ29kZU1pcnJvci5kZWZpbmVNSU1F
KCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0IiwgImphdmFzY3JpcHQiKTsKIENvZGVNaXJyb3IuZGVm
aW5lTUlNRSgiYXBwbGljYXRpb24vanNvbiIsIHtuYW1lOiAiamF2YXNjcmlwdCIsIGpzb246IHRy
dWV9KTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veC1qc29uIiwge25hbWU6
ICJqYXZhc2NyaXB0IiwganNvbjogdHJ1ZX0pOworQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBs
aWNhdGlvbi9sZCtqc29uIiwge25hbWU6ICJqYXZhc2NyaXB0IiwganNvbmxkOiB0cnVlfSk7CiBD
b2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvdHlwZXNjcmlwdCIsIHsgbmFtZTogImphdmFzY3Jp
cHQiLCB0eXBlc2NyaXB0OiB0cnVlIH0pOwogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNh
dGlvbi90eXBlc2NyaXB0IiwgeyBuYW1lOiAiamF2YXNjcmlwdCIsIHR5cGVzY3JpcHQ6IHRydWUg
fSk7CisKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9saXZlc2NyaXB0LmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9saXZlc2NyaXB0LmpzCmluZGV4
IGMwMDAzMjQuLjkzMjJiYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbGl2ZXNjcmlwdC5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2xpdmVzY3Jp
cHQuanMKQEAgLTIsNiArMiwxNyBAQAogICogTGluayB0byB0aGUgcHJvamVjdCdzIEdpdEh1YiBw
YWdlOgogICogaHR0cHM6Ly9naXRodWIuY29tL2R1cmFsb2cvQ29kZU1pcnJvcgogICovCisKKyhm
dW5jdGlvbihtb2QpIHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVv
ZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCisgICAgbW9kKHJlcXVpcmUoIi4uLy4u
L2xpYi9jb2RlbWlycm9yIikpOworICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlv
biIgJiYgZGVmaW5lLmFtZCkgLy8gQU1ECisgICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJy
b3IiXSwgbW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudgorICAgIG1vZChDb2RlTWly
cm9yKTsKK30pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKKyJ1c2Ugc3RyaWN0IjsKKwogKGZ1bmN0
aW9uKCkgewogICBDb2RlTWlycm9yLmRlZmluZU1vZGUoJ2xpdmVzY3JpcHQnLCBmdW5jdGlvbigp
ewogICAgIHZhciB0b2tlbkJhc2UsIGV4dGVybmFsOwpAQCAtMjY1LDMgKzI3Niw1IEBACiB9KSgp
OwogCiBDb2RlTWlycm9yLmRlZmluZU1JTUUoJ3RleHQveC1saXZlc2NyaXB0JywgJ2xpdmVzY3Jp
cHQnKTsKKworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMu
anMKaW5kZXggOWQ5YjM4ODIuLmRjZGRlODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0cy5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWly
cm9yL21hdGNoYnJhY2tldHMuanMKQEAgLTEsNzMgKzEsMTAwIEBACi0oZnVuY3Rpb24oKSB7Ciso
ZnVuY3Rpb24obW9kKSB7CisgIGlmICh0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiB0eXBl
b2YgbW9kdWxlID09ICJvYmplY3QiKSAvLyBDb21tb25KUworICAgIG1vZChyZXF1aXJlKCIuLi8u
Li9saWIvY29kZW1pcnJvciIpKTsKKyAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rp
b24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAorICAgIGRlZmluZShbIi4uLy4uL2xpYi9jb2RlbWly
cm9yIl0sIG1vZCk7CisgIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnYKKyAgICBtb2QoQ29kZU1p
cnJvcik7Cit9KShmdW5jdGlvbihDb2RlTWlycm9yKSB7CiAgIHZhciBpZV9sdDggPSAvTVNJRSBc
ZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJgogICAgIChkb2N1bWVudC5kb2N1bWVudE1v
ZGUgPT0gbnVsbCB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPCA4KTsKIAogICB2YXIgUG9zID0g
Q29kZU1pcnJvci5Qb3M7CiAKICAgdmFyIG1hdGNoaW5nID0geyIoIjogIik+IiwgIikiOiAiKDwi
LCAiWyI6ICJdPiIsICJdIjogIls8IiwgInsiOiAifT4iLCAifSI6ICJ7PCJ9OwotICBmdW5jdGlv
biBmaW5kTWF0Y2hpbmdCcmFja2V0KGNtLCB3aGVyZSwgc3RyaWN0KSB7Ci0gICAgdmFyIHN0YXRl
ID0gY20uc3RhdGUubWF0Y2hCcmFja2V0czsKLSAgICB2YXIgbWF4U2NhbkxlbiA9IChzdGF0ZSAm
JiBzdGF0ZS5tYXhTY2FuTGluZUxlbmd0aCkgfHwgMTAwMDA7Ci0gICAgdmFyIG1heFNjYW5MaW5l
cyA9IChzdGF0ZSAmJiBzdGF0ZS5tYXhTY2FuTGluZXMpIHx8IDEwMDsKIAotICAgIHZhciBjdXIg
PSB3aGVyZSB8fCBjbS5nZXRDdXJzb3IoKSwgbGluZSA9IGNtLmdldExpbmVIYW5kbGUoY3VyLmxp
bmUpLCBwb3MgPSBjdXIuY2ggLSAxOworICBmdW5jdGlvbiBmaW5kTWF0Y2hpbmdCcmFja2V0KGNt
LCB3aGVyZSwgc3RyaWN0LCBjb25maWcpIHsKKyAgICB2YXIgbGluZSA9IGNtLmdldExpbmVIYW5k
bGUod2hlcmUubGluZSksIHBvcyA9IHdoZXJlLmNoIC0gMTsKICAgICB2YXIgbWF0Y2ggPSAocG9z
ID49IDAgJiYgbWF0Y2hpbmdbbGluZS50ZXh0LmNoYXJBdChwb3MpXSkgfHwgbWF0Y2hpbmdbbGlu
ZS50ZXh0LmNoYXJBdCgrK3BvcyldOwogICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsOwotICAg
IHZhciBmb3J3YXJkID0gbWF0Y2guY2hhckF0KDEpID09ICI+IiwgZCA9IGZvcndhcmQgPyAxIDog
LTE7Ci0gICAgaWYgKHN0cmljdCAmJiBmb3J3YXJkICE9IChwb3MgPT0gY3VyLmNoKSkgcmV0dXJu
IG51bGw7Ci0gICAgdmFyIHN0eWxlID0gY20uZ2V0VG9rZW5UeXBlQXQoUG9zKGN1ci5saW5lLCBw
b3MgKyAxKSk7CisgICAgdmFyIGRpciA9IG1hdGNoLmNoYXJBdCgxKSA9PSAiPiIgPyAxIDogLTE7
CisgICAgaWYgKHN0cmljdCAmJiAoZGlyID4gMCkgIT0gKHBvcyA9PSB3aGVyZS5jaCkpIHJldHVy
biBudWxsOworICAgIHZhciBzdHlsZSA9IGNtLmdldFRva2VuVHlwZUF0KFBvcyh3aGVyZS5saW5l
LCBwb3MgKyAxKSk7CiAKLSAgICB2YXIgc3RhY2sgPSBbbGluZS50ZXh0LmNoYXJBdChwb3MpXSwg
cmUgPSAvWygpe31bXF1dLzsKLSAgICBmdW5jdGlvbiBzY2FuKGxpbmUsIGxpbmVObywgc3RhcnQp
IHsKLSAgICAgIGlmICghbGluZS50ZXh0KSByZXR1cm47Ci0gICAgICB2YXIgcG9zID0gZm9yd2Fy
ZCA/IDAgOiBsaW5lLnRleHQubGVuZ3RoIC0gMSwgZW5kID0gZm9yd2FyZCA/IGxpbmUudGV4dC5s
ZW5ndGggOiAtMTsKLSAgICAgIGlmIChsaW5lLnRleHQubGVuZ3RoID4gbWF4U2NhbkxlbikgcmV0
dXJuIG51bGw7Ci0gICAgICBpZiAoc3RhcnQgIT0gbnVsbCkgcG9zID0gc3RhcnQgKyBkOwotICAg
ICAgZm9yICg7IHBvcyAhPSBlbmQ7IHBvcyArPSBkKSB7Ci0gICAgICAgIHZhciBjaCA9IGxpbmUu
dGV4dC5jaGFyQXQocG9zKTsKLSAgICAgICAgaWYgKHJlLnRlc3QoY2gpICYmIGNtLmdldFRva2Vu
VHlwZUF0KFBvcyhsaW5lTm8sIHBvcyArIDEpKSA9PSBzdHlsZSkgeworICAgIHZhciBmb3VuZCA9
IHNjYW5Gb3JCcmFja2V0KGNtLCBQb3Mod2hlcmUubGluZSwgcG9zICsgKGRpciA+IDAgPyAxIDog
MCkpLCBkaXIsIHN0eWxlIHx8IG51bGwsIGNvbmZpZyk7CisgICAgaWYgKGZvdW5kID09IG51bGwp
IHJldHVybiBudWxsOworICAgIHJldHVybiB7ZnJvbTogUG9zKHdoZXJlLmxpbmUsIHBvcyksIHRv
OiBmb3VuZCAmJiBmb3VuZC5wb3MsCisgICAgICAgICAgICBtYXRjaDogZm91bmQgJiYgZm91bmQu
Y2ggPT0gbWF0Y2guY2hhckF0KDApLCBmb3J3YXJkOiBkaXIgPiAwfTsKKyAgfQorCisgIC8vIGJy
YWNrZXRSZWdleCBpcyB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggdHlwZSBvZiBicmFja2V0IHRvIHNj
YW4KKyAgLy8gc2hvdWxkIGJlIGEgcmVnZXhwLCBlLmcuIC9bW1xdXS8KKyAgLy8KKyAgLy8gTm90
ZTogSWYgIndoZXJlIiBpcyBvbiBhbiBvcGVuIGJyYWNrZXQsIHRoZW4gdGhpcyBicmFja2V0IGlz
IGlnbm9yZWQuCisgIC8vCisgIC8vIFJldHVybnMgZmFsc2Ugd2hlbiBubyBicmFja2V0IHdhcyBm
b3VuZCwgbnVsbCB3aGVuIGl0IHJlYWNoZWQKKyAgLy8gbWF4U2NhbkxpbmVzIGFuZCBnYXZlIHVw
CisgIGZ1bmN0aW9uIHNjYW5Gb3JCcmFja2V0KGNtLCB3aGVyZSwgZGlyLCBzdHlsZSwgY29uZmln
KSB7CisgICAgdmFyIG1heFNjYW5MZW4gPSAoY29uZmlnICYmIGNvbmZpZy5tYXhTY2FuTGluZUxl
bmd0aCkgfHwgMTAwMDA7CisgICAgdmFyIG1heFNjYW5MaW5lcyA9IChjb25maWcgJiYgY29uZmln
Lm1heFNjYW5MaW5lcykgfHwgMTAwMDsKKworICAgIHZhciBzdGFjayA9IFtdOworICAgIHZhciBy
ZSA9IGNvbmZpZyAmJiBjb25maWcuYnJhY2tldFJlZ2V4ID8gY29uZmlnLmJyYWNrZXRSZWdleCA6
IC9bKCl7fVtcXV0vOworICAgIHZhciBsaW5lRW5kID0gZGlyID4gMCA/IE1hdGgubWluKHdoZXJl
LmxpbmUgKyBtYXhTY2FuTGluZXMsIGNtLmxhc3RMaW5lKCkgKyAxKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IE1hdGgubWF4KGNtLmZpcnN0TGluZSgpIC0gMSwgd2hlcmUubGluZSAtIG1h
eFNjYW5MaW5lcyk7CisgICAgZm9yICh2YXIgbGluZU5vID0gd2hlcmUubGluZTsgbGluZU5vICE9
IGxpbmVFbmQ7IGxpbmVObyArPSBkaXIpIHsKKyAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZShs
aW5lTm8pOworICAgICAgaWYgKCFsaW5lKSBjb250aW51ZTsKKyAgICAgIHZhciBwb3MgPSBkaXIg
PiAwID8gMCA6IGxpbmUubGVuZ3RoIC0gMSwgZW5kID0gZGlyID4gMCA/IGxpbmUubGVuZ3RoIDog
LTE7CisgICAgICBpZiAobGluZS5sZW5ndGggPiBtYXhTY2FuTGVuKSBjb250aW51ZTsKKyAgICAg
IGlmIChsaW5lTm8gPT0gd2hlcmUubGluZSkgcG9zID0gd2hlcmUuY2ggLSAoZGlyIDwgMCA/IDEg
OiAwKTsKKyAgICAgIGZvciAoOyBwb3MgIT0gZW5kOyBwb3MgKz0gZGlyKSB7CisgICAgICAgIHZh
ciBjaCA9IGxpbmUuY2hhckF0KHBvcyk7CisgICAgICAgIGlmIChyZS50ZXN0KGNoKSAmJiAoc3R5
bGUgPT09IHVuZGVmaW5lZCB8fCBjbS5nZXRUb2tlblR5cGVBdChQb3MobGluZU5vLCBwb3MgKyAx
KSkgPT0gc3R5bGUpKSB7CiAgICAgICAgICAgdmFyIG1hdGNoID0gbWF0Y2hpbmdbY2hdOwotICAg
ICAgICAgIGlmIChtYXRjaC5jaGFyQXQoMSkgPT0gIj4iID09IGZvcndhcmQpIHN0YWNrLnB1c2go
Y2gpOwotICAgICAgICAgIGVsc2UgaWYgKHN0YWNrLnBvcCgpICE9IG1hdGNoLmNoYXJBdCgwKSkg
cmV0dXJuIHtwb3M6IHBvcywgbWF0Y2g6IGZhbHNlfTsKLSAgICAgICAgICBlbHNlIGlmICghc3Rh
Y2subGVuZ3RoKSByZXR1cm4ge3BvczogcG9zLCBtYXRjaDogdHJ1ZX07CisgICAgICAgICAgaWYg
KChtYXRjaC5jaGFyQXQoMSkgPT0gIj4iKSA9PSAoZGlyID4gMCkpIHN0YWNrLnB1c2goY2gpOwor
ICAgICAgICAgIGVsc2UgaWYgKCFzdGFjay5sZW5ndGgpIHJldHVybiB7cG9zOiBQb3MobGluZU5v
LCBwb3MpLCBjaDogY2h9OworICAgICAgICAgIGVsc2Ugc3RhY2sucG9wKCk7CiAgICAgICAgIH0K
ICAgICAgIH0KICAgICB9Ci0gICAgZm9yICh2YXIgaSA9IGN1ci5saW5lLCBmb3VuZCwgZSA9IGZv
cndhcmQgPyBNYXRoLm1pbihpICsgbWF4U2NhbkxpbmVzLCBjbS5saW5lQ291bnQoKSkgOiBNYXRo
Lm1heCgtMSwgaSAtIG1heFNjYW5MaW5lcyk7IGkgIT0gZTsgaSs9ZCkgewotICAgICAgaWYgKGkg
PT0gY3VyLmxpbmUpIGZvdW5kID0gc2NhbihsaW5lLCBpLCBwb3MpOwotICAgICAgZWxzZSBmb3Vu
ZCA9IHNjYW4oY20uZ2V0TGluZUhhbmRsZShpKSwgaSk7Ci0gICAgICBpZiAoZm91bmQpIGJyZWFr
OwotICAgIH0KLSAgICByZXR1cm4ge2Zyb206IFBvcyhjdXIubGluZSwgcG9zKSwgdG86IGZvdW5k
ICYmIFBvcyhpLCBmb3VuZC5wb3MpLAotICAgICAgICAgICAgbWF0Y2g6IGZvdW5kICYmIGZvdW5k
Lm1hdGNoLCBmb3J3YXJkOiBmb3J3YXJkfTsKKyAgICByZXR1cm4gbGluZU5vIC0gZGlyID09IChk
aXIgPiAwID8gY20ubGFzdExpbmUoKSA6IGNtLmZpcnN0TGluZSgpKSA/IGZhbHNlIDogbnVsbDsK
ICAgfQogCi0gIGZ1bmN0aW9uIG1hdGNoQnJhY2tldHMoY20sIGF1dG9jbGVhcikgeworICBmdW5j
dGlvbiBtYXRjaEJyYWNrZXRzKGNtLCBhdXRvY2xlYXIsIGNvbmZpZykgewogICAgIC8vIERpc2Fi
bGUgYnJhY2UgbWF0Y2hpbmcgaW4gbG9uZyBsaW5lcywgc2luY2UgaXQnbGwgY2F1c2UgaHVnZWx5
IHNsb3cgdXBkYXRlcwogICAgIHZhciBtYXhIaWdobGlnaHRMZW4gPSBjbS5zdGF0ZS5tYXRjaEJy
YWNrZXRzLm1heEhpZ2hsaWdodExpbmVMZW5ndGggfHwgMTAwMDsKLSAgICB2YXIgZm91bmQgPSBm
aW5kTWF0Y2hpbmdCcmFja2V0KGNtKTsKLSAgICBpZiAoIWZvdW5kIHx8IGNtLmdldExpbmUoZm91
bmQuZnJvbS5saW5lKS5sZW5ndGggPiBtYXhIaWdobGlnaHRMZW4gfHwKLSAgICAgICBmb3VuZC50
byAmJiBjbS5nZXRMaW5lKGZvdW5kLnRvLmxpbmUpLmxlbmd0aCA+IG1heEhpZ2hsaWdodExlbikK
LSAgICAgIHJldHVybjsKKyAgICB2YXIgbWFya3MgPSBbXSwgcmFuZ2VzID0gY20ubGlzdFNlbGVj
dGlvbnMoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewor
ICAgICAgdmFyIG1hdGNoID0gcmFuZ2VzW2ldLmVtcHR5KCkgJiYgZmluZE1hdGNoaW5nQnJhY2tl
dChjbSwgcmFuZ2VzW2ldLmhlYWQsIGZhbHNlLCBjb25maWcpOworICAgICAgaWYgKG1hdGNoICYm
IGNtLmdldExpbmUobWF0Y2guZnJvbS5saW5lKS5sZW5ndGggPD0gbWF4SGlnaGxpZ2h0TGVuKSB7
CisgICAgICAgIHZhciBzdHlsZSA9IG1hdGNoLm1hdGNoID8gIkNvZGVNaXJyb3ItbWF0Y2hpbmdi
cmFja2V0IiA6ICJDb2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCI7CisgICAgICAgIG1hcmtz
LnB1c2goY20ubWFya1RleHQobWF0Y2guZnJvbSwgUG9zKG1hdGNoLmZyb20ubGluZSwgbWF0Y2gu
ZnJvbS5jaCArIDEpLCB7Y2xhc3NOYW1lOiBzdHlsZX0pKTsKKyAgICAgICAgaWYgKG1hdGNoLnRv
ICYmIGNtLmdldExpbmUobWF0Y2gudG8ubGluZSkubGVuZ3RoIDw9IG1heEhpZ2hsaWdodExlbikK
KyAgICAgICAgICBtYXJrcy5wdXNoKGNtLm1hcmtUZXh0KG1hdGNoLnRvLCBQb3MobWF0Y2gudG8u
bGluZSwgbWF0Y2gudG8uY2ggKyAxKSwge2NsYXNzTmFtZTogc3R5bGV9KSk7CisgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKG1hcmtzLmxlbmd0aCkgeworICAgICAgLy8gS2x1ZGdlIHRvIHdvcmsg
YXJvdW5kIHRoZSBJRSBidWcgZnJvbSBpc3N1ZSAjMTE5Mywgd2hlcmUgdGV4dAorICAgICAgLy8g
aW5wdXQgc3RvcHMgZ29pbmcgdG8gdGhlIHRleHRhcmUgd2hldmVyIHRoaXMgZmlyZXMuCisgICAg
ICBpZiAoaWVfbHQ4ICYmIGNtLnN0YXRlLmZvY3VzZWQpIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMo
KTsKIAotICAgIHZhciBzdHlsZSA9IGZvdW5kLm1hdGNoID8gIkNvZGVNaXJyb3ItbWF0Y2hpbmdi
cmFja2V0IiA6ICJDb2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCI7Ci0gICAgdmFyIG9uZSA9
IGNtLm1hcmtUZXh0KGZvdW5kLmZyb20sIFBvcyhmb3VuZC5mcm9tLmxpbmUsIGZvdW5kLmZyb20u
Y2ggKyAxKSwge2NsYXNzTmFtZTogc3R5bGV9KTsKLSAgICB2YXIgdHdvID0gZm91bmQudG8gJiYg
Y20ubWFya1RleHQoZm91bmQudG8sIFBvcyhmb3VuZC50by5saW5lLCBmb3VuZC50by5jaCArIDEp
LCB7Y2xhc3NOYW1lOiBzdHlsZX0pOwotICAgIC8vIEtsdWRnZSB0byB3b3JrIGFyb3VuZCB0aGUg
SUUgYnVnIGZyb20gaXNzdWUgIzExOTMsIHdoZXJlIHRleHQKLSAgICAvLyBpbnB1dCBzdG9wcyBn
b2luZyB0byB0aGUgdGV4dGFyZSB3aGV2ZXIgdGhpcyBmaXJlcy4KLSAgICBpZiAoaWVfbHQ4ICYm
IGNtLnN0YXRlLmZvY3VzZWQpIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsKLSAgICB2YXIgY2xl
YXIgPSBmdW5jdGlvbigpIHsKLSAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsgb25lLmNs
ZWFyKCk7IHR3byAmJiB0d28uY2xlYXIoKTsgfSk7Ci0gICAgfTsKLSAgICBpZiAoYXV0b2NsZWFy
KSBzZXRUaW1lb3V0KGNsZWFyLCA4MDApOwotICAgIGVsc2UgcmV0dXJuIGNsZWFyOworICAgICAg
dmFyIGNsZWFyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigp
IHsKKyAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtzLmxlbmd0aDsgaSsrKSBtYXJr
c1tpXS5jbGVhcigpOworICAgICAgICB9KTsKKyAgICAgIH07CisgICAgICBpZiAoYXV0b2NsZWFy
KSBzZXRUaW1lb3V0KGNsZWFyLCA4MDApOworICAgICAgZWxzZSByZXR1cm4gY2xlYXI7CisgICAg
fQogICB9CiAKICAgdmFyIGN1cnJlbnRseUhpZ2hsaWdodGVkID0gbnVsbDsKICAgZnVuY3Rpb24g
ZG9NYXRjaEJyYWNrZXRzKGNtKSB7CiAgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAg
ICAgaWYgKGN1cnJlbnRseUhpZ2hsaWdodGVkKSB7Y3VycmVudGx5SGlnaGxpZ2h0ZWQoKTsgY3Vy
cmVudGx5SGlnaGxpZ2h0ZWQgPSBudWxsO30KLSAgICAgIGlmICghY20uc29tZXRoaW5nU2VsZWN0
ZWQoKSkgY3VycmVudGx5SGlnaGxpZ2h0ZWQgPSBtYXRjaEJyYWNrZXRzKGNtLCBmYWxzZSk7Cisg
ICAgICBjdXJyZW50bHlIaWdobGlnaHRlZCA9IG1hdGNoQnJhY2tldHMoY20sIGZhbHNlLCBjbS5z
dGF0ZS5tYXRjaEJyYWNrZXRzKTsKICAgICB9KTsKICAgfQogCkBAIC04MSw3ICsxMDgsMTAgQEAK
ICAgfSk7CiAKICAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oIm1hdGNoQnJhY2tldHMiLCBm
dW5jdGlvbigpIHttYXRjaEJyYWNrZXRzKHRoaXMsIHRydWUpO30pOwotICBDb2RlTWlycm9yLmRl
ZmluZUV4dGVuc2lvbigiZmluZE1hdGNoaW5nQnJhY2tldCIsIGZ1bmN0aW9uKHBvcywgc3RyaWN0
KXsKLSAgICByZXR1cm4gZmluZE1hdGNoaW5nQnJhY2tldCh0aGlzLCBwb3MsIHN0cmljdCk7Cisg
IENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJmaW5kTWF0Y2hpbmdCcmFja2V0IiwgZnVuY3Rp
b24ocG9zLCBzdHJpY3QsIGNvbmZpZyl7CisgICAgcmV0dXJuIGZpbmRNYXRjaGluZ0JyYWNrZXQo
dGhpcywgcG9zLCBzdHJpY3QsIGNvbmZpZyk7CisgIH0pOworICBDb2RlTWlycm9yLmRlZmluZUV4
dGVuc2lvbigic2NhbkZvckJyYWNrZXQiLCBmdW5jdGlvbihwb3MsIGRpciwgc3R5bGUsIGNvbmZp
Zyl7CisgICAgcmV0dXJuIHNjYW5Gb3JCcmFja2V0KHRoaXMsIHBvcywgZGlyLCBzdHlsZSwgY29u
ZmlnKTsKICAgfSk7Ci19KSgpOworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXkuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXku
anMKaW5kZXggYjc5MjhhNy4uYzE2YjBjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9vdmVybGF5LmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivb3Zl
cmxheS5qcwpAQCAtNiwxNSArNiwyNSBAQAogLy8gb3ZlcmxheSB3aW5zLCB1bmxlc3MgdGhlIGNv
bWJpbmUgYXJndW1lbnQgd2FzIHRydWUsIGluIHdoaWNoIGNhc2UKIC8vIHRoZSBzdHlsZXMgYXJl
IGNvbWJpbmVkLgogCi0vLyBvdmVybGF5UGFyc2VyIGlzIHRoZSBvbGQsIGRlcHJlY2F0ZWQgbmFt
ZQotQ29kZU1pcnJvci5vdmVybGF5TW9kZSA9IENvZGVNaXJyb3Iub3ZlcmxheVBhcnNlciA9IGZ1
bmN0aW9uKGJhc2UsIG92ZXJsYXksIGNvbWJpbmUpIHsKKyhmdW5jdGlvbihtb2QpIHsKKyAgaWYg
KHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIp
IC8vIENvbW1vbkpTCisgICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikpOwor
ICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgLy8g
QU1ECisgICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsKKyAgZWxzZSAv
LyBQbGFpbiBicm93c2VyIGVudgorICAgIG1vZChDb2RlTWlycm9yKTsKK30pKGZ1bmN0aW9uKENv
ZGVNaXJyb3IpIHsKKyJ1c2Ugc3RyaWN0IjsKKworQ29kZU1pcnJvci5vdmVybGF5TW9kZSA9IGZ1
bmN0aW9uKGJhc2UsIG92ZXJsYXksIGNvbWJpbmUpIHsKICAgcmV0dXJuIHsKICAgICBzdGFydFN0
YXRlOiBmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiB7CiAgICAgICAgIGJhc2U6IENvZGVNaXJy
b3Iuc3RhcnRTdGF0ZShiYXNlKSwKICAgICAgICAgb3ZlcmxheTogQ29kZU1pcnJvci5zdGFydFN0
YXRlKG92ZXJsYXkpLAogICAgICAgICBiYXNlUG9zOiAwLCBiYXNlQ3VyOiBudWxsLAotICAgICAg
ICBvdmVybGF5UG9zOiAwLCBvdmVybGF5Q3VyOiBudWxsCisgICAgICAgIG92ZXJsYXlQb3M6IDAs
IG92ZXJsYXlDdXI6IG51bGwsCisgICAgICAgIGxpbmVTZWVuOiBudWxsCiAgICAgICB9OwogICAg
IH0sCiAgICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewpAQCAtMjcsNiArMzcsMTIgQEAg
Q29kZU1pcnJvci5vdmVybGF5TW9kZSA9IENvZGVNaXJyb3Iub3ZlcmxheVBhcnNlciA9IGZ1bmN0
aW9uKGJhc2UsIG92ZXJsYXksIGNvbWIKICAgICB9LAogCiAgICAgdG9rZW46IGZ1bmN0aW9uKHN0
cmVhbSwgc3RhdGUpIHsKKyAgICAgIGlmIChzdHJlYW0uc29sKCkgfHwgc3RyZWFtLnN0cmluZyAh
PSBzdGF0ZS5saW5lU2VlbiB8fAorICAgICAgICAgIE1hdGgubWluKHN0YXRlLmJhc2VQb3MsIHN0
YXRlLm92ZXJsYXlQb3MpIDwgc3RyZWFtLnN0YXJ0KSB7CisgICAgICAgIHN0YXRlLmxpbmVTZWVu
ID0gc3RyZWFtLnN0cmluZzsKKyAgICAgICAgc3RhdGUuYmFzZVBvcyA9IHN0YXRlLm92ZXJsYXlQ
b3MgPSBzdHJlYW0uc3RhcnQ7CisgICAgICB9CisKICAgICAgIGlmIChzdHJlYW0uc3RhcnQgPT0g
c3RhdGUuYmFzZVBvcykgewogICAgICAgICBzdGF0ZS5iYXNlQ3VyID0gYmFzZS50b2tlbihzdHJl
YW0sIHN0YXRlLmJhc2UpOwogICAgICAgICBzdGF0ZS5iYXNlUG9zID0gc3RyZWFtLnBvczsKQEAg
LTM3LDcgKzUzLDYgQEAgQ29kZU1pcnJvci5vdmVybGF5TW9kZSA9IENvZGVNaXJyb3Iub3Zlcmxh
eVBhcnNlciA9IGZ1bmN0aW9uKGJhc2UsIG92ZXJsYXksIGNvbWIKICAgICAgICAgc3RhdGUub3Zl
cmxheVBvcyA9IHN0cmVhbS5wb3M7CiAgICAgICB9CiAgICAgICBzdHJlYW0ucG9zID0gTWF0aC5t
aW4oc3RhdGUuYmFzZVBvcywgc3RhdGUub3ZlcmxheVBvcyk7Ci0gICAgICBpZiAoc3RyZWFtLmVv
bCgpKSBzdGF0ZS5iYXNlUG9zID0gc3RhdGUub3ZlcmxheVBvcyA9IDA7CiAKICAgICAgIGlmIChz
dGF0ZS5vdmVybGF5Q3VyID09IG51bGwpIHJldHVybiBzdGF0ZS5iYXNlQ3VyOwogICAgICAgaWYg
KHN0YXRlLmJhc2VDdXIgIT0gbnVsbCAmJiBjb21iaW5lKSByZXR1cm4gc3RhdGUuYmFzZUN1ciAr
ICIgIiArIHN0YXRlLm92ZXJsYXlDdXI7CkBAIC01NywzICs3Miw1IEBAIENvZGVNaXJyb3Iub3Zl
cmxheU1vZGUgPSBDb2RlTWlycm9yLm92ZXJsYXlQYXJzZXIgPSBmdW5jdGlvbihiYXNlLCBvdmVy
bGF5LCBjb21iCiAgICAgfQogICB9OwogfTsKKworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3BsYWNlaG9sZGVy
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9wbGFjZWhvbGRlci5qcwppbmRleCA3NDhhZmU3Li4wZmRjOWIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3Bs
YWNlaG9sZGVyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3IvcGxhY2Vob2xkZXIuanMKQEAgLTEsNCArMSwxMSBAQAotKGZ1bmN0
aW9uKCkgeworKGZ1bmN0aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9iamVj
dCIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKKyAgICBtb2QocmVx
dWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSk7CisgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUg
PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAgICBkZWZpbmUoWyIuLi8uLi9s
aWIvY29kZW1pcnJvciJdLCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52CisgICAg
bW9kKENvZGVNaXJyb3IpOworfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgewogICBDb2RlTWlycm9y
LmRlZmluZU9wdGlvbigicGxhY2Vob2xkZXIiLCAiIiwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7
CiAgICAgdmFyIHByZXYgPSBvbGQgJiYgb2xkICE9IENvZGVNaXJyb3IuSW5pdDsKICAgICBpZiAo
dmFsICYmICFwcmV2KSB7CkBAIC00NSw0ICs1Miw0IEBACiAgIGZ1bmN0aW9uIGlzRW1wdHkoY20p
IHsKICAgICByZXR1cm4gKGNtLmxpbmVDb3VudCgpID09PSAxKSAmJiAoY20uZ2V0TGluZSgwKSA9
PT0gIiIpOwogICB9Ci19KSgpOworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3J1bm1vZGUuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3J1bm1vZGUu
anMKaW5kZXggN2FhZmEyYS4uMzUxODQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9ydW5tb2RlLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvcnVu
bW9kZS5qcwpAQCAtMSwzICsxLDEzIEBACisoZnVuY3Rpb24obW9kKSB7CisgIGlmICh0eXBlb2Yg
ZXhwb3J0cyA9PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiKSAvLyBDb21t
b25KUworICAgIG1vZChyZXF1aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpKTsKKyAgZWxzZSBp
ZiAodHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAorICAg
IGRlZmluZShbIi4uLy4uL2xpYi9jb2RlbWlycm9yIl0sIG1vZCk7CisgIGVsc2UgLy8gUGxhaW4g
YnJvd3NlciBlbnYKKyAgICBtb2QoQ29kZU1pcnJvcik7Cit9KShmdW5jdGlvbihDb2RlTWlycm9y
KSB7CisidXNlIHN0cmljdCI7CisKIENvZGVNaXJyb3IucnVuTW9kZSA9IGZ1bmN0aW9uKHN0cmlu
ZywgbW9kZXNwZWMsIGNhbGxiYWNrLCBvcHRpb25zKSB7CiAgIHZhciBtb2RlID0gQ29kZU1pcnJv
ci5nZXRNb2RlKENvZGVNaXJyb3IuZGVmYXVsdHMsIG1vZGVzcGVjKTsKICAgdmFyIGllID0gL01T
SUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CkBAIC00Myw3ICs1Myw3IEBAIENvZGVN
aXJyb3IucnVuTW9kZSA9IGZ1bmN0aW9uKHN0cmluZywgbW9kZXNwZWMsIGNhbGxiYWNrLCBvcHRp
b25zKSB7CiAgICAgfTsKICAgfQogCi0gIHZhciBsaW5lcyA9IENvZGVNaXJyb3Iuc3BsaXRMaW5l
cyhzdHJpbmcpLCBzdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShtb2RlKTsKKyAgdmFyIGxp
bmVzID0gQ29kZU1pcnJvci5zcGxpdExpbmVzKHN0cmluZyksIHN0YXRlID0gKG9wdGlvbnMgJiYg
b3B0aW9ucy5zdGF0ZSkgfHwgQ29kZU1pcnJvci5zdGFydFN0YXRlKG1vZGUpOwogICBmb3IgKHZh
ciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgIGlmIChpKSBjYWxs
YmFjaygiXG4iKTsKICAgICB2YXIgc3RyZWFtID0gbmV3IENvZGVNaXJyb3IuU3RyaW5nU3RyZWFt
KGxpbmVzW2ldKTsKQEAgLTU0LDMgKzY0LDUgQEAgQ29kZU1pcnJvci5ydW5Nb2RlID0gZnVuY3Rp
b24oc3RyaW5nLCBtb2Rlc3BlYywgY2FsbGJhY2ssIG9wdGlvbnMpIHsKICAgICB9CiAgIH0KIH07
CisKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNzLmpzCmluZGV4IDljOWEwZGEuLjc0YWU5
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3Ivc2Fzcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3Nhc3MuanMKQEAgLTEsMyArMSwxMyBAQAorKGZ1
bmN0aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgdHlwZW9m
IG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKKyAgICBtb2QocmVxdWlyZSgiLi4vLi4v
bGliL2NvZGVtaXJyb3IiKSk7CisgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9u
IiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAgICBkZWZpbmUoWyIuLi8uLi9saWIvY29kZW1pcnJv
ciJdLCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52CisgICAgbW9kKENvZGVNaXJy
b3IpOworfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgeworInVzZSBzdHJpY3QiOworCiBDb2RlTWly
cm9yLmRlZmluZU1vZGUoInNhc3MiLCBmdW5jdGlvbihjb25maWcpIHsKICAgdmFyIHRva2VuUmVn
ZXhwID0gZnVuY3Rpb24od29yZHMpewogICAgIHJldHVybiBuZXcgUmVnRXhwKCJeIiArIHdvcmRz
LmpvaW4oInwiKSk7CkBAIC0zMjgsMyArMzM4LDUgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJz
YXNzIiwgZnVuY3Rpb24oY29uZmlnKSB7CiB9KTsKIAogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0
ZXh0L3gtc2FzcyIsICJzYXNzIik7CisKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zZWFyY2hjdXJzb3IuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L3NlYXJjaGN1cnNvci5qcwppbmRleCBjMDM0ZDU4Li44OTlmNDRjNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zZWFy
Y2hjdXJzb3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9zZWFyY2hjdXJzb3IuanMKQEAgLTEsNCArMSwxMiBAQAotKGZ1bmN0
aW9uKCl7CisoZnVuY3Rpb24obW9kKSB7CisgIGlmICh0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0
IiAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiKSAvLyBDb21tb25KUworICAgIG1vZChyZXF1
aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpKTsKKyAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9
PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAorICAgIGRlZmluZShbIi4uLy4uL2xp
Yi9jb2RlbWlycm9yIl0sIG1vZCk7CisgIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnYKKyAgICBt
b2QoQ29kZU1pcnJvcik7Cit9KShmdW5jdGlvbihDb2RlTWlycm9yKSB7CisgICJ1c2Ugc3RyaWN0
IjsKICAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9zOwogCiAgIGZ1bmN0aW9uIFNlYXJjaEN1cnNv
cihkb2MsIHF1ZXJ5LCBwb3MsIGNhc2VGb2xkKSB7CkBAIC00Nyw2ICs1NSw3IEBACiAgICAgICAg
ICAgICAgICAgICBtYXRjaDogbWF0Y2h9OwogICAgICAgfTsKICAgICB9IGVsc2UgeyAvLyBTdHJp
bmcgcXVlcnkKKyAgICAgIHZhciBvcmlnUXVlcnkgPSBxdWVyeTsKICAgICAgIGlmIChjYXNlRm9s
ZCkgcXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpOwogICAgICAgdmFyIGZvbGQgPSBjYXNlRm9s
ZCA/IGZ1bmN0aW9uKHN0cil7cmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO30gOiBmdW5jdGlvbihz
dHIpe3JldHVybiBzdHI7fTsKICAgICAgIHZhciB0YXJnZXQgPSBxdWVyeS5zcGxpdCgiXG4iKTsK
QEAgLTU4LDMzICs2Nyw0NSBAQAogICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKCkg
e307CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24o
cmV2ZXJzZSwgcG9zKSB7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IGZvbGQoZG9jLmdldExpbmUo
cG9zLmxpbmUpKSwgbGVuID0gcXVlcnkubGVuZ3RoLCBtYXRjaDsKLSAgICAgICAgICAgIGlmIChy
ZXZlcnNlID8gKHBvcy5jaCA+PSBsZW4gJiYgKG1hdGNoID0gbGluZS5sYXN0SW5kZXhPZihxdWVy
eSwgcG9zLmNoIC0gbGVuKSkgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICA6IChtYXRj
aCA9IGxpbmUuaW5kZXhPZihxdWVyeSwgcG9zLmNoKSkgIT0gLTEpCi0gICAgICAgICAgICAgIHJl
dHVybiB7ZnJvbTogUG9zKHBvcy5saW5lLCBtYXRjaCksCi0gICAgICAgICAgICAgICAgICAgICAg
dG86IFBvcyhwb3MubGluZSwgbWF0Y2ggKyBsZW4pfTsKKyAgICAgICAgICAgIGlmIChyZXZlcnNl
KSB7CisgICAgICAgICAgICAgIHZhciBvcmlnID0gZG9jLmdldExpbmUocG9zLmxpbmUpLnNsaWNl
KDAsIHBvcy5jaCksIGxpbmUgPSBmb2xkKG9yaWcpOworICAgICAgICAgICAgICB2YXIgbWF0Y2gg
PSBsaW5lLmxhc3RJbmRleE9mKHF1ZXJ5KTsKKyAgICAgICAgICAgICAgaWYgKG1hdGNoID4gLTEp
IHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IGFkanVzdFBvcyhvcmlnLCBsaW5lLCBtYXRjaCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiBQb3MocG9zLmxpbmUsIG1hdGNoKSwgdG86
IFBvcyhwb3MubGluZSwgbWF0Y2ggKyBvcmlnUXVlcnkubGVuZ3RoKX07CisgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgdmFyIG9yaWcgPSBkb2Mu
Z2V0TGluZShwb3MubGluZSkuc2xpY2UocG9zLmNoKSwgbGluZSA9IGZvbGQob3JpZyk7CisgICAg
ICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLmluZGV4T2YocXVlcnkpOworICAgICAgICAgICAg
ICAgaWYgKG1hdGNoID4gLTEpIHsKKyAgICAgICAgICAgICAgICAgbWF0Y2ggPSBhZGp1c3RQb3Mo
b3JpZywgbGluZSwgbWF0Y2gpICsgcG9zLmNoOworICAgICAgICAgICAgICAgICByZXR1cm4ge2Zy
b206IFBvcyhwb3MubGluZSwgbWF0Y2gpLCB0bzogUG9zKHBvcy5saW5lLCBtYXRjaCArIG9yaWdR
dWVyeS5sZW5ndGgpfTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAg
ICB9OwogICAgICAgICB9CiAgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgb3JpZ1RhcmdldCA9
IG9yaWdRdWVyeS5zcGxpdCgiXG4iKTsKICAgICAgICAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24o
cmV2ZXJzZSwgcG9zKSB7Ci0gICAgICAgICAgdmFyIGxuID0gcG9zLmxpbmUsIGlkeCA9IChyZXZl
cnNlID8gdGFyZ2V0Lmxlbmd0aCAtIDEgOiAwKSwgbWF0Y2ggPSB0YXJnZXRbaWR4XSwgbGluZSA9
IGZvbGQoZG9jLmdldExpbmUobG4pKTsKLSAgICAgICAgICB2YXIgb2Zmc2V0QSA9IChyZXZlcnNl
ID8gbGluZS5pbmRleE9mKG1hdGNoKSArIG1hdGNoLmxlbmd0aCA6IGxpbmUubGFzdEluZGV4T2Yo
bWF0Y2gpKTsKLSAgICAgICAgICBpZiAocmV2ZXJzZSA/IG9mZnNldEEgPiBwb3MuY2ggfHwgb2Zm
c2V0QSAhPSBtYXRjaC5sZW5ndGgKLSAgICAgICAgICAgICAgOiBvZmZzZXRBIDwgcG9zLmNoIHx8
IG9mZnNldEEgIT0gbGluZS5sZW5ndGggLSBtYXRjaC5sZW5ndGgpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgaWYgKHJldmVyc2UgPyAhbG4g
OiBsbiA9PSBkb2MubGluZUNvdW50KCkgLSAxKSByZXR1cm47Ci0gICAgICAgICAgICBsaW5lID0g
Zm9sZChkb2MuZ2V0TGluZShsbiArPSByZXZlcnNlID8gLTEgOiAxKSk7Ci0gICAgICAgICAgICBt
YXRjaCA9IHRhcmdldFtyZXZlcnNlID8gLS1pZHggOiArK2lkeF07Ci0gICAgICAgICAgICBpZiAo
aWR4ID4gMCAmJiBpZHggPCB0YXJnZXQubGVuZ3RoIC0gMSkgewotICAgICAgICAgICAgICBpZiAo
bGluZSAhPSBtYXRjaCkgcmV0dXJuOwotICAgICAgICAgICAgICBlbHNlIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG9mZnNldEIgPSAocmV2ZXJzZSA/IGxpbmUubGFz
dEluZGV4T2YobWF0Y2gpIDogbGluZS5pbmRleE9mKG1hdGNoKSArIG1hdGNoLmxlbmd0aCk7Ci0g
ICAgICAgICAgICBpZiAocmV2ZXJzZSA/IG9mZnNldEIgIT0gbGluZS5sZW5ndGggLSBtYXRjaC5s
ZW5ndGggOiBvZmZzZXRCICE9IG1hdGNoLmxlbmd0aCkKLSAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgdmFyIHN0YXJ0ID0gUG9zKHBvcy5saW5lLCBvZmZzZXRBKSwgZW5kID0gUG9z
KGxuLCBvZmZzZXRCKTsKLSAgICAgICAgICAgIHJldHVybiB7ZnJvbTogcmV2ZXJzZSA/IGVuZCA6
IHN0YXJ0LCB0bzogcmV2ZXJzZSA/IHN0YXJ0IDogZW5kfTsKKyAgICAgICAgICB2YXIgbGFzdCA9
IHRhcmdldC5sZW5ndGggLSAxOworICAgICAgICAgIGlmIChyZXZlcnNlKSB7CisgICAgICAgICAg
ICBpZiAocG9zLmxpbmUgLSAodGFyZ2V0Lmxlbmd0aCAtIDEpIDwgZG9jLmZpcnN0TGluZSgpKSBy
ZXR1cm47CisgICAgICAgICAgICBpZiAoZm9sZChkb2MuZ2V0TGluZShwb3MubGluZSkuc2xpY2Uo
MCwgb3JpZ1RhcmdldFtsYXN0XS5sZW5ndGgpKSAhPSB0YXJnZXRbdGFyZ2V0Lmxlbmd0aCAtIDFd
KSByZXR1cm47CisgICAgICAgICAgICB2YXIgdG8gPSBQb3MocG9zLmxpbmUsIG9yaWdUYXJnZXRb
bGFzdF0ubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAodmFyIGxuID0gcG9zLmxpbmUgLSAxLCBp
ID0gbGFzdCAtIDE7IGkgPj0gMTsgLS1pLCAtLWxuKQorICAgICAgICAgICAgICBpZiAodGFyZ2V0
W2ldICE9IGZvbGQoZG9jLmdldExpbmUobG4pKSkgcmV0dXJuOworICAgICAgICAgICAgdmFyIGxp
bmUgPSBkb2MuZ2V0TGluZShsbiksIGN1dCA9IGxpbmUubGVuZ3RoIC0gb3JpZ1RhcmdldFswXS5s
ZW5ndGg7CisgICAgICAgICAgICBpZiAoZm9sZChsaW5lLnNsaWNlKGN1dCkpICE9IHRhcmdldFsw
XSkgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiBQb3MobG4sIGN1dCksIHRvOiB0
b307CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChwb3MubGluZSArICh0YXJn
ZXQubGVuZ3RoIC0gMSkgPiBkb2MubGFzdExpbmUoKSkgcmV0dXJuOworICAgICAgICAgICAgdmFy
IGxpbmUgPSBkb2MuZ2V0TGluZShwb3MubGluZSksIGN1dCA9IGxpbmUubGVuZ3RoIC0gb3JpZ1Rh
cmdldFswXS5sZW5ndGg7CisgICAgICAgICAgICBpZiAoZm9sZChsaW5lLnNsaWNlKGN1dCkpICE9
IHRhcmdldFswXSkgcmV0dXJuOworICAgICAgICAgICAgdmFyIGZyb20gPSBQb3MocG9zLmxpbmUs
IGN1dCk7CisgICAgICAgICAgICBmb3IgKHZhciBsbiA9IHBvcy5saW5lICsgMSwgaSA9IDE7IGkg
PCBsYXN0OyArK2ksICsrbG4pCisgICAgICAgICAgICAgIGlmICh0YXJnZXRbaV0gIT0gZm9sZChk
b2MuZ2V0TGluZShsbikpKSByZXR1cm47CisgICAgICAgICAgICBpZiAoZG9jLmdldExpbmUobG4p
LnNsaWNlKDAsIG9yaWdUYXJnZXRbbGFzdF0ubGVuZ3RoKSAhPSB0YXJnZXRbbGFzdF0pIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiB7ZnJvbTogZnJvbSwgdG86IFBvcyhsbiwgb3JpZ1Rhcmdl
dFtsYXN0XS5sZW5ndGgpfTsKICAgICAgICAgICB9CiAgICAgICAgIH07CiAgICAgICB9CkBAIC0x
MDYsNyArMTI3LDYgQEAKIAogICAgICAgZm9yICg7OykgewogICAgICAgICBpZiAodGhpcy5wb3Mg
PSB0aGlzLm1hdGNoZXMocmV2ZXJzZSwgcG9zKSkgewotICAgICAgICAgIGlmICghdGhpcy5wb3Mu
ZnJvbSB8fCAhdGhpcy5wb3MudG8pIHsgY29uc29sZS5sb2codGhpcy5tYXRjaGVzLCB0aGlzLnBv
cyk7IH0KICAgICAgICAgICB0aGlzLmF0T2NjdXJyZW5jZSA9IHRydWU7CiAgICAgICAgICAgcmV0
dXJuIHRoaXMucG9zLm1hdGNoIHx8IHRydWU7CiAgICAgICAgIH0KQEAgLTEzNCwxMCArMTU0LDMz
IEBACiAgICAgfQogICB9OwogCisgIC8vIE1hcHMgYSBwb3NpdGlvbiBpbiBhIGNhc2UtZm9sZGVk
IGxpbmUgYmFjayB0byBhIHBvc2l0aW9uIGluIHRoZSBvcmlnaW5hbCBsaW5lCisgIC8vIChjb21w
ZW5zYXRpbmcgZm9yIGNvZGVwb2ludHMgaW5jcmVhc2luZyBpbiBudW1iZXIgZHVyaW5nIGZvbGRp
bmcpCisgIGZ1bmN0aW9uIGFkanVzdFBvcyhvcmlnLCBmb2xkZWQsIHBvcykgeworICAgIGlmIChv
cmlnLmxlbmd0aCA9PSBmb2xkZWQubGVuZ3RoKSByZXR1cm4gcG9zOworICAgIGZvciAodmFyIHBv
czEgPSBNYXRoLm1pbihwb3MsIG9yaWcubGVuZ3RoKTs7KSB7CisgICAgICB2YXIgbGVuMSA9IG9y
aWcuc2xpY2UoMCwgcG9zMSkudG9Mb3dlckNhc2UoKS5sZW5ndGg7CisgICAgICBpZiAobGVuMSA8
IHBvcykgKytwb3MxOworICAgICAgZWxzZSBpZiAobGVuMSA+IHBvcykgLS1wb3MxOworICAgICAg
ZWxzZSByZXR1cm4gcG9zMTsKKyAgICB9CisgIH0KKwogICBDb2RlTWlycm9yLmRlZmluZUV4dGVu
c2lvbigiZ2V0U2VhcmNoQ3Vyc29yIiwgZnVuY3Rpb24ocXVlcnksIHBvcywgY2FzZUZvbGQpIHsK
ICAgICByZXR1cm4gbmV3IFNlYXJjaEN1cnNvcih0aGlzLmRvYywgcXVlcnksIHBvcywgY2FzZUZv
bGQpOwogICB9KTsKICAgQ29kZU1pcnJvci5kZWZpbmVEb2NFeHRlbnNpb24oImdldFNlYXJjaEN1
cnNvciIsIGZ1bmN0aW9uKHF1ZXJ5LCBwb3MsIGNhc2VGb2xkKSB7CiAgICAgcmV0dXJuIG5ldyBT
ZWFyY2hDdXJzb3IodGhpcywgcXVlcnksIHBvcywgY2FzZUZvbGQpOwogICB9KTsKLX0pKCk7CisK
KyAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oInNlbGVjdE1hdGNoZXMiLCBmdW5jdGlvbihx
dWVyeSwgY2FzZUZvbGQpIHsKKyAgICB2YXIgcmFuZ2VzID0gW10sIG5leHQ7CisgICAgdmFyIGN1
ciA9IHRoaXMuZ2V0U2VhcmNoQ3Vyc29yKHF1ZXJ5LCB0aGlzLmdldEN1cnNvcigiZnJvbSIpLCBj
YXNlRm9sZCk7CisgICAgd2hpbGUgKG5leHQgPSBjdXIuZmluZE5leHQoKSkgeworICAgICAgaWYg
KENvZGVNaXJyb3IuY21wUG9zKGN1ci50bygpLCB0aGlzLmdldEN1cnNvcigidG8iKSkgPiAwKSBi
cmVhazsKKyAgICAgIHJhbmdlcy5wdXNoKHthbmNob3I6IGN1ci5mcm9tKCksIGhlYWQ6IGN1ci50
bygpfSk7CisgICAgfQorICAgIGlmIChyYW5nZXMubGVuZ3RoKQorICAgICAgdGhpcy5zZXRTZWxl
Y3Rpb25zKHJhbmdlcywgMCk7CisgIH0pOworfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivc3FsLmpz
CmluZGV4IDNiZTY4Y2EuLjQxN2RiMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivc3FsLmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivc3FsLmpzCkBA
IC0xLDMgKzEsMTMgQEAKKyhmdW5jdGlvbihtb2QpIHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09
ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCisgICAg
bW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikpOworICBlbHNlIGlmICh0eXBlb2Yg
ZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgLy8gQU1ECisgICAgZGVmaW5lKFsi
Li4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsKKyAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVu
dgorICAgIG1vZChDb2RlTWlycm9yKTsKK30pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKKyJ1c2Ug
c3RyaWN0IjsKKwogQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcs
IHBhcnNlckNvbmZpZykgewogICAidXNlIHN0cmljdCI7CiAKQEAgLTE3Nyw5ICsxODcsMTAgQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZp
ZykgewogCiAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgICB2
YXIgY3ggPSBzdGF0ZS5jb250ZXh0OwotICAgICAgaWYgKCFjeCkgcmV0dXJuIENvZGVNaXJyb3Iu
UGFzczsKLSAgICAgIGlmIChjeC5hbGlnbikgcmV0dXJuIGN4LmNvbCArICh0ZXh0QWZ0ZXIuY2hh
ckF0KDApID09IGN4LnR5cGUgPyAwIDogMSk7Ci0gICAgICBlbHNlIHJldHVybiBjeC5pbmRlbnQg
KyBjb25maWcuaW5kZW50VW5pdDsKKyAgICAgIGlmICghY3gpIHJldHVybiAwOworICAgICAgdmFy
IGNsb3NpbmcgPSB0ZXh0QWZ0ZXIuY2hhckF0KDApID09IGN4LnR5cGU7CisgICAgICBpZiAoY3gu
YWxpZ24pIHJldHVybiBjeC5jb2wgKyAoY2xvc2luZyA/IDAgOiAxKTsKKyAgICAgIGVsc2UgcmV0
dXJuIGN4LmluZGVudCArIChjbG9zaW5nID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTsKICAgICB9
LAogCiAgICAgYmxvY2tDb21tZW50U3RhcnQ6ICIvKiIsCkBAIC0zMjUsMTQgKzMzNiwyNyBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXBsc3FsIiwgewogICAgIG5hbWU6
ICAgICAgICJzcWwiLAogICAgIGNsaWVudDogICAgIHNldCgiYXBwaW5mbyBhcnJheXNpemUgYXV0
b2NvbW1pdCBhdXRvcHJpbnQgYXV0b3JlY292ZXJ5IGF1dG90cmFjZSBibG9ja3Rlcm1pbmF0b3Ig
YnJlYWsgYnRpdGxlIGNtZHNlcCBjb2xzZXAgY29tcGF0aWJpbGl0eSBjb21wdXRlIGNvbmNhdCBj
b3B5Y29tbWl0IGNvcHl0eXBlY2hlY2sgZGVmaW5lIGRlc2NyaWJlIGVjaG8gZWRpdGZpbGUgZW1i
ZWRkZWQgZXNjYXBlIGV4ZWMgZXhlY3V0ZSBmZWVkYmFjayBmbGFnZ2VyIGZsdXNoIGhlYWRpbmcg
aGVhZHNlcCBpbnN0YW5jZSBsaW5lc2l6ZSBsbm8gbG9ib2Zmc2V0IGxvZ3NvdXJjZSBsb25nIGxv
bmdjaHVua3NpemUgbWFya3VwIG5hdGl2ZSBuZXdwYWdlIG51bWZvcm1hdCBudW13aWR0aCBwYWdl
c2l6ZSBwYXVzZSBwbm8gcmVjc2VwIHJlY3NlcGNoYXIgcmVsZWFzZSByZXBmb290ZXIgcmVwaGVh
ZGVyIHNlcnZlcm91dHB1dCBzaGlmdGlub3V0IHNob3cgc2hvd21vZGUgc2l6ZSBzcG9vbCBzcWxi
bGFua2xpbmVzIHNxbGNhc2Ugc3FsY29kZSBzcWxjb250aW51ZSBzcWxudW1iZXIgc3FscGx1c2Nv
bXBhdGliaWxpdHkgc3FscHJlZml4IHNxbHByb21wdCBzcWx0ZXJtaW5hdG9yIHN1ZmZpeCB0YWIg
dGVybSB0ZXJtb3V0IHRpbWUgdGltaW5nIHRyaW1vdXQgdHJpbXNwb29sIHR0aXRsZSB1bmRlcmxp
bmUgdmVyaWZ5IHZlcnNpb24gd3JhcCIpLAotICAgIGtleXdvcmRzOiAgIHNldCgiYWJvcnQgYWNj
ZXB0IGFjY2VzcyBhZGQgYWxsIGFsdGVyIGFuZCBhbnkgYXJyYXkgYXJyYXlsZW4gYXMgYXNjIGFz
c2VydCBhc3NpZ24gYXQgYXR0cmlidXRlcyBhdWRpdCBhdXRob3JpemF0aW9uIGF2ZyBiYXNlX3Rh
YmxlIGJlZ2luIGJldHdlZW4gYmluYXJ5X2ludGVnZXIgYm9keSBib29sZWFuIGJ5IGNhc2UgY2Fz
dCBjaGFyIGNoYXJfYmFzZSBjaGVjayBjbG9zZSBjbHVzdGVyIGNsdXN0ZXJzIGNvbGF1dGggY29s
dW1uIGNvbW1lbnQgY29tbWl0IGNvbXByZXNzIGNvbm5lY3QgY29ubmVjdGVkIGNvbnN0YW50IGNv
bnN0cmFpbnQgY3Jhc2ggY3JlYXRlIGN1cnJlbnQgY3VycnZhbCBjdXJzb3IgZGF0YV9iYXNlIGRh
dGFiYXNlIGRhdGUgZGJhIGRlYWxsb2NhdGUgZGVidWdvZmYgZGVidWdvbiBkZWNpbWFsIGRlY2xh
cmUgZGVmYXVsdCBkZWZpbml0aW9uIGRlbGF5IGRlbGV0ZSBkZXNjIGRpZ2l0cyBkaXNwb3NlIGRp
c3RpbmN0IGRvIGRyb3AgZWxzZSBlbHNpZiBlbmFibGUgZW5kIGVudHJ5IGVzY2FwZSBleGNlcHRp
b24gZXhjZXB0aW9uX2luaXQgZXhjaGFuZ2UgZXhjbHVzaXZlIGV4aXN0cyBleGl0IGV4dGVybmFs
IGZhc3QgZmV0Y2ggZmlsZSBmb3IgZm9yY2UgZm9ybSBmcm9tIGZ1bmN0aW9uIGdlbmVyaWMgZ290
byBncmFudCBncm91cCBoYXZpbmcgaWRlbnRpZmllZCBpZiBpbW1lZGlhdGUgaW4gaW5jcmVtZW50
IGluZGV4IGluZGV4ZXMgaW5kaWNhdG9yIGluaXRpYWwgaW5pdHJhbnMgaW5zZXJ0IGludGVyZmFj
ZSBpbnRlcnNlY3QgaW50byBpcyBrZXkgbGV2ZWwgbGlicmFyeSBsaWtlIGxpbWl0ZWQgbG9jYWwg
bG9jayBsb2cgbG9nZ2luZyBsb25nIGxvb3AgbWFzdGVyIG1heGV4dGVudHMgbWF4dHJhbnMgbWVt
YmVyIG1pbmV4dGVudHMgbWludXMgbWlzbGFiZWwgbW9kZSBtb2RpZnkgbXVsdGlzZXQgbmV3IG5l
eHQgbm8gbm9hdWRpdCBub2NvbXByZXNzIG5vbG9nZ2luZyBub3BhcmFsbGVsIG5vdCBub3dhaXQg
bnVtYmVyX2Jhc2Ugb2JqZWN0IG9mIG9mZiBvZmZsaW5lIG9uIG9ubGluZSBvbmx5IG9wZW4gb3B0
aW9uIG9yIG9yZGVyIG91dCBwYWNrYWdlIHBhcmFsbGVsIHBhcnRpdGlvbiBwY3RmcmVlIHBjdGlu
Y3JlYXNlIHBjdHVzZWQgcGxzX2ludGVnZXIgcG9zaXRpdmUgcG9zaXRpdmVuIHByYWdtYSBwcmlt
YXJ5IHByaW9yIHByaXZhdGUgcHJpdmlsZWdlcyBwcm9jZWR1cmUgcHVibGljIHJhaXNlIHJhbmdl
IHJhdyByZWFkIHJlYnVpbGQgcmVjb3JkIHJlZiByZWZlcmVuY2VzIHJlZnJlc2ggcmVsZWFzZSBy
ZW5hbWUgcmVwbGFjZSByZXNvdXJjZSByZXN0cmljdCByZXR1cm4gcmV0dXJuaW5nIHJldmVyc2Ug
cmV2b2tlIHJvbGxiYWNrIHJvdyByb3dpZCByb3dsYWJlbCByb3dudW0gcm93cyBydW4gc2F2ZXBv
aW50IHNjaGVtYSBzZWdtZW50IHNlbGVjdCBzZXBhcmF0ZSBzZXNzaW9uIHNldCBzaGFyZSBzbmFw
c2hvdCBzb21lIHNwYWNlIHNwbGl0IHNxbCBzdGFydCBzdGF0ZW1lbnQgc3RvcmFnZSBzdWJ0eXBl
IHN1Y2Nlc3NmdWwgc3lub255bSB0YWJhdXRoIHRhYmxlIHRhYmxlcyB0YWJsZXNwYWNlIHRhc2sg
dGVybWluYXRlIHRoZW4gdG8gdHJpZ2dlciB0cnVuY2F0ZSB0eXBlIHVuaW9uIHVuaXF1ZSB1bmxp
bWl0ZWQgdW5yZWNvdmVyYWJsZSB1bnVzYWJsZSB1cGRhdGUgdXNlIHVzaW5nIHZhbGlkYXRlIHZh
bHVlIHZhbHVlcyB2YXJpYWJsZSB2aWV3IHZpZXdzIHdoZW4gd2hlbmV2ZXIgd2hlcmUgd2hpbGUg
d2l0aCB3b3JrIiksCi0gICAgYnVpbHRpbjogICAgc2V0KCJiZmlsZSBibG9iIGNoYXJhY3RlciBj
bG9iIGRlYyBmbG9hdCBpbnQgaW50ZWdlciBtbHNsYWJlbCBuYXR1cmFsIG5hdHVyYWxuIG5jaGFy
IG5jbG9iIG51bWJlciBudW1lcmljIG52YXJjaGFyMiByZWFsIHJvd3R5cGUgc2lnbnR5cGUgc21h
bGxpbnQgc3RyaW5nIHZhcmNoYXIgdmFyY2hhcjIgYWJzIGFjb3MgYWRkX21vbnRocyBhc2NpaSBh
c2luIGF0YW4gYXRhbjIgYXZlcmFnZSBiZmlsZW5hbWUgY2VpbCBjaGFydG9yb3dpZCBjaHIgY29u
Y2F0IGNvbnZlcnQgY29zIGNvc2ggY291bnQgZGVjb2RlIGRlcmVmIGR1YWwgZHVtcCBkdXBfdmFs
X29uX2luZGV4IGVtcHR5IGVycm9yIGV4cCBmYWxzZSBmbG9vciBmb3VuZCBnbGIgZ3JlYXRlc3Qg
aGV4dG9yYXcgaW5pdGNhcCBpbnN0ciBpbnN0cmIgaXNvcGVuIGxhc3RfZGF5IGxlYXN0IGxlbmdo
dCBsZW5naHRiIGxuIGxvd2VyIGxwYWQgbHRyaW0gbHViIG1ha2VfcmVmIG1heCBtaW4gbW9kIG1v
bnRoc19iZXR3ZWVuIG5ld190aW1lIG5leHRfZGF5IG5leHR2YWwgbmxzX2NoYXJzZXRfZGVjbF9s
ZW4gbmxzX2NoYXJzZXRfaWQgbmxzX2NoYXJzZXRfbmFtZSBubHNfaW5pdGNhcCBubHNfbG93ZXIg
bmxzX3NvcnQgbmxzX3VwcGVyIG5sc3NvcnQgbm9fZGF0YV9mb3VuZCBub3Rmb3VuZCBudWxsIG52
bCBvdGhlcnMgcG93ZXIgcmF3dG9oZXggcmVmdG9oZXggcm91bmQgcm93Y291bnQgcm93aWR0b2No
YXIgcnBhZCBydHJpbSBzaWduIHNpbiBzaW5oIHNvdW5kZXggc3FsY29kZSBzcWxlcnJtIHNxcnQg
c3RkZGV2IHN1YnN0ciBzdWJzdHJiIHN1bSBzeXNkYXRlIHRhbiB0YW5oIHRvX2NoYXIgdG9fZGF0
ZSB0b19sYWJlbCB0b19tdWx0aV9ieXRlIHRvX251bWJlciB0b19zaW5nbGVfYnl0ZSB0cmFuc2xh
dGUgdHJ1ZSB0cnVuYyB1aWQgdXBwZXIgdXNlciB1c2VyZW52IHZhcmlhbmNlIHZzaXplIiksCisg
ICAga2V5d29yZHM6ICAgc2V0KCJhYm9ydCBhY2NlcHQgYWNjZXNzIGFkZCBhbGwgYWx0ZXIgYW5k
IGFueSBhcnJheSBhcnJheWxlbiBhcyBhc2MgYXNzZXJ0IGFzc2lnbiBhdCBhdHRyaWJ1dGVzIGF1
ZGl0IGF1dGhvcml6YXRpb24gYXZnIGJhc2VfdGFibGUgYmVnaW4gYmV0d2VlbiBiaW5hcnlfaW50
ZWdlciBib2R5IGJvb2xlYW4gYnkgY2FzZSBjYXN0IGNoYXIgY2hhcl9iYXNlIGNoZWNrIGNsb3Nl
IGNsdXN0ZXIgY2x1c3RlcnMgY29sYXV0aCBjb2x1bW4gY29tbWVudCBjb21taXQgY29tcHJlc3Mg
Y29ubmVjdCBjb25uZWN0ZWQgY29uc3RhbnQgY29uc3RyYWludCBjcmFzaCBjcmVhdGUgY3VycmVu
dCBjdXJydmFsIGN1cnNvciBkYXRhX2Jhc2UgZGF0YWJhc2UgZGF0ZSBkYmEgZGVhbGxvY2F0ZSBk
ZWJ1Z29mZiBkZWJ1Z29uIGRlY2ltYWwgZGVjbGFyZSBkZWZhdWx0IGRlZmluaXRpb24gZGVsYXkg
ZGVsZXRlIGRlc2MgZGlnaXRzIGRpc3Bvc2UgZGlzdGluY3QgZG8gZHJvcCBlbHNlIGVsc2VpZiBl
bHNpZiBlbmFibGUgZW5kIGVudHJ5IGVzY2FwZSBleGNlcHRpb24gZXhjZXB0aW9uX2luaXQgZXhj
aGFuZ2UgZXhjbHVzaXZlIGV4aXN0cyBleGl0IGV4dGVybmFsIGZhc3QgZmV0Y2ggZmlsZSBmb3Ig
Zm9yY2UgZm9ybSBmcm9tIGZ1bmN0aW9uIGdlbmVyaWMgZ290byBncmFudCBncm91cCBoYXZpbmcg
aWRlbnRpZmllZCBpZiBpbW1lZGlhdGUgaW4gaW5jcmVtZW50IGluZGV4IGluZGV4ZXMgaW5kaWNh
dG9yIGluaXRpYWwgaW5pdHJhbnMgaW5zZXJ0IGludGVyZmFjZSBpbnRlcnNlY3QgaW50byBpcyBr
ZXkgbGV2ZWwgbGlicmFyeSBsaWtlIGxpbWl0ZWQgbG9jYWwgbG9jayBsb2cgbG9nZ2luZyBsb25n
IGxvb3AgbWFzdGVyIG1heGV4dGVudHMgbWF4dHJhbnMgbWVtYmVyIG1pbmV4dGVudHMgbWludXMg
bWlzbGFiZWwgbW9kZSBtb2RpZnkgbXVsdGlzZXQgbmV3IG5leHQgbm8gbm9hdWRpdCBub2NvbXBy
ZXNzIG5vbG9nZ2luZyBub3BhcmFsbGVsIG5vdCBub3dhaXQgbnVtYmVyX2Jhc2Ugb2JqZWN0IG9m
IG9mZiBvZmZsaW5lIG9uIG9ubGluZSBvbmx5IG9wZW4gb3B0aW9uIG9yIG9yZGVyIG91dCBwYWNr
YWdlIHBhcmFsbGVsIHBhcnRpdGlvbiBwY3RmcmVlIHBjdGluY3JlYXNlIHBjdHVzZWQgcGxzX2lu
dGVnZXIgcG9zaXRpdmUgcG9zaXRpdmVuIHByYWdtYSBwcmltYXJ5IHByaW9yIHByaXZhdGUgcHJp
dmlsZWdlcyBwcm9jZWR1cmUgcHVibGljIHJhaXNlIHJhbmdlIHJhdyByZWFkIHJlYnVpbGQgcmVj
b3JkIHJlZiByZWZlcmVuY2VzIHJlZnJlc2ggcmVsZWFzZSByZW5hbWUgcmVwbGFjZSByZXNvdXJj
ZSByZXN0cmljdCByZXR1cm4gcmV0dXJuaW5nIHJldHVybnMgcmV2ZXJzZSByZXZva2Ugcm9sbGJh
Y2sgcm93IHJvd2lkIHJvd2xhYmVsIHJvd251bSByb3dzIHJ1biBzYXZlcG9pbnQgc2NoZW1hIHNl
Z21lbnQgc2VsZWN0IHNlcGFyYXRlIHNlc3Npb24gc2V0IHNoYXJlIHNuYXBzaG90IHNvbWUgc3Bh
Y2Ugc3BsaXQgc3FsIHN0YXJ0IHN0YXRlbWVudCBzdG9yYWdlIHN1YnR5cGUgc3VjY2Vzc2Z1bCBz
eW5vbnltIHRhYmF1dGggdGFibGUgdGFibGVzIHRhYmxlc3BhY2UgdGFzayB0ZXJtaW5hdGUgdGhl
biB0byB0cmlnZ2VyIHRydW5jYXRlIHR5cGUgdW5pb24gdW5pcXVlIHVubGltaXRlZCB1bnJlY292
ZXJhYmxlIHVudXNhYmxlIHVwZGF0ZSB1c2UgdXNpbmcgdmFsaWRhdGUgdmFsdWUgdmFsdWVzIHZh
cmlhYmxlIHZpZXcgdmlld3Mgd2hlbiB3aGVuZXZlciB3aGVyZSB3aGlsZSB3aXRoIHdvcmsiKSwK
KyAgICBidWlsdGluOiAgICBzZXQoImFicyBhY29zIGFkZF9tb250aHMgYXNjaWkgYXNpbiBhdGFu
IGF0YW4yIGF2ZXJhZ2UgYmZpbGUgYmZpbGVuYW1lIGJpZ3NlcmlhbCBiaXQgYmxvYiBjZWlsIGNo
YXJhY3RlciBjaGFydG9yb3dpZCBjaHIgY2xvYiBjb25jYXQgY29udmVydCBjb3MgY29zaCBjb3Vu
dCBkZWMgZGVjb2RlIGRlcmVmIGR1YWwgZHVtcCBkdXBfdmFsX29uX2luZGV4IGVtcHR5IGVycm9y
IGV4cCBmYWxzZSBmbG9hdCBmbG9vciBmb3VuZCBnbGIgZ3JlYXRlc3QgaGV4dG9yYXcgaW5pdGNh
cCBpbnN0ciBpbnN0cmIgaW50IGludGVnZXIgaXNvcGVuIGxhc3RfZGF5IGxlYXN0IGxlbmdodCBs
ZW5naHRiIGxuIGxvd2VyIGxwYWQgbHRyaW0gbHViIG1ha2VfcmVmIG1heCBtaW4gbWxzbGFiZWwg
bW9kIG1vbnRoc19iZXR3ZWVuIG5hdHVyYWwgbmF0dXJhbG4gbmNoYXIgbmNsb2IgbmV3X3RpbWUg
bmV4dF9kYXkgbmV4dHZhbCBubHNfY2hhcnNldF9kZWNsX2xlbiBubHNfY2hhcnNldF9pZCBubHNf
Y2hhcnNldF9uYW1lIG5sc19pbml0Y2FwIG5sc19sb3dlciBubHNfc29ydCBubHNfdXBwZXIgbmxz
c29ydCBub19kYXRhX2ZvdW5kIG5vdGZvdW5kIG51bGwgbnVtYmVyIG51bWVyaWMgbnZhcmNoYXIy
IG52bCBvdGhlcnMgcG93ZXIgcmF3dG9oZXggcmVhbCByZWZ0b2hleCByb3VuZCByb3djb3VudCBy
b3dpZHRvY2hhciByb3d0eXBlIHJwYWQgcnRyaW0gc2VyaWFsIHNpZ24gc2lnbnR5cGUgc2luIHNp
bmggc21hbGxpbnQgc291bmRleCBzcWxjb2RlIHNxbGVycm0gc3FydCBzdGRkZXYgc3RyaW5nIHN1
YnN0ciBzdWJzdHJiIHN1bSBzeXNkYXRlIHRhbiB0YW5oIHRvX2NoYXIgdGV4dCB0b19kYXRlIHRv
X2xhYmVsIHRvX211bHRpX2J5dGUgdG9fbnVtYmVyIHRvX3NpbmdsZV9ieXRlIHRyYW5zbGF0ZSB0
cnVlIHRydW5jIHVpZCB1bmxvZ2dlZCB1cHBlciB1c2VyIHVzZXJlbnYgdmFyY2hhciB2YXJjaGFy
MiB2YXJpYW5jZSB2YXJ5aW5nIHZzaXplIHhtbCIpLAogICAgIG9wZXJhdG9yQ2hhcnM6IC9eWyor
XC0lPD4hPX5dLywKICAgICBkYXRlU1FMOiAgICBzZXQoImRhdGUgdGltZSB0aW1lc3RhbXAiKSwK
ICAgICBzdXBwb3J0OiAgICBzZXQoImRvdWJsZVF1b3RlIG5DaGFyQ2FzdCB6ZXJvbGVzc0Zsb2F0
IGJpbmFyeU51bWJlciBoZXhOdW1iZXIiKQogICB9KTsKKworICAvLyBDcmVhdGVkIHRvIHN1cHBv
cnQgc3BlY2lmaWMgaGl2ZSBrZXl3b3JkcworICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQv
eC1oaXZlIiwgeworICAgIG5hbWU6ICJzcWwiLAorICAgIGtleXdvcmRzOiBzZXQoInNlbGVjdCBh
bHRlciAkZWxlbSQgJGtleSQgJHZhbHVlJCBhZGQgYWZ0ZXIgYWxsIGFuYWx5emUgYW5kIGFyY2hp
dmUgYXMgYXNjIGJlZm9yZSBiZXR3ZWVuIGJpbmFyeSBib3RoIGJ1Y2tldCBidWNrZXRzIGJ5IGNh
c2NhZGUgY2FzZSBjYXN0IGNoYW5nZSBjbHVzdGVyIGNsdXN0ZXJlZCBjbHVzdGVyc3RhdHVzIGNv
bGxlY3Rpb24gY29sdW1uIGNvbHVtbnMgY29tbWVudCBjb21wdXRlIGNvbmNhdGVuYXRlIGNvbnRp
bnVlIGNyZWF0ZSBjcm9zcyBjdXJzb3IgZGF0YSBkYXRhYmFzZSBkYXRhYmFzZXMgZGJwcm9wZXJ0
aWVzIGRlZmVycmVkIGRlbGV0ZSBkZWxpbWl0ZWQgZGVzYyBkZXNjcmliZSBkaXJlY3RvcnkgZGlz
YWJsZSBkaXN0aW5jdCBkaXN0cmlidXRlIGRyb3AgZWxzZSBlbmFibGUgZW5kIGVzY2FwZWQgZXhj
bHVzaXZlIGV4aXN0cyBleHBsYWluIGV4cG9ydCBleHRlbmRlZCBleHRlcm5hbCBmYWxzZSBmZXRj
aCBmaWVsZHMgZmlsZWZvcm1hdCBmaXJzdCBmb3JtYXQgZm9ybWF0dGVkIGZyb20gZnVsbCBmdW5j
dGlvbiBmdW5jdGlvbnMgZ3JhbnQgZ3JvdXAgaGF2aW5nIGhvbGRfZGRsdGltZSBpZHhwcm9wZXJ0
aWVzIGlmIGltcG9ydCBpbiBpbmRleCBpbmRleGVzIGlucGF0aCBpbnB1dGRyaXZlciBpbnB1dGZv
cm1hdCBpbnNlcnQgaW50ZXJzZWN0IGludG8gaXMgaXRlbXMgam9pbiBrZXlzIGxhdGVyYWwgbGVm
dCBsaWtlIGxpbWl0IGxpbmVzIGxvYWQgbG9jYWwgbG9jYXRpb24gbG9jayBsb2NrcyBtYXBqb2lu
IG1hdGVyaWFsaXplZCBtaW51cyBtc2NrIG5vX2Ryb3Agbm9jb21wcmVzcyBub3Qgb2Ygb2ZmbGlu
ZSBvbiBvcHRpb24gb3Igb3JkZXIgb3V0IG91dGVyIG91dHB1dGRyaXZlciBvdXRwdXRmb3JtYXQg
b3ZlcndyaXRlIHBhcnRpdGlvbiBwYXJ0aXRpb25lZCBwYXJ0aXRpb25zIHBlcmNlbnQgcGx1cyBw
cmVzZXJ2ZSBwcm9jZWR1cmUgcHVyZ2UgcmFuZ2UgcmNmaWxlIHJlYWQgcmVhZG9ubHkgcmVhZHMg
cmVidWlsZCByZWNvcmRyZWFkZXIgcmVjb3Jkd3JpdGVyIHJlY292ZXIgcmVkdWNlIHJlZ2V4cCBy
ZW5hbWUgcmVwYWlyIHJlcGxhY2UgcmVzdHJpY3QgcmV2b2tlIHJpZ2h0IHJsaWtlIHJvdyBzY2hl
bWEgc2NoZW1hcyBzZW1pIHNlcXVlbmNlZmlsZSBzZXJkZSBzZXJkZXByb3BlcnRpZXMgc2V0IHNo
YXJlZCBzaG93IHNob3dfZGF0YWJhc2Ugc29ydCBzb3J0ZWQgc3NsIHN0YXRpc3RpY3Mgc3RvcmVk
IHN0cmVhbXRhYmxlIHRhYmxlIHRhYmxlcyB0YWJsZXNhbXBsZSB0Ymxwcm9wZXJ0aWVzIHRlbXBv
cmFyeSB0ZXJtaW5hdGVkIHRleHRmaWxlIHRoZW4gdG1wIHRvIHRvdWNoIHRyYW5zZm9ybSB0cmln
Z2VyIHRydWUgdW5hcmNoaXZlIHVuZG8gdW5pb24gdW5pcXVlam9pbiB1bmxvY2sgdXBkYXRlIHVz
ZSB1c2luZyB1dGMgdXRjX3RtZXN0YW1wIHZpZXcgd2hlbiB3aGVyZSB3aGlsZSB3aXRoIiksCisg
ICAgYnVpbHRpbjogc2V0KCJib29sIGJvb2xlYW4gbG9uZyB0aW1lc3RhbXAgdGlueWludCBzbWFs
bGludCBiaWdpbnQgaW50IGZsb2F0IGRvdWJsZSBkYXRlIGRhdGV0aW1lIHVuc2lnbmVkIHN0cmlu
ZyBhcnJheSBzdHJ1Y3QgbWFwIHVuaW9udHlwZSIpLAorICAgIGF0b21zOiBzZXQoImZhbHNlIHRy
dWUgbnVsbCB1bmtub3duIiksCisgICAgb3BlcmF0b3JDaGFyczogL15bKitcLSU8PiE9XS8sCisg
ICAgZGF0ZVNRTDogc2V0KCJkYXRlIHRpbWVzdGFtcCIpLAorICAgIHN1cHBvcnQ6IHNldCgiT0RC
Q2RvdFRhYmxlIGRvdWJsZVF1b3RlIGJpbmFyeU51bWJlciBoZXhOdW1iZXIiKQorICB9KTsKIH0o
KSk7CiAKK30pOworCiAvKgogICBIb3cgUHJvcGVydGllcyBvZiBNaW1lIFR5cGVzIGFyZSB1c2Vk
IGJ5IFNRTCBNb2RlCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci94bWwuanMKaW5kZXggNGY0OWUwNy4uYjhjNDI5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJu
YWwvQ29kZU1pcnJvci94bWwuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci94bWwuanMKQEAgLTEsNyArMSwxOCBAQAorKGZ1bmN0
aW9uKG1vZCkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgdHlwZW9mIG1v
ZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKKyAgICBtb2QocmVxdWlyZSgiLi4vLi4vbGli
L2NvZGVtaXJyb3IiKSk7CisgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIiAm
JiBkZWZpbmUuYW1kKSAvLyBBTUQKKyAgICBkZWZpbmUoWyIuLi8uLi9saWIvY29kZW1pcnJvciJd
LCBtb2QpOworICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52CisgICAgbW9kKENvZGVNaXJyb3Ip
OworfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgeworInVzZSBzdHJpY3QiOworCiBDb2RlTWlycm9y
LmRlZmluZU1vZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIHZh
ciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CiAgIHZhciBtdWx0aWxpbmVUYWdJbmRl
bnRGYWN0b3IgPSBwYXJzZXJDb25maWcubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yIHx8IDE7Ci0g
IHZhciBtdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnID0gcGFyc2VyQ29uZmlnLm11bHRpbGluZVRh
Z0luZGVudFBhc3RUYWcgfHwgdHJ1ZTsKKyAgdmFyIG11bHRpbGluZVRhZ0luZGVudFBhc3RUYWcg
PSBwYXJzZXJDb25maWcubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZzsKKyAgaWYgKG11bHRpbGlu
ZVRhZ0luZGVudFBhc3RUYWcgPT0gbnVsbCkgbXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZyA9IHRy
dWU7CiAKICAgdmFyIEtsdWRnZXMgPSBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyB7CiAgICAgYXV0
b1NlbGZDbG9zZXJzOiB7J2FyZWEnOiB0cnVlLCAnYmFzZSc6IHRydWUsICdicic6IHRydWUsICdj
b2wnOiB0cnVlLCAnY29tbWFuZCc6IHRydWUsCkBAIC0zMywxOSArNDQsMjEgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAg
IH0sCiAgICAgZG9Ob3RJbmRlbnQ6IHsicHJlIjogdHJ1ZX0sCiAgICAgYWxsb3dVbnF1b3RlZDog
dHJ1ZSwKLSAgICBhbGxvd01pc3Npbmc6IHRydWUKKyAgICBhbGxvd01pc3Npbmc6IHRydWUsCisg
ICAgY2FzZUZvbGQ6IHRydWUKICAgfSA6IHsKICAgICBhdXRvU2VsZkNsb3NlcnM6IHt9LAogICAg
IGltcGxpY2l0bHlDbG9zZWQ6IHt9LAogICAgIGNvbnRleHRHcmFiYmVyczoge30sCiAgICAgZG9O
b3RJbmRlbnQ6IHt9LAogICAgIGFsbG93VW5xdW90ZWQ6IGZhbHNlLAotICAgIGFsbG93TWlzc2lu
ZzogZmFsc2UKKyAgICBhbGxvd01pc3Npbmc6IGZhbHNlLAorICAgIGNhc2VGb2xkOiBmYWxzZQog
ICB9OwogICB2YXIgYWxpZ25DREFUQSA9IHBhcnNlckNvbmZpZy5hbGlnbkNEQVRBOwogCiAgIC8v
IFJldHVybiB2YXJpYWJsZXMgZm9yIHRva2VuaXplcnMKLSAgdmFyIHRhZ05hbWUsIHR5cGU7Cisg
IHZhciB0eXBlLCBzZXRTdHlsZTsKIAogICBmdW5jdGlvbiBpblRleHQoc3RyZWFtLCBzdGF0ZSkg
ewogICAgIGZ1bmN0aW9uIGNoYWluKHBhcnNlcikgewpAQCAtNzIsMTQgKzg1LDkgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewog
ICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQmxvY2soIm1ldGEiLCAiPz4iKTsKICAgICAgICAg
cmV0dXJuICJtZXRhIjsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBpc0Nsb3NlID0gc3Ry
ZWFtLmVhdCgiLyIpOwotICAgICAgICB0YWdOYW1lID0gIiI7Ci0gICAgICAgIHZhciBjOwotICAg
ICAgICB3aGlsZSAoKGMgPSBzdHJlYW0uZWF0KC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKSkpIHRh
Z05hbWUgKz0gYzsKLSAgICAgICAgaWYgKCF0YWdOYW1lKSByZXR1cm4gInRhZyBlcnJvciI7Ci0g
ICAgICAgIHR5cGUgPSBpc0Nsb3NlID8gImNsb3NlVGFnIiA6ICJvcGVuVGFnIjsKKyAgICAgICAg
dHlwZSA9IHN0cmVhbS5lYXQoIi8iKSA/ICJjbG9zZVRhZyIgOiAib3BlblRhZyI7CiAgICAgICAg
IHN0YXRlLnRva2VuaXplID0gaW5UYWc7Ci0gICAgICAgIHJldHVybiAidGFnIjsKKyAgICAgICAg
cmV0dXJuICJ0YWcgYnJhY2tldCI7CiAgICAgICB9CiAgICAgfSBlbHNlIGlmIChjaCA9PSAiJiIp
IHsKICAgICAgIHZhciBvazsKQEAgLTEwNCwxMiArMTEyLDE0IEBAIENvZGVNaXJyb3IuZGVmaW5l
TW9kZSgieG1sIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAoY2gg
PT0gIj4iIHx8IChjaCA9PSAiLyIgJiYgc3RyZWFtLmVhdCgiPiIpKSkgewogICAgICAgc3RhdGUu
dG9rZW5pemUgPSBpblRleHQ7CiAgICAgICB0eXBlID0gY2ggPT0gIj4iID8gImVuZFRhZyIgOiAi
c2VsZmNsb3NlVGFnIjsKLSAgICAgIHJldHVybiAidGFnIjsKKyAgICAgIHJldHVybiAidGFnIGJy
YWNrZXQiOwogICAgIH0gZWxzZSBpZiAoY2ggPT0gIj0iKSB7CiAgICAgICB0eXBlID0gImVxdWFs
cyI7CiAgICAgICByZXR1cm4gbnVsbDsKICAgICB9IGVsc2UgaWYgKGNoID09ICI8IikgewogICAg
ICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7CisgICAgICBzdGF0ZS5zdGF0ZSA9IGJhc2VTdGF0
ZTsKKyAgICAgIHN0YXRlLnRhZ05hbWUgPSBzdGF0ZS50YWdTdGFydCA9IG51bGw7CiAgICAgICB2
YXIgbmV4dCA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgcmV0dXJuIG5l
eHQgPyBuZXh0ICsgIiBlcnJvciIgOiAiZXJyb3IiOwogICAgIH0gZWxzZSBpZiAoL1tcJ1wiXS8u
dGVzdChjaCkpIHsKQEAgLTExNyw3ICsxMjcsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInht
bCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICBzdGF0ZS5zdHJpbmdT
dGFydENvbCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShz
dHJlYW0sIHN0YXRlKTsKICAgICB9IGVsc2UgewotICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXlxz
XHUwMGEwPTw+XCJcJ10vKTsKKyAgICAgIHN0cmVhbS5tYXRjaCgvXlteXHNcdTAwYTA9PD5cIlwn
XSpbXlxzXHUwMGEwPTw+XCJcJ1wvXS8pOwogICAgICAgcmV0dXJuICJ3b3JkIjsKICAgICB9CiAg
IH0KQEAgLTE2OSwxMzkgKzE3OSwxNDEgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBm
dW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIH07CiAgIH0KIAotICB2YXIgY3Vy
U3RhdGUsIGN1clN0cmVhbSwgc2V0U3R5bGU7Ci0gIGZ1bmN0aW9uIHBhc3MoKSB7Ci0gICAgZm9y
ICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3VyU3RhdGUuY2Mu
cHVzaChhcmd1bWVudHNbaV0pOwotICB9Ci0gIGZ1bmN0aW9uIGNvbnQoKSB7Ci0gICAgcGFzcy5h
cHBseShudWxsLCBhcmd1bWVudHMpOwotICAgIHJldHVybiB0cnVlOworICBmdW5jdGlvbiBDb250
ZXh0KHN0YXRlLCB0YWdOYW1lLCBzdGFydE9mTGluZSkgeworICAgIHRoaXMucHJldiA9IHN0YXRl
LmNvbnRleHQ7CisgICAgdGhpcy50YWdOYW1lID0gdGFnTmFtZTsKKyAgICB0aGlzLmluZGVudCA9
IHN0YXRlLmluZGVudGVkOworICAgIHRoaXMuc3RhcnRPZkxpbmUgPSBzdGFydE9mTGluZTsKKyAg
ICBpZiAoS2x1ZGdlcy5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lKSB8fCAoc3Rh
dGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0Lm5vSW5kZW50KSkKKyAgICAgIHRoaXMubm9JbmRl
bnQgPSB0cnVlOwogICB9Ci0KLSAgZnVuY3Rpb24gcHVzaENvbnRleHQodGFnTmFtZSwgc3RhcnRP
ZkxpbmUpIHsKLSAgICB2YXIgbm9JbmRlbnQgPSBLbHVkZ2VzLmRvTm90SW5kZW50Lmhhc093blBy
b3BlcnR5KHRhZ05hbWUpIHx8IChjdXJTdGF0ZS5jb250ZXh0ICYmIGN1clN0YXRlLmNvbnRleHQu
bm9JbmRlbnQpOwotICAgIGN1clN0YXRlLmNvbnRleHQgPSB7Ci0gICAgICBwcmV2OiBjdXJTdGF0
ZS5jb250ZXh0LAotICAgICAgdGFnTmFtZTogdGFnTmFtZSwKLSAgICAgIGluZGVudDogY3VyU3Rh
dGUuaW5kZW50ZWQsCi0gICAgICBzdGFydE9mTGluZTogc3RhcnRPZkxpbmUsCi0gICAgICBub0lu
ZGVudDogbm9JbmRlbnQKLSAgICB9OworICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7Cisg
ICAgaWYgKHN0YXRlLmNvbnRleHQpIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7
CiAgIH0KLSAgZnVuY3Rpb24gcG9wQ29udGV4dCgpIHsKLSAgICBpZiAoY3VyU3RhdGUuY29udGV4
dCkgY3VyU3RhdGUuY29udGV4dCA9IGN1clN0YXRlLmNvbnRleHQucHJldjsKKyAgZnVuY3Rpb24g
bWF5YmVQb3BDb250ZXh0KHN0YXRlLCBuZXh0VGFnTmFtZSkgeworICAgIHZhciBwYXJlbnRUYWdO
YW1lOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICBpZiAoIXN0YXRlLmNvbnRleHQpIHsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgcGFyZW50VGFnTmFtZSA9IHN0YXRlLmNvbnRl
eHQudGFnTmFtZTsKKyAgICAgIGlmICghS2x1ZGdlcy5jb250ZXh0R3JhYmJlcnMuaGFzT3duUHJv
cGVydHkocGFyZW50VGFnTmFtZSkgfHwKKyAgICAgICAgICAhS2x1ZGdlcy5jb250ZXh0R3JhYmJl
cnNbcGFyZW50VGFnTmFtZV0uaGFzT3duUHJvcGVydHkobmV4dFRhZ05hbWUpKSB7CisgICAgICAg
IHJldHVybjsKKyAgICAgIH0KKyAgICAgIHBvcENvbnRleHQoc3RhdGUpOworICAgIH0KICAgfQog
Ci0gIGZ1bmN0aW9uIGVsZW1lbnQodHlwZSkgeworICBmdW5jdGlvbiBiYXNlU3RhdGUodHlwZSwg
c3RyZWFtLCBzdGF0ZSkgewogICAgIGlmICh0eXBlID09ICJvcGVuVGFnIikgewotICAgICAgY3Vy
U3RhdGUudGFnTmFtZSA9IHRhZ05hbWU7Ci0gICAgICBjdXJTdGF0ZS50YWdTdGFydCA9IGN1clN0
cmVhbS5jb2x1bW4oKTsKLSAgICAgIHJldHVybiBjb250KGF0dHJpYnV0ZXMsIGVuZHRhZyhjdXJT
dGF0ZS5zdGFydE9mTGluZSkpOworICAgICAgc3RhdGUudGFnU3RhcnQgPSBzdHJlYW0uY29sdW1u
KCk7CisgICAgICByZXR1cm4gdGFnTmFtZVN0YXRlOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSAi
Y2xvc2VUYWciKSB7Ci0gICAgICB2YXIgZXJyID0gZmFsc2U7Ci0gICAgICBpZiAoY3VyU3RhdGUu
Y29udGV4dCkgewotICAgICAgICBpZiAoY3VyU3RhdGUuY29udGV4dC50YWdOYW1lICE9IHRhZ05h
bWUpIHsKLSAgICAgICAgICBpZiAoS2x1ZGdlcy5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3Bl
cnR5KGN1clN0YXRlLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkgewotICAgICAgICAg
ICAgcG9wQ29udGV4dCgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlcnIgPSAhY3VyU3RhdGUu
Y29udGV4dCB8fCBjdXJTdGF0ZS5jb250ZXh0LnRhZ05hbWUgIT0gdGFnTmFtZTsKLSAgICAgICAg
fQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJyID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlm
IChlcnIpIHNldFN0eWxlID0gImVycm9yIjsKLSAgICAgIHJldHVybiBjb250KGVuZGNsb3NldGFn
KGVycikpOworICAgICAgcmV0dXJuIGNsb3NlVGFnTmFtZVN0YXRlOworICAgIH0gZWxzZSB7Cisg
ICAgICByZXR1cm4gYmFzZVN0YXRlOwogICAgIH0KLSAgICByZXR1cm4gY29udCgpOwotICB9Ci0g
IGZ1bmN0aW9uIGVuZHRhZyhzdGFydE9mTGluZSkgewotICAgIHJldHVybiBmdW5jdGlvbih0eXBl
KSB7Ci0gICAgICB2YXIgdGFnTmFtZSA9IGN1clN0YXRlLnRhZ05hbWU7Ci0gICAgICBjdXJTdGF0
ZS50YWdOYW1lID0gY3VyU3RhdGUudGFnU3RhcnQgPSBudWxsOwotICAgICAgaWYgKHR5cGUgPT0g
InNlbGZjbG9zZVRhZyIgfHwKLSAgICAgICAgICAodHlwZSA9PSAiZW5kVGFnIiAmJiBLbHVkZ2Vz
LmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSkg
ewotICAgICAgICBtYXliZVBvcENvbnRleHQodGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKLSAgICAg
ICAgcmV0dXJuIGNvbnQoKTsKLSAgICAgIH0KLSAgICAgIGlmICh0eXBlID09ICJlbmRUYWciKSB7
Ci0gICAgICAgIG1heWJlUG9wQ29udGV4dCh0YWdOYW1lLnRvTG93ZXJDYXNlKCkpOwotICAgICAg
ICBwdXNoQ29udGV4dCh0YWdOYW1lLCBzdGFydE9mTGluZSk7Ci0gICAgICAgIHJldHVybiBjb250
KCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gY29udCgpOwotICAgIH07CiAgIH0KLSAgZnVuY3Rp
b24gZW5kY2xvc2V0YWcoZXJyKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHsKLSAgICAg
IGlmIChlcnIpIHNldFN0eWxlID0gImVycm9yIjsKLSAgICAgIGlmICh0eXBlID09ICJlbmRUYWci
KSB7IHBvcENvbnRleHQoKTsgcmV0dXJuIGNvbnQoKTsgfQorICBmdW5jdGlvbiB0YWdOYW1lU3Rh
dGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09ICJ3b3JkIikgeworICAg
ICAgc3RhdGUudGFnTmFtZSA9IHN0cmVhbS5jdXJyZW50KCk7CisgICAgICBzZXRTdHlsZSA9ICJ0
YWciOworICAgICAgcmV0dXJuIGF0dHJTdGF0ZTsKKyAgICB9IGVsc2UgewogICAgICAgc2V0U3R5
bGUgPSAiZXJyb3IiOwotICAgICAgcmV0dXJuIGNvbnQoYXJndW1lbnRzLmNhbGxlZSk7Ci0gICAg
fTsKKyAgICAgIHJldHVybiB0YWdOYW1lU3RhdGU7CisgICAgfQogICB9Ci0gIGZ1bmN0aW9uIG1h
eWJlUG9wQ29udGV4dChuZXh0VGFnTmFtZSkgewotICAgIHZhciBwYXJlbnRUYWdOYW1lOwotICAg
IHdoaWxlICh0cnVlKSB7Ci0gICAgICBpZiAoIWN1clN0YXRlLmNvbnRleHQpIHsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQotICAgICAgcGFyZW50VGFnTmFtZSA9IGN1clN0YXRlLmNvbnRleHQu
dGFnTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgaWYgKCFLbHVkZ2VzLmNvbnRleHRHcmFiYmVy
cy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRUYWdOYW1lKSB8fAotICAgICAgICAgICFLbHVkZ2VzLmNv
bnRleHRHcmFiYmVyc1twYXJlbnRUYWdOYW1lXS5oYXNPd25Qcm9wZXJ0eShuZXh0VGFnTmFtZSkp
IHsKLSAgICAgICAgcmV0dXJuOworICBmdW5jdGlvbiBjbG9zZVRhZ05hbWVTdGF0ZSh0eXBlLCBz
dHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CisgICAgICB2YXIgdGFn
TmFtZSA9IHN0cmVhbS5jdXJyZW50KCk7CisgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBzdGF0
ZS5jb250ZXh0LnRhZ05hbWUgIT0gdGFnTmFtZSAmJgorICAgICAgICAgIEtsdWRnZXMuaW1wbGlj
aXRseUNsb3NlZC5oYXNPd25Qcm9wZXJ0eShzdGF0ZS5jb250ZXh0LnRhZ05hbWUpKQorICAgICAg
ICBwb3BDb250ZXh0KHN0YXRlKTsKKyAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNv
bnRleHQudGFnTmFtZSA9PSB0YWdOYW1lKSB7CisgICAgICAgIHNldFN0eWxlID0gInRhZyI7Cisg
ICAgICAgIHJldHVybiBjbG9zZVN0YXRlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0U3R5
bGUgPSAidGFnIGVycm9yIjsKKyAgICAgICAgcmV0dXJuIGNsb3NlU3RhdGVFcnI7CiAgICAgICB9
Ci0gICAgICBwb3BDb250ZXh0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHNldFN0eWxlID0gImVy
cm9yIjsKKyAgICAgIHJldHVybiBjbG9zZVN0YXRlRXJyOwogICAgIH0KICAgfQogCi0gIGZ1bmN0
aW9uIGF0dHJpYnV0ZXModHlwZSkgewotICAgIGlmICh0eXBlID09ICJ3b3JkIikge3NldFN0eWxl
ID0gImF0dHJpYnV0ZSI7IHJldHVybiBjb250KGF0dHJpYnV0ZSwgYXR0cmlidXRlcyk7fQotICAg
IGlmICh0eXBlID09ICJlbmRUYWciIHx8IHR5cGUgPT0gInNlbGZjbG9zZVRhZyIpIHJldHVybiBw
YXNzKCk7CisgIGZ1bmN0aW9uIGNsb3NlU3RhdGUodHlwZSwgX3N0cmVhbSwgc3RhdGUpIHsKKyAg
ICBpZiAodHlwZSAhPSAiZW5kVGFnIikgeworICAgICAgc2V0U3R5bGUgPSAiZXJyb3IiOworICAg
ICAgcmV0dXJuIGNsb3NlU3RhdGU7CisgICAgfQorICAgIHBvcENvbnRleHQoc3RhdGUpOworICAg
IHJldHVybiBiYXNlU3RhdGU7CisgIH0KKyAgZnVuY3Rpb24gY2xvc2VTdGF0ZUVycih0eXBlLCBz
dHJlYW0sIHN0YXRlKSB7CisgICAgc2V0U3R5bGUgPSAiZXJyb3IiOworICAgIHJldHVybiBjbG9z
ZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICB9CisKKyAgZnVuY3Rpb24gYXR0clN0YXRl
KHR5cGUsIF9zdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CisgICAg
ICBzZXRTdHlsZSA9ICJhdHRyaWJ1dGUiOworICAgICAgcmV0dXJuIGF0dHJFcVN0YXRlOworICAg
IH0gZWxzZSBpZiAodHlwZSA9PSAiZW5kVGFnIiB8fCB0eXBlID09ICJzZWxmY2xvc2VUYWciKSB7
CisgICAgICB2YXIgdGFnTmFtZSA9IHN0YXRlLnRhZ05hbWUsIHRhZ1N0YXJ0ID0gc3RhdGUudGFn
U3RhcnQ7CisgICAgICBzdGF0ZS50YWdOYW1lID0gc3RhdGUudGFnU3RhcnQgPSBudWxsOworICAg
ICAgaWYgKHR5cGUgPT0gInNlbGZjbG9zZVRhZyIgfHwKKyAgICAgICAgICBLbHVkZ2VzLmF1dG9T
ZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lKSkgeworICAgICAgICBtYXliZVBvcENv
bnRleHQoc3RhdGUsIHRhZ05hbWUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbWF5YmVQb3BD
b250ZXh0KHN0YXRlLCB0YWdOYW1lKTsKKyAgICAgICAgc3RhdGUuY29udGV4dCA9IG5ldyBDb250
ZXh0KHN0YXRlLCB0YWdOYW1lLCB0YWdTdGFydCA9PSBzdGF0ZS5pbmRlbnRlZCk7CisgICAgICB9
CisgICAgICByZXR1cm4gYmFzZVN0YXRlOworICAgIH0KICAgICBzZXRTdHlsZSA9ICJlcnJvciI7
Ci0gICAgcmV0dXJuIGNvbnQoYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIGF0dHJTdGF0ZTsKICAg
fQotICBmdW5jdGlvbiBhdHRyaWJ1dGUodHlwZSkgewotICAgIGlmICh0eXBlID09ICJlcXVhbHMi
KSByZXR1cm4gY29udChhdHR2YWx1ZSwgYXR0cmlidXRlcyk7CisgIGZ1bmN0aW9uIGF0dHJFcVN0
YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlwZSA9PSAiZXF1YWxzIikgcmV0
dXJuIGF0dHJWYWx1ZVN0YXRlOwogICAgIGlmICghS2x1ZGdlcy5hbGxvd01pc3NpbmcpIHNldFN0
eWxlID0gImVycm9yIjsKLSAgICBlbHNlIGlmICh0eXBlID09ICJ3b3JkIikge3NldFN0eWxlID0g
ImF0dHJpYnV0ZSI7IHJldHVybiBjb250KGF0dHJpYnV0ZSwgYXR0cmlidXRlcyk7fQotICAgIHJl
dHVybiAodHlwZSA9PSAiZW5kVGFnIiB8fCB0eXBlID09ICJzZWxmY2xvc2VUYWciKSA/IHBhc3Mo
KSA6IGNvbnQoKTsKKyAgICByZXR1cm4gYXR0clN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwog
ICB9Ci0gIGZ1bmN0aW9uIGF0dHZhbHVlKHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAic3RyaW5n
IikgcmV0dXJuIGNvbnQoYXR0dmFsdWVtYXliZSk7Ci0gICAgaWYgKHR5cGUgPT0gIndvcmQiICYm
IEtsdWRnZXMuYWxsb3dVbnF1b3RlZCkge3NldFN0eWxlID0gInN0cmluZyI7IHJldHVybiBjb250
KCk7fQorICBmdW5jdGlvbiBhdHRyVmFsdWVTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Cisg
ICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJldHVybiBhdHRyQ29udGludWVkU3RhdGU7CisgICAg
aWYgKHR5cGUgPT0gIndvcmQiICYmIEtsdWRnZXMuYWxsb3dVbnF1b3RlZCkge3NldFN0eWxlID0g
InN0cmluZyI7IHJldHVybiBhdHRyU3RhdGU7fQogICAgIHNldFN0eWxlID0gImVycm9yIjsKLSAg
ICByZXR1cm4gKHR5cGUgPT0gImVuZFRhZyIgfHwgdHlwZSA9PSAic2VsZkNsb3NlVGFnIikgPyBw
YXNzKCkgOiBjb250KCk7CisgICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRl
KTsKICAgfQotICBmdW5jdGlvbiBhdHR2YWx1ZW1heWJlKHR5cGUpIHsKLSAgICBpZiAodHlwZSA9
PSAic3RyaW5nIikgcmV0dXJuIGNvbnQoYXR0dmFsdWVtYXliZSk7Ci0gICAgZWxzZSByZXR1cm4g
cGFzcygpOworICBmdW5jdGlvbiBhdHRyQ29udGludWVkU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0
ZSkgeworICAgIGlmICh0eXBlID09ICJzdHJpbmciKSByZXR1cm4gYXR0ckNvbnRpbnVlZFN0YXRl
OworICAgIHJldHVybiBhdHRyU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSk7CiAgIH0KIAogICBy
ZXR1cm4gewogICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHt0b2tl
bml6ZTogaW5UZXh0LCBjYzogW10sIGluZGVudGVkOiAwLCBzdGFydE9mTGluZTogdHJ1ZSwgdGFn
TmFtZTogbnVsbCwgdGFnU3RhcnQ6IG51bGwsIGNvbnRleHQ6IG51bGx9OworICAgICAgcmV0dXJu
IHt0b2tlbml6ZTogaW5UZXh0LAorICAgICAgICAgICAgICBzdGF0ZTogYmFzZVN0YXRlLAorICAg
ICAgICAgICAgICBpbmRlbnRlZDogMCwKKyAgICAgICAgICAgICAgdGFnTmFtZTogbnVsbCwgdGFn
U3RhcnQ6IG51bGwsCisgICAgICAgICAgICAgIGNvbnRleHQ6IG51bGx9OwogICAgIH0sCiAKICAg
ICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgaWYgKCFzdGF0ZS50YWdO
YW1lICYmIHN0cmVhbS5zb2woKSkgewotICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7
CisgICAgICBpZiAoIXN0YXRlLnRhZ05hbWUgJiYgc3RyZWFtLnNvbCgpKQogICAgICAgICBzdGF0
ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwotICAgICAgfQotICAgICAgaWYgKHN0
cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKIAotICAgICAgc2V0U3R5bGUgPSB0eXBlID0g
dGFnTmFtZSA9IG51bGw7CisgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxs
OworICAgICAgdHlwZSA9IG51bGw7CiAgICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShz
dHJlYW0sIHN0YXRlKTsKLSAgICAgIHN0YXRlLnR5cGUgPSB0eXBlOwogICAgICAgaWYgKChzdHls
ZSB8fCB0eXBlKSAmJiBzdHlsZSAhPSAiY29tbWVudCIpIHsKLSAgICAgICAgY3VyU3RhdGUgPSBz
dGF0ZTsgY3VyU3RyZWFtID0gc3RyZWFtOwotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ICAgIHZhciBjb21iID0gc3RhdGUuY2MucG9wKCkgfHwgZWxlbWVudDsKLSAgICAgICAgICBpZiAo
Y29tYih0eXBlIHx8IHN0eWxlKSkgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgc2V0U3R5bGUg
PSBudWxsOworICAgICAgICBzdGF0ZS5zdGF0ZSA9IHN0YXRlLnN0YXRlKHR5cGUgfHwgc3R5bGUs
IHN0cmVhbSwgc3RhdGUpOworICAgICAgICBpZiAoc2V0U3R5bGUpCisgICAgICAgICAgc3R5bGUg
PSBzZXRTdHlsZSA9PSAiZXJyb3IiID8gc3R5bGUgKyAiIGVycm9yIiA6IHNldFN0eWxlOwogICAg
ICAgfQotICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTsKLSAgICAgIGlmIChzZXRTdHls
ZSkKLSAgICAgICAgc3R5bGUgPSBzZXRTdHlsZSA9PSAiZXJyb3IiID8gc3R5bGUgKyAiIGVycm9y
IiA6IHNldFN0eWxlOwogICAgICAgcmV0dXJuIHN0eWxlOwogICAgIH0sCiAKQEAgLTMxMSw4ICsz
MjMsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFy
c2VyQ29uZmlnKSB7CiAgICAgICBpZiAoc3RhdGUudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSkgewog
ICAgICAgICByZXR1cm4gc3RhdGUuc3RyaW5nU3RhcnRDb2wgKyAxOwogICAgICAgfQotICAgICAg
aWYgKChzdGF0ZS50b2tlbml6ZSAhPSBpblRhZyAmJiBzdGF0ZS50b2tlbml6ZSAhPSBpblRleHQp
IHx8Ci0gICAgICAgICAgY29udGV4dCAmJiBjb250ZXh0Lm5vSW5kZW50KQorICAgICAgaWYgKGNv
bnRleHQgJiYgY29udGV4dC5ub0luZGVudCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAg
IGlmIChzdGF0ZS50b2tlbml6ZSAhPSBpblRhZyAmJiBzdGF0ZS50b2tlbml6ZSAhPSBpblRleHQp
CiAgICAgICAgIHJldHVybiBmdWxsTGluZSA/IGZ1bGxMaW5lLm1hdGNoKC9eKFxzKikvKVswXS5s
ZW5ndGggOiAwOwogICAgICAgLy8gSW5kZW50IHRoZSBzdGFydHMgb2YgYXR0cmlidXRlIG5hbWVz
LgogICAgICAgaWYgKHN0YXRlLnRhZ05hbWUpIHsKQEAgLTMyMiwxNSArMzM0LDM0IEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
ICAgICAgICAgICByZXR1cm4gc3RhdGUudGFnU3RhcnQgKyBpbmRlbnRVbml0ICogbXVsdGlsaW5l
VGFnSW5kZW50RmFjdG9yOwogICAgICAgfQogICAgICAgaWYgKGFsaWduQ0RBVEEgJiYgLzwhXFtD
REFUQVxbLy50ZXN0KHRleHRBZnRlcikpIHJldHVybiAwOwotICAgICAgaWYgKGNvbnRleHQgJiYg
L148XC8vLnRlc3QodGV4dEFmdGVyKSkKLSAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjsK
KyAgICAgIHZhciB0YWdBZnRlciA9IHRleHRBZnRlciAmJiAvXjwoXC8pPyhbXHdfOlwuLV0qKS8u
ZXhlYyh0ZXh0QWZ0ZXIpOworICAgICAgaWYgKHRhZ0FmdGVyICYmIHRhZ0FmdGVyWzFdKSB7IC8v
IENsb3NpbmcgdGFnIHNwb3R0ZWQKKyAgICAgICAgd2hpbGUgKGNvbnRleHQpIHsKKyAgICAgICAg
ICBpZiAoY29udGV4dC50YWdOYW1lID09IHRhZ0FmdGVyWzJdKSB7CisgICAgICAgICAgICBjb250
ZXh0ID0gY29udGV4dC5wcmV2OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfSBlbHNl
IGlmIChLbHVkZ2VzLmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoY29udGV4dC50YWdO
YW1lKSkgeworICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjsKKyAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICB9IGVsc2UgaWYgKHRhZ0FmdGVyKSB7IC8vIE9wZW5pbmcgdGFnIHNwb3R0ZWQKKyAgICAgICAg
d2hpbGUgKGNvbnRleHQpIHsKKyAgICAgICAgICB2YXIgZ3JhYmJlcnMgPSBLbHVkZ2VzLmNvbnRl
eHRHcmFiYmVyc1tjb250ZXh0LnRhZ05hbWVdOworICAgICAgICAgIGlmIChncmFiYmVycyAmJiBn
cmFiYmVycy5oYXNPd25Qcm9wZXJ0eSh0YWdBZnRlclsyXSkpCisgICAgICAgICAgICBjb250ZXh0
ID0gY29udGV4dC5wcmV2OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICB9CiAgICAgICB3aGlsZSAoY29udGV4dCAmJiAhY29udGV4dC5zdGFydE9m
TGluZSkKICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjsKICAgICAgIGlmIChjb250ZXh0
KSByZXR1cm4gY29udGV4dC5pbmRlbnQgKyBpbmRlbnRVbml0OwogICAgICAgZWxzZSByZXR1cm4g
MDsKICAgICB9LAogCi0gICAgZWxlY3RyaWNDaGFyczogIi8iLAorICAgIGVsZWN0cmljSW5wdXQ6
IC88XC9bXHNcdzpdKz4kLywKICAgICBibG9ja0NvbW1lbnRTdGFydDogIjwhLS0iLAogICAgIGJs
b2NrQ29tbWVudEVuZDogIi0tPiIsCiAKQEAgLTM0MywzICszNzQsNSBAQCBDb2RlTWlycm9yLmRl
ZmluZU1JTUUoInRleHQveG1sIiwgInhtbCIpOwogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBs
aWNhdGlvbi94bWwiLCAieG1sIik7CiBpZiAoIUNvZGVNaXJyb3IubWltZU1vZGVzLmhhc093blBy
b3BlcnR5KCJ0ZXh0L2h0bWwiKSkKICAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2h0bWwi
LCB7bmFtZTogInhtbCIsIGh0bWxNb2RlOiB0cnVlfSk7CisKK30pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IGVjM2FiZDguLmM2ZmU3OGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRt
bAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKQEAg
LTE1MCw3ICsxNTAsNiBAQAogICAgIDxzY3JpcHQgc3JjPSJFeHRlcm5hbC9Db2RlTWlycm9yL2Nz
cy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkV4dGVybmFsL0NvZGVNaXJyb3IvaHRt
bG1peGVkLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iRXh0ZXJuYWwvQ29kZU1pcnJv
ci9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iRXh0ZXJuYWwvQ29k
ZU1pcnJvci9sZXNzLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iRXh0ZXJuYWwvQ29k
ZU1pcnJvci9saXZlc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iRXh0ZXJu
YWwvQ29kZU1pcnJvci9tYXRjaGJyYWNrZXRzLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iRXh0ZXJuYWwvQ29kZU1pcnJvci9vdmVybGF5LmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFy
YXRpb25UZXh0RWRpdG9yLmNzcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzcwppbmRleCA0MjE3M2VlLi44
NWQyZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5jc3MKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0
b3IuY3NzCkBAIC02MSw3ICs2MSw3IEBACiAgICAgZGlzcGxheTogbm9uZTsKIH0KIAotLmNzcy1z
dHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVzIHByZSBzcGFu
Om5vdCguY3NzLXN0eWxlLWRlY2xhcmF0aW9uLXByb3BlcnR5KTpub3QoLkNvZGVNaXJyb3Itd2lk
Z2V0KTpub3QoLmNtLWNvbW1lbnQpOm5vdCguY20tdGFiKSwKKy5jc3Mtc3R5bGUtdGV4dC1lZGl0
b3IgPiAuQ29kZU1pcnJvciAuQ29kZU1pcnJvci1saW5lcyBwcmUgPiBzcGFuIHNwYW46bm90KC5j
c3Mtc3R5bGUtZGVjbGFyYXRpb24tcHJvcGVydHkpOm5vdCguQ29kZU1pcnJvci13aWRnZXQpOm5v
dCguY20tY29tbWVudCk6bm90KC5jbS10YWIpLAogLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5D
b2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVzIC5jc3Mtc3R5bGUtZGVjbGFyYXRpb24tcHJvcGVy
dHkuZGlzYWJsZWQsCiAuY3NzLXN0eWxlLXRleHQtZWRpdG9yID4gLkNvZGVNaXJyb3IgLkNvZGVN
aXJyb3ItbGluZXMgLmNzcy1zdHlsZS1kZWNsYXJhdGlvbi1wcm9wZXJ0eS5pbnZhbGlkLAogLmNz
cy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVzIC5jc3Mt
c3R5bGUtZGVjbGFyYXRpb24tcHJvcGVydHkub3RoZXItdmVuZG9yLApAQCAtNzIsNyArNzIsNyBA
QAogICAgIC13ZWJraXQtdGV4dC1zdHJva2UtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KTsKIH0K
IAotLmNzcy1zdHlsZS10ZXh0LWVkaXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVz
IHByZSBzcGFuOm5vdCguY3NzLXN0eWxlLWRlY2xhcmF0aW9uLXByb3BlcnR5KTpub3QoLkNvZGVN
aXJyb3Itd2lkZ2V0KTpub3QoLmNtLWNvbW1lbnQpOm5vdCguY20tdGFiKSwKKy5jc3Mtc3R5bGUt
dGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciAuQ29kZU1pcnJvci1saW5lcyBwcmUgPiBzcGFuIHNw
YW46bm90KC5jc3Mtc3R5bGUtZGVjbGFyYXRpb24tcHJvcGVydHkpOm5vdCguQ29kZU1pcnJvci13
aWRnZXQpOm5vdCguY20tY29tbWVudCk6bm90KC5jbS10YWIpLAogLmNzcy1zdHlsZS10ZXh0LWVk
aXRvciA+IC5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVzIC5jc3Mtc3R5bGUtZGVjbGFyYXRp
b24tcHJvcGVydHkuaW52YWxpZCB7CiAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZS1jb2xvcjogcmdi
YSgyNTUsIDAsIDAsIDAuNik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRp
b25UZXh0RWRpdG9yLmpzCmluZGV4IGQ1ZTBmYWQuLmRkMGViYTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25U
ZXh0RWRpdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzCkBAIC0zOTgsNyArMzk4LDcgQEAg
V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgICAgICBzd2F0Y2hFbGVtZW50LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJDbGljayB0byBvcGVuIGEgY29sb3JwaWNrZXIuIFNoaWZ0LWNsaWNrIHRvIGNoYW5nZSBj
b2xvciBmb3JtYXQuIik7CiAgICAgICAgICAgICAgICAgc3dhdGNoRWxlbWVudC5jbGFzc05hbWUg
PSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuQ29sb3JTd2F0Y2hF
bGVtZW50U3R5bGVDbGFzc05hbWU7CiAgICAgICAgICAgICAgICAgc3dhdGNoRWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2NvbG9yU3dhdGNoQ2xpY2tlZC5iaW5kKHRoaXMp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHZhciBz
d2F0Y2hJbm5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAg
ICAgICAgICAgICAgc3dhdGNoSW5uZXJFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNv
bG9yU3RyaW5nOwogICAgICAgICAgICAgICAgIHN3YXRjaEVsZW1lbnQuYXBwZW5kQ2hpbGQoc3dh
dGNoSW5uZXJFbGVtZW50KTsKQEAgLTg1Miw3ICs4NTIsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5
bGVEZWNsYXJhdGlvblRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHRo
aXMuX2NvZGVNaXJyb3Iuc2V0VmFsdWUoc3R5bGVUZXh0KTsKIAogICAgICAgICAgICAgICAgIGlm
ICh0aGlzLl9wcmVmaXhXaGl0ZXNwYWNlKQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb2Rl
TWlycm9yLnJlbW92ZUxpbmUoMCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvZGVNaXJy
b3IucmVwbGFjZVJhbmdlKCIiLCB7bGluZTogMCwgY2g6IDB9LCB7bGluZTogMSwgY2g6IDB9KTsK
IAogICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdWZmaXhXaGl0ZXNwYWNlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHZhciBsaW5lQ291bnQgPSB0aGlzLl9jb2RlTWlycm9yLmxpbmVDb3VudCgp
OwpAQCAtOTUzLDcgKzk1Myw3IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghdGhpcy5fc3R5bGUgfHwgIXRoaXMu
X3N0eWxlLm93bmVyUnVsZSB8fCAhdGhpcy5fc3R5bGUub3duZXJSdWxlLnNvdXJjZUNvZGVMb2Nh
dGlvbikKICAgICAgICAgICAgIHRoaXMuX2p1bXBUb1N5bWJvbFRyYWNraW5nTW9kZUVuYWJsZWQg
PSBmYWxzZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fanVtcFRvU3ltYm9sVHJh
Y2tpbmdNb2RlRW5hYmxlZCA9IFdlYkluc3BlY3Rvci5tb2RpZmllcktleXMubWV0YUtleSAmJiAh
V2ViSW5zcGVjdG9yLm1vZGlmaWVyS2V5cy5hbHRLZXkgJiYgIVdlYkluc3BlY3Rvci5tb2RpZmll
cktleXMuc2hpZnRLZXk7CisgICAgICAgICAgICB0aGlzLl9qdW1wVG9TeW1ib2xUcmFja2luZ01v
ZGVFbmFibGVkID0gV2ViSW5zcGVjdG9yLm1vZGlmaWVyS2V5cy5hbHRLZXkgJiYgIVdlYkluc3Bl
Y3Rvci5tb2RpZmllcktleXMubWV0YUtleSAmJiAhV2ViSW5zcGVjdG9yLm1vZGlmaWVyS2V5cy5z
aGlmdEtleTsKIAogICAgICAgICBpZiAob2xkSnVtcFRvU3ltYm9sVHJhY2tpbmdNb2RlRW5hYmxl
ZCAhPT0gdGhpcy5fanVtcFRvU3ltYm9sVHJhY2tpbmdNb2RlRW5hYmxlZCkgewogICAgICAgICAg
ICAgaWYgKHRoaXMuX2p1bXBUb1N5bWJvbFRyYWNraW5nTW9kZUVuYWJsZWQpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1N5bnRheEhpZ2hs
aWdodGluZ0RlZmF1bHRUaGVtZS5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9TeW50YXhIaWdobGlnaHRpbmdEZWZhdWx0VGhlbWUuY3NzCmluZGV4IGE2YWM4
YzAuLjE5OTNiNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1N5bnRheEhpZ2hsaWdodGluZ0RlZmF1bHRUaGVtZS5jc3MKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ludGF4SGlnaGxpZ2h0aW5nRGVm
YXVsdFRoZW1lLmNzcwpAQCAtNDEsMTQgKzQxLDE2IEBACiB9CiAKIC5jbS1zLWRlZmF1bHQgLmNt
LXRhZywKKy5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQsCisuY20tcy1kZWZhdWx0IC5jbS10YWcu
Y20tYnJhY2tldCwKIC5jbS1zLWRlZmF1bHQgLmNtLWF0b20sCiAuY20tcy1kZWZhdWx0IC5jbS1r
ZXl3b3JkLAorLmNtLXMtZGVmYXVsdCAuY20tbS1jc3MuY20tdGFnLAogLmNtLXMtZGVmYXVsdCAu
Y20tbS1jc3MuY20tbWV0YSwKLS5jbS1zLWRlZmF1bHQgLmNtLW0tY3NzLmNtLXByb3BlcnR5LAot
LmNtLXMtZGVmYXVsdCAuY20tbS1jc3MuY20tc3RyaW5nLTIsCisuY20tcy1kZWZhdWx0IC5jbS1t
LWNzcy5jbS12YXJpYWJsZS0zLAogLmNtLXMtZGVmYXVsdCAuY20tbS1qYXZhc2NyaXB0LmNtLWJ1
aWx0aW4sCiAuc3ludGF4LWhpZ2hsaWdodGVkIC5jc3Mta2V5d29yZCwKLS5zeW50YXgtaGlnaGxp
Z2h0ZWQgLmNzcy1wcm9wZXJ0eSwKKy5zeW50YXgtaGlnaGxpZ2h0ZWQgLmNzcy10YWcsCiAuc3lu
dGF4LWhpZ2hsaWdodGVkIC5jc3MtYXQtcnVsZSwKIC5zeW50YXgtaGlnaGxpZ2h0ZWQgLmNzcy1p
bXBvcnRhbnQsCiAuc3ludGF4LWhpZ2hsaWdodGVkIC5qYXZhc2NyaXB0LWtleXdvcmQsCkBAIC02
OSw5ICs3MSwxMCBAQAogLmNtLXMtZGVmYXVsdCAuY20tcXVhbGlmaWVyLAogLmNtLXMtZGVmYXVs
dCAuY20tdmFyaWFibGUsCiAuY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZS0yLAotLmNtLXMtZGVm
YXVsdCAuY20tdmFyaWFibGUtMywKLS5jbS1zLWRlZmF1bHQgLmNtLW0tY3NzLmNtLXRhZywKKy5j
bS1zLWRlZmF1bHQgLmNtLW0tY3NzLmNtLXN0cmluZy0yLAogLmNtLXMtZGVmYXVsdCAuY20tbS1j
c3MuY20tYnVpbHRpbiwKKy5jbS1zLWRlZmF1bHQgLmNtLW0tY3NzLmNtLXByb3BlcnR5LAorLnN5
bnRheC1oaWdobGlnaHRlZCAuY3NzLXByb3BlcnR5LAogLnN5bnRheC1oaWdobGlnaHRlZCAuY3Nz
LXNlbGVjdG9yLAogLnN5bnRheC1oaWdobGlnaHRlZCAuamF2YXNjcmlwdC1pZGVudCB7CiAgICAg
Y29sb3I6IGluaGVyaXQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>