<?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>202341</bug_id>
          
          <creation_ts>2019-09-27 22:55:16 -0700</creation_ts>
          <short_desc>Web Inspector: Sources: enable tab by default</short_desc>
          <delta_ts>2020-01-06 12:55:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>203719</blocked>
    
    <blocked>205826</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1575038</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-09-27 22:55:16 -0700</bug_when>
    <thetext>The Sources Tab has progressed enough that it can be enabled by default.  It also has enough new features that are only available in that UI that we want to be discoverable and usable without having to change any settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575120</commentid>
    <comment_count>1</comment_count>
      <attachid>379800</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-09-28 21:19:42 -0700</bug_when>
    <thetext>Created attachment 379800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575711</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-01 13:41:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/55888222&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577564</commentid>
    <comment_count>3</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-10-07 16:40:01 -0700</bug_when>
    <thetext>*** Bug 202031 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577567</commentid>
    <comment_count>4</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-10-07 16:41:12 -0700</bug_when>
    <thetext>*** Bug 200761 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578831</commentid>
    <comment_count>5</comment_count>
      <attachid>379800</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-10-10 13:54:54 -0700</bug_when>
    <thetext>Comment on attachment 379800
Patch

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

r=me!

&gt; Source/WebInspectorUI/UserInterface/Base/Main.js:145
&gt; +        WI.SourcesTabContentView,

This should have a `.Type` suffix.

&gt; Source/WebInspectorUI/UserInterface/Protocol/InspectorFrontendAPI.js:105
&gt;  

Style: Lets remove this extra newline while we are here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578833</commentid>
    <comment_count>6</comment_count>
      <attachid>379800</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-10-10 13:57:27 -0700</bug_when>
    <thetext>Comment on attachment 379800
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Base/Main.js:145
&gt;&gt; +        WI.SourcesTabContentView,
&gt; 
&gt; This should have a `.Type` suffix.

Ah, oops!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578835</commentid>
    <comment_count>7</comment_count>
      <attachid>380678</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-10-10 14:00:43 -0700</bug_when>
    <thetext>Created attachment 380678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578873</commentid>
    <comment_count>8</comment_count>
      <attachid>380678</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-10 14:57:44 -0700</bug_when>
    <thetext>Comment on attachment 380678
Patch

Clearing flags on attachment: 380678

Committed r250991: &lt;https://trac.webkit.org/changeset/250991&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578874</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-10 14:57:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379800</attachid>
            <date>2019-09-28 21:19:42 -0700</date>
            <delta_ts>2019-10-10 14:00:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>202341.diff</filename>
            <type>text/plain</type>
            <size>150195</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGNlMmY4MTZkZGU4Li5jNDRhODY2MDAyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTktMDktMjggIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNv
dXJjZXM6IGVuYWJsZSB0YWIgYnkgZGVmYXVsdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMzQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhlIGV4cGVyaW1lbnRhbCBTb3VyY2VzIFRhYiBoYXMgcHJv
Z3Jlc3NlZCBlbm91Z2ggdGhhdCBpdCBjYW4gYmUgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGVyZQor
ICAgICAgICBhcmUgc29tZSBuZXcgZmVhdHVyZXMgdGhhdCBhcmUgb25seSBhdmFpbGFibGUgaW4g
dGhlIFNvdXJjZXMgVGFiIHRoYXQgYXJlIGFsc28gcmVhZHkgdG8gYmUKKyAgICAgICAgdXNlZCAo
ZS5nLiBsb2NhbCByZXNvdXJjZSBvdmVycmlkZXMpLgorCisgICAgICAgICogVXNlckludGVyZmFj
ZS9NYWluLmh0bWw6CisgICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL01haW4uanM6CisgICAg
ICAgIChXSS5sb2FkZWQpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9TZXR0aW5nLmpz
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yRnJvbnRlbmRBUEku
anM6CisgICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5zaG93UmVzb3VyY2VzKToKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL05ldHdvcmtNYW5hZ2VyLmpzOgorICAgICAg
ICAoV0kuTmV0d29ya01hbmFnZXIpOgorICAgICAgICAoV0kuTmV0d29ya01hbmFnZXIuc3VwcG9y
dHNMb2NhbFJlc291cmNlT3ZlcnJpZGVzKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdz
L0NvbnRleHRNZW51VXRpbGl0aWVzLmpzOgorICAgICAgICAoV0kuYXBwZW5kQ29udGV4dE1lbnVJ
dGVtc0ZvclVSTCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9EZWZhdWx0RGFzaGJv
YXJkVmlldy5qczoKKyAgICAgICAgKFdJLkRlZmF1bHREYXNoYm9hcmRWaWV3LnByb3RvdHlwZS5f
cmVzb3VyY2VzSXRlbVdhc0NsaWNrZWQpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3Mv
UmVjb3JkaW5nQWN0aW9uVHJlZUVsZW1lbnQuanM6CisgICAgICAgIChXSS5SZWNvcmRpbmdBY3Rp
b25UcmVlRWxlbWVudC5wcm90b3R5cGUucG9wdWxhdGVDb250ZXh0TWVudSk6CisgICAgICAgICog
VXNlckludGVyZmFjZS9WaWV3cy9TZWFyY2hSZXN1bHRUcmVlRWxlbWVudC5qczoKKyAgICAgICAg
KFdJLlNlYXJjaFJlc3VsdFRyZWVFbGVtZW50LnByb3RvdHlwZS5wb3B1bGF0ZUNvbnRleHRNZW51
KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcu
anM6CisgICAgICAgIChXSS5TZXR0aW5nc1RhYkNvbnRlbnRWaWV3LnByb3RvdHlwZS5fY3JlYXRl
RXhwZXJpbWVudGFsU2V0dGluZ3NWaWV3KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdz
L1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV0kuU291cmNlQ29kZVRleHRFZGl0
b3IucHJvdG90eXBlLnRleHRFZGl0b3JHdXR0ZXJDb250ZXh0TWVudSk6CisgICAgICAgICogVXNl
ckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldENTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpz
OgorICAgICAgICAoV0kuU3ByZWFkc2hlZXRDU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5wcm90
b3R5cGUuX3BvcHVsYXRlSWNvbkVsZW1lbnRDb250ZXh0TWVudSk6CisgICAgICAgICogTG9jYWxp
emF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9WaWV3cy9Tb3VyY2VzVGFiQ29udGVudFZpZXcuanM6CisgICAgICAgIChXSS5Tb3Vy
Y2VzVGFiQ29udGVudFZpZXcuaXNUYWJBbGxvd2VkKTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmNzczogUmVtb3ZlZC4KKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmpzOiBSZW1vdmVk
LgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvRGVidWdnZXJUYWJDb250ZW50Vmlldy5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291cmNlU2lkZWJh
clBhbmVsLmNzczogUmVtb3ZlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291
cmNlU2lkZWJhclBhbmVsLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmll
d3MvUmVzb3VyY2VzVGFiQ29udGVudFZpZXcuanM6IFJlbW92ZWQuCisgICAgICAgIFJlbW92ZSB0
aGUgZXhwZXJpbWVudGFsIHNldHRpbmcsIGFzIHdlbGwgYXMgY29kZSBmb3IgdGhlIFJlc291cmNl
cyBUYWIgYW5kIHRoZSBEZWJ1Z2dlciBUYWIuCisKKyAgICAgICAgKiBXZWJJbnNwZWN0b3JVSS52
Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHByb2o6CisgICAgICAgICogV2ViSW5zcGVjdG9yVUku
dmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qLmZpbHRlcnM6CisKIDIwMTktMDktMjYgIEpv
c2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBJbmNsdWRlIExvY2FsUmVzb3VyY2VPdmVycmlkZXMgaW4gdGhlIE9wZW4gUmVzb3VyY2Ug
ZGlhbG9nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9l
bi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2Fs
aXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwppbmRleCA0ODcwNTIxNzNhZi4u
ZDQ4YmUzY2Q5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRp
b25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwpAQCAtMTEwLDcg
KzExMCw2IEBAIGxvY2FsaXplZFN0cmluZ3NbIkFsbCBMYXllcnMiXSA9ICJBbGwgTGF5ZXJzIjsK
IGxvY2FsaXplZFN0cmluZ3NbIkFsbCBNaWNyb3Rhc2tzIl0gPSAiQWxsIE1pY3JvdGFza3MiOwog
LyogQSBzdWJtZW51IGl0ZW0gb2YgJ0JyZWFrIG9uJyB0aGF0IGJyZWFrcyAocGF1c2VzKSBiZWZv
cmUgYWxsIG5ldHdvcmsgcmVxdWVzdHMgKi8KIGxvY2FsaXplZFN0cmluZ3NbIkFsbCBSZXF1ZXN0
cyJdID0gIkFsbCBSZXF1ZXN0cyI7Ci1sb2NhbGl6ZWRTdHJpbmdzWyJBbGwgUmVzb3VyY2VzIl0g
PSAiQWxsIFJlc291cmNlcyI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJBbGwgU3RvcmFnZSJdID0gIkFs
bCBTdG9yYWdlIjsKIGxvY2FsaXplZFN0cmluZ3NbIkFsbCBUaW1lb3V0cyJdID0gIkFsbCBUaW1l
b3V0cyI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJBbGwgaXRlbXMgaW4gXHUwMDIyJXNcdTAwMjIgbXVz
dCBiZSBlcnJvciBvYmplY3RzIl0gPSAiQWxsIGl0ZW1zIGluIFx1MDAyMiVzXHUwMDIyIG11c3Qg
YmUgZXJyb3Igb2JqZWN0cyI7CkBAIC0zMzAsNyArMzI5LDYgQEAgbG9jYWxpemVkU3RyaW5nc1si
RGF0YWJhc2Ugbm8gbG9uZ2VyIGhhcyBleHBlY3RlZCB2ZXJzaW9uLiJdID0gIkRhdGFiYXNlIG5v
IGxvbmcKIGxvY2FsaXplZFN0cmluZ3NbIkRhdGFiYXNlcyJdID0gIkRhdGFiYXNlcyI7CiBsb2Nh
bGl6ZWRTdHJpbmdzWyJEYXRlIl0gPSAiRGF0ZSI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJEZWJ1Zzog
Il0gPSAiRGVidWc6ICI7Ci1sb2NhbGl6ZWRTdHJpbmdzWyJEZWJ1Z2dlciJdID0gIkRlYnVnZ2Vy
IjsKIGxvY2FsaXplZFN0cmluZ3NbIkRlYnVnZ2VyIFBhdXNlZCJdID0gIkRlYnVnZ2VyIFBhdXNl
ZCI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJEZWJ1Z2dlciBTdGF0ZW1lbnQiXSA9ICJEZWJ1Z2dlciBT
dGF0ZW1lbnQiOwogbG9jYWxpemVkU3RyaW5nc1siRGVidWdnZXIgZGlzYWJsZWQgZHVyaW5nIEF1
ZGl0Il0gPSAiRGVidWdnZXIgZGlzYWJsZWQgZHVyaW5nIEF1ZGl0IjsKQEAgLTQ0Miw5ICs0NDAs
NyBAQCBsb2NhbGl6ZWRTdHJpbmdzWyJFbmFibGUgTG9jYWwgT3ZlcnJpZGUiXSA9ICJFbmFibGUg
TG9jYWwgT3ZlcnJpZGUiOwogbG9jYWxpemVkU3RyaW5nc1siRW5hYmxlIE5ldyBUYWIgQmFyIl0g
PSAiRW5hYmxlIE5ldyBUYWIgQmFyIjsKIGxvY2FsaXplZFN0cmluZ3NbIkVuYWJsZSBQcm9ncmFt
Il0gPSAiRW5hYmxlIFByb2dyYW0iOwogbG9jYWxpemVkU3RyaW5nc1siRW5hYmxlIFJ1bGUiXSA9
ICJFbmFibGUgUnVsZSI7Ci1sb2NhbGl6ZWRTdHJpbmdzWyJFbmFibGUgU291cmNlcyBUYWIiXSA9
ICJFbmFibGUgU291cmNlcyBUYWIiOwogbG9jYWxpemVkU3RyaW5nc1siRW5hYmxlIGFsbCBicmVh
a3BvaW50cyAoJXMpIl0gPSAiRW5hYmxlIGFsbCBicmVha3BvaW50cyAoJXMpIjsKLWxvY2FsaXpl
ZFN0cmluZ3NbIkVuYWJsZSBicmVha3BvaW50cyJdID0gIkVuYWJsZSBicmVha3BvaW50cyI7CiBs
b2NhbGl6ZWRTdHJpbmdzWyJFbmFibGUgcGFpbnQgZmxhc2hpbmciXSA9ICJFbmFibGUgcGFpbnQg
Zmxhc2hpbmciOwogbG9jYWxpemVkU3RyaW5nc1siRW5hYmxlIHNvdXJjZSBtYXBzIl0gPSAiRW5h
YmxlIHNvdXJjZSBtYXBzIjsKIGxvY2FsaXplZFN0cmluZ3NbIkVuYWJsZWQiXSA9ICJFbmFibGVk
IjsKQEAgLTQ2Niw3ICs0NjIsNiBAQCBsb2NhbGl6ZWRTdHJpbmdzWyJFbnN1cmUgdGhhdCBvbmx5
IG9uZSBtYWluIGNvbnRlbnQgc2VjdGlvbiBpcyB1c2VkIG9uIHRoZSBwYWdlLgogbG9jYWxpemVk
U3RyaW5nc1siRW5zdXJlIHRoYXQgdmFsdWVzIGZvciBcdTAwMjIlc1x1MDAyMiBhcmUgdmFsaWQu
Il0gPSAiRW5zdXJlIHRoYXQgdmFsdWVzIGZvciBcdTAwMjIlc1x1MDAyMiBhcmUgdmFsaWQuIjsK
IGxvY2FsaXplZFN0cmluZ3NbIkVudGVyZWQgRnVsbC1TY3JlZW4gTW9kZSJdID0gIkVudGVyZWQg
RnVsbC1TY3JlZW4gTW9kZSI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJFbnRpcmUgUmVjb3JkaW5nIl0g
PSAiRW50aXJlIFJlY29yZGluZyI7Ci1sb2NhbGl6ZWRTdHJpbmdzWyJFbnRyeSBwb2ludDogIl0g
PSAiRW50cnkgcG9pbnQ6ICI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJFcnJvciJdID0gIkVycm9yIjsK
IGxvY2FsaXplZFN0cmluZ3NbIkVycm9yOiAiXSA9ICJFcnJvcjogIjsKIGxvY2FsaXplZFN0cmlu
Z3NbIkVycm9ycyJdID0gIkVycm9ycyI7CkBAIC05MzEsMTMgKzkyNiwxMSBAQCBsb2NhbGl6ZWRT
dHJpbmdzWyJSZXZlYWwiXSA9ICJSZXZlYWwiOwogbG9jYWxpemVkU3RyaW5nc1siUmV2ZWFsIERl
c2NlbmRhbnQgQnJlYWtwb2ludHMiXSA9ICJSZXZlYWwgRGVzY2VuZGFudCBCcmVha3BvaW50cyI7
CiAvKiBPcGVuIEVsZW1lbnRzIHRhYiBhbmQgc2VsZWN0IHRoaXMgbm9kZSBpbiBET00gdHJlZSAq
LwogbG9jYWxpemVkU3RyaW5nc1siUmV2ZWFsIGluIERPTSBUcmVlIl0gPSAiUmV2ZWFsIGluIERP
TSBUcmVlIjsKLWxvY2FsaXplZFN0cmluZ3NbIlJldmVhbCBpbiBEZWJ1Z2dlciBUYWIiXSA9ICJS
ZXZlYWwgaW4gRGVidWdnZXIgVGFiIjsKIGxvY2FsaXplZFN0cmluZ3NbIlJldmVhbCBpbiBFbGVt
ZW50cyBUYWIiXSA9ICJSZXZlYWwgaW4gRWxlbWVudHMgVGFiIjsKIC8qIE9wZW4gTGF5ZXJzIHRh
YiBhbmQgc2VsZWN0IHRoZSBsYXllciBjb3JyZXNwb25kaW5nIHRvIHRoaXMgbm9kZSAqLwogbG9j
YWxpemVkU3RyaW5nc1siUmV2ZWFsIGluIExheWVycyBUYWIiXSA9ICJSZXZlYWwgaW4gTGF5ZXJz
IFRhYiI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJSZXZlYWwgaW4gTmV0d29yayBUYWIiXSA9ICJSZXZl
YWwgaW4gTmV0d29yayBUYWIiOwogbG9jYWxpemVkU3RyaW5nc1siUmV2ZWFsIGluIE9yaWdpbmFs
IFJlc291cmNlIl0gPSAiUmV2ZWFsIGluIE9yaWdpbmFsIFJlc291cmNlIjsKLWxvY2FsaXplZFN0
cmluZ3NbIlJldmVhbCBpbiBSZXNvdXJjZXMgVGFiIl0gPSAiUmV2ZWFsIGluIFJlc291cmNlcyBU
YWIiOwogbG9jYWxpemVkU3RyaW5nc1siUmV2ZWFsIGluIFNvdXJjZXMgVGFiIl0gPSAiUmV2ZWFs
IGluIFNvdXJjZXMgVGFiIjsKIGxvY2FsaXplZFN0cmluZ3NbIlJldmVhbCBpbiBTdHlsZSBTaGVl
dCJdID0gIlJldmVhbCBpbiBTdHlsZSBTaGVldCI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJSb2xlIl0g
PSAiUm9sZSI7CkBAIC0xMDU1LDcgKzEwNDgsNiBAQCBsb2NhbGl6ZWRTdHJpbmdzWyJTb3J0IERl
c2NlbmRpbmciXSA9ICJTb3J0IERlc2NlbmRpbmciOwogbG9jYWxpemVkU3RyaW5nc1siU291cmNl
Il0gPSAiU291cmNlIjsKIGxvY2FsaXplZFN0cmluZ3NbIlNvdXJjZSBNYXBzOiJdID0gIlNvdXJj
ZSBNYXBzOiI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJTb3VyY2VzIl0gPSAiU291cmNlcyI7Ci1sb2Nh
bGl6ZWRTdHJpbmdzWyJTb3VyY2VzOiJdID0gIlNvdXJjZXM6IjsKIGxvY2FsaXplZFN0cmluZ3Nb
IlNwYWNlIl0gPSAiU3BhY2UiOwogbG9jYWxpemVkU3RyaW5nc1siU3BhY2VzIl0gPSAiU3BhY2Vz
IjsKIGxvY2FsaXplZFN0cmluZ3NbIlNwZWNpYWxseSBFeHBvc2VkIERhdGEiXSA9ICJTcGVjaWFs
bHkgRXhwb3NlZCBEYXRhIjsKQEAgLTExOTUsNyArMTE4Nyw2IEBAIGxvY2FsaXplZFN0cmluZ3Nb
IlRyYW5zZmVyIFNpemUiXSA9ICJUcmFuc2ZlciBTaXplIjsKIGxvY2FsaXplZFN0cmluZ3NbIlRy
YW5zZmVycmVkIl0gPSAiVHJhbnNmZXJyZWQiOwogbG9jYWxpemVkU3RyaW5nc1siVHJpZ2dlcmVk
IEJyZWFrcG9pbnQiXSA9ICJUcmlnZ2VyZWQgQnJlYWtwb2ludCI7CiBsb2NhbGl6ZWRTdHJpbmdz
WyJUcmlnZ2VyZWQgVVJMIEJyZWFrcG9pbnQiXSA9ICJUcmlnZ2VyZWQgVVJMIEJyZWFrcG9pbnQi
OwotbG9jYWxpemVkU3RyaW5nc1siVHJpZ2dlcmVkIFhIUiBCcmVha3BvaW50Il0gPSAiVHJpZ2dl
cmVkIFhIUiBCcmVha3BvaW50IjsKIGxvY2FsaXplZFN0cmluZ3NbIlRydWUiXSA9ICJUcnVlIjsK
IGxvY2FsaXplZFN0cmluZ3NbIlR5cGUiXSA9ICJUeXBlIjsKIGxvY2FsaXplZFN0cmluZ3NbIlR5
cGUgSXNzdWUiXSA9ICJUeXBlIElzc3VlIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwppbmRleCBmMjQ2MTYyOTZlNC4uZDU2MTEwMGVkYTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFp
bi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4u
anMKQEAgLTE0Miw4ICsxNDIsNyBAQCBXSS5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgV0kuX29w
ZW5UYWJzU2V0dGluZyA9IG5ldyBXSS5TZXR0aW5nKCJvcGVuLXRhYi10eXBlcyIsIFsKICAgICAg
ICAgV0kuRWxlbWVudHNUYWJDb250ZW50Vmlldy5UeXBlLAogICAgICAgICBXSS5OZXR3b3JrVGFi
Q29udGVudFZpZXcuVHlwZSwKLSAgICAgICAgV0kuRGVidWdnZXJUYWJDb250ZW50Vmlldy5UeXBl
LAotICAgICAgICBXSS5SZXNvdXJjZXNUYWJDb250ZW50Vmlldy5UeXBlLAorICAgICAgICBXSS5T
b3VyY2VzVGFiQ29udGVudFZpZXcsCiAgICAgICAgIFdJLlRpbWVsaW5lVGFiQ29udGVudFZpZXcu
VHlwZSwKICAgICAgICAgV0kuU3RvcmFnZVRhYkNvbnRlbnRWaWV3LlR5cGUsCiAgICAgICAgIFdJ
LkNhbnZhc1RhYkNvbnRlbnRWaWV3LlR5cGUsCkBAIC01MTQsOCArNTEzLDYgQEAgV0kuY29udGVu
dExvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgV0kuRWxlbWVudHNUYWJDb250ZW50VmlldywK
ICAgICAgICAgV0kuTmV0d29ya1RhYkNvbnRlbnRWaWV3LAogICAgICAgICBXSS5Tb3VyY2VzVGFi
Q29udGVudFZpZXcsCi0gICAgICAgIFdJLkRlYnVnZ2VyVGFiQ29udGVudFZpZXcsCi0gICAgICAg
IFdJLlJlc291cmNlc1RhYkNvbnRlbnRWaWV3LAogICAgICAgICBXSS5UaW1lbGluZVRhYkNvbnRl
bnRWaWV3LAogICAgICAgICBXSS5TdG9yYWdlVGFiQ29udGVudFZpZXcsCiAgICAgICAgIFdJLkNh
bnZhc1RhYkNvbnRlbnRWaWV3LApAQCAtMTA5OCwzOSArMTA5NSw2IEBAIFdJLmlzU2hvd2luZ1Nv
dXJjZXNUYWIgPSBmdW5jdGlvbigpCiAgICAgcmV0dXJuIFdJLnRhYkJyb3dzZXIuc2VsZWN0ZWRU
YWJDb250ZW50VmlldyBpbnN0YW5jZW9mIFdJLlNvdXJjZXNUYWJDb250ZW50VmlldzsKIH07CiAK
LVdJLnNob3dEZWJ1Z2dlclRhYiA9IGZ1bmN0aW9uKG9wdGlvbnMpCi17Ci0gICAgdmFyIHRhYkNv
bnRlbnRWaWV3ID0gV0kudGFiQnJvd3Nlci5iZXN0VGFiQ29udGVudFZpZXdGb3JDbGFzcyhXSS5E
ZWJ1Z2dlclRhYkNvbnRlbnRWaWV3KTsKLSAgICBpZiAoIXRhYkNvbnRlbnRWaWV3KQotICAgICAg
ICB0YWJDb250ZW50VmlldyA9IG5ldyBXSS5EZWJ1Z2dlclRhYkNvbnRlbnRWaWV3OwotCi0gICAg
aWYgKG9wdGlvbnMuYnJlYWtwb2ludFRvU2VsZWN0IGluc3RhbmNlb2YgV0kuQnJlYWtwb2ludCkK
LSAgICAgICAgdGFiQ29udGVudFZpZXcucmV2ZWFsQW5kU2VsZWN0QnJlYWtwb2ludChvcHRpb25z
LmJyZWFrcG9pbnRUb1NlbGVjdCk7Ci0KLSAgICBpZiAob3B0aW9ucy5zaG93U2NvcGVDaGFpblNp
ZGViYXIpCi0gICAgICAgIHRhYkNvbnRlbnRWaWV3LnNob3dTY29wZUNoYWluRGV0YWlsc1NpZGVi
YXJQYW5lbCgpOwotCi0gICAgV0kudGFiQnJvd3Nlci5zaG93VGFiRm9yQ29udGVudFZpZXcodGFi
Q29udGVudFZpZXcpOwotfTsKLQotV0kuaXNTaG93aW5nRGVidWdnZXJUYWIgPSBmdW5jdGlvbigp
Ci17Ci0gICAgcmV0dXJuIFdJLnRhYkJyb3dzZXIuc2VsZWN0ZWRUYWJDb250ZW50VmlldyBpbnN0
YW5jZW9mIFdJLkRlYnVnZ2VyVGFiQ29udGVudFZpZXc7Ci19OwotCi1XSS5zaG93UmVzb3VyY2Vz
VGFiID0gZnVuY3Rpb24oKQotewotICAgIHZhciB0YWJDb250ZW50VmlldyA9IFdJLnRhYkJyb3dz
ZXIuYmVzdFRhYkNvbnRlbnRWaWV3Rm9yQ2xhc3MoV0kuUmVzb3VyY2VzVGFiQ29udGVudFZpZXcp
OwotICAgIGlmICghdGFiQ29udGVudFZpZXcpCi0gICAgICAgIHRhYkNvbnRlbnRWaWV3ID0gbmV3
IFdJLlJlc291cmNlc1RhYkNvbnRlbnRWaWV3OwotICAgIFdJLnRhYkJyb3dzZXIuc2hvd1RhYkZv
ckNvbnRlbnRWaWV3KHRhYkNvbnRlbnRWaWV3KTsKLX07Ci0KLVdJLmlzU2hvd2luZ1Jlc291cmNl
c1RhYiA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gV0kudGFiQnJvd3Nlci5zZWxlY3RlZFRh
YkNvbnRlbnRWaWV3IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VzVGFiQ29udGVudFZpZXc7Ci19Owot
CiBXSS5zaG93U3RvcmFnZVRhYiA9IGZ1bmN0aW9uKCkKIHsKICAgICB2YXIgdGFiQ29udGVudFZp
ZXcgPSBXSS50YWJCcm93c2VyLmJlc3RUYWJDb250ZW50Vmlld0ZvckNsYXNzKFdJLlN0b3JhZ2VU
YWJDb250ZW50Vmlldyk7CkBAIC0xMjU0LDM1ICsxMjE4LDE1IEBAIFdJLnRhYkNvbnRlbnRWaWV3
Q2xhc3NGb3JSZXByZXNlbnRlZE9iamVjdCA9IGZ1bmN0aW9uKHJlcHJlc2VudGVkT2JqZWN0KQog
ICAgIGlmIChyZXByZXNlbnRlZE9iamVjdCA9PT0gV0kuX2NvbnNvbGVSZXByZXNlbnRlZE9iamVj
dCkKICAgICAgICAgcmV0dXJuIFdJLkNvbnNvbGVUYWJDb250ZW50VmlldzsKIAotICAgIGlmIChX
SS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVTb3VyY2VzVGFiLnZhbHVlKSB7Ci0gICAgICAg
IGlmIChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkZyYW1lCi0gICAgICAgICAgICB8
fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkZyYW1lQ29sbGVjdGlvbgotICAgICAg
ICAgICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZQotICAgICAg
ICAgICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZUNvbGxlY3Rp
b24KLSAgICAgICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0
Ci0gICAgICAgICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlNjcmlwdENv
bGxlY3Rpb24KLSAgICAgICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0ku
Q1NTU3R5bGVTaGVldAotICAgICAgICAgICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2Vv
ZiBXSS5DU1NTdHlsZVNoZWV0Q29sbGVjdGlvbikKLSAgICAgICAgICAgIHJldHVybiBXSS5Tb3Vy
Y2VzVGFiQ29udGVudFZpZXc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFdJLmRlYnVnZ2Vy
TWFuYWdlci5wYXVzZWQpIHsKLSAgICAgICAgICAgIGlmIChyZXByZXNlbnRlZE9iamVjdCBpbnN0
YW5jZW9mIFdJLlNjcmlwdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gV0kuRGVidWdnZXJUYWJD
b250ZW50VmlldzsKLQotICAgICAgICAgICAgaWYgKHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNl
b2YgV0kuUmVzb3VyY2UgJiYgKHJlcHJlc2VudGVkT2JqZWN0LnR5cGUgPT09IFdJLlJlc291cmNl
LlR5cGUuRG9jdW1lbnQgfHwgcmVwcmVzZW50ZWRPYmplY3QudHlwZSA9PT0gV0kuUmVzb3VyY2Uu
VHlwZS5TY3JpcHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBXSS5EZWJ1Z2dlclRhYkNvbnRl
bnRWaWV3OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlcHJlc2VudGVkT2JqZWN0IGluc3Rh
bmNlb2YgV0kuRnJhbWUKLSAgICAgICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNl
b2YgV0kuRnJhbWVDb2xsZWN0aW9uCi0gICAgICAgICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBp
bnN0YW5jZW9mIFdJLlJlc291cmNlCi0gICAgICAgICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBp
bnN0YW5jZW9mIFdJLlJlc291cmNlQ29sbGVjdGlvbgotICAgICAgICAgICAgfHwgcmVwcmVzZW50
ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5TY3JpcHQKLSAgICAgICAgICAgIHx8IHJlcHJlc2VudGVk
T2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0Q29sbGVjdGlvbgotICAgICAgICAgICAgfHwgcmVw
cmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5DU1NTdHlsZVNoZWV0Ci0gICAgICAgICAgICB8
fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkNTU1N0eWxlU2hlZXRDb2xsZWN0aW9u
KQotICAgICAgICAgICAgcmV0dXJuIFdJLlJlc291cmNlc1RhYkNvbnRlbnRWaWV3OwotICAgIH0K
KyAgICBpZiAocmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5GcmFtZQorICAgICAgICB8
fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkZyYW1lQ29sbGVjdGlvbgorICAgICAg
ICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlJlc291cmNlCisgICAgICAgIHx8
IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VDb2xsZWN0aW9uCisgICAg
ICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0CisgICAgICAgIHx8
IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0Q29sbGVjdGlvbgorICAgICAg
ICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkNTU1N0eWxlU2hlZXQKKyAgICAg
ICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5DU1NTdHlsZVNoZWV0Q29sbGVj
dGlvbikKKyAgICAgICAgcmV0dXJuIFdJLlNvdXJjZXNUYWJDb250ZW50VmlldzsKIAogICAgIGlm
IChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkRPTVN0b3JhZ2VPYmplY3QgfHwgcmVw
cmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5Db29raWVTdG9yYWdlT2JqZWN0IHx8CiAgICAg
ICAgIHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuRGF0YWJhc2VUYWJsZU9iamVjdCB8
fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkRhdGFiYXNlT2JqZWN0IHx8CkBAIC0x
NTc2LDEwICsxNTIwLDcgQEAgV0kuX2hhbmRsZURyb3AgPSBmdW5jdGlvbihldmVudCkKIAogV0ku
X2RlYnVnZ2VyRGlkUGF1c2UgPSBmdW5jdGlvbihldmVudCkKIHsKLSAgICBpZiAoV0kuc2V0dGlu
Z3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1RhYi52YWx1ZSkKLSAgICAgICAgV0kuc2hvd1Nv
dXJjZXNUYWIoe3Nob3dTY29wZUNoYWluU2lkZWJhcjogV0kuc2V0dGluZ3Muc2hvd1Njb3BlQ2hh
aW5PblBhdXNlLnZhbHVlfSk7Ci0gICAgZWxzZQotICAgICAgICBXSS5zaG93RGVidWdnZXJUYWIo
e3Nob3dTY29wZUNoYWluU2lkZWJhcjogV0kuc2V0dGluZ3Muc2hvd1Njb3BlQ2hhaW5PblBhdXNl
LnZhbHVlfSk7CisgICAgV0kuc2hvd1NvdXJjZXNUYWIoe3Nob3dTY29wZUNoYWluU2lkZWJhcjog
V0kuc2V0dGluZ3Muc2hvd1Njb3BlQ2hhaW5PblBhdXNlLnZhbHVlfSk7CiAKICAgICBXSS5fZGFz
aGJvYXJkQ29udGFpbmVyLnNob3dEYXNoYm9hcmRWaWV3Rm9yUmVwcmVzZW50ZWRPYmplY3QoV0ku
X2Rhc2hib2FyZHMuZGVidWdnZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9CYXNlL1NldHRpbmcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9CYXNlL1NldHRpbmcuanMKaW5kZXggNjY0ZjZhYzVkNzIuLjA2NzA3NzEy
NGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNl
L1NldHRpbmcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFz
ZS9TZXR0aW5nLmpzCkBAIC0xODgsNyArMTg4LDYgQEAgV0kuc2V0dGluZ3MgPSB7CiAgICAgLy8g
RXhwZXJpbWVudGFsCiAgICAgZXhwZXJpbWVudGFsRW5hYmxlTGF5ZXJzVGFiOiBuZXcgV0kuU2V0
dGluZygiZXhwZXJpbWVudGFsLWVuYWJsZS1sYXllcnMtdGFiIiwgZmFsc2UpLAogICAgIGV4cGVy
aW1lbnRhbEVuYWJsZU5ld1RhYkJhcjogbmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRhbC1lbmFi
bGUtbmV3LXRhYi1iYXIiLCBmYWxzZSksCi0gICAgZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1Rh
YjogbmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRhbC1lbmFibGUtc291cmNlcy10YWIiLCBmYWxz
ZSksCiAgICAgZXhwZXJpbWVudGFsRW5hYmxlU3R5bGVzSWNvbnM6IG5ldyBXSS5TZXR0aW5nKCJl
eHBlcmltZW50YWwtc3R5bGVzLWljb25zIiwgZmFsc2UpLAogICAgIGV4cGVyaW1lbnRhbEVuYWJs
ZVN0eWxlc0p1bXBUb0VmZmVjdGl2ZTogbmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRhbC1zdHls
ZXMtanVtcC10by1lZmZlY3RpdmUiLCBmYWxzZSksCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL05ldHdvcmtNYW5hZ2VyLmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTmV0d29ya01h
bmFnZXIuanMKaW5kZXggZGZmZTk4Yzg4ZTQuLmZhNGYzM2NhZWYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9OZXR3b3JrTWFuYWdl
ci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9OZXR3b3JrTWFuYWdlci5qcwpAQCAtNTAsNyArNTAsNyBAQCBXSS5OZXR3b3JrTWFuYWdlciA9
IGNsYXNzIE5ldHdvcmtNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHRoaXMuX3Nh
dmVMb2NhbFJlc291cmNlT3ZlcnJpZGVzRGVib3VuY2VyID0gbnVsbDsKIAogICAgICAgICAvLyBG
SVhNRTogUHJvdmlkZSBkZWRpY2F0ZWQgVUkgdG8gdG9nZ2xlIE5ldHdvcmsgSW50ZXJjZXB0aW9u
IGdsb2JhbGx5PwotICAgICAgICB0aGlzLl9pbnRlcmNlcHRpb25FbmFibGVkID0gV0kuc2V0dGlu
Z3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1RhYi52YWx1ZSB8fCAhIXdpbmRvdy5JbnNwZWN0
b3JUZXN0OworICAgICAgICB0aGlzLl9pbnRlcmNlcHRpb25FbmFibGVkID0gISF3aW5kb3cuSW5z
cGVjdG9yVGVzdDsKIAogICAgICAgICBXSS5ub3RpZmljYXRpb25zLmFkZEV2ZW50TGlzdGVuZXIo
V0kuTm90aWZpY2F0aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRlZCwgdGhpcy5fZXh0cmFEb21haW5z
QWN0aXZhdGVkLCB0aGlzKTsKICAgICAgICAgV0kuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXSS5G
cmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX2hhbmRsZUZyYW1lTWFpblJl
c291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKQEAgLTg1LDkgKzg1LDYgQEAgV0kuTmV0d29ya01hbmFn
ZXIgPSBjbGFzcyBOZXR3b3JrTWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgc3RhdGlj
IHN1cHBvcnRzTG9jYWxSZXNvdXJjZU92ZXJyaWRlcygpCiAgICAgewotICAgICAgICBpZiAoIVdJ
LnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZVNvdXJjZXNUYWIudmFsdWUpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgcmV0dXJuIHdpbmRvdy5OZXR3b3JrQWdlbnQgJiYg
SW5zcGVjdG9yQmFja2VuZC5kb21haW5zLk5ldHdvcmsgJiYgSW5zcGVjdG9yQmFja2VuZC5kb21h
aW5zLk5ldHdvcmsuc2V0SW50ZXJjZXB0aW9uRW5hYmxlZDsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbCBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAppbmRleCA2ZTRjMjNjNjBjMC4u
OGE5NzkxNTk1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9N
YWluLmh0bWwKQEAgLTkxLDcgKzkxLDYgQEAKICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9IlZpZXdzL0RhdGFiYXNlQ29udGVudFZpZXcuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9IlZpZXdzL0RhdGFiYXNlVGFibGVDb250ZW50Vmlldy5jc3MiPgogICAgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvRGVidWdnZXJEYXNoYm9hcmRWaWV3LmNz
cyI+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9EZWJ1Z2dlclNpZGVi
YXJQYW5lbC5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvRGVm
YXVsdERhc2hib2FyZFZpZXcuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
IlZpZXdzL0RldGFpbHNTZWN0aW9uLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSJWaWV3cy9EaXZpZGVyTmF2aWdhdGlvbkl0ZW0uY3NzIj4KQEAgLTE4MSw3ICsxODAsNiBA
QAogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvUmVzb3VyY2VJY29ucy5j
c3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvUmVzb3VyY2VTZWN1
cml0eUNvbnRlbnRWaWV3LmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJW
aWV3cy9SZXNvdXJjZVNpemVzQ29udGVudFZpZXcuY3NzIj4KLSAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9IlZpZXdzL1Jlc291cmNlU2lkZWJhclBhbmVsLmNzcyI+CiAgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9SZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2Rl
LmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9SZXNvdXJjZVRp
bWluZ0JyZWFrZG93blZpZXcuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
IlZpZXdzL1Jlc291cmNlVHJlZUVsZW1lbnQuY3NzIj4KQEAgLTU2NCwxMSArNTYyLDkgQEAKICAg
ICA8c2NyaXB0IHNyYz0iVmlld3MvQXVkaXRUYWJDb250ZW50Vmlldy5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IlZpZXdzL0NhbnZhc1RhYkNvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iVmlld3MvQ29uc29sZVRhYkNvbnRlbnRWaWV3LmpzIj48L3Njcmlw
dD4KLSAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGVidWdnZXJUYWJDb250ZW50Vmlldy5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0VsZW1lbnRzVGFiQ29udGVudFZpZXcuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9MYXllcnNUYWJDb250ZW50Vmlldy5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1Jlc291cmNlVHJlZUVsZW1lbnQu
anMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9SZXNvdXJjZXNUYWJDb250ZW50
Vmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1NlYXJjaFRhYkNvbnRl
bnRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvU2V0dGluZ3NUYWJD
b250ZW50Vmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1NvdXJjZXNU
YWJDb250ZW50Vmlldy5qcyI+PC9zY3JpcHQ+CkBAIC02NjIsNyArNjU4LDYgQEAKICAgICA8c2Ny
aXB0IHNyYz0iVmlld3MvRGF0YWJhc2VUYWJsZVRyZWVFbGVtZW50LmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iVmlld3MvRGF0YWJhc2VUcmVlRWxlbWVudC5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IlZpZXdzL0RlYnVnZ2VyRGFzaGJvYXJkVmlldy5qcyI+PC9zY3JpcHQ+
Ci0gICAgPHNjcmlwdCBzcmM9IlZpZXdzL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGVmYXVsdERhc2hib2FyZFZpZXcuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9EaXZpZGVyTmF2aWdhdGlvbkl0ZW0uanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9FZGl0YWJsZURhdGFHcmlkTm9kZS5qcyI+
PC9zY3JpcHQ+CkBAIC03ODAsNyArNzc1LDYgQEAKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvUmVz
b3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
Vmlld3MvUmVzb3VyY2VIZWFkZXJzQ29udGVudFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJWaWV3cy9SZXNvdXJjZVNlY3VyaXR5Q29udGVudFZpZXcuanMiPjwvc2NyaXB0Pgot
ICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9SZXNvdXJjZVNpZGViYXJQYW5lbC5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1Jlc291cmNlU2l6ZXNDb250ZW50Vmlldy5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1Jlc291cmNlVGltZWxpbmVEYXRhR3JpZE5v
ZGUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9SZXNvdXJjZVRpbWluZ0Jy
ZWFrZG93blZpZXcuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JGcm9udGVu
ZEFQSS5qcwppbmRleCBmMDg5MDRjZTdhMi4uYWEzZDJiYTkwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvckZyb250ZW5k
QVBJLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29s
L0luc3BlY3RvckZyb250ZW5kQVBJLmpzCkBAIC0xMDEsMTAgKzEwMSw3IEBAIEluc3BlY3RvckZy
b250ZW5kQVBJID0gewogCiAgICAgc2hvd1Jlc291cmNlczogZnVuY3Rpb24oKQogICAgIHsKLSAg
ICAgICAgaWYgKFdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZVNvdXJjZXNUYWIudmFsdWUp
Ci0gICAgICAgICAgICBXSS5zaG93U291cmNlc1RhYigpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBXSS5zaG93UmVzb3VyY2VzVGFiKCk7CisgICAgICAgIFdJLnNob3dTb3VyY2VzVGFiKCk7
CiAKICAgICB9LAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9Db250ZXh0TWVudVV0aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRleHRNZW51VXRpbGl0aWVzLmpzCmluZGV4IDgwZjlk
MWI1YzExLi4xNzk4ZDBhMWJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvQ29udGV4dE1lbnVVdGlsaXRpZXMuanMKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGV4dE1lbnVVdGlsaXRpZXMuanMK
QEAgLTE2NywxOCArMTY3LDEwIEBAIFdJLmFwcGVuZENvbnRleHRNZW51SXRlbXNGb3JVUkwgPSBm
dW5jdGlvbihjb250ZXh0TWVudSwgdXJsLCBvcHRpb25zID0ge30pCiAgICAgfQogCiAgICAgaWYg
KFdJLm5ldHdvcmtNYW5hZ2VyLnJlc291cmNlRm9yVVJMKHVybCkpIHsKLSAgICAgICAgaWYgKFdJ
LnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZVNvdXJjZXNUYWIudmFsdWUpIHsKLSAgICAgICAg
ICAgIGlmICghV0kuaXNTaG93aW5nU291cmNlc1RhYigpKSB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXSS5VSVN0cmluZygiUmV2ZWFsIGluIFNvdXJjZXMgVGFiIiks
ICgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgc2hvd1Jlc291cmNlV2l0aE9wdGlvbnMoe3By
ZWZlcnJlZFRhYlR5cGU6IFdJLlNvdXJjZXNUYWJDb250ZW50Vmlldy5UeXBlfSk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoIVdJLmlzU2hvd2luZ1Jlc291cmNlc1RhYigpKSB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXSS5VSVN0cmluZygiUmV2ZWFsIGluIFJlc291cmNlcyBUYWIi
KSwgKCkgPT4gewotICAgICAgICAgICAgICAgICAgICBzaG93UmVzb3VyY2VXaXRoT3B0aW9ucyh7
cHJlZmVycmVkVGFiVHlwZTogV0kuUmVzb3VyY2VzVGFiQ29udGVudFZpZXcuVHlwZX0pOwotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoIVdJLmlzU2hvd2lu
Z1NvdXJjZXNUYWIoKSkgeworICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXSS5V
SVN0cmluZygiUmV2ZWFsIGluIFNvdXJjZXMgVGFiIiksICgpID0+IHsKKyAgICAgICAgICAgICAg
ICBzaG93UmVzb3VyY2VXaXRoT3B0aW9ucyh7cHJlZmVycmVkVGFiVHlwZTogV0kuU291cmNlc1Rh
YkNvbnRlbnRWaWV3LlR5cGV9KTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKCFXSS5pc1Nob3dpbmdOZXR3b3JrVGFiKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmNz
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RlYnVnZ2VyU2lk
ZWJhclBhbmVsLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA5OTQ5MzFhNDEu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5kZWJ1Z2dlciA+
IC5jb250ZW50IHsKLSAgICB0b3A6IHZhcigtLW5hdmlnYXRpb24tYmFyLWhlaWdodCk7Ci19Ci0K
LS5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24uZGVidWdnZXIgPiAubmF2aWdhdGlvbi1iYXIg
ewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAg
ICByaWdodDogMDsKLX0KLQotLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5kZWJ1Z2dlciA+
IC5uYXZpZ2F0aW9uLWJhciAuZGVidWdnZXItYnJlYWtwb2ludHMgewotICAgIGZpbGw6IG5vbmU7
Ci0gICAgc3Ryb2tlOiB2YXIoLS1nbHlwaC1jb2xvcik7Ci19Ci0uc2lkZWJhciA+IC5wYW5lbC5u
YXZpZ2F0aW9uLmRlYnVnZ2VyID4gLm5hdmlnYXRpb24tYmFyIC5kZWJ1Z2dlci1icmVha3BvaW50
cy5hY3RpdmF0ZWQgewotICAgIGZpbGw6IHZhcigtLWdseXBoLWNvbG9yLWFjdGl2ZSk7Ci0gICAg
c3Ryb2tlOiB2YXIoLS1nbHlwaC1jb2xvci1hY3RpdmUpOwotfQotCi0uc2lkZWJhciA+IC5wYW5l
bC5uYXZpZ2F0aW9uLmRlYnVnZ2VyID4gLm5hdmlnYXRpb24tYmFyIC5kZWJ1Z2dlci1wYXVzZS1y
ZXN1bWUgewotICAgIGZpbGw6IG5vbmU7Ci0gICAgc3Ryb2tlOiB2YXIoLS1nbHlwaC1jb2xvcik7
Ci19Ci0uc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0aW9uLmRlYnVnZ2VyID4gLm5hdmlnYXRpb24t
YmFyIC5kZWJ1Z2dlci1wYXVzZS1yZXN1bWUuYWN0aXZhdGVkIHsKLSAgICBzdHJva2U6IHZhcigt
LWdseXBoLWNvbG9yLWFjdGl2ZSk7Ci19Ci0KLS5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24u
ZGVidWdnZXIgLndhcm5pbmctYmFubmVyIHsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAg
Zm9udC1zaXplOiAxMXB4OwotICAgIHBhZGRpbmc6IDExcHggNnB4OwotICAgIGNvbG9yOiB2YXIo
LS15ZWxsb3ctaGlnaGxpZ2h0LXRleHQtY29sb3IpOwotICAgIGJhY2tncm91bmQtY29sb3I6IHZh
cigtLXllbGxvdy1oaWdobGlnaHQtYmFja2dyb3VuZC1jb2xvcik7Ci0gICAgYm9yZGVyLWJvdHRv
bTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7Ci19Ci0KLS5zaWRlYmFyID4gLnBhbmVs
Lm5hdmlnYXRpb24uZGVidWdnZXIgLndhcm5pbmctYmFubmVyICsgLndhcm5pbmctYmFubmVyIHsK
LSAgICBkaXNwbGF5OiBub25lOwotfQotCi0uc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0aW9uLmRl
YnVnZ2VyIC50cmVlLW91dGxpbmUuc2luZ2xlLXRocmVhZCA+IC5pdGVtLnRocmVhZCB7Ci0gICAg
ZGlzcGxheTogbm9uZTsKLX0KLQotLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5kZWJ1Z2dl
ciAudHJlZS1vdXRsaW5lLnNpbmdsZS10aHJlYWQgewotICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0
OiAtMTBweDsKLX0KLQotLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5kZWJ1Z2dlciAud2Fy
bmluZy1iYW5uZXIgPiBhIHsKLSAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLSAgICBj
dXJzb3I6IHBvaW50ZXI7Ci19Ci0KLS5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24uZGVidWdn
ZXIgLmRldGFpbHMtc2VjdGlvbiB7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotfQotCi0uc2lkZWJh
ciA+IC5wYW5lbC5uYXZpZ2F0aW9uLmRlYnVnZ2VyIC5kZXRhaWxzLXNlY3Rpb24ucGF1c2VkLXJl
YXNvbi5jb2xsYXBzZWQgPiAuaGVhZGVyID4gLm9wdGlvbnMgewotICAgIGRpc3BsYXk6IGJsb2Nr
OwotfQotCi0uc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0aW9uLmRlYnVnZ2VyIC5kZXRhaWxzLXNl
Y3Rpb24gPiAuY29udGVudCB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci19Ci0KLS5zaWRlYmFyID4g
LnBhbmVsLm5hdmlnYXRpb24uZGVidWdnZXIgLmRldGFpbHMtc2VjdGlvbi5jb2xsYXBzZWQgPiAu
Y29udGVudCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotLnNpZGViYXIgPiAucGFuZWwubmF2
aWdhdGlvbi5kZWJ1Z2dlciAuZGV0YWlscy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXAgewot
ICAgIGRpc3BsYXk6IGJsb2NrOwotfQotCi0uc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0aW9uLmRl
YnVnZ2VyIC5kZXRhaWxzLXNlY3Rpb24uc2NyaXB0czpub3QoLmNvbGxhcHNlZCkgewotICAgIGJv
cmRlci1ib3R0b206IG5vbmU7Ci19Ci0KLS5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24uZGVi
dWdnZXIgPiAuY29udGVudCA+IC5icmVha3BvaW50cyAudHJlZS1vdXRsaW5lIC5pdGVtLmV2ZW50
LXRhcmdldC13aW5kb3cgLmljb24gewotICAgIGNvbnRlbnQ6IHVybCguLi9JbWFnZXMvVHlwZU9i
amVjdC5zdmcpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvRGVidWdnZXJTaWRlYmFyUGFuZWwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9EZWJ1Z2dlclNpZGViYXJQYW5lbC5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZGJmZDVmZjdjM2IuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RlYnVnZ2VyU2lkZWJhclBhbmVs
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTcwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
V0kuRGVidWdnZXJTaWRlYmFyUGFuZWwgPSBjbGFzcyBEZWJ1Z2dlclNpZGViYXJQYW5lbCBleHRl
bmRzIFdJLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwKLXsKLSAgICBjb25zdHJ1Y3RvcigpCi0gICAg
ewotICAgICAgICBzdXBlcigiZGVidWdnZXIiLCBXSS5VSVN0cmluZygiRGVidWdnZXIiKSwgdHJ1
ZSk7Ci0KLSAgICAgICAgV0kuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXSS5GcmFtZS5FdmVudC5N
YWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7
Ci0gICAgICAgIFdJLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV0kuRnJhbWUuRXZlbnQuUmVzb3Vy
Y2VXYXNBZGRlZCwgdGhpcy5fcmVzb3VyY2VBZGRlZCwgdGhpcyk7Ci0gICAgICAgIFdJLlRhcmdl
dC5hZGRFdmVudExpc3RlbmVyKFdJLlRhcmdldC5FdmVudC5SZXNvdXJjZUFkZGVkLCB0aGlzLl9y
ZXNvdXJjZUFkZGVkLCB0aGlzKTsKLQotICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZl
bnRMaXN0ZW5lcihXSS5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQnJlYWtwb2ludEFkZGVkLCB0aGlz
Ll9icmVha3BvaW50QWRkZWQsIHRoaXMpOwotICAgICAgICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIu
YWRkRXZlbnRMaXN0ZW5lcihXSS5ET01EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuRE9NQnJlYWtwb2lu
dEFkZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQsIHRoaXMpOwotICAgICAgICBXSS5kb21EZWJ1
Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5ET01EZWJ1Z2dlck1hbmFnZXIuRXZlbnQu
RXZlbnRCcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Ci0gICAg
ICAgIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRPTURlYnVnZ2Vy
TWFuYWdlci5FdmVudC5VUkxCcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwg
dGhpcyk7Ci0KLSAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0ku
RGVidWdnZXJNYW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRSZW1vdmVkLCB0aGlzLl9icmVha3BvaW50
UmVtb3ZlZCwgdGhpcyk7Ci0gICAgICAgIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExp
c3RlbmVyKFdJLkRPTURlYnVnZ2VyTWFuYWdlci5FdmVudC5ET01CcmVha3BvaW50UmVtb3ZlZCwg
dGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOwotICAgICAgICBXSS5kb21EZWJ1Z2dlck1h
bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5ET01EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuRXZlbnRC
cmVha3BvaW50UmVtb3ZlZCwgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOwotICAgICAg
ICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5ET01EZWJ1Z2dlck1h
bmFnZXIuRXZlbnQuVVJMQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVk
LCB0aGlzKTsKLQotICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihX
SS5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQnJlYWtwb2ludHNFbmFibGVkRGlkQ2hhbmdlLCB0aGlz
Ll9icmVha3BvaW50c0VuYWJsZWREaWRDaGFuZ2UsIHRoaXMpOwotICAgICAgICBXSS5kZWJ1Z2dl
ck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuU2NyaXB0
QWRkZWQsIHRoaXMuX3NjcmlwdEFkZGVkLCB0aGlzKTsKLSAgICAgICAgV0kuZGVidWdnZXJNYW5h
Z2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdFJlbW92
ZWQsIHRoaXMuX3NjcmlwdFJlbW92ZWQsIHRoaXMpOwotICAgICAgICBXSS5kZWJ1Z2dlck1hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuU2NyaXB0c0NsZWFy
ZWQsIHRoaXMuX3NjcmlwdHNDbGVhcmVkLCB0aGlzKTsKLSAgICAgICAgV0kuZGVidWdnZXJNYW5h
Z2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlBhdXNlZCwgdGhp
cy5fZGVidWdnZXJEaWRQYXVzZSwgdGhpcyk7Ci0gICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5h
ZGRFdmVudExpc3RlbmVyKFdJLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5SZXN1bWVkLCB0aGlzLl9k
ZWJ1Z2dlckRpZFJlc3VtZSwgdGhpcyk7Ci0gICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRF
dmVudExpc3RlbmVyKFdJLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5DYWxsRnJhbWVzRGlkQ2hhbmdl
LCB0aGlzLl9kZWJ1Z2dlckNhbGxGcmFtZXNEaWRDaGFuZ2UsIHRoaXMpOwotICAgICAgICBXSS5k
ZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQu
QWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlLCB0aGlzLl9kZWJ1Z2dlckFjdGl2ZUNhbGxGcmFtZURp
ZENoYW5nZSwgdGhpcyk7Ci0gICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3Rl
bmVyKFdJLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5XYWl0aW5nVG9QYXVzZSwgdGhpcy5fZGVidWdn
ZXJXYWl0aW5nVG9QYXVzZSwgdGhpcyk7Ci0KLSAgICAgICAgV0kuRE9NQnJlYWtwb2ludC5hZGRF
dmVudExpc3RlbmVyKFdJLkRPTUJyZWFrcG9pbnQuRXZlbnQuRE9NTm9kZUNoYW5nZWQsIHRoaXMu
X2hhbmRsZURPTUJyZWFrcG9pbnRET01Ob2RlQ2hhbmdlZCwgdGhpcyk7Ci0KLSAgICAgICAgV0ku
dGltZWxpbmVNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuVGltZWxpbmVNYW5hZ2VyLkV2ZW50
LkNhcHR1cmluZ1N0YXRlQ2hhbmdlZCwgdGhpcy5faGFuZGxlVGltZWxpbmVDYXB0dXJpbmdTdGF0
ZUNoYW5nZWQsIHRoaXMpOwotCi0gICAgICAgIFdJLmF1ZGl0TWFuYWdlci5hZGRFdmVudExpc3Rl
bmVyKFdJLkF1ZGl0TWFuYWdlci5FdmVudC5UZXN0U2NoZWR1bGVkLCB0aGlzLl9oYW5kbGVBdWRp
dE1hbmFnZXJUZXN0U2NoZWR1bGVkLCB0aGlzKTsKLSAgICAgICAgV0kuYXVkaXRNYW5hZ2VyLmFk
ZEV2ZW50TGlzdGVuZXIoV0kuQXVkaXRNYW5hZ2VyLkV2ZW50LlRlc3RDb21wbGV0ZWQsIHRoaXMu
X2hhbmRsZUF1ZGl0TWFuYWdlclRlc3RDb21wbGV0ZWQsIHRoaXMpOwotCi0gICAgICAgIFdJLnRh
cmdldE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5UYXJnZXRNYW5hZ2VyLkV2ZW50LlRhcmdl
dEFkZGVkLCB0aGlzLl90YXJnZXRBZGRlZCwgdGhpcyk7Ci0gICAgICAgIFdJLnRhcmdldE1hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5UYXJnZXRNYW5hZ2VyLkV2ZW50LlRhcmdldFJlbW92ZWQs
IHRoaXMuX3RhcmdldFJlbW92ZWQsIHRoaXMpOwotCi0gICAgICAgIHRoaXMuX3RpbWVsaW5lUmVj
b3JkaW5nV2FybmluZ0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAg
ICAgICAgdGhpcy5fdGltZWxpbmVSZWNvcmRpbmdXYXJuaW5nRWxlbWVudC5jbGFzc0xpc3QuYWRk
KCJ3YXJuaW5nLWJhbm5lciIpOwotICAgICAgICB0aGlzLl90aW1lbGluZVJlY29yZGluZ1dhcm5p
bmdFbGVtZW50LmFwcGVuZChXSS5VSVN0cmluZygiRGVidWdnZXIgZGlzYWJsZWQgZHVyaW5nIFRp
bWVsaW5lIHJlY29yZGluZyIpLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKLSAgICAg
ICAgbGV0IHRpbWVsaW5lU3RvcFJlY29yZGluZ0xpbmsgPSB0aGlzLl90aW1lbGluZVJlY29yZGlu
Z1dhcm5pbmdFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSk7
Ci0gICAgICAgIHRpbWVsaW5lU3RvcFJlY29yZGluZ0xpbmsudGV4dENvbnRlbnQgPSBXSS5VSVN0
cmluZygiU3RvcCByZWNvcmRpbmciKTsKLSAgICAgICAgdGltZWxpbmVTdG9wUmVjb3JkaW5nTGlu
ay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsgV0kudGltZWxpbmVNYW5hZ2VyLnN0
b3BDYXB0dXJpbmcoKTsgfSk7Ci0KLSAgICAgICAgdGhpcy5fYXVkaXRUZXN0V2FybmluZ0VsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgdGhpcy5fYXVkaXRU
ZXN0V2FybmluZ0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgid2FybmluZy1iYW5uZXIiKTsKLSAgICAg
ICAgdGhpcy5fYXVkaXRUZXN0V2FybmluZ0VsZW1lbnQuYXBwZW5kKFdJLlVJU3RyaW5nKCJEZWJ1
Z2dlciBkaXNhYmxlZCBkdXJpbmcgQXVkaXQiKSwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIi
KSk7Ci0gICAgICAgIGxldCBhdWRpdFN0b3BSZWNvcmRpbmdMaW5rID0gdGhpcy5fYXVkaXRUZXN0
V2FybmluZ0VsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKTsK
LSAgICAgICAgYXVkaXRTdG9wUmVjb3JkaW5nTGluay50ZXh0Q29udGVudCA9IFdJLlVJU3RyaW5n
KCJTdG9wIEF1ZGl0Iik7Ci0gICAgICAgIGF1ZGl0U3RvcFJlY29yZGluZ0xpbmsuYWRkRXZlbnRM
aXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7IFdJLmF1ZGl0TWFuYWdlci5zdG9wKCk7IH0pOwotCi0g
ICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzRGlzYWJsZWRXYXJuaW5nRWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICB0aGlzLl9icmVha3BvaW50c0Rpc2FibGVk
V2FybmluZ0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgid2FybmluZy1iYW5uZXIiKTsKLSAgICAgICAg
dGhpcy5fYnJlYWtwb2ludHNEaXNhYmxlZFdhcm5pbmdFbGVtZW50LmFwcGVuZChXSS5VSVN0cmlu
ZygiQnJlYWtwb2ludHMgZGlzYWJsZWQiKSwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7
Ci0gICAgICAgIGxldCBlbmFibGVCcmVha3BvaW50c0xpbmsgPSB0aGlzLl9icmVha3BvaW50c0Rp
c2FibGVkV2FybmluZ0VsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
YSIpKTsKLSAgICAgICAgZW5hYmxlQnJlYWtwb2ludHNMaW5rLnRleHRDb250ZW50ID0gV0kuVUlT
dHJpbmcoIkVuYWJsZSBicmVha3BvaW50cyIpOwotICAgICAgICBlbmFibGVCcmVha3BvaW50c0xp
bmsuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7IFdJLmRlYnVnZ2VyVG9nZ2xlQnJl
YWtwb2ludHMoKTsgfSk7Ci0KLSAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkJhciA9IG5ldyBXSS5O
YXZpZ2F0aW9uQmFyOwotICAgICAgICB0aGlzLmFkZFN1YnZpZXcodGhpcy5fbmF2aWdhdGlvbkJh
cik7Ci0KLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzSW1hZ2UgPSB7c3JjOiAiSW1hZ2VzL0JyZWFr
cG9pbnRzLnN2ZyIsIHdpZHRoOiAxNSwgaGVpZ2h0OiAxNX07Ci0gICAgICAgIHZhciBwYXVzZUlt
YWdlID0ge3NyYzogIkltYWdlcy9QYXVzZS5zdmciLCB3aWR0aDogMTUsIGhlaWdodDogMTV9Owot
ICAgICAgICB2YXIgcmVzdW1lSW1hZ2UgPSB7c3JjOiAiSW1hZ2VzL1Jlc3VtZS5zdmciLCB3aWR0
aDogMTUsIGhlaWdodDogMTV9OwotICAgICAgICB2YXIgc3RlcE92ZXJJbWFnZSA9IHtzcmM6ICJJ
bWFnZXMvU3RlcE92ZXIuc3ZnIiwgd2lkdGg6IDE1LCBoZWlnaHQ6IDE1fTsKLSAgICAgICAgdmFy
IHN0ZXBJbnRvSW1hZ2UgPSB7c3JjOiAiSW1hZ2VzL1N0ZXBJbnRvLnN2ZyIsIHdpZHRoOiAxNSwg
aGVpZ2h0OiAxNX07Ci0gICAgICAgIHZhciBzdGVwT3V0SW1hZ2UgPSB7c3JjOiAiSW1hZ2VzL1N0
ZXBPdXQuc3ZnIiwgd2lkdGg6IDE1LCBoZWlnaHQ6IDE1fTsKLQotICAgICAgICB2YXIgdG9vbFRp
cCA9IFdJLlVJU3RyaW5nKCJFbmFibGUgYWxsIGJyZWFrcG9pbnRzICglcykiKS5mb3JtYXQoV0ku
dG9nZ2xlQnJlYWtwb2ludHNLZXlib2FyZFNob3J0Y3V0LmRpc3BsYXlOYW1lKTsKLSAgICAgICAg
dmFyIGFsdFRvb2xUaXAgPSBXSS5VSVN0cmluZygiRGlzYWJsZSBhbGwgYnJlYWtwb2ludHMgKCVz
KSIpLmZvcm1hdChXSS50b2dnbGVCcmVha3BvaW50c0tleWJvYXJkU2hvcnRjdXQuZGlzcGxheU5h
bWUpOwotCi0gICAgICAgIHRoaXMuX2RlYnVnZ2VyQnJlYWtwb2ludHNCdXR0b25JdGVtID0gbmV3
IFdJLkFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0oImRlYnVnZ2VyLWJyZWFrcG9pbnRzIiwg
dG9vbFRpcCwgYWx0VG9vbFRpcCwgYnJlYWtwb2ludHNJbWFnZS5zcmMsIGJyZWFrcG9pbnRzSW1h
Z2Uud2lkdGgsIGJyZWFrcG9pbnRzSW1hZ2UuaGVpZ2h0KTsKLSAgICAgICAgdGhpcy5fZGVidWdn
ZXJCcmVha3BvaW50c0J1dHRvbkl0ZW0uYWN0aXZhdGVkID0gV0kuZGVidWdnZXJNYW5hZ2VyLmJy
ZWFrcG9pbnRzRW5hYmxlZDsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJCcmVha3BvaW50c0J1dHRv
bkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXSS5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlj
a2VkLCBXSS5kZWJ1Z2dlclRvZ2dsZUJyZWFrcG9pbnRzLCB0aGlzKTsKLSAgICAgICAgdGhpcy5f
bmF2aWdhdGlvbkJhci5hZGROYXZpZ2F0aW9uSXRlbSh0aGlzLl9kZWJ1Z2dlckJyZWFrcG9pbnRz
QnV0dG9uSXRlbSk7Ci0KLSAgICAgICAgdG9vbFRpcCA9IFdJLlVJU3RyaW5nKCJQYXVzZSBzY3Jp
cHQgZXhlY3V0aW9uICglcyBvciAlcykiKS5mb3JtYXQoV0kucGF1c2VPclJlc3VtZUtleWJvYXJk
U2hvcnRjdXQuZGlzcGxheU5hbWUsIFdJLnBhdXNlT3JSZXN1bWVBbHRlcm5hdGVLZXlib2FyZFNo
b3J0Y3V0LmRpc3BsYXlOYW1lKTsKLSAgICAgICAgYWx0VG9vbFRpcCA9IFdJLlVJU3RyaW5nKCJD
b250aW51ZSBzY3JpcHQgZXhlY3V0aW9uICglcyBvciAlcykiKS5mb3JtYXQoV0kucGF1c2VPclJl
c3VtZUtleWJvYXJkU2hvcnRjdXQuZGlzcGxheU5hbWUsIFdJLnBhdXNlT3JSZXN1bWVBbHRlcm5h
dGVLZXlib2FyZFNob3J0Y3V0LmRpc3BsYXlOYW1lKTsKLQotICAgICAgICB0aGlzLl9kZWJ1Z2dl
clBhdXNlUmVzdW1lQnV0dG9uSXRlbSA9IG5ldyBXSS5Ub2dnbGVCdXR0b25OYXZpZ2F0aW9uSXRl
bSgiZGVidWdnZXItcGF1c2UtcmVzdW1lIiwgdG9vbFRpcCwgYWx0VG9vbFRpcCwgcGF1c2VJbWFn
ZS5zcmMsIHJlc3VtZUltYWdlLnNyYywgcGF1c2VJbWFnZS53aWR0aCwgcGF1c2VJbWFnZS5oZWln
aHQpOwotICAgICAgICB0aGlzLl9kZWJ1Z2dlclBhdXNlUmVzdW1lQnV0dG9uSXRlbS5hZGRFdmVu
dExpc3RlbmVyKFdJLkJ1dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIFdJLmRlYnVn
Z2VyUGF1c2VSZXN1bWVUb2dnbGUsIHRoaXMpOwotICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uQmFy
LmFkZE5hdmlnYXRpb25JdGVtKHRoaXMuX2RlYnVnZ2VyUGF1c2VSZXN1bWVCdXR0b25JdGVtKTsK
LQotICAgICAgICB0aGlzLl9kZWJ1Z2dlclN0ZXBPdmVyQnV0dG9uSXRlbSA9IG5ldyBXSS5CdXR0
b25OYXZpZ2F0aW9uSXRlbSgiZGVidWdnZXItc3RlcC1vdmVyIiwgV0kuVUlTdHJpbmcoIlN0ZXAg
b3ZlciAoJXMgb3IgJXMpIikuZm9ybWF0KFdJLnN0ZXBPdmVyS2V5Ym9hcmRTaG9ydGN1dC5kaXNw
bGF5TmFtZSwgV0kuc3RlcE92ZXJBbHRlcm5hdGVLZXlib2FyZFNob3J0Y3V0LmRpc3BsYXlOYW1l
KSwgc3RlcE92ZXJJbWFnZS5zcmMsIHN0ZXBPdmVySW1hZ2Uud2lkdGgsIHN0ZXBPdmVySW1hZ2Uu
aGVpZ2h0KTsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJTdGVwT3ZlckJ1dHRvbkl0ZW0uYWRkRXZl
bnRMaXN0ZW5lcihXSS5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCBXSS5kZWJ1
Z2dlclN0ZXBPdmVyLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJTdGVwT3ZlckJ1dHRv
bkl0ZW0uZW5hYmxlZCA9IGZhbHNlOwotICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyLmFkZE5h
dmlnYXRpb25JdGVtKHRoaXMuX2RlYnVnZ2VyU3RlcE92ZXJCdXR0b25JdGVtKTsKLQotICAgICAg
ICB0aGlzLl9kZWJ1Z2dlclN0ZXBJbnRvQnV0dG9uSXRlbSA9IG5ldyBXSS5CdXR0b25OYXZpZ2F0
aW9uSXRlbSgiZGVidWdnZXItc3RlcC1pbnRvIiwgV0kuVUlTdHJpbmcoIlN0ZXAgaW50byAoJXMg
b3IgJXMpIikuZm9ybWF0KFdJLnN0ZXBJbnRvS2V5Ym9hcmRTaG9ydGN1dC5kaXNwbGF5TmFtZSwg
V0kuc3RlcEludG9BbHRlcm5hdGVLZXlib2FyZFNob3J0Y3V0LmRpc3BsYXlOYW1lKSwgc3RlcElu
dG9JbWFnZS5zcmMsIHN0ZXBJbnRvSW1hZ2Uud2lkdGgsIHN0ZXBJbnRvSW1hZ2UuaGVpZ2h0KTsK
LSAgICAgICAgdGhpcy5fZGVidWdnZXJTdGVwSW50b0J1dHRvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5l
cihXSS5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCBXSS5kZWJ1Z2dlclN0ZXBJ
bnRvLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJTdGVwSW50b0J1dHRvbkl0ZW0uZW5h
YmxlZCA9IGZhbHNlOwotICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyLmFkZE5hdmlnYXRpb25J
dGVtKHRoaXMuX2RlYnVnZ2VyU3RlcEludG9CdXR0b25JdGVtKTsKLQotICAgICAgICB0aGlzLl9k
ZWJ1Z2dlclN0ZXBPdXRCdXR0b25JdGVtID0gbmV3IFdJLkJ1dHRvbk5hdmlnYXRpb25JdGVtKCJk
ZWJ1Z2dlci1zdGVwLW91dCIsIFdJLlVJU3RyaW5nKCJTdGVwIG91dCAoJXMgb3IgJXMpIikuZm9y
bWF0KFdJLnN0ZXBPdXRLZXlib2FyZFNob3J0Y3V0LmRpc3BsYXlOYW1lLCBXSS5zdGVwT3V0QWx0
ZXJuYXRlS2V5Ym9hcmRTaG9ydGN1dC5kaXNwbGF5TmFtZSksIHN0ZXBPdXRJbWFnZS5zcmMsIHN0
ZXBPdXRJbWFnZS53aWR0aCwgc3RlcE91dEltYWdlLmhlaWdodCk7Ci0gICAgICAgIHRoaXMuX2Rl
YnVnZ2VyU3RlcE91dEJ1dHRvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXSS5CdXR0b25OYXZpZ2F0
aW9uSXRlbS5FdmVudC5DbGlja2VkLCBXSS5kZWJ1Z2dlclN0ZXBPdXQsIHRoaXMpOwotICAgICAg
ICB0aGlzLl9kZWJ1Z2dlclN0ZXBPdXRCdXR0b25JdGVtLmVuYWJsZWQgPSBmYWxzZTsKLSAgICAg
ICAgdGhpcy5fbmF2aWdhdGlvbkJhci5hZGROYXZpZ2F0aW9uSXRlbSh0aGlzLl9kZWJ1Z2dlclN0
ZXBPdXRCdXR0b25JdGVtKTsKLQotICAgICAgICBmdW5jdGlvbiBzaG93UmVzb3VyY2VzV2l0aElz
c3Vlc09ubHlGaWx0ZXJGdW5jdGlvbih0cmVlRWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAg
ICAgLy8gSXNzdWVzIGFyZSBvbmx5IHNob3duIGluIHRoZSBzY3JpcHRzIHRyZWUgb3V0bGluZS4K
LSAgICAgICAgICAgIGlmICh0cmVlRWxlbWVudC50cmVlT3V0bGluZSAhPT0gdGhpcy5fc2NyaXB0
c0NvbnRlbnRUcmVlT3V0bGluZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICAgICAgLy8gS2VlcCBpc3N1ZXMuCi0gICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQgaW5z
dGFuY2VvZiBXSS5Jc3N1ZVRyZWVFbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgICAgICAvLyBLZWVwIHJlc291cmNlcyB3aXRoIGlzc3Vlcy4KLSAgICAgICAg
ICAgIGlmICh0cmVlRWxlbWVudC5oYXNDaGlsZHJlbikgewotICAgICAgICAgICAgICAgIGZvciAo
bGV0IGNoaWxkIG9mIHRyZWVFbGVtZW50LmNoaWxkcmVuKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZCBpbnN0YW5jZW9mIFdJLklzc3VlVHJlZUVsZW1lbnQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmZp
bHRlckJhci5hZGRGaWx0ZXJCYXJCdXR0b24oImRlYnVnZ2VyLXNob3ctcmVzb3VyY2VzLXdpdGgt
aXNzdWVzLW9ubHkiLCBzaG93UmVzb3VyY2VzV2l0aElzc3Vlc09ubHlGaWx0ZXJGdW5jdGlvbi5i
aW5kKHRoaXMpLCBmYWxzZSwgV0kuVUlTdHJpbmcoIk9ubHkgc2hvdyByZXNvdXJjZXMgd2l0aCBp
c3N1ZXMiKSwgV0kuVUlTdHJpbmcoIlNob3cgYWxsIHJlc291cmNlcyIpLCAiSW1hZ2VzL0Vycm9y
cy5zdmciLCAxNSwgMTUpOwotCi0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVP
dXRsaW5lID0gdGhpcy5jb250ZW50VHJlZU91dGxpbmU7Ci0KLSAgICAgICAgbGV0IGJyZWFrcG9p
bnRzUm93ID0gbmV3IFdJLkRldGFpbHNTZWN0aW9uUm93OwotICAgICAgICBicmVha3BvaW50c1Jv
dy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5l
LmVsZW1lbnQpOwotCi0gICAgICAgIGxldCBicmVha3BvaW50TmF2aWdhdGlvbkJhcldyYXBwZXIg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLQotICAgICAgICBsZXQgYnJlYWtwb2lu
dE5hdmlnYXRpb25CYXIgPSBuZXcgV0kuTmF2aWdhdGlvbkJhcjsKLSAgICAgICAgYnJlYWtwb2lu
dE5hdmlnYXRpb25CYXJXcmFwcGVyLmFwcGVuZENoaWxkKGJyZWFrcG9pbnROYXZpZ2F0aW9uQmFy
LmVsZW1lbnQpOwotCi0gICAgICAgIHRoaXMuX2NyZWF0ZUJyZWFrcG9pbnRCdXR0b24gPSBuZXcg
V0kuQnV0dG9uTmF2aWdhdGlvbkl0ZW0oImNyZWF0ZS1icmVha3BvaW50IiwgV0kuVUlTdHJpbmco
IkNyZWF0ZSBCcmVha3BvaW50IiksICJJbWFnZXMvUGx1czEzLnN2ZyIsIDEzLCAxMyk7Ci0gICAg
ICAgIFdJLmFkZE1vdXNlRG93bkNvbnRleHRNZW51SGFuZGxlcnModGhpcy5fY3JlYXRlQnJlYWtw
b2ludEJ1dHRvbi5lbGVtZW50LCB0aGlzLl9wb3B1bGF0ZUNyZWF0ZUJyZWFrcG9pbnRDb250ZXh0
TWVudS5iaW5kKHRoaXMpKTsKLSAgICAgICAgYnJlYWtwb2ludE5hdmlnYXRpb25CYXIuYWRkTmF2
aWdhdGlvbkl0ZW0odGhpcy5fY3JlYXRlQnJlYWtwb2ludEJ1dHRvbik7Ci0KLSAgICAgICAgbGV0
IGJyZWFrcG9pbnRzR3JvdXAgPSBuZXcgV0kuRGV0YWlsc1NlY3Rpb25Hcm91cChbYnJlYWtwb2lu
dHNSb3ddKTsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNTZWN0aW9uID0gbmV3IFdJLkRldGFp
bHNTZWN0aW9uKCJicmVha3BvaW50cyIsIFdJLlVJU3RyaW5nKCJCcmVha3BvaW50cyIpLCBbYnJl
YWtwb2ludHNHcm91cF0sIGJyZWFrcG9pbnROYXZpZ2F0aW9uQmFyV3JhcHBlcik7Ci0gICAgICAg
IHRoaXMuY29udGVudFZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9icmVha3BvaW50c1Nl
Y3Rpb24uZWxlbWVudCk7Ci0KLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJlZU91
dGxpbmUuYWRkRXZlbnRMaXN0ZW5lcihXSS5UcmVlT3V0bGluZS5FdmVudC5FbGVtZW50QWRkZWQs
IHRoaXMuX2hhbmRsZUJyZWFrcG9pbnRFbGVtZW50QWRkZWRPclJlbW92ZWQsIHRoaXMpOwotICAg
ICAgICB0aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZS5hZGRFdmVudExpc3RlbmVy
KFdJLlRyZWVPdXRsaW5lLkV2ZW50LkVsZW1lbnRSZW1vdmVkLCB0aGlzLl9oYW5kbGVCcmVha3Bv
aW50RWxlbWVudEFkZGVkT3JSZW1vdmVkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dHNDb250ZW50VHJlZU91dGxpbmUuYWRkRXZlbnRMaXN0ZW5lcihXSS5UcmVlT3V0bGluZS5FdmVu
dC5TZWxlY3Rpb25EaWRDaGFuZ2UsIHRoaXMuX3RyZWVTZWxlY3Rpb25EaWRDaGFuZ2UsIHRoaXMp
OwotICAgICAgICB0aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZS5vbmRlbGV0ZSA9
IHRoaXMuX2JyZWFrcG9pbnRUcmVlT3V0bGluZURlbGV0ZVRyZWVFbGVtZW50LmJpbmQodGhpcyk7
Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLnBvcHVsYXRlQ29u
dGV4dE1lbnUgPSBmdW5jdGlvbihjb250ZXh0TWVudSwgZXZlbnQsIHRyZWVFbGVtZW50KSB7Ci0g
ICAgICAgICAgICB0aGlzLl9icmVha3BvaW50VHJlZU91dGxpbmVDb250ZXh0TWVudVRyZWVFbGVt
ZW50KGNvbnRleHRNZW51LCBldmVudCwgdHJlZUVsZW1lbnQpOwotCi0gICAgICAgICAgICBXSS5U
cmVlT3V0bGluZS5wcm90b3R5cGUucG9wdWxhdGVDb250ZXh0TWVudShjb250ZXh0TWVudSwgZXZl
bnQsIHRyZWVFbGVtZW50KTsKLSAgICAgICAgfS5iaW5kKHRoaXMpOwotCi0gICAgICAgIHRoaXMu
X3NjcmlwdHNDb250ZW50VHJlZU91dGxpbmUgPSB0aGlzLmNyZWF0ZUNvbnRlbnRUcmVlT3V0bGlu
ZSgpOwotICAgICAgICB0aGlzLl9zY3JpcHRzQ29udGVudFRyZWVPdXRsaW5lLmFkZEV2ZW50TGlz
dGVuZXIoV0kuVHJlZU91dGxpbmUuRXZlbnQuU2VsZWN0aW9uRGlkQ2hhbmdlLCB0aGlzLl90cmVl
U2VsZWN0aW9uRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fc2NyaXB0c0NvbnRlbnRU
cmVlT3V0bGluZS5pbmNsdWRlU291cmNlTWFwUmVzb3VyY2VDaGlsZHJlbiA9IHRydWU7Ci0KLSAg
ICAgICAgbGV0IHNjcmlwdHNSb3cgPSBuZXcgV0kuRGV0YWlsc1NlY3Rpb25Sb3c7Ci0gICAgICAg
IHNjcmlwdHNSb3cuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9zY3JpcHRzQ29udGVudFRyZWVP
dXRsaW5lLmVsZW1lbnQpOwotCi0gICAgICAgIGxldCBzY3JpcHRzR3JvdXAgPSBuZXcgV0kuRGV0
YWlsc1NlY3Rpb25Hcm91cChbc2NyaXB0c1Jvd10pOwotICAgICAgICB0aGlzLl9zY3JpcHRzU2Vj
dGlvbiA9IG5ldyBXSS5EZXRhaWxzU2VjdGlvbigic2NyaXB0cyIsIFdJLlVJU3RyaW5nKCJTb3Vy
Y2VzIiksIFtzY3JpcHRzR3JvdXBdKTsKLSAgICAgICAgdGhpcy5jb250ZW50Vmlldy5lbGVtZW50
LmFwcGVuZENoaWxkKHRoaXMuX3NjcmlwdHNTZWN0aW9uLmVsZW1lbnQpOwotCi0gICAgICAgIHRo
aXMuX2NhbGxTdGFja1RyZWVPdXRsaW5lID0gdGhpcy5jcmVhdGVDb250ZW50VHJlZU91dGxpbmUo
e3N1cHByZXNzRmlsdGVyaW5nOiB0cnVlfSk7Ci0gICAgICAgIHRoaXMuX2NhbGxTdGFja1RyZWVP
dXRsaW5lLmFkZEV2ZW50TGlzdGVuZXIoV0kuVHJlZU91dGxpbmUuRXZlbnQuU2VsZWN0aW9uRGlk
Q2hhbmdlLCB0aGlzLl90cmVlU2VsZWN0aW9uRGlkQ2hhbmdlLCB0aGlzKTsKLQotICAgICAgICB0
aGlzLl9jYWxsU3RhY2tSb3cgPSBuZXcgV0kuRGV0YWlsc1NlY3Rpb25Sb3c7Ci0gICAgICAgIHRo
aXMuX2NhbGxTdGFja1Jvdy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2NhbGxTdGFja1RyZWVP
dXRsaW5lLmVsZW1lbnQpOwotCi0gICAgICAgIHRoaXMuX2NhbGxTdGFja0dyb3VwID0gbmV3IFdJ
LkRldGFpbHNTZWN0aW9uR3JvdXAoW3RoaXMuX2NhbGxTdGFja1Jvd10pOwotICAgICAgICB0aGlz
Ll9jYWxsU3RhY2tTZWN0aW9uID0gbmV3IFdJLkRldGFpbHNTZWN0aW9uKCJjYWxsLXN0YWNrIiwg
V0kuVUlTdHJpbmcoIkNhbGwgU3RhY2siKSwgW3RoaXMuX2NhbGxTdGFja0dyb3VwXSk7Ci0KLSAg
ICAgICAgdGhpcy5fbWFpblRhcmdldFRyZWVFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgdGhpcy5f
YWN0aXZlQ2FsbEZyYW1lVHJlZUVsZW1lbnQgPSBudWxsOwotCi0gICAgICAgIHRoaXMuX3BhdXNl
UmVhc29uVHJlZU91dGxpbmUgPSBudWxsOwotCi0gICAgICAgIHRoaXMuX3BhdXNlUmVhc29uTGlu
a0NvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAg
ICAgIHRoaXMuX3BhdXNlUmVhc29uVGV4dFJvdyA9IG5ldyBXSS5EZXRhaWxzU2VjdGlvblRleHRS
b3c7Ci0gICAgICAgIHRoaXMuX3BhdXNlUmVhc29uR3JvdXAgPSBuZXcgV0kuRGV0YWlsc1NlY3Rp
b25Hcm91cChbdGhpcy5fcGF1c2VSZWFzb25UZXh0Um93XSk7Ci0gICAgICAgIHRoaXMuX3BhdXNl
UmVhc29uU2VjdGlvbiA9IG5ldyBXSS5EZXRhaWxzU2VjdGlvbigicGF1c2VkLXJlYXNvbiIsIFdJ
LlVJU3RyaW5nKCJQYXVzZSBSZWFzb24iKSwgW3RoaXMuX3BhdXNlUmVhc29uR3JvdXBdLCB0aGlz
Ll9wYXVzZVJlYXNvbkxpbmtDb250YWluZXJFbGVtZW50KTsKLQotICAgICAgICBXSS5CcmVha3Bv
aW50LmFkZEV2ZW50TGlzdGVuZXIoV0kuQnJlYWtwb2ludC5FdmVudC5EaXNwbGF5TG9jYXRpb25E
aWRDaGFuZ2UsIHRoaXMuX2hhbmRsZURlYnVnZ2VyT2JqZWN0RGlzcGxheUxvY2F0aW9uRGlkQ2hh
bmdlLCB0aGlzKTsKLSAgICAgICAgV0kuSXNzdWVNZXNzYWdlLmFkZEV2ZW50TGlzdGVuZXIoV0ku
SXNzdWVNZXNzYWdlLkV2ZW50LkRpc3BsYXlMb2NhdGlvbkRpZENoYW5nZSwgdGhpcy5faGFuZGxl
RGVidWdnZXJPYmplY3REaXNwbGF5TG9jYXRpb25EaWRDaGFuZ2UsIHRoaXMpOwotICAgICAgICBX
SS5jb25zb2xlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkNvbnNvbGVNYW5hZ2VyLkV2ZW50
Lklzc3VlQWRkZWQsIHRoaXMuX2hhbmRsZUlzc3VlQWRkZWQsIHRoaXMpOwotICAgICAgICBXSS5j
b25zb2xlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkNvbnNvbGVNYW5hZ2VyLkV2ZW50LkNs
ZWFyZWQsIHRoaXMuX2hhbmRsZUlzc3Vlc0NsZWFyZWQsIHRoaXMpOwotCi0gICAgICAgIFdJLmRl
YnVnZ2VyTWFuYWdlci5hZGRCcmVha3BvaW50KFdJLmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRp
b25zQnJlYWtwb2ludCk7Ci0gICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRCcmVha3BvaW50
KFdJLmRlYnVnZ2VyTWFuYWdlci51bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50KTsKLQotICAg
ICAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgMTApOiBEZWJ1Z2dlckFnZW50LnNldFBhdXNlT25B
c3NlcnRpb25zIGRpZCBub3QgZXhpc3QgeWV0LgotICAgICAgICBpZiAoSW5zcGVjdG9yQmFja2Vu
ZC5kb21haW5zLkRlYnVnZ2VyLnNldFBhdXNlT25Bc3NlcnRpb25zICYmIFdJLnNldHRpbmdzLnNo
b3dBc3NlcnRpb25GYWlsdXJlc0JyZWFrcG9pbnQudmFsdWUpCi0gICAgICAgICAgICBXSS5kZWJ1
Z2dlck1hbmFnZXIuYWRkQnJlYWtwb2ludChXSS5kZWJ1Z2dlck1hbmFnZXIuYXNzZXJ0aW9uRmFp
bHVyZXNCcmVha3BvaW50KTsKLQotICAgICAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgMTMpOiBE
ZWJ1Z2dlckFnZW50LnNldFBhdXNlT25NaWNyb3Rhc2tzIGRpZCBub3QgZXhpc3QgeWV0LgotICAg
ICAgICBpZiAoSW5zcGVjdG9yQmFja2VuZC5kb21haW5zLkRlYnVnZ2VyLnNldFBhdXNlT25NaWNy
b3Rhc2tzICYmIFdJLnNldHRpbmdzLnNob3dBbGxNaWNyb3Rhc2tzQnJlYWtwb2ludC52YWx1ZSkK
LSAgICAgICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRCcmVha3BvaW50KFdJLmRlYnVnZ2Vy
TWFuYWdlci5hbGxNaWNyb3Rhc2tzQnJlYWtwb2ludCk7Ci0KLSAgICAgICAgZm9yIChsZXQgdGFy
Z2V0IG9mIFdJLnRhcmdldHMpCi0gICAgICAgICAgICB0aGlzLl9hZGRUYXJnZXQodGFyZ2V0KTsK
LSAgICAgICAgdGhpcy5fdXBkYXRlQ2FsbFN0YWNrVHJlZU91dGxpbmUoKTsKLQotICAgICAgICBp
ZiAoV0kubmV0d29ya01hbmFnZXIubWFpbkZyYW1lKQotICAgICAgICAgICAgdGhpcy5fYWRkUmVz
b3VyY2VzUmVjdXJzaXZlbHlGb3JGcmFtZShXSS5uZXR3b3JrTWFuYWdlci5tYWluRnJhbWUpOwot
Ci0gICAgICAgIGZvciAobGV0IHNjcmlwdCBvZiBXSS5kZWJ1Z2dlck1hbmFnZXIua25vd25Ob25S
ZXNvdXJjZVNjcmlwdHMpCi0gICAgICAgICAgICB0aGlzLl9hZGRTY3JpcHQoc2NyaXB0KTsKLQot
ICAgICAgICBpZiAoV0kuZG9tRGVidWdnZXJNYW5hZ2VyLnN1cHBvcnRlZCkgewotICAgICAgICAg
ICAgaWYgKFdJLnNldHRpbmdzLnNob3dBbGxBbmltYXRpb25GcmFtZXNCcmVha3BvaW50LnZhbHVl
KQotICAgICAgICAgICAgICAgIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hZGRFdmVudEJyZWFrcG9p
bnQoV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQpOwot
Ci0gICAgICAgICAgICBpZiAoV0kuc2V0dGluZ3Muc2hvd0FsbFRpbWVvdXRzQnJlYWtwb2ludC52
YWx1ZSkKLSAgICAgICAgICAgICAgICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRCcmVh
a3BvaW50KFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxUaW1lb3V0c0JyZWFrcG9pbnQpOwotCi0g
ICAgICAgICAgICBpZiAoV0kuc2V0dGluZ3Muc2hvd0FsbEludGVydmFsc0JyZWFrcG9pbnQudmFs
dWUpCi0gICAgICAgICAgICAgICAgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50QnJlYWtw
b2ludChXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsSW50ZXJ2YWxzQnJlYWtwb2ludCk7Ci0KLSAg
ICAgICAgICAgIGlmIChXSS5zZXR0aW5ncy5zaG93QWxsTGlzdGVuZXJzQnJlYWtwb2ludC52YWx1
ZSkKLSAgICAgICAgICAgICAgICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRCcmVha3Bv
aW50KFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxMaXN0ZW5lcnNCcmVha3BvaW50KTsKLQotICAg
ICAgICAgICAgZm9yIChsZXQgZXZlbnRCcmVha3BvaW50IG9mIFdJLmRvbURlYnVnZ2VyTWFuYWdl
ci5saXN0ZW5lckJyZWFrcG9pbnRzKQotICAgICAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9p
bnQoZXZlbnRCcmVha3BvaW50KTsKLQotICAgICAgICAgICAgZm9yIChsZXQgZXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnQgb2YgV0kuZG9tTWFuYWdlci5ldmVudExpc3RlbmVyQnJlYWtwb2ludHMpCi0g
ICAgICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludChldmVudExpc3RlbmVyQnJlYWtwb2lu
dCk7Ci0KLSAgICAgICAgICAgIGZvciAobGV0IGRvbUJyZWFrcG9pbnQgb2YgV0kuZG9tRGVidWdn
ZXJNYW5hZ2VyLmRvbUJyZWFrcG9pbnRzKQotICAgICAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFr
cG9pbnQoZG9tQnJlYWtwb2ludCk7Ci0KLSAgICAgICAgICAgIGlmIChXSS5zZXR0aW5ncy5zaG93
QWxsUmVxdWVzdHNCcmVha3BvaW50LnZhbHVlKQotICAgICAgICAgICAgICAgIFdJLmRvbURlYnVn
Z2VyTWFuYWdlci5hZGRVUkxCcmVha3BvaW50KFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxSZXF1
ZXN0c0JyZWFrcG9pbnQpOwotCi0gICAgICAgICAgICBmb3IgKGxldCB1cmxCcmVha3BvaW50cyBv
ZiBXSS5kb21EZWJ1Z2dlck1hbmFnZXIudXJsQnJlYWtwb2ludHMpCi0gICAgICAgICAgICAgICAg
dGhpcy5fYWRkQnJlYWtwb2ludCh1cmxCcmVha3BvaW50cyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoV0kuZGVidWdnZXJNYW5hZ2VyLnBhdXNlZCkKLSAgICAgICAgICAgIHRoaXMuX2RlYnVn
Z2VyRGlkUGF1c2UobnVsbCk7Ci0KLSAgICAgICAgaWYgKFdJLmRlYnVnZ2VyTWFuYWdlci5icmVh
a3BvaW50c0Rpc2FibGVkVGVtcG9yYXJpbHkpIHsKLSAgICAgICAgICAgIHRoaXMuX2hhbmRsZVRp
bWVsaW5lQ2FwdHVyaW5nU3RhdGVDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIGlmIChXSS5hdWRp
dE1hbmFnZXIucnVubmluZ1N0YXRlID09PSBXSS5BdWRpdE1hbmFnZXIuUnVubmluZ1N0YXRlLkFj
dGl2ZSB8fCBXSS5hdWRpdE1hbmFnZXIucnVubmluZ1N0YXRlID09PSBXSS5BdWRpdE1hbmFnZXIu
UnVubmluZ1N0YXRlLlN0b3BwaW5nKQotICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUF1ZGl0
TWFuYWdlclRlc3RTY2hlZHVsZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3VwZGF0
ZUJyZWFrcG9pbnRzRGlzYWJsZWRCYW5uZXIoKTsKLSAgICB9Ci0KLSAgICAvLyBQdWJsaWMKLQot
ICAgIGdldCBtaW5pbXVtV2lkdGgoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX25hdmln
YXRpb25CYXIubWluaW11bVdpZHRoOwotICAgIH0KLQotICAgIGNsb3NlZCgpCi0gICAgewotICAg
ICAgICBzdXBlci5jbG9zZWQoKTsKLQotICAgICAgICBXSS5GcmFtZS5yZW1vdmVFdmVudExpc3Rl
bmVyKG51bGwsIG51bGwsIHRoaXMpOwotICAgICAgICBXSS5UYXJnZXQucmVtb3ZlRXZlbnRMaXN0
ZW5lcihudWxsLCBudWxsLCB0aGlzKTsKLSAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLnJlbW92
ZUV2ZW50TGlzdGVuZXIobnVsbCwgbnVsbCwgdGhpcyk7Ci0gICAgICAgIFdJLmRvbURlYnVnZ2Vy
TWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKG51bGwsIG51bGwsIHRoaXMpOwotICAgICAgICBX
SS5ET01CcmVha3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobnVsbCwgbnVsbCwgdGhpcyk7Ci0g
ICAgICAgIFdJLnRpbWVsaW5lTWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKG51bGwsIG51bGws
IHRoaXMpOwotICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIobnVs
bCwgbnVsbCwgdGhpcyk7Ci0gICAgICAgIFdJLkJyZWFrcG9pbnQucmVtb3ZlRXZlbnRMaXN0ZW5l
cihudWxsLCBudWxsLCB0aGlzKTsKLSAgICAgICAgV0kuSXNzdWVNZXNzYWdlLnJlbW92ZUV2ZW50
TGlzdGVuZXIobnVsbCwgbnVsbCwgdGhpcyk7Ci0gICAgfQotCi0gICAgc2hvd0RlZmF1bHRDb250
ZW50VmlldygpCi0gICAgewotICAgICAgICBpZiAoV0kubmV0d29ya01hbmFnZXIubWFpbkZyYW1l
KSB7Ci0gICAgICAgICAgICBsZXQgbWFpblRyZWVFbGVtZW50ID0gdGhpcy5fc2NyaXB0c0NvbnRl
bnRUcmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQoV0kubmV0d29ya01hbmFnZXIubWFpbkZyYW1l
Lm1haW5SZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAobWFpblRyZWVFbGVtZW50ICYmIHRoaXMu
c2hvd0RlZmF1bHRDb250ZW50Vmlld0ZvclRyZWVFbGVtZW50KG1haW5UcmVlRWxlbWVudCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbGV0IGN1cnJlbnRU
cmVlRWxlbWVudCA9IHRoaXMuX3NjcmlwdHNDb250ZW50VHJlZU91dGxpbmUuY2hpbGRyZW5bMF07
Ci0gICAgICAgIHdoaWxlIChjdXJyZW50VHJlZUVsZW1lbnQgJiYgIWN1cnJlbnRUcmVlRWxlbWVu
dC5yb290KSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRyZWVFbGVtZW50IGluc3RhbmNlb2Yg
V0kuUmVzb3VyY2VUcmVlRWxlbWVudCB8fCBjdXJyZW50VHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBX
SS5TY3JpcHRUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dEZWZh
dWx0Q29udGVudFZpZXdGb3JUcmVlRWxlbWVudChjdXJyZW50VHJlZUVsZW1lbnQpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGN1cnJl
bnRUcmVlRWxlbWVudCA9IGN1cnJlbnRUcmVlRWxlbWVudC50cmF2ZXJzZU5leHRUcmVlRWxlbWVu
dChmYWxzZSwgbnVsbCwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0cmVlRWxlbWVu
dEZvclJlcHJlc2VudGVkT2JqZWN0KHJlcHJlc2VudGVkT2JqZWN0KQotICAgIHsKLSAgICAgICAg
aWYgKHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuTG9jYWxSZXNvdXJjZSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIC8vIFRoZSBtYWluIHJlc291cmNlIGlzIHVz
ZWQgYXMgdGhlIHJlcHJlc2VudGVkT2JqZWN0IGluc3RlYWQgb2YgRnJhbWUgaW4gb3VyIHRyZWUu
Ci0gICAgICAgIGlmIChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkZyYW1lKQotICAg
ICAgICAgICAgcmVwcmVzZW50ZWRPYmplY3QgPSByZXByZXNlbnRlZE9iamVjdC5tYWluUmVzb3Vy
Y2U7Ci0KLSAgICAgICAgbGV0IHRyZWVFbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludHNDb250ZW50
VHJlZU91dGxpbmUuZmluZFRyZWVFbGVtZW50KHJlcHJlc2VudGVkT2JqZWN0KTsKLSAgICAgICAg
aWYgKCF0cmVlRWxlbWVudCkKLSAgICAgICAgICAgIHRyZWVFbGVtZW50ID0gdGhpcy5fc2NyaXB0
c0NvbnRlbnRUcmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQocmVwcmVzZW50ZWRPYmplY3QpOwot
Ci0gICAgICAgIGlmICh0cmVlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiB0cmVlRWxlbWVu
dDsKLQotICAgICAgICAvLyBPbmx5IHNwZWNpYWwgY2FzZSBTY3JpcHQgb2JqZWN0cy4KLSAgICAg
ICAgaWYgKCEocmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5TY3JpcHQpKSB7Ci0gICAg
ICAgICAgICBjb25zb2xlLmVycm9yKCJEaWRuJ3QgZmluZCBhIFRyZWVFbGVtZW50IGZvciByZXBy
ZXNlbnRlZE9iamVjdCIsIHJlcHJlc2VudGVkT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBu
dWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIFNjcmlwdCBoYXMgYSBVUkwgd2Ug
c2hvdWxkIGhhdmUgZm91bmQgaXQgZWFybGllci4KLSAgICAgICAgaWYgKHJlcHJlc2VudGVkT2Jq
ZWN0LnVybCkgewotICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRGlkbid0IGZpbmQgYSBTY3Jp
cHRUcmVlRWxlbWVudCBmb3IgYSBTY3JpcHQgd2l0aCBhIFVSTC4iKTsKLSAgICAgICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2luY2UgdGhlIFNjcmlwdCBkb2Vz
IG5vdCBoYXZlIGEgVVJMIHdlIGNvbnNpZGVyIGl0IGFuICdhbm9ueW1vdXMnIHNjcmlwdC4gVGhl
c2Ugc2NyaXB0cyBoYXBwZW4gZnJvbSBjYWxscyB0bwotICAgICAgICAvLyB3aW5kb3cuZXZhbCgp
IG9yIGJyb3dzZXIgZmVhdHVyZXMgbGlrZSBBdXRvIEZpbGwgYW5kIFJlYWRlci4gVGhleSBhcmUg
bm90IG5vcm1hbGx5IGFkZGVkIHRvIHRoZSBzaWRlYmFyLCBidXQgc2luY2UKLSAgICAgICAgLy8g
d2UgaGF2ZSBhIFNjcmlwdENvbnRlbnRWaWV3IGFza2luZyBmb3IgdGhlIHRyZWUgZWxlbWVudCB3
ZSB3aWxsIG1ha2UgYSBTY3JpcHRUcmVlRWxlbWVudCBvbiBkZW1hbmQgYW5kIGFkZCBpdC4KLQot
ICAgICAgICByZXR1cm4gdGhpcy5fYWRkU2NyaXB0KHJlcHJlc2VudGVkT2JqZWN0KTsKLSAgICB9
Ci0KLSAgICBjcmVhdGVDb250ZW50VHJlZU91dGxpbmUob3B0aW9ucyA9IHt9KQotICAgIHsKLSAg
ICAgICAgbGV0IHRyZWVPdXRsaW5lID0gc3VwZXIuY3JlYXRlQ29udGVudFRyZWVPdXRsaW5lKG9w
dGlvbnMpOwotCi0gICAgICAgIHRyZWVPdXRsaW5lLmFkZEV2ZW50TGlzdGVuZXIoV0kuVHJlZU91
dGxpbmUuRXZlbnQuRWxlbWVudFJldmVhbGVkLCAoZXZlbnQpID0+IHsKLSAgICAgICAgICAgIGxl
dCB0cmVlRWxlbWVudCA9IGV2ZW50LmRhdGEuZWxlbWVudDsKLSAgICAgICAgICAgIGxldCBkZXRh
aWxzU2VjdGlvbnMgPSBbdGhpcy5fcGF1c2VSZWFzb25TZWN0aW9uLCB0aGlzLl9jYWxsU3RhY2tT
ZWN0aW9uLCB0aGlzLl9icmVha3BvaW50c1NlY3Rpb24sIHRoaXMuX3NjcmlwdHNTZWN0aW9uXTsK
LSAgICAgICAgICAgIGxldCBkZXRhaWxzU2VjdGlvbiA9IGRldGFpbHNTZWN0aW9ucy5maW5kKChk
ZXRhaWxzU2VjdGlvbikgPT4gZGV0YWlsc1NlY3Rpb24uZWxlbWVudC5jb250YWlucyh0cmVlRWxl
bWVudC5saXN0SXRlbUVsZW1lbnQpKTsKLSAgICAgICAgICAgIGlmICghZGV0YWlsc1NlY3Rpb24p
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAvLyBSZXZlYWxpbmcgYSBU
cmVlRWxlbWVudCBhdCB0aGUgc2Nyb2xsIGNvbnRhaW5lcidzIHRvcG1vc3QgZWRnZSB3aXRoCi0g
ICAgICAgICAgICAvLyBzY3JvbGxJbnRvVmlld0lmTmVlZGVkIG1heSByZXN1bHQgaW4gdGhlIGVs
ZW1lbnQgYmVpbmcgY292ZXJlZCBieSB0aGUKLSAgICAgICAgICAgIC8vIERldGFpbHNTZWN0aW9u
IGhlYWRlciwgd2hpY2ggdXNlcyBzdGlja3kgcG9zaXRpb25pbmcuIERldGVjdCB0aGlzIGNhc2Us
Ci0gICAgICAgICAgICAvLyBhbmQgYWRqdXN0IHRoZSBzaWRlYmFyIGNvbnRlbnQncyBzY3JvbGwg
cG9zaXRpb24gdG8gY29tcGVuc2F0ZS4KLSAgICAgICAgICAgIGxldCBvZmZzZXQgPSBkZXRhaWxz
U2VjdGlvbi5oZWFkZXJFbGVtZW50LnRvdGFsT2Zmc2V0Qm90dG9tIC0gdHJlZUVsZW1lbnQubGlz
dEl0ZW1FbGVtZW50LnRvdGFsT2Zmc2V0VG9wOwotICAgICAgICAgICAgaWYgKG9mZnNldCA+IDAp
Ci0gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxFbGVtZW50LnNjcm9sbEJ5KDAsIC1vZmZzZXQp
OwotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4gdHJlZU91dGxpbmU7Ci0gICAgfQotCi0g
ICAgLy8gUHJvdGVjdGVkCi0KLSAgICBzYXZlU3RhdGVUb0Nvb2tpZShjb29raWUpCi0gICAgewot
ICAgICAgICBjb25zb2xlLmFzc2VydChjb29raWUpOwotCi0gICAgICAgIHZhciBzZWxlY3RlZFRy
ZWVFbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJlZU91dGxpbmUuc2VsZWN0ZWRU
cmVlRWxlbWVudDsKLSAgICAgICAgaWYgKCFzZWxlY3RlZFRyZWVFbGVtZW50KSB7Ci0gICAgICAg
ICAgICBzdXBlci5zYXZlU3RhdGVUb0Nvb2tpZShjb29raWUpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChzZWxlY3RlZFRyZWVFbGVtZW50LnJlcHJl
c2VudGVkT2JqZWN0KSB7Ci0gICAgICAgIGNhc2UgV0kuZGVidWdnZXJNYW5hZ2VyLmFsbEV4Y2Vw
dGlvbnNCcmVha3BvaW50OgotICAgICAgICAgICAgY29va2llW0RlYnVnZ2VyU2lkZWJhclBhbmVs
LlNlbGVjdGVkQWxsRXhjZXB0aW9uc0Nvb2tpZUtleV0gPSB0cnVlOwotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGNhc2UgV0kuZGVidWdnZXJNYW5hZ2VyLnVuY2F1Z2h0RXhjZXB0aW9u
c0JyZWFrcG9pbnQ6Ci0gICAgICAgICAgICBjb29raWVbRGVidWdnZXJTaWRlYmFyUGFuZWwuU2Vs
ZWN0ZWRVbmNhdWdodEV4Y2VwdGlvbnNDb29raWVLZXldID0gdHJ1ZTsKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBjYXNlIFdJLmRlYnVnZ2VyTWFuYWdlci5hc3NlcnRpb25GYWlsdXJl
c0JyZWFrcG9pbnQ6Ci0gICAgICAgICAgICBjb29raWVbRGVidWdnZXJTaWRlYmFyUGFuZWwuU2Vs
ZWN0ZWRBc3NlcnRpb25GYWlsdXJlc0Nvb2tpZUtleV0gPSB0cnVlOwotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGNhc2UgV0kuZGVidWdnZXJNYW5hZ2VyLmFsbE1pY3JvdGFza3NCcmVh
a3BvaW50OgotICAgICAgICAgICAgY29va2llW0RlYnVnZ2VyU2lkZWJhclBhbmVsLlNlbGVjdGVk
QWxsTWljcm90YXNrc0Nvb2tpZUtleV0gPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGNhc2UgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbEFuaW1hdGlvbkZyYW1lc0JyZWFr
cG9pbnQ6Ci0gICAgICAgICAgICBjb29raWVbRGVidWdnZXJTaWRlYmFyUGFuZWwuU2VsZWN0ZWRB
bGxBbmltYXRpb25GcmFtZXNCcmVha3BvaW50XSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgY2FzZSBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsSW50ZXJ2YWxzQnJlYWtw
b2ludDoKLSAgICAgICAgICAgIGNvb2tpZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3RlZEFs
bEludGVydmFsc0JyZWFrcG9pbnRdID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBjYXNlIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxMaXN0ZW5lcnNCcmVha3BvaW50Ogot
ICAgICAgICAgICAgY29va2llW0RlYnVnZ2VyU2lkZWJhclBhbmVsLlNlbGVjdGVkQWxsTGlzdGVu
ZXJzQnJlYWtwb2ludF0gPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNh
c2UgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbFRpbWVvdXRzQnJlYWtwb2ludDoKLSAgICAgICAg
ICAgIGNvb2tpZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3RlZEFsbFRpbWVvdXRzQnJlYWtw
b2ludF0gPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNhc2UgV0kuZG9t
RGVidWdnZXJNYW5hZ2VyLmFsbFJlcXVlc3RzQnJlYWtwb2ludDoKLSAgICAgICAgICAgIGNvb2tp
ZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3RlZEFsbFJlcXVlc3RzQ29va2llS2V5XSA9IHRy
dWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzdXBlci5zYXZl
U3RhdGVUb0Nvb2tpZShjb29raWUpOwotICAgIH0KLQotICAgIHJlc3RvcmVTdGF0ZUZyb21Db29r
aWUoY29va2llLCByZWxheGVkTWF0Y2hEZWxheSkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KGNvb2tpZSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gcmV2ZWFsQW5kU2VsZWN0KHRyZWVPdXRs
aW5lLCBicmVha3BvaW50KSB7Ci0gICAgICAgICAgICBsZXQgdHJlZUVsZW1lbnQgPSB0cmVlT3V0
bGluZS5maW5kVHJlZUVsZW1lbnQoYnJlYWtwb2ludCk7Ci0gICAgICAgICAgICBpZiAoIXRyZWVF
bGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdHJlZUVsZW1l
bnQucmV2ZWFsQW5kU2VsZWN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBFYWdlcmx5IHJl
c29sdmUgdGhlIHNwZWNpYWwgYnJlYWtwb2ludHM7IG90aGVyd2lzZSwgdXNlIHRoZSBkZWZhdWx0
IGJlaGF2aW9yLgotICAgICAgICBpZiAoY29va2llW0RlYnVnZ2VyU2lkZWJhclBhbmVsLlNlbGVj
dGVkQWxsRXhjZXB0aW9uc0Nvb2tpZUtleV0pCi0gICAgICAgICAgICByZXZlYWxBbmRTZWxlY3Qo
dGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJlZU91dGxpbmUsIFdJLmRlYnVnZ2VyTWFuYWdlci5h
bGxFeGNlcHRpb25zQnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UgaWYgKGNvb2tpZVtEZWJ1Z2dl
clNpZGViYXJQYW5lbC5TZWxlY3RlZFVuY2F1Z2h0RXhjZXB0aW9uc0Nvb2tpZUtleV0pCi0gICAg
ICAgICAgICByZXZlYWxBbmRTZWxlY3QodGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJlZU91dGxp
bmUsIFdJLmRlYnVnZ2VyTWFuYWdlci51bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50KTsKLSAg
ICAgICAgZWxzZSBpZiAoY29va2llW0RlYnVnZ2VyU2lkZWJhclBhbmVsLlNlbGVjdGVkQXNzZXJ0
aW9uRmFpbHVyZXNDb29raWVLZXldKQotICAgICAgICAgICAgcmV2ZWFsQW5kU2VsZWN0KHRoaXMu
X2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLCBXSS5kZWJ1Z2dlck1hbmFnZXIuYXNzZXJ0
aW9uRmFpbHVyZXNCcmVha3BvaW50KTsKLSAgICAgICAgZWxzZSBpZiAoY29va2llW0RlYnVnZ2Vy
U2lkZWJhclBhbmVsLlNlbGVjdGVkQWxsTWljcm90YXNrc0Nvb2tpZUtleV0pCi0gICAgICAgICAg
ICByZXZlYWxBbmRTZWxlY3QodGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJlZU91dGxpbmUsIFdJ
LmRlYnVnZ2VyTWFuYWdlci5hbGxNaWNyb3Rhc2tzQnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2Ug
aWYgKGNvb2tpZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3RlZEFsbEFuaW1hdGlvbkZyYW1l
c0JyZWFrcG9pbnRdKQotICAgICAgICAgICAgcmV2ZWFsQW5kU2VsZWN0KHRoaXMuX2JyZWFrcG9p
bnRzQ29udGVudFRyZWVPdXRsaW5lLCBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsQW5pbWF0aW9u
RnJhbWVzQnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UgaWYgKGNvb2tpZVtEZWJ1Z2dlclNpZGVi
YXJQYW5lbC5TZWxlY3RlZEFsbEludGVydmFsc0JyZWFrcG9pbnRdKQotICAgICAgICAgICAgcmV2
ZWFsQW5kU2VsZWN0KHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLCBXSS5kb21E
ZWJ1Z2dlck1hbmFnZXIuYWxsSW50ZXJ2YWxzQnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UgaWYg
KGNvb2tpZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3RlZEFsbExpc3RlbmVyc0JyZWFrcG9p
bnRdKQotICAgICAgICAgICAgcmV2ZWFsQW5kU2VsZWN0KHRoaXMuX2JyZWFrcG9pbnRzQ29udGVu
dFRyZWVPdXRsaW5lLCBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsTGlzdGVuZXJzQnJlYWtwb2lu
dCk7Ci0gICAgICAgIGVsc2UgaWYgKGNvb2tpZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3Rl
ZEFsbFJlcXVlc3RzQ29va2llS2V5XSkKLSAgICAgICAgICAgIHJldmVhbEFuZFNlbGVjdCh0aGlz
Ll9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZSwgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFs
bFJlcXVlc3RzQnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UgaWYgKGNvb2tpZVtEZWJ1Z2dlclNp
ZGViYXJQYW5lbC5TZWxlY3RlZEFsbFRpbWVvdXRzQnJlYWtwb2ludF0pCi0gICAgICAgICAgICBy
ZXZlYWxBbmRTZWxlY3QodGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJlZU91dGxpbmUsIFdJLmRv
bURlYnVnZ2VyTWFuYWdlci5hbGxUaW1lb3V0c0JyZWFrcG9pbnQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzdXBlci5yZXN0b3JlU3RhdGVGcm9tQ29va2llKGNvb2tpZSwgcmVsYXhlZE1h
dGNoRGVsYXkpOwotICAgIH0KLQotICAgIC8vIFBvcG92ZXIgZGVsZWdhdGUKLQotICAgIHdpbGxE
aXNtaXNzUG9wb3Zlcihwb3BvdmVyKQotICAgIHsKLSAgICAgICAgbGV0IGJyZWFrcG9pbnQgPSBw
b3BvdmVyLmJyZWFrcG9pbnQ7Ci0gICAgICAgIGlmICghYnJlYWtwb2ludCkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBpZiAoYnJlYWtwb2ludCBpbnN0YW5jZW9mIFdJLkV2ZW50QnJl
YWtwb2ludCkKLSAgICAgICAgICAgIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hZGRFdmVudEJyZWFr
cG9pbnQoYnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UgaWYgKGJyZWFrcG9pbnQgaW5zdGFuY2Vv
ZiBXSS5VUkxCcmVha3BvaW50KQotICAgICAgICAgICAgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFk
ZFVSTEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7Ci0gICAgfQotCi0gICAgLy8gUHJpdmF0ZQotCi0g
ICAgX2RlYnVnZ2VyV2FpdGluZ1RvUGF1c2UoZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9k
ZWJ1Z2dlclBhdXNlUmVzdW1lQnV0dG9uSXRlbS5lbmFibGVkID0gZmFsc2U7Ci0gICAgfQotCi0g
ICAgX2RlYnVnZ2VyRGlkUGF1c2UoZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLmNvbnRlbnRW
aWV3LmVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2NhbGxTdGFja1NlY3Rpb24uZWxlbWVudCwg
dGhpcy5jb250ZW50Vmlldy5lbGVtZW50LmZpcnN0Q2hpbGQpOwotCi0gICAgICAgIGlmICh0aGlz
Ll91cGRhdGVQYXVzZVJlYXNvbigpKQotICAgICAgICAgICAgdGhpcy5jb250ZW50Vmlldy5lbGVt
ZW50Lmluc2VydEJlZm9yZSh0aGlzLl9wYXVzZVJlYXNvblNlY3Rpb24uZWxlbWVudCwgdGhpcy5j
b250ZW50Vmlldy5lbGVtZW50LmZpcnN0Q2hpbGQpOwotCi0gICAgICAgIHRoaXMuX2RlYnVnZ2Vy
UGF1c2VSZXN1bWVCdXR0b25JdGVtLmVuYWJsZWQgPSB0cnVlOwotICAgICAgICB0aGlzLl9kZWJ1
Z2dlclBhdXNlUmVzdW1lQnV0dG9uSXRlbS50b2dnbGVkID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5f
ZGVidWdnZXJTdGVwT3ZlckJ1dHRvbkl0ZW0uZW5hYmxlZCA9IHRydWU7Ci0gICAgICAgIHRoaXMu
X2RlYnVnZ2VyU3RlcEludG9CdXR0b25JdGVtLmVuYWJsZWQgPSB0cnVlOwotICAgICAgICB0aGlz
Ll9kZWJ1Z2dlclN0ZXBPdXRCdXR0b25JdGVtLmVuYWJsZWQgPSB0cnVlOwotCi0gICAgICAgIHRo
aXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFdJLkRlYnVnZ2VyU2lkZWJhclBhbmVsLkRlYnVnZ2Vy
UGF1c2VkU3R5bGVDbGFzc05hbWUpOwotICAgIH0KLQotICAgIF9kZWJ1Z2dlckRpZFJlc3VtZShl
dmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NhbGxTdGFja1NlY3Rpb24uZWxlbWVudC5yZW1v
dmUoKTsKLQotICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblNlY3Rpb24uZWxlbWVudC5yZW1vdmUo
KTsKLQotICAgICAgICB0aGlzLl9kZWJ1Z2dlclBhdXNlUmVzdW1lQnV0dG9uSXRlbS5lbmFibGVk
ID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJQYXVzZVJlc3VtZUJ1dHRvbkl0ZW0udG9n
Z2xlZCA9IGZhbHNlOwotICAgICAgICB0aGlzLl9kZWJ1Z2dlclN0ZXBPdmVyQnV0dG9uSXRlbS5l
bmFibGVkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyU3RlcEludG9CdXR0b25JdGVt
LmVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJTdGVwT3V0QnV0dG9uSXRl
bS5lbmFibGVkID0gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1v
dmUoV0kuRGVidWdnZXJTaWRlYmFyUGFuZWwuRGVidWdnZXJQYXVzZWRTdHlsZUNsYXNzTmFtZSk7
Ci0gICAgfQotCi0gICAgX2JyZWFrcG9pbnRzRW5hYmxlZERpZENoYW5nZShldmVudCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyQnJlYWtwb2ludHNCdXR0b25JdGVtLmFjdGl2YXRlZCA9
IFdJLmRlYnVnZ2VyTWFuYWdlci5icmVha3BvaW50c0VuYWJsZWQ7Ci0KLSAgICAgICAgdGhpcy5f
dXBkYXRlQnJlYWtwb2ludHNEaXNhYmxlZEJhbm5lcigpOwotICAgIH0KLQotICAgIF9hZGRCcmVh
a3BvaW50KGJyZWFrcG9pbnQpCi0gICAgewotICAgICAgICBsZXQgY29uc3RydWN0b3IgPSBXSS5C
cmVha3BvaW50VHJlZUVsZW1lbnQ7Ci0gICAgICAgIGxldCBvcHRpb25zID0ge307Ci0gICAgICAg
IGxldCBwYXJlbnRUcmVlRWxlbWVudCA9IHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRs
aW5lOwotCi0gICAgICAgIGxldCBnZXRET01Ob2RlVHJlZUVsZW1lbnQgPSAoZG9tTm9kZSkgPT4g
ewotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoZG9tTm9kZSwgIk1pc3NpbmcgRE9NTm9kZSBm
b3IgaWRlbnRpZmllciIsIGJyZWFrcG9pbnQuZG9tTm9kZUlkZW50aWZpZXIpOwotICAgICAgICAg
ICAgaWYgKCFkb21Ob2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAg
ICAgICBsZXQgZG9tTm9kZVRyZWVFbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJl
ZU91dGxpbmUuZmluZFRyZWVFbGVtZW50KGRvbU5vZGUpOwotICAgICAgICAgICAgaWYgKCFkb21O
b2RlVHJlZUVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBkb21Ob2RlVHJlZUVsZW1lbnQgPSBu
ZXcgV0kuRE9NTm9kZVRyZWVFbGVtZW50KGRvbU5vZGUpOwotICAgICAgICAgICAgICAgIHRoaXMu
X2FkZFRyZWVFbGVtZW50KGRvbU5vZGVUcmVlRWxlbWVudCwgcGFyZW50VHJlZUVsZW1lbnQpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGVUcmVlRWxlbWVudDsKLSAg
ICAgICAgfTsKLQotICAgICAgICBpZiAoYnJlYWtwb2ludCA9PT0gV0kuZGVidWdnZXJNYW5hZ2Vy
LmFsbEV4Y2VwdGlvbnNCcmVha3BvaW50KSB7Ci0gICAgICAgICAgICBvcHRpb25zLmNsYXNzTmFt
ZSA9IFdJLkRlYnVnZ2VyU2lkZWJhclBhbmVsLkV4Y2VwdGlvbkljb25TdHlsZUNsYXNzTmFtZTsK
LSAgICAgICAgICAgIG9wdGlvbnMudGl0bGUgPSBXSS5yZXBlYXRlZFVJU3RyaW5nLmFsbEV4Y2Vw
dGlvbnMoKTsKLSAgICAgICAgfSBlbHNlIGlmIChicmVha3BvaW50ID09PSBXSS5kZWJ1Z2dlck1h
bmFnZXIudW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCkgewotICAgICAgICAgICAgb3B0aW9u
cy5jbGFzc05hbWUgPSBXSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5FeGNlcHRpb25JY29uU3R5bGVD
bGFzc05hbWU7Ci0gICAgICAgICAgICBvcHRpb25zLnRpdGxlID0gV0kucmVwZWF0ZWRVSVN0cmlu
Zy51bmNhdWdodEV4Y2VwdGlvbnMoKTsKLSAgICAgICAgfSBlbHNlIGlmIChicmVha3BvaW50ID09
PSBXSS5kZWJ1Z2dlck1hbmFnZXIuYXNzZXJ0aW9uRmFpbHVyZXNCcmVha3BvaW50KSB7Ci0gICAg
ICAgICAgICBvcHRpb25zLmNsYXNzTmFtZSA9IFdJLkRlYnVnZ2VyU2lkZWJhclBhbmVsLkFzc2Vy
dGlvbkljb25TdHlsZUNsYXNzTmFtZTsKLSAgICAgICAgICAgIG9wdGlvbnMudGl0bGUgPSBXSS5y
ZXBlYXRlZFVJU3RyaW5nLmFzc2VydGlvbkZhaWx1cmVzKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
YnJlYWtwb2ludCA9PT0gV0kuZGVidWdnZXJNYW5hZ2VyLmFsbE1pY3JvdGFza3NCcmVha3BvaW50
KSB7Ci0gICAgICAgICAgICBvcHRpb25zLmNsYXNzTmFtZSA9ICJicmVha3BvaW50LW1pY3JvdGFz
ay1pY29uIjsKLSAgICAgICAgICAgIG9wdGlvbnMudGl0bGUgPSBXSS5VSVN0cmluZygiQWxsIE1p
Y3JvdGFza3MiKTsKLSAgICAgICAgfSBlbHNlIGlmIChicmVha3BvaW50IGluc3RhbmNlb2YgV0ku
RE9NQnJlYWtwb2ludCkgewotICAgICAgICAgICAgaWYgKCFicmVha3BvaW50LmRvbU5vZGVJZGVu
dGlmaWVyKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICBjb25z
dHJ1Y3RvciA9IFdJLkRPTUJyZWFrcG9pbnRUcmVlRWxlbWVudDsKLQotICAgICAgICAgICAgbGV0
IGRvbU5vZGUgPSBXSS5kb21NYW5hZ2VyLm5vZGVGb3JJZChicmVha3BvaW50LmRvbU5vZGVJZGVu
dGlmaWVyKTsKLSAgICAgICAgICAgIHBhcmVudFRyZWVFbGVtZW50ID0gZ2V0RE9NTm9kZVRyZWVF
bGVtZW50KGRvbU5vZGUpOwotICAgICAgICB9IGVsc2UgaWYgKGJyZWFrcG9pbnQgaW5zdGFuY2Vv
ZiBXSS5FdmVudEJyZWFrcG9pbnQpIHsKLSAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gV0kuRXZl
bnRCcmVha3BvaW50VHJlZUVsZW1lbnQ7Ci0KLSAgICAgICAgICAgIGlmIChicmVha3BvaW50ID09
PSBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2ludCkKLSAg
ICAgICAgICAgICAgICBvcHRpb25zLnRpdGxlID0gV0kuVUlTdHJpbmcoIkFsbCBBbmltYXRpb24g
RnJhbWVzIik7Ci0gICAgICAgICAgICBlbHNlIGlmIChicmVha3BvaW50ID09PSBXSS5kb21EZWJ1
Z2dlck1hbmFnZXIuYWxsSW50ZXJ2YWxzQnJlYWtwb2ludCkKLSAgICAgICAgICAgICAgICBvcHRp
b25zLnRpdGxlID0gV0kuVUlTdHJpbmcoIkFsbCBJbnRlcnZhbHMiKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGJyZWFrcG9pbnQgPT09IFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxMaXN0ZW5lcnNC
cmVha3BvaW50KQotICAgICAgICAgICAgICAgIG9wdGlvbnMudGl0bGUgPSBXSS5VSVN0cmluZygi
QWxsIEV2ZW50cyIpOwotICAgICAgICAgICAgZWxzZSBpZiAoYnJlYWtwb2ludCA9PT0gV0kuZG9t
RGVidWdnZXJNYW5hZ2VyLmFsbFRpbWVvdXRzQnJlYWtwb2ludCkKLSAgICAgICAgICAgICAgICBv
cHRpb25zLnRpdGxlID0gV0kuVUlTdHJpbmcoIkFsbCBUaW1lb3V0cyIpOwotICAgICAgICAgICAg
ZWxzZSBpZiAoYnJlYWtwb2ludC5ldmVudExpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAgbGV0
IGV2ZW50VGFyZ2V0VHJlZUVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgIGlmIChicmVh
a3BvaW50LmV2ZW50TGlzdGVuZXIub25XaW5kb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFEZWJ1Z2dlclNpZGViYXJQYW5lbC5fX3dpbmRvd0V2ZW50VGFyZ2V0UmVwcmVzZW50ZWRPYmpl
Y3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dlclNpZGViYXJQYW5lbC5fX3dpbmRv
d0V2ZW50VGFyZ2V0UmVwcmVzZW50ZWRPYmplY3QgPSB7X193aW5kb3c6IHRydWV9OwotCi0gICAg
ICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0VHJlZUVsZW1lbnQgPSB0aGlzLl9icmVha3BvaW50
c0NvbnRlbnRUcmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQoRGVidWdnZXJTaWRlYmFyUGFuZWwu
X193aW5kb3dFdmVudFRhcmdldFJlcHJlc2VudGVkT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFldmVudFRhcmdldFRyZWVFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdWJ0aXRsZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudFRh
cmdldFRyZWVFbGVtZW50ID0gbmV3IFdJLkdlbmVyYWxUcmVlRWxlbWVudChbImV2ZW50LXRhcmdl
dC13aW5kb3ciXSwgV0kudW5sb2NhbGl6ZWRTdHJpbmcoIndpbmRvdyIpLCBzdWJ0aXRsZSwgRGVi
dWdnZXJTaWRlYmFyUGFuZWwuX193aW5kb3dFdmVudFRhcmdldFJlcHJlc2VudGVkT2JqZWN0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFRyZWVFbGVtZW50KGV2ZW50VGFyZ2V0
VHJlZUVsZW1lbnQsIHBhcmVudFRyZWVFbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnJlYWtwb2ludC5ldmVudExpc3RlbmVyLm5vZGUp
Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0VHJlZUVsZW1lbnQgPSBnZXRET01Ob2Rl
VHJlZUVsZW1lbnQoYnJlYWtwb2ludC5ldmVudExpc3RlbmVyLm5vZGUpOwotICAgICAgICAgICAg
ICAgIGlmIChldmVudFRhcmdldFRyZWVFbGVtZW50KQotICAgICAgICAgICAgICAgICAgICBwYXJl
bnRUcmVlRWxlbWVudCA9IGV2ZW50VGFyZ2V0VHJlZUVsZW1lbnQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAoYnJlYWtwb2ludCBpbnN0YW5jZW9mIFdJLlVSTEJyZWFrcG9pbnQp
IHsKLSAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gV0kuVVJMQnJlYWtwb2ludFRyZWVFbGVtZW50
OwotCi0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludCA9PT0gV0kuZG9tRGVidWdnZXJNYW5hZ2Vy
LmFsbFJlcXVlc3RzQnJlYWtwb2ludCkKLSAgICAgICAgICAgICAgICBvcHRpb25zLnRpdGxlID0g
V0kucmVwZWF0ZWRVSVN0cmluZy5hbGxSZXF1ZXN0cygpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbGV0IHNvdXJjZUNvZGUgPSBicmVha3BvaW50LnNvdXJjZUNvZGVMb2NhdGlvbiAm
JiBicmVha3BvaW50LnNvdXJjZUNvZGVMb2NhdGlvbi5kaXNwbGF5U291cmNlQ29kZTsKLSAgICAg
ICAgICAgIGlmICghc291cmNlQ29kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQot
ICAgICAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLmZpbmRU
cmVlRWxlbWVudChicmVha3BvaW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQot
ICAgICAgICAgICAgcGFyZW50VHJlZUVsZW1lbnQgPSB0aGlzLl9hZGRUcmVlRWxlbWVudEZvclNv
dXJjZUNvZGVUb1RyZWVPdXRsaW5lKHNvdXJjZUNvZGUsIHRoaXMuX2JyZWFrcG9pbnRzQ29udGVu
dFRyZWVPdXRsaW5lKTsKLQotICAgICAgICAgICAgLy8gTWFyayBkaXNhYmxlZCBicmVha3BvaW50
cyBhcyByZXNvbHZlZCBpZiB0aGVyZSBpcyBzb3VyY2UgY29kZSBsb2FkZWQgd2l0aCB0aGF0IFVS
TC4KLSAgICAgICAgICAgIC8vIFRoaXMgZ2l2ZXMgdGhlIGlsbHVzaW9uIHRoZSBicmVha3BvaW50
IHdhcyByZXNvbHZlZCwgYnV0IHNpbmNlIHdlIGRvbid0IHNlbmQgZGlzYWJsZWQKLSAgICAgICAg
ICAgIC8vIGJyZWFrcG9pbnRzIHRvIHRoZSBiYWNrZW5kIHdlIGRvbid0IGtub3cgZm9yIHN1cmUu
IElmIHRoZSB1c2VyIGVuYWJsZXMgdGhlIGJyZWFrcG9pbnQKLSAgICAgICAgICAgIC8vIGl0IHdp
bGwgYmUgcmVzb2x2ZWQgcHJvcGVybHkuCi0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5kaXNh
YmxlZCkKLSAgICAgICAgICAgICAgICBicmVha3BvaW50LnJlc29sdmVkID0gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGxldCBicmVha3BvaW50VHJlZUVsZW1lbnQgPSBuZXcgY29uc3RydWN0
b3IoYnJlYWtwb2ludCwgb3B0aW9ucyk7Ci0gICAgICAgIHRoaXMuX2FkZFRyZWVFbGVtZW50KGJy
ZWFrcG9pbnRUcmVlRWxlbWVudCwgcGFyZW50VHJlZUVsZW1lbnQpOwotICAgICAgICBpZiAocGFy
ZW50VHJlZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAxKQotICAgICAgICAgICAgcGFyZW50
VHJlZUVsZW1lbnQuZXhwYW5kKCk7Ci0gICAgICAgIHJldHVybiBicmVha3BvaW50VHJlZUVsZW1l
bnQ7Ci0gICAgfQotCi0gICAgX3JlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRsaW5lKSB7Ci0gICAgICAgICAgICBs
ZXQgcGF1c2VSZWFzb25CcmVha3BvaW50VHJlZUVsZW1lbnQgPSB0aGlzLl9wYXVzZVJlYXNvblRy
ZWVPdXRsaW5lLmdldENhY2hlZFRyZWVFbGVtZW50KGJyZWFrcG9pbnQpOwotICAgICAgICAgICAg
aWYgKHBhdXNlUmVhc29uQnJlYWtwb2ludFRyZWVFbGVtZW50KQotICAgICAgICAgICAgICAgIHBh
dXNlUmVhc29uQnJlYWtwb2ludFRyZWVFbGVtZW50LnN0YXR1cyA9IG51bGw7Ci0gICAgICAgIH0K
LQotICAgICAgICBsZXQgYnJlYWtwb2ludFRyZWVFbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludHND
b250ZW50VHJlZU91dGxpbmUuZ2V0Q2FjaGVkVHJlZUVsZW1lbnQoYnJlYWtwb2ludCk7Ci0gICAg
ICAgIGlmICghYnJlYWtwb2ludFRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIHRoaXMuX3JlbW92ZURlYnVnZ2VyVHJlZUVsZW1lbnQoYnJlYWtwb2ludFRyZWVFbGVt
ZW50KTsKLSAgICB9Ci0KLSAgICBfYWRkQnJlYWtwb2ludHNGb3JTb3VyY2VDb2RlKHNvdXJjZUNv
ZGUpCi0gICAgewotICAgICAgICBmb3IgKGxldCBicmVha3BvaW50IG9mIFdJLmRlYnVnZ2VyTWFu
YWdlci5icmVha3BvaW50c0ZvclNvdXJjZUNvZGUoc291cmNlQ29kZSkpCi0gICAgICAgICAgICB0
aGlzLl9hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQsIHNvdXJjZUNvZGUpOwotICAgIH0KLQotICAg
IF9hZGRJc3N1ZXNGb3JTb3VyY2VDb2RlKHNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB2YXIg
aXNzdWVzID0gV0kuY29uc29sZU1hbmFnZXIuaXNzdWVzRm9yU291cmNlQ29kZShzb3VyY2VDb2Rl
KTsKLSAgICAgICAgZm9yICh2YXIgaXNzdWUgb2YgaXNzdWVzKQotICAgICAgICAgICAgdGhpcy5f
YWRkSXNzdWUoaXNzdWUsIHNvdXJjZUNvZGUpOwotICAgIH0KLQotICAgIF9hZGRUcmVlRWxlbWVu
dEZvclNvdXJjZUNvZGVUb1RyZWVPdXRsaW5lKHNvdXJjZUNvZGUsIHRyZWVPdXRsaW5lKQotICAg
IHsKLSAgICAgICAgbGV0IHRyZWVFbGVtZW50ID0gdHJlZU91dGxpbmUuZ2V0Q2FjaGVkVHJlZUVs
ZW1lbnQoc291cmNlQ29kZSk7Ci0gICAgICAgIGlmICghdHJlZUVsZW1lbnQpIHsKLSAgICAgICAg
ICAgIGlmIChzb3VyY2VDb2RlIGluc3RhbmNlb2YgV0kuU291cmNlTWFwUmVzb3VyY2UpCi0gICAg
ICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSBuZXcgV0kuU291cmNlTWFwUmVzb3VyY2VUcmVlRWxl
bWVudChzb3VyY2VDb2RlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZUNvZGUgaW5zdGFu
Y2VvZiBXSS5SZXNvdXJjZSkKLSAgICAgICAgICAgICAgICB0cmVlRWxlbWVudCA9IG5ldyBXSS5S
ZXNvdXJjZVRyZWVFbGVtZW50KHNvdXJjZUNvZGUpOwotICAgICAgICAgICAgZWxzZSBpZiAoc291
cmNlQ29kZSBpbnN0YW5jZW9mIFdJLlNjcmlwdCkKLSAgICAgICAgICAgICAgICB0cmVlRWxlbWVu
dCA9IG5ldyBXSS5TY3JpcHRUcmVlRWxlbWVudChzb3VyY2VDb2RlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICghdHJlZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlVu
a25vd24gc291cmNlQ29kZSBpbnN0YW5jZSIsIHNvdXJjZUNvZGUpOwotICAgICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRyZWVFbGVtZW50LnBhcmVudCkg
ewotICAgICAgICAgICAgdHJlZUVsZW1lbnQuaGFzQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAg
ICAgIHRyZWVFbGVtZW50LmV4cGFuZCgpOwotCi0gICAgICAgICAgICB0aGlzLl9hZGRUcmVlRWxl
bWVudCh0cmVlRWxlbWVudCwgdHJlZU91dGxpbmUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIHRyZWVFbGVtZW50OwotICAgIH0KLQotICAgIF9hZGRSZXNvdXJjZXNSZWN1cnNpdmVseUZv
ckZyYW1lKGZyYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5fYWRkUmVzb3VyY2UoZnJhbWUubWFp
blJlc291cmNlKTsKLQotICAgICAgICBmb3IgKGxldCByZXNvdXJjZSBvZiBmcmFtZS5yZXNvdXJj
ZUNvbGxlY3Rpb24pCi0gICAgICAgICAgICB0aGlzLl9hZGRSZXNvdXJjZShyZXNvdXJjZSk7Ci0K
LSAgICAgICAgZm9yIChsZXQgY2hpbGRGcmFtZSBvZiBmcmFtZS5jaGlsZEZyYW1lQ29sbGVjdGlv
bikKLSAgICAgICAgICAgIHRoaXMuX2FkZFJlc291cmNlc1JlY3Vyc2l2ZWx5Rm9yRnJhbWUoY2hp
bGRGcmFtZSk7Ci0gICAgfQotCi0gICAgX3Jlc291cmNlQWRkZWQoZXZlbnQpCi0gICAgewotICAg
ICAgICB0aGlzLl9hZGRSZXNvdXJjZShldmVudC5kYXRhLnJlc291cmNlKTsKLSAgICB9Ci0KLSAg
ICBfYWRkUmVzb3VyY2UocmVzb3VyY2UpCi0gICAgewotICAgICAgICBpZiAoIVtXSS5SZXNvdXJj
ZS5UeXBlLkRvY3VtZW50LCBXSS5SZXNvdXJjZS5UeXBlLlNjcmlwdF0uaW5jbHVkZXMocmVzb3Vy
Y2UudHlwZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbGV0IHRyZWVFbGVtZW50
ID0gdGhpcy5fYWRkVHJlZUVsZW1lbnRGb3JTb3VyY2VDb2RlVG9UcmVlT3V0bGluZShyZXNvdXJj
ZSwgdGhpcy5fc2NyaXB0c0NvbnRlbnRUcmVlT3V0bGluZSk7Ci0gICAgICAgIHRoaXMuX2FkZEJy
ZWFrcG9pbnRzRm9yU291cmNlQ29kZShyZXNvdXJjZSk7Ci0gICAgICAgIHRoaXMuX2FkZElzc3Vl
c0ZvclNvdXJjZUNvZGUocmVzb3VyY2UpOwotCi0gICAgICAgIGlmICh0aGlzLnBhcmVudFNpZGVi
YXIgJiYgIXRoaXMuY29udGVudEJyb3dzZXIuY3VycmVudENvbnRlbnRWaWV3KQotICAgICAgICAg
ICAgdGhpcy5zaG93RGVmYXVsdENvbnRlbnRWaWV3Rm9yVHJlZUVsZW1lbnQodHJlZUVsZW1lbnQp
OwotICAgIH0KLQotICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2UoZXZlbnQpCi0gICAgewotICAg
ICAgICBpZiAoZXZlbnQudGFyZ2V0LmlzTWFpbkZyYW1lKCkpIHsKLSAgICAgICAgICAgIC8vIEFn
Z3Jlc3NpdmVseSBwcnVuZSByZXNvdXJjZXMgbm93IHNvIHRoZSBvbGQgcmVzb3VyY2VzIGFyZSBy
ZW1vdmVkIGJlZm9yZQotICAgICAgICAgICAgLy8gdGhlIG5ldyBtYWluIHJlc291cmNlIGlzIGFk
ZGVkIGJlbG93LiBUaGlzIGF2b2lkcyBhIHZpc3VhbCBmbGFzaCB3aGVuIHRoZQotICAgICAgICAg
ICAgLy8gcHJ1bmUgbm9ybWFsbHkgaGFwcGVucyBvbiBhIGxhdGVyIGV2ZW50IGxvb3AgY3ljbGUu
Ci0gICAgICAgICAgICB0aGlzLnBydW5lU3RhbGVSZXNvdXJjZVRyZWVFbGVtZW50cygpOwotICAg
ICAgICAgICAgdGhpcy5jb250ZW50QnJvd3Nlci5jb250ZW50Vmlld0NvbnRhaW5lci5jbG9zZUFs
bENvbnRlbnRWaWV3cygpOwotCi0gICAgICAgICAgICBmb3IgKGxldCBkb21CcmVha3BvaW50IG9m
IFdJLmRvbURlYnVnZ2VyTWFuYWdlci5kb21CcmVha3BvaW50cykKLSAgICAgICAgICAgICAgICB0
aGlzLl9yZW1vdmVCcmVha3BvaW50KGRvbUJyZWFrcG9pbnQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFldmVudC5kYXRhLm9sZE1haW5SZXNvdXJjZSkgewotICAgICAgICAgICAgdmFyIHJl
c291cmNlID0gZXZlbnQudGFyZ2V0Lm1haW5SZXNvdXJjZTsKLSAgICAgICAgICAgIHRoaXMuX2Fk
ZFRyZWVFbGVtZW50Rm9yU291cmNlQ29kZVRvVHJlZU91dGxpbmUocmVzb3VyY2UsIHRoaXMuX3Nj
cmlwdHNDb250ZW50VHJlZU91dGxpbmUpOwotICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2lu
dHNGb3JTb3VyY2VDb2RlKHJlc291cmNlKTsKLSAgICAgICAgICAgIHRoaXMuX2FkZElzc3Vlc0Zv
clNvdXJjZUNvZGUocmVzb3VyY2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgX2hhbmRsZVRp
bWVsaW5lQ2FwdHVyaW5nU3RhdGVDaGFuZ2VkKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5f
dXBkYXRlVGVtcG9yYXJpbHlEaXNhYmxlZEJyZWFrcG9pbnRzQnV0dG9ucygpOwotCi0gICAgICAg
IHN3aXRjaCAoV0kudGltZWxpbmVNYW5hZ2VyLmNhcHR1cmluZ1N0YXRlKSB7Ci0gICAgICAgIGNh
c2UgV0kuVGltZWxpbmVNYW5hZ2VyLkNhcHR1cmluZ1N0YXRlLlN0YXJ0aW5nOgotICAgICAgICAg
ICAgdGhpcy5jb250ZW50Vmlldy5lbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLl90aW1lbGluZVJl
Y29yZGluZ1dhcm5pbmdFbGVtZW50LCB0aGlzLmNvbnRlbnRWaWV3LmVsZW1lbnQuZmlyc3RDaGls
ZCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdJLlRpbWVsaW5lTWFuYWdl
ci5DYXB0dXJpbmdTdGF0ZS5JbmFjdGl2ZToKLSAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lUmVj
b3JkaW5nV2FybmluZ0VsZW1lbnQucmVtb3ZlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMuX3VwZGF0ZUJyZWFrcG9pbnRzRGlzYWJsZWRCYW5uZXIoKTsK
LSAgICB9Ci0KLSAgICBfaGFuZGxlQXVkaXRNYW5hZ2VyVGVzdFNjaGVkdWxlZChldmVudCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVRlbXBvcmFyaWx5RGlzYWJsZWRCcmVha3BvaW50c0J1
dHRvbnMoKTsKLQotICAgICAgICB0aGlzLmNvbnRlbnRWaWV3LmVsZW1lbnQuaW5zZXJ0QmVmb3Jl
KHRoaXMuX2F1ZGl0VGVzdFdhcm5pbmdFbGVtZW50LCB0aGlzLmNvbnRlbnRWaWV3LmVsZW1lbnQu
Zmlyc3RDaGlsZCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUJyZWFrcG9pbnRzRGlzYWJsZWRCYW5u
ZXIoKTsKLSAgICB9Ci0KLSAgICBfaGFuZGxlQXVkaXRNYW5hZ2VyVGVzdENvbXBsZXRlZChldmVu
dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVRlbXBvcmFyaWx5RGlzYWJsZWRCcmVha3Bv
aW50c0J1dHRvbnMoKTsKLQotICAgICAgICB0aGlzLl9hdWRpdFRlc3RXYXJuaW5nRWxlbWVudC5y
ZW1vdmUoKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlQnJlYWtwb2ludHNEaXNhYmxlZEJhbm5lcigp
OwotICAgIH0KLQotICAgIF91cGRhdGVUZW1wb3JhcmlseURpc2FibGVkQnJlYWtwb2ludHNCdXR0
b25zKCkKLSAgICB7Ci0gICAgICAgIGxldCBicmVha3BvaW50c0Rpc2FibGVkVGVtcG9yYXJpbHkg
PSBXSS5kZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2ludHNEaXNhYmxlZFRlbXBvcmFyaWx5OwotICAg
ICAgICB0aGlzLl9kZWJ1Z2dlckJyZWFrcG9pbnRzQnV0dG9uSXRlbS5lbmFibGVkID0gIWJyZWFr
cG9pbnRzRGlzYWJsZWRUZW1wb3JhcmlseTsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJQYXVzZVJl
c3VtZUJ1dHRvbkl0ZW0uZW5hYmxlZCA9ICFicmVha3BvaW50c0Rpc2FibGVkVGVtcG9yYXJpbHk7
Ci0gICAgfQotCi0gICAgX3VwZGF0ZUJyZWFrcG9pbnRzRGlzYWJsZWRCYW5uZXIoKQotICAgIHsK
LSAgICAgICAgbGV0IGJyZWFrcG9pbnRzRW5hYmxlZCA9IFdJLmRlYnVnZ2VyTWFuYWdlci5icmVh
a3BvaW50c0VuYWJsZWQ7Ci0gICAgICAgIGxldCB0aW1lbGluZVdhcm5pbmdTaG93aW5nID0gISF0
aGlzLl90aW1lbGluZVJlY29yZGluZ1dhcm5pbmdFbGVtZW50LnBhcmVudEVsZW1lbnQ7Ci0gICAg
ICAgIGxldCBhdWRpdFdhcm5pbmdTaG93aW5nID0gISF0aGlzLl9hdWRpdFRlc3RXYXJuaW5nRWxl
bWVudC5wYXJlbnRFbGVtZW50OwotCi0gICAgICAgIGlmICghYnJlYWtwb2ludHNFbmFibGVkICYm
ICF0aW1lbGluZVdhcm5pbmdTaG93aW5nICYmICFhdWRpdFdhcm5pbmdTaG93aW5nKQotICAgICAg
ICAgICAgdGhpcy5jb250ZW50Vmlldy5lbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLl9icmVha3Bv
aW50c0Rpc2FibGVkV2FybmluZ0VsZW1lbnQsIHRoaXMuY29udGVudFZpZXcuZWxlbWVudC5maXJz
dENoaWxkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNEaXNh
YmxlZFdhcm5pbmdFbGVtZW50LnJlbW92ZSgpOwotICAgIH0KLQotICAgIF9zY3JpcHRBZGRlZChl
dmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2FkZFNjcmlwdChldmVudC5kYXRhLnNjcmlwdCk7
Ci0gICAgfQotCi0gICAgX2FkZFNjcmlwdChzY3JpcHQpCi0gICAgewotICAgICAgICAvLyBDT01Q
QVRJQklMSVRZKGlPUyA5KTogQmFja2VuZHMgY291bGQgc2VuZCB0aGUgZnJvbnRlbmQgYnVpbHQt
aW4gY29kZSwgZmlsdGVyIG91dCBKU0MgaW50ZXJuYWxzLgotICAgICAgICBpZiAoIXNjcmlwdC51
cmwgJiYgIXNjcmlwdC5zb3VyY2VVUkwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAg
ICAgICAvLyBJbiBnZW5lcmFsLCBkbyBub3Qgc2hvdyBkeW5hbWljYWxseSBhZGRlZCBzY3JpcHQg
ZWxlbWVudHMuCi0gICAgICAgIGlmIChzY3JpcHQuZHluYW1pY2FsbHlBZGRlZFNjcmlwdEVsZW1l
bnQgJiYgIXNjcmlwdC5zb3VyY2VVUkwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAg
ICAgICAvLyBEb24ndCBhZGQgYnJlYWtwb2ludHMgaWYgdGhlIHNjcmlwdCBpcyByZXByZXNlbnRl
ZCBieSBhIFJlc291cmNlLiBUaGV5IHdlcmUKLSAgICAgICAgLy8gYWxyZWFkeSBhZGRlZCBieSBf
cmVzb3VyY2VBZGRlZC4KLSAgICAgICAgaWYgKHNjcmlwdC5yZXNvdXJjZSkKLSAgICAgICAgICAg
IHJldHVybiBudWxsOwotCi0gICAgICAgIGxldCB0cmVlRWxlbWVudCA9IHRoaXMuX2FkZFRyZWVF
bGVtZW50Rm9yU291cmNlQ29kZVRvVHJlZU91dGxpbmUoc2NyaXB0LCB0aGlzLl9zY3JpcHRzQ29u
dGVudFRyZWVPdXRsaW5lKTsKLSAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludHNGb3JTb3VyY2VD
b2RlKHNjcmlwdCk7Ci0gICAgICAgIHRoaXMuX2FkZElzc3Vlc0ZvclNvdXJjZUNvZGUoc2NyaXB0
KTsKLQotICAgICAgICBpZiAodGhpcy5wYXJlbnRTaWRlYmFyICYmICF0aGlzLmNvbnRlbnRCcm93
c2VyLmN1cnJlbnRDb250ZW50VmlldykKLSAgICAgICAgICAgIHRoaXMuc2hvd0RlZmF1bHRDb250
ZW50Vmlld0ZvclRyZWVFbGVtZW50KHRyZWVFbGVtZW50KTsKLQotICAgICAgICByZXR1cm4gdHJl
ZUVsZW1lbnQ7Ci0gICAgfQotCi0gICAgX3NjcmlwdFJlbW92ZWQoZXZlbnQpCi0gICAgewotICAg
ICAgICBmdW5jdGlvbiByZW1vdmVTY3JpcHQoc2NyaXB0LCB0cmVlT3V0bGluZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbGV0IHNjcmlwdFRyZWVFbGVtZW50ID0gdHJlZU91dGxpbmUuZ2V0Q2Fj
aGVkVHJlZUVsZW1lbnQoc2NyaXB0KTsKLSAgICAgICAgICAgIGlmIChzY3JpcHRUcmVlRWxlbWVu
dCkKLSAgICAgICAgICAgICAgICBzY3JpcHRUcmVlRWxlbWVudC5wYXJlbnQucmVtb3ZlQ2hpbGQo
c2NyaXB0VHJlZUVsZW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgbGV0IHNjcmlwdCA9IGV2
ZW50LmRhdGEuc2NyaXB0OwotICAgICAgICByZW1vdmVTY3JpcHQoc2NyaXB0LCB0aGlzLl9icmVh
a3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZSk7Ci0gICAgICAgIHJlbW92ZVNjcmlwdChzY3JpcHQs
IHRoaXMuX3NjcmlwdHNDb250ZW50VHJlZU91dGxpbmUpOwotICAgIH0KLQotICAgIF9zY3JpcHRz
Q2xlYXJlZChldmVudCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9icmVha3Bv
aW50c0NvbnRlbnRUcmVlT3V0bGluZS5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkg
ewotICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludHNDb250ZW50
VHJlZU91dGxpbmUuY2hpbGRyZW5baV07Ci0gICAgICAgICAgICBpZiAoISh0cmVlRWxlbWVudCBp
bnN0YW5jZW9mIFdJLlNjcmlwdFRyZWVFbGVtZW50KSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJlZU91dGxpbmUucmVt
b3ZlQ2hpbGRBdEluZGV4KGksIHRydWUsIHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhp
cy5fc2NyaXB0c0NvbnRlbnRUcmVlT3V0bGluZS5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAgICAg
IHRoaXMuX2FkZFJlc291cmNlc1JlY3Vyc2l2ZWx5Rm9yRnJhbWUoV0kubmV0d29ya01hbmFnZXIu
bWFpbkZyYW1lKTsKLSAgICB9Ci0KLSAgICBfYnJlYWtwb2ludEFkZGVkKGV2ZW50KQotICAgIHsK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhLmJyZWFrcG9pbnQ7Ci0gICAgICAg
IHRoaXMuX2FkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7Ci0gICAgfQotCi0gICAgX2JyZWFrcG9p
bnRSZW1vdmVkKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5k
YXRhLmJyZWFrcG9pbnQ7Ci0gICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2lu
dCk7Ci0gICAgfQotCi0gICAgX2ZpbmRUaHJlYWRUcmVlRWxlbWVudEZvclRhcmdldCh0YXJnZXQp
Ci0gICAgewotICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiB0aGlzLl9jYWxsU3RhY2tUcmVlT3V0
bGluZS5jaGlsZHJlbikgewotICAgICAgICAgICAgaWYgKGNoaWxkLnRhcmdldCA9PT0gdGFyZ2V0
KQotICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBudWxsOwotICAgIH0KLQotICAgIF90YXJnZXRBZGRlZChldmVudCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2FkZFRhcmdldChldmVudC5kYXRhLnRhcmdldCk7Ci0gICAgfQotCi0gICAgX2Fk
ZFRhcmdldCh0YXJnZXQpCi0gICAgewotICAgICAgICBsZXQgdHJlZUVsZW1lbnQgPSBuZXcgV0ku
VGhyZWFkVHJlZUVsZW1lbnQodGFyZ2V0KTsKLSAgICAgICAgdGhpcy5fY2FsbFN0YWNrVHJlZU91
dGxpbmUuYXBwZW5kQ2hpbGQodHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIEZJWE1FOiBXaGVu
IFdJLm1haW5UYXJnZXQgY2hhbmdlcz8KLSAgICAgICAgaWYgKHRhcmdldCA9PT0gV0kubWFpblRh
cmdldCkKLSAgICAgICAgICAgIHRoaXMuX21haW5UYXJnZXRUcmVlRWxlbWVudCA9IHRyZWVFbGVt
ZW50OwotCi0gICAgICAgIHRoaXMuX3VwZGF0ZUNhbGxTdGFja1RyZWVPdXRsaW5lKCk7Ci0gICAg
fQotCi0gICAgX3RhcmdldFJlbW92ZWQoZXZlbnQpCi0gICAgewotICAgICAgICBsZXQgdGFyZ2V0
ID0gZXZlbnQuZGF0YS50YXJnZXQ7Ci0gICAgICAgIGxldCB0cmVlRWxlbWVudCA9IHRoaXMuX2Zp
bmRUaHJlYWRUcmVlRWxlbWVudEZvclRhcmdldCh0YXJnZXQpOwotICAgICAgICB0aGlzLl9jYWxs
U3RhY2tUcmVlT3V0bGluZS5yZW1vdmVDaGlsZCh0cmVlRWxlbWVudCk7Ci0KLSAgICAgICAgdGhp
cy5fdXBkYXRlQ2FsbFN0YWNrVHJlZU91dGxpbmUoKTsKLSAgICB9Ci0KLSAgICBfdXBkYXRlQ2Fs
bFN0YWNrVHJlZU91dGxpbmUoKQotICAgIHsKLSAgICAgICAgbGV0IHNpbmdsZVRocmVhZFNob3dp
bmcgPSBXSS50YXJnZXRzLmxlbmd0aCA8PSAxOwotICAgICAgICB0aGlzLl9jYWxsU3RhY2tUcmVl
T3V0bGluZS5lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoInNpbmdsZS10aHJlYWQiLCBzaW5nbGVU
aHJlYWRTaG93aW5nKTsKLSAgICAgICAgaWYgKHRoaXMuX21haW5UYXJnZXRUcmVlRWxlbWVudCkK
LSAgICAgICAgICAgIHRoaXMuX21haW5UYXJnZXRUcmVlRWxlbWVudC5zZWxlY3RhYmxlID0gIXNp
bmdsZVRocmVhZFNob3dpbmc7Ci0gICAgfQotCi0gICAgX2hhbmRsZURlYnVnZ2VyT2JqZWN0RGlz
cGxheUxvY2F0aW9uRGlkQ2hhbmdlKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGRlYnVnZ2Vy
T2JqZWN0ID0gZXZlbnQudGFyZ2V0OwotCi0gICAgICAgIGlmIChldmVudC5kYXRhLm9sZERpc3Bs
YXlTb3VyY2VDb2RlID09PSBkZWJ1Z2dlck9iamVjdC5zb3VyY2VDb2RlTG9jYXRpb24uZGlzcGxh
eVNvdXJjZUNvZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQSBrbm93biBk
ZWJ1Z2dlciBvYmplY3QgKGJyZWFrcG9pbnQsIGlzc3VlTWVzc2FnZSwgZXRjLikgbW92ZWQgYmV0
d2VlbiByZXNvdXJjZXMuIFJlbW92ZQotICAgICAgICAvLyB0aGUgb2xkIHRyZWUgZWxlbWVudCBh
bmQgY3JlYXRlIGEgbmV3IHRyZWUgZWxlbWVudCB3aXRoIHRoZSB1cGRhdGVkIGZpbGUuCi0KLSAg
ICAgICAgbGV0IHdhc1NlbGVjdGVkID0gZmFsc2U7Ci0gICAgICAgIGxldCBvbGREZWJ1Z2dlclRy
ZWVFbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJlZU91dGxpbmUuZ2V0Q2FjaGVk
VHJlZUVsZW1lbnQoZGVidWdnZXJPYmplY3QpOwotICAgICAgICBpZiAob2xkRGVidWdnZXJUcmVl
RWxlbWVudCkKLSAgICAgICAgICAgIHdhc1NlbGVjdGVkID0gb2xkRGVidWdnZXJUcmVlRWxlbWVu
dC5zZWxlY3RlZDsKLQotICAgICAgICBsZXQgbmV3RGVidWdnZXJUcmVlRWxlbWVudCA9IG51bGw7
Ci0gICAgICAgIGlmIChkZWJ1Z2dlck9iamVjdCBpbnN0YW5jZW9mIFdJLkJyZWFrcG9pbnQpCi0g
ICAgICAgICAgICBuZXdEZWJ1Z2dlclRyZWVFbGVtZW50ID0gdGhpcy5fYWRkQnJlYWtwb2ludChk
ZWJ1Z2dlck9iamVjdCk7Ci0gICAgICAgIGVsc2UgaWYgKGRlYnVnZ2VyT2JqZWN0IGluc3RhbmNl
b2YgV0kuSXNzdWVNZXNzYWdlKQotICAgICAgICAgICAgbmV3RGVidWdnZXJUcmVlRWxlbWVudCA9
IHRoaXMuX2FkZElzc3VlKGRlYnVnZ2VyT2JqZWN0KTsKLSAgICAgICAgaWYgKCFuZXdEZWJ1Z2dl
clRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChvbGREZWJ1
Z2dlclRyZWVFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlRGVidWdnZXJUcmVlRWxl
bWVudChvbGREZWJ1Z2dlclRyZWVFbGVtZW50KTsKLQotICAgICAgICBpZiAod2FzU2VsZWN0ZWQp
Ci0gICAgICAgICAgICBuZXdEZWJ1Z2dlclRyZWVFbGVtZW50LnJldmVhbEFuZFNlbGVjdCh0cnVl
LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgX3JlbW92ZURlYnVnZ2VyVHJlZUVsZW1lbnQo
ZGVidWdnZXJUcmVlRWxlbWVudCkKLSAgICB7Ci0gICAgICAgIC8vIElmIHRoaXMgaXMgYSBCcmVh
a3BvaW50VHJlZUVsZW1lbnQgYmVpbmcgZGVsZXRlZCBiZWNhdXNlIG9mIGEgY2F1c2UKLSAgICAg
ICAgLy8gb3V0c2lkZSBvZiB0aGUgVHJlZU91dGxpbmUgdGhlbiBkZXNlbGVjdCBpZiBpdCBpcyBz
ZWxlY3RlZCB0byBhdm9pZAotICAgICAgICAvLyBUcmVlT3V0bGluZSBzZWxlY3Rpb24gY2hhbmdl
cyBjYXVzaW5nIHVuZXhwZWN0ZWQgQ29udGVudFZpZXcgY2hhbmdlcy4KLSAgICAgICAgaWYgKCFk
ZWJ1Z2dlclRyZWVFbGVtZW50Ll9fZGVsZXRlZFZpYURlbGV0ZUtleWJvYXJkU2hvcnRjdXQpCi0g
ICAgICAgICAgICBkZWJ1Z2dlclRyZWVFbGVtZW50LmRlc2VsZWN0KCk7Ci0KLSAgICAgICAgbGV0
IHBhcmVudFRyZWVFbGVtZW50ID0gZGVidWdnZXJUcmVlRWxlbWVudC5wYXJlbnQ7Ci0gICAgICAg
IHBhcmVudFRyZWVFbGVtZW50LnJlbW92ZUNoaWxkKGRlYnVnZ2VyVHJlZUVsZW1lbnQpOwotCi0g
ICAgICAgIGlmIChwYXJlbnRUcmVlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggfHwgcGFyZW50VHJl
ZUVsZW1lbnQgPT09IHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHBhcmVudFRyZWVFbGVtZW50LnRyZWVPdXRsaW5lLnJl
bW92ZUNoaWxkKHBhcmVudFRyZWVFbGVtZW50KTsKLSAgICB9Ci0KLSAgICBfZGVidWdnZXJDYWxs
RnJhbWVzRGlkQ2hhbmdlKGV2ZW50KQotICAgIHsKLSAgICAgICAgbGV0IHRhcmdldCA9IGV2ZW50
LmRhdGEudGFyZ2V0OwotICAgICAgICBsZXQgdHJlZUVsZW1lbnQgPSB0aGlzLl9maW5kVGhyZWFk
VHJlZUVsZW1lbnRGb3JUYXJnZXQodGFyZ2V0KTsKLSAgICAgICAgdHJlZUVsZW1lbnQucmVmcmVz
aCgpOwotCi0gICAgICAgIGxldCBhY3RpdmVDYWxsRnJhbWVUcmVlRWxlbWVudCA9IHRoaXMuX2Nh
bGxTdGFja1RyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVudChXSS5kZWJ1Z2dlck1hbmFnZXIuYWN0
aXZlQ2FsbEZyYW1lKTsKLSAgICAgICAgaWYgKGFjdGl2ZUNhbGxGcmFtZVRyZWVFbGVtZW50KQot
ICAgICAgICAgICAgYWN0aXZlQ2FsbEZyYW1lVHJlZUVsZW1lbnQucmV2ZWFsKCk7Ci0gICAgfQot
Ci0gICAgX2RlYnVnZ2VyQWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlKCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9hY3RpdmVDYWxsRnJhbWVUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgdGhp
cy5fYWN0aXZlQ2FsbEZyYW1lVHJlZUVsZW1lbnQuaXNBY3RpdmVDYWxsRnJhbWUgPSBmYWxzZTsK
LSAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUNhbGxGcmFtZVRyZWVFbGVtZW50ID0gbnVsbDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghV0kuZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFt
ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9hY3RpdmVDYWxsRnJhbWVU
cmVlRWxlbWVudCA9IHRoaXMuX2NhbGxTdGFja1RyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVudChX
SS5kZWJ1Z2dlck1hbmFnZXIuYWN0aXZlQ2FsbEZyYW1lKTsKLSAgICAgICAgaWYgKHRoaXMuX2Fj
dGl2ZUNhbGxGcmFtZVRyZWVFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5fYWN0aXZlQ2FsbEZy
YW1lVHJlZUVsZW1lbnQuaXNBY3RpdmVDYWxsRnJhbWUgPSB0cnVlOwotICAgIH0KLQotICAgIF9i
cmVha3BvaW50c0JlbmVhdGhUcmVlRWxlbWVudCh0cmVlRWxlbWVudCkKLSAgICB7Ci0gICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VUcmVlRWxl
bWVudCB8fCB0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLlNjcmlwdFRyZWVFbGVtZW50KTsKLSAg
ICAgICAgaWYgKCEodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZVRyZWVFbGVtZW50
KSAmJiAhKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuU2NyaXB0VHJlZUVsZW1lbnQpKQotICAg
ICAgICAgICAgcmV0dXJuIFtdOwotCi0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOwotICAg
ICAgICB2YXIgYnJlYWtwb2ludFRyZWVFbGVtZW50cyA9IHRyZWVFbGVtZW50LmNoaWxkcmVuOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRUcmVlRWxlbWVudHMubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnRUcmVlRWxlbWVu
dHNbaV0gaW5zdGFuY2VvZiBXSS5CcmVha3BvaW50VHJlZUVsZW1lbnQpOwotICAgICAgICAgICAg
Y29uc29sZS5hc3NlcnQoYnJlYWtwb2ludFRyZWVFbGVtZW50c1tpXS5icmVha3BvaW50KTsKLSAg
ICAgICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludFRyZWVFbGVtZW50c1tpXS5icmVh
a3BvaW50OwotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQpCi0gICAgICAgICAgICAgICAgYnJl
YWtwb2ludHMucHVzaChicmVha3BvaW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBi
cmVha3BvaW50czsKLSAgICB9Ci0KLSAgICBfcmVtb3ZlQWxsQnJlYWtwb2ludHMoYnJlYWtwb2lu
dHMpCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2ldOwot
ICAgICAgICAgICAgaWYgKFdJLmRlYnVnZ2VyTWFuYWdlci5pc0JyZWFrcG9pbnRSZW1vdmFibGUo
YnJlYWtwb2ludCkpCi0gICAgICAgICAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLnJlbW92ZUJy
ZWFrcG9pbnQoYnJlYWtwb2ludCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfdG9nZ2xlQWxs
QnJlYWtwb2ludHMoYnJlYWtwb2ludHMsIGRpc2FibGVkKQotICAgIHsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJyZWFr
cG9pbnRzW2ldLmRpc2FibGVkID0gZGlzYWJsZWQ7Ci0gICAgfQotCi0gICAgX2JyZWFrcG9pbnRU
cmVlT3V0bGluZURlbGV0ZVRyZWVFbGVtZW50KHNlbGVjdGVkVHJlZUVsZW1lbnQpCi0gICAgewot
ICAgICAgICBjb25zb2xlLmFzc2VydChzZWxlY3RlZFRyZWVFbGVtZW50LnNlbGVjdGVkKTsKLQot
ICAgICAgICBpZiAoIVdJLmRlYnVnZ2VyTWFuYWdlci5pc0JyZWFrcG9pbnRSZW1vdmFibGUoc2Vs
ZWN0ZWRUcmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCkpIHsKLSAgICAgICAgICAgIGxldCB0
cmVlRWxlbWVudFRvU2VsZWN0ID0gc2VsZWN0ZWRUcmVlRWxlbWVudC5uZXh0U2VsZWN0YWJsZVNp
Ymxpbmc7Ci0gICAgICAgICAgICBpZiAodHJlZUVsZW1lbnRUb1NlbGVjdCkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IG9taXRGb2N1cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29uc3Qgc2Vs
ZWN0ZWRCeVVzZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgIHRyZWVFbGVtZW50VG9TZWxlY3Qu
c2VsZWN0KG9taXRGb2N1cywgc2VsZWN0ZWRCeVVzZXIpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKHNlbGVjdGVkVHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZVRy
ZWVFbGVtZW50IHx8IHNlbGVjdGVkVHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5TY3JpcHRUcmVl
RWxlbWVudCkgewotICAgICAgICAgICAgbGV0IGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2lu
dHNCZW5lYXRoVHJlZUVsZW1lbnQoc2VsZWN0ZWRUcmVlRWxlbWVudCk7Ci0gICAgICAgICAgICB0
aGlzLl9yZW1vdmVBbGxCcmVha3BvaW50cyhicmVha3BvaW50cyk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoc2VsZWN0ZWRUcmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCA9PT0gRGVidWdnZXJTaWRl
YmFyUGFuZWwuX193aW5kb3dFdmVudFRhcmdldFJlcHJlc2VudGVkT2JqZWN0KSB7Ci0gICAgICAg
ICAgICBsZXQgZXZlbnRCcmVha3BvaW50c09uV2luZG93ID0gV0kuZG9tTWFuYWdlci5ldmVudExp
c3RlbmVyQnJlYWtwb2ludHMuZmlsdGVyKChldmVudEJyZWFrcG9pbnQpID0+IGV2ZW50QnJlYWtw
b2ludC5ldmVudExpc3RlbmVyLm9uV2luZG93KTsKLSAgICAgICAgICAgIGZvciAobGV0IGV2ZW50
QnJlYWtwb2ludCBvZiBldmVudEJyZWFrcG9pbnRzT25XaW5kb3cpCi0gICAgICAgICAgICAgICAg
V0kuZG9tTWFuYWdlci5yZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihldmVudEJyZWFr
cG9pbnQuZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBfYnJlYWtwb2ludFRyZWVPdXRsaW5lQ29udGV4dE1lbnVUcmVlRWxlbWVu
dChjb250ZXh0TWVudSwgZXZlbnQsIHRyZWVFbGVtZW50KQotICAgIHsKLSAgICAgICAgLy8gVGhp
cyBjaGVjayBpcyBuZWNlc3Nhcnkgc2luY2UgdGhlIGNvbnRleHQgbWVudSBpcyBjcmVhdGVkIGJ5
IHRoZSBUcmVlT3V0bGluZSwgbWVhbmluZwotICAgICAgICAvLyB0aGF0IGFueSBjaGlsZCBjb3Vs
ZCBiZSB0aGUgdGFyZ2V0IG9mIHRoZSBjb250ZXh0IG1lbnUgZXZlbnQuCi0gICAgICAgIGlmICgh
KHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VUcmVlRWxlbWVudCkgJiYgISh0cmVl
RWxlbWVudCBpbnN0YW5jZW9mIFdJLlNjcmlwdFRyZWVFbGVtZW50KSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBsZXQgYnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50c0JlbmVh
dGhUcmVlRWxlbWVudCh0cmVlRWxlbWVudCk7Ci0gICAgICAgIGxldCBzaG91bGREaXNhYmxlID0g
YnJlYWtwb2ludHMuc29tZSgoYnJlYWtwb2ludCkgPT4gIWJyZWFrcG9pbnQuZGlzYWJsZWQpOwot
Ci0gICAgICAgIGxldCByZW1vdmVBbGxSZXNvdXJjZUJyZWFrcG9pbnRzID0gKCkgPT4gewotICAg
ICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpOwotICAgICAg
ICB9OwotCi0gICAgICAgIGxldCB0b2dnbGVBbGxSZXNvdXJjZUJyZWFrcG9pbnRzID0gKCkgPT4g
ewotICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQWxsQnJlYWtwb2ludHMoYnJlYWtwb2ludHMsIHNo
b3VsZERpc2FibGUpOwotICAgICAgICB9OwotCi0gICAgICAgIGlmIChzaG91bGREaXNhYmxlKQot
ICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXSS5VSVN0cmluZygiRGlzYWJsZSBC
cmVha3BvaW50cyIpLCB0b2dnbGVBbGxSZXNvdXJjZUJyZWFrcG9pbnRzKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXSS5VSVN0cmluZygiRW5hYmxl
IEJyZWFrcG9pbnRzIiksIHRvZ2dsZUFsbFJlc291cmNlQnJlYWtwb2ludHMpOwotICAgICAgICBj
b250ZXh0TWVudS5hcHBlbmRJdGVtKFdJLlVJU3RyaW5nKCJEZWxldGUgQnJlYWtwb2ludHMiKSwg
cmVtb3ZlQWxsUmVzb3VyY2VCcmVha3BvaW50cyk7Ci0gICAgfQotCi0gICAgX3RyZWVTZWxlY3Rp
b25EaWRDaGFuZ2UoZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbGV0IHRyZWVFbGVtZW50ID0gZXZlbnQudGFy
Z2V0LnNlbGVjdGVkVHJlZUVsZW1lbnQ7Ci0gICAgICAgIGlmICghdHJlZUVsZW1lbnQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0ku
RE9NTm9kZVRyZWVFbGVtZW50Ci0gICAgICAgICAgICB8fCB0cmVlRWxlbWVudCBpbnN0YW5jZW9m
IFdJLkRPTUJyZWFrcG9pbnRUcmVlRWxlbWVudAotICAgICAgICAgICAgfHwgdHJlZUVsZW1lbnQg
aW5zdGFuY2VvZiBXSS5FdmVudEJyZWFrcG9pbnRUcmVlRWxlbWVudAotICAgICAgICAgICAgfHwg
dHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5VUkxCcmVha3BvaW50VHJlZUVsZW1lbnQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2Jq
ZWN0ID09PSBEZWJ1Z2dlclNpZGViYXJQYW5lbC5fX3dpbmRvd0V2ZW50VGFyZ2V0UmVwcmVzZW50
ZWRPYmplY3QpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY29uc3Qgb3B0aW9ucyA9
IHsKLSAgICAgICAgICAgIGlnbm9yZU5ldHdvcmtUYWI6IHRydWUsCi0gICAgICAgICAgICBpZ25v
cmVTZWFyY2hUYWI6IHRydWUsCi0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKHRyZWVFbGVtZW50
IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VUcmVlRWxlbWVudCB8fCB0cmVlRWxlbWVudCBpbnN0YW5j
ZW9mIFdJLlNjcmlwdFRyZWVFbGVtZW50KSB7Ci0gICAgICAgICAgICBXSS5zaG93U291cmNlQ29k
ZSh0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBX
SS5DYWxsRnJhbWVUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgbGV0IGNhbGxGcmFtZSA9IHRy
ZWVFbGVtZW50LmNhbGxGcmFtZTsKLSAgICAgICAgICAgIGlmIChjYWxsRnJhbWUuaWQpCi0gICAg
ICAgICAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZSA9IGNhbGxGcmFt
ZTsKLQotICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRpb24pCi0gICAg
ICAgICAgICAgICAgV0kuc2hvd1NvdXJjZUNvZGVMb2NhdGlvbihjYWxsRnJhbWUuc291cmNlQ29k
ZUxvY2F0aW9uLCBvcHRpb25zKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuSXNzdWVUcmVlRWxlbWVudCkg
ewotICAgICAgICAgICAgV0kuc2hvd1NvdXJjZUNvZGVMb2NhdGlvbih0cmVlRWxlbWVudC5pc3N1
ZU1lc3NhZ2Uuc291cmNlQ29kZUxvY2F0aW9uLCBvcHRpb25zKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0ku
QnJlYWtwb2ludFRyZWVFbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBs
ZXQgYnJlYWtwb2ludCA9IHRyZWVFbGVtZW50LmJyZWFrcG9pbnQ7Ci0gICAgICAgIGlmICh0cmVl
RWxlbWVudC50cmVlT3V0bGluZSA9PT0gdGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZSkgewot
ICAgICAgICAgICAgV0kuc2hvd1NvdXJjZUNvZGVMb2NhdGlvbihicmVha3BvaW50LnNvdXJjZUNv
ZGVMb2NhdGlvbiwgb3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIXRyZWVFbGVtZW50LnBhcmVudC5yZXByZXNlbnRlZE9iamVjdCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBjb25zb2xlLmFzc2VydCh0cmVlRWxlbWVudC5wYXJl
bnQucmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5Tb3VyY2VDb2RlKTsKLSAgICAgICAg
aWYgKCEodHJlZUVsZW1lbnQucGFyZW50LnJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0ku
U291cmNlQ29kZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgV0kuc2hvd1NvdXJj
ZUNvZGVMb2NhdGlvbihicmVha3BvaW50LnNvdXJjZUNvZGVMb2NhdGlvbiwgb3B0aW9ucyk7Ci0g
ICAgfQotCi0gICAgX2FkZFRyZWVFbGVtZW50KHRyZWVFbGVtZW50LCBwYXJlbnRUcmVlRWxlbWVu
dCkKLSAgICB7Ci0gICAgICAgIGlmICghcGFyZW50VHJlZUVsZW1lbnQpCi0gICAgICAgICAgICBw
YXJlbnRUcmVlRWxlbWVudCA9IHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lOwot
Ci0gICAgICAgIGxldCBjb21wYXJhdG9yID0gKGEsIGIpID0+IHsKLSAgICAgICAgICAgIGNvbnN0
IHJhbmtGdW5jdGlvbnMgPSBbCi0gICAgICAgICAgICAgICAgKHRyZWVFbGVtZW50KSA9PiB0cmVl
RWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCA9PT0gV0kuZGVidWdnZXJNYW5hZ2VyLmFsbEV4Y2Vw
dGlvbnNCcmVha3BvaW50LAotICAgICAgICAgICAgICAgICh0cmVlRWxlbWVudCkgPT4gdHJlZUVs
ZW1lbnQucmVwcmVzZW50ZWRPYmplY3QgPT09IFdJLmRlYnVnZ2VyTWFuYWdlci51bmNhdWdodEV4
Y2VwdGlvbnNCcmVha3BvaW50LAotICAgICAgICAgICAgICAgICh0cmVlRWxlbWVudCkgPT4gdHJl
ZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QgPT09IFdJLmRlYnVnZ2VyTWFuYWdlci5hc3NlcnRp
b25GYWlsdXJlc0JyZWFrcG9pbnQsCi0gICAgICAgICAgICAgICAgKHRyZWVFbGVtZW50KSA9PiB0
cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLkJyZWFrcG9pbnRUcmVlRWxlbWVudCB8fCB0cmVlRWxl
bWVudCBpbnN0YW5jZW9mIFdJLlJlc291cmNlVHJlZUVsZW1lbnQgfHwgdHJlZUVsZW1lbnQgaW5z
dGFuY2VvZiBXSS5TY3JpcHRUcmVlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAodHJlZUVsZW1l
bnQpID0+IHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0ID09PSBXSS5kZWJ1Z2dlck1hbmFn
ZXIuYWxsTWljcm90YXNrc0JyZWFrcG9pbnQsCi0gICAgICAgICAgICAgICAgKHRyZWVFbGVtZW50
KSA9PiB0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCA9PT0gV0kuZG9tRGVidWdnZXJNYW5h
Z2VyLmFsbEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQsCi0gICAgICAgICAgICAgICAgKHRyZWVF
bGVtZW50KSA9PiB0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCA9PT0gV0kuZG9tRGVidWdn
ZXJNYW5hZ2VyLmFsbFRpbWVvdXRzQnJlYWtwb2ludCwKLSAgICAgICAgICAgICAgICAodHJlZUVs
ZW1lbnQpID0+IHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0ID09PSBXSS5kb21EZWJ1Z2dl
ck1hbmFnZXIuYWxsSW50ZXJ2YWxzQnJlYWtwb2ludCwKLSAgICAgICAgICAgICAgICAodHJlZUVs
ZW1lbnQpID0+IHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0ID09PSBXSS5kb21EZWJ1Z2dl
ck1hbmFnZXIuYWxsTGlzdGVuZXJzQnJlYWtwb2ludCwKLSAgICAgICAgICAgICAgICAodHJlZUVs
ZW1lbnQpID0+IHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuRXZlbnRCcmVha3BvaW50VHJlZUVs
ZW1lbnQsCi0gICAgICAgICAgICAgICAgKHRyZWVFbGVtZW50KSA9PiB0cmVlRWxlbWVudCBpbnN0
YW5jZW9mIFdJLkRPTU5vZGVUcmVlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAodHJlZUVsZW1l
bnQpID0+IHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0ID09PSBEZWJ1Z2dlclNpZGViYXJQ
YW5lbC5fX3dpbmRvd0V2ZW50VGFyZ2V0UmVwcmVzZW50ZWRPYmplY3QsCi0gICAgICAgICAgICAg
ICAgKHRyZWVFbGVtZW50KSA9PiB0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLkRPTUJyZWFrcG9p
bnRUcmVlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAodHJlZUVsZW1lbnQpID0+IHRyZWVFbGVt
ZW50LnJlcHJlc2VudGVkT2JqZWN0ID09PSBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsUmVxdWVz
dHNCcmVha3BvaW50LAotICAgICAgICAgICAgICAgICh0cmVlRWxlbWVudCkgPT4gdHJlZUVsZW1l
bnQgaW5zdGFuY2VvZiBXSS5VUkxCcmVha3BvaW50VHJlZUVsZW1lbnQsCi0gICAgICAgICAgICBd
OwotCi0gICAgICAgICAgICBsZXQgYVJhbmsgPSByYW5rRnVuY3Rpb25zLmZpbmRJbmRleCgocmFu
a0Z1bmN0aW9uKSA9PiByYW5rRnVuY3Rpb24oYSkpOwotICAgICAgICAgICAgbGV0IGJSYW5rID0g
cmFua0Z1bmN0aW9ucy5maW5kSW5kZXgoKHJhbmtGdW5jdGlvbikgPT4gcmFua0Z1bmN0aW9uKGIp
KTsKLSAgICAgICAgICAgIGlmIChhUmFuayA+PSAwICYmIGJSYW5rID49IDApIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYVJhbmsgPCBiUmFuaykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x
OwotICAgICAgICAgICAgICAgIGlmIChiUmFuayA8IGFSYW5rKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGEgaW5zdGFuY2Vv
ZiBXSS5CcmVha3BvaW50VHJlZUVsZW1lbnQgJiYgYiBpbnN0YW5jZW9mIFdJLkJyZWFrcG9pbnRU
cmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcGFyZUJyZWFrcG9p
bnRUcmVlRWxlbWVudHMoYSwgYik7Ci0KLSAgICAgICAgICAgIHJldHVybiBhLm1haW5UaXRsZS5l
eHRlbmRlZExvY2FsZUNvbXBhcmUoYi5tYWluVGl0bGUpIHx8IGEuc3VidGl0bGUuZXh0ZW5kZWRM
b2NhbGVDb21wYXJlKGIuc3VidGl0bGUpOwotICAgICAgICB9OwotCi0gICAgICAgIHBhcmVudFRy
ZWVFbGVtZW50Lmluc2VydENoaWxkKHRyZWVFbGVtZW50LCBpbnNlcnRpb25JbmRleEZvck9iamVj
dEluTGlzdFNvcnRlZEJ5RnVuY3Rpb24odHJlZUVsZW1lbnQsIHBhcmVudFRyZWVFbGVtZW50LmNo
aWxkcmVuLCBjb21wYXJhdG9yKSk7Ci0gICAgfQotCi0gICAgX2NvbXBhcmVCcmVha3BvaW50VHJl
ZUVsZW1lbnRzKGEsIGIpCi0gICAgewotICAgICAgICBpZiAoIWEucmVwcmVzZW50ZWRPYmplY3Qg
fHwgIWIucmVwcmVzZW50ZWRPYmplY3QpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAg
ICBsZXQgYUxvY2F0aW9uID0gYS5yZXByZXNlbnRlZE9iamVjdC5zb3VyY2VDb2RlTG9jYXRpb247
Ci0gICAgICAgIGxldCBiTG9jYXRpb24gPSBiLnJlcHJlc2VudGVkT2JqZWN0LnNvdXJjZUNvZGVM
b2NhdGlvbjsKLSAgICAgICAgaWYgKCFhTG9jYXRpb24gfHwgIWJMb2NhdGlvbikKLSAgICAgICAg
ICAgIHJldHVybiAwOwotCi0gICAgICAgIHZhciBjb21wYXJpc29uUmVzdWx0ID0gYUxvY2F0aW9u
LmRpc3BsYXlMaW5lTnVtYmVyIC0gYkxvY2F0aW9uLmRpc3BsYXlMaW5lTnVtYmVyOwotICAgICAg
ICBpZiAoY29tcGFyaXNvblJlc3VsdCAhPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBjb21wYXJp
c29uUmVzdWx0OwotCi0gICAgICAgIHJldHVybiBhTG9jYXRpb24uZGlzcGxheUNvbHVtbk51bWJl
ciAtIGJMb2NhdGlvbi5kaXNwbGF5Q29sdW1uTnVtYmVyOwotICAgIH0KLQotICAgIF91cGRhdGVQ
YXVzZVJlYXNvbigpCi0gICAgewotICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRsaW5l
ID0gbnVsbDsKLQotICAgICAgICB0aGlzLl91cGRhdGVQYXVzZVJlYXNvbkdvdG9BcnJvdygpOwot
ICAgICAgICBsZXQgdGFyZ2V0ID0gV0kuZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZS50
YXJnZXQ7Ci0gICAgICAgIGxldCB0YXJnZXREYXRhID0gV0kuZGVidWdnZXJNYW5hZ2VyLmRhdGFG
b3JUYXJnZXQodGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZVBhdXNlUmVhc29u
U2VjdGlvbih0YXJnZXQsIHRhcmdldERhdGEucGF1c2VSZWFzb24sIHRhcmdldERhdGEucGF1c2VE
YXRhKTsKLSAgICB9Ci0KLSAgICBfdXBkYXRlUGF1c2VSZWFzb25TZWN0aW9uKHRhcmdldCwgcGF1
c2VSZWFzb24sIHBhdXNlRGF0YSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAocGF1c2VSZWFzb24p
IHsKLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uQW5pbWF0aW9u
RnJhbWU6Ci0gICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRsaW5lID0gdGhpcy5j
cmVhdGVDb250ZW50VHJlZU91dGxpbmUoe3N1cHByZXNzRmlsdGVyaW5nOiB0cnVlfSk7Ci0KLSAg
ICAgICAgICAgIHZhciBldmVudEJyZWFrcG9pbnRUcmVlRWxlbWVudCA9IG5ldyBXSS5FdmVudEJy
ZWFrcG9pbnRUcmVlRWxlbWVudChXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsQW5pbWF0aW9uRnJh
bWVzQnJlYWtwb2ludCwgewotICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogV0kuRGVidWdnZXJT
aWRlYmFyUGFuZWwuUGF1c2VkQnJlYWtwb2ludEljb25TdHlsZUNsYXNzTmFtZSwKLSAgICAgICAg
ICAgICAgICB0aXRsZTogV0kuVUlTdHJpbmcoInJlcXVlc3RBbmltYXRpb25GcmFtZSBGaXJlZCIp
LAotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRs
aW5lLmFwcGVuZENoaWxkKGV2ZW50QnJlYWtwb2ludFRyZWVFbGVtZW50KTsKLQotICAgICAgICAg
ICAgdmFyIGV2ZW50QnJlYWtwb2ludFJvdyA9IG5ldyBXSS5EZXRhaWxzU2VjdGlvblJvdzsKLSAg
ICAgICAgICAgIGV2ZW50QnJlYWtwb2ludFJvdy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3Bh
dXNlUmVhc29uVHJlZU91dGxpbmUuZWxlbWVudCk7Ci0KLSAgICAgICAgICAgIHRoaXMuX3BhdXNl
UmVhc29uR3JvdXAucm93cyA9IFtldmVudEJyZWFrcG9pbnRSb3ddOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24u
QXNzZXJ0aW9uOgotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbmNsdWRlIHRoZSBh
c3NlcnRpb24gY29uZGl0aW9uIHN0cmluZy4KLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBh
dXNlRGF0YSwgIkV4cGVjdGVkIGRhdGEgd2l0aCBhbiBhc3NlcnRpb24sIGJ1dCBmb3VuZCBub25l
LiIpOwotICAgICAgICAgICAgaWYgKHBhdXNlRGF0YSAmJiBwYXVzZURhdGEubWVzc2FnZSkgewot
ICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVhc29uVGV4dFJvdy50ZXh0ID0gV0kuVUlTdHJp
bmcoIkFzc2VydGlvbiB3aXRoIG1lc3NhZ2U6ICVzIikuZm9ybWF0KHBhdXNlRGF0YS5tZXNzYWdl
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgdGhpcy5fcGF1c2VSZWFzb25UZXh0Um93LnRleHQgPSBXSS5VSVN0cmluZygiQXNzZXJ0
aW9uIEZhaWxlZCIpOwotICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dzID0g
W3RoaXMuX3BhdXNlUmVhc29uVGV4dFJvd107Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICBjYXNlIFdJLkRlYnVnZ2VyTWFuYWdlci5QYXVzZVJlYXNvbi5CbGFja2JveGVkU2Ny
aXB0OiB7Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2VydChwYXVzZURhdGEpOwotICAgICAgICAg
ICAgaWYgKHBhdXNlRGF0YSkKLSAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVQYXVzZVJlYXNv
blNlY3Rpb24odGFyZ2V0LCBXSS5EZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFzb25Gcm9tUGF5bG9h
ZChwYXVzZURhdGEub3JpZ2luYWxSZWFzb24pLCBwYXVzZURhdGEub3JpZ2luYWxEYXRhKTsKLQot
ICAgICAgICAgICAgLy8gRG9uJ3QgdXNlIGBfcGF1c2VSZWFzb25UZXh0Um93YCBhcyBpdCBtYXkg
aGF2ZSBhbHJlYWR5IGJlZW4gc2V0LgotICAgICAgICAgICAgbGV0IGJsYWNrYm94UmVhc29uVGV4
dFJvdyA9IG5ldyBXSS5EZXRhaWxzU2VjdGlvblRleHRSb3coV0kuVUlTdHJpbmcoIkRlZmVycmVk
IHBhdXNlIGZyb20gYmxhY2tib3hlZCBzY3JpcHQiKSk7Ci0gICAgICAgICAgICBibGFja2JveFJl
YXNvblRleHRSb3cuX19ibGFja2JveFJlYXNvbiA9IHRydWU7Ci0KLSAgICAgICAgICAgIGxldCBl
eGlzdGluZ1Jvd3MgPSB0aGlzLl9wYXVzZVJlYXNvbkdyb3VwLnJvd3MuZmlsdGVyKChyb3cpID0+
ICFyb3cuX19ibGFja2JveFJlYXNvbik7Ci0gICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvbkdy
b3VwLnJvd3MgPSBbYmxhY2tib3hSZWFzb25UZXh0Um93LCAuLi5leGlzdGluZ1Jvd3NdOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFdJLkRlYnVn
Z2VyTWFuYWdlci5QYXVzZVJlYXNvbi5CcmVha3BvaW50OgotICAgICAgICAgICAgY29uc29sZS5h
c3NlcnQocGF1c2VEYXRhLCAiRXhwZWN0ZWQgYnJlYWtwb2ludCBpZGVudGlmaWVyLCBidXQgZm91
bmQgbm9uZS4iKTsKLSAgICAgICAgICAgIGlmIChwYXVzZURhdGEgJiYgcGF1c2VEYXRhLmJyZWFr
cG9pbnRJZCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVhc29uVHJlZU91dGxpbmUg
PSB0aGlzLmNyZWF0ZUNvbnRlbnRUcmVlT3V0bGluZSh7c3VwcHJlc3NGaWx0ZXJpbmc6IHRydWV9
KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRsaW5lLmFkZEV2ZW50
TGlzdGVuZXIoV0kuVHJlZU91dGxpbmUuRXZlbnQuU2VsZWN0aW9uRGlkQ2hhbmdlLCB0aGlzLl90
cmVlU2VsZWN0aW9uRGlkQ2hhbmdlLCB0aGlzKTsKLQotICAgICAgICAgICAgICAgIGxldCBicmVh
a3BvaW50ID0gV0kuZGVidWdnZXJNYW5hZ2VyLmJyZWFrcG9pbnRGb3JJZGVudGlmaWVyKHBhdXNl
RGF0YS5icmVha3BvaW50SWQpOwotICAgICAgICAgICAgICAgIGxldCBicmVha3BvaW50VHJlZUVs
ZW1lbnQgPSBuZXcgV0kuQnJlYWtwb2ludFRyZWVFbGVtZW50KGJyZWFrcG9pbnQsIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBXSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5QYXVzZWRC
cmVha3BvaW50SWNvblN0eWxlQ2xhc3NOYW1lLAotICAgICAgICAgICAgICAgICAgICB0aXRsZTog
V0kuVUlTdHJpbmcoIlRyaWdnZXJlZCBCcmVha3BvaW50IiksCi0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgbGV0IGJyZWFrcG9pbnREZXRhaWxzU2VjdGlvbiA9IG5ldyBXSS5E
ZXRhaWxzU2VjdGlvblJvdzsKLSAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRyZWVP
dXRsaW5lLmFwcGVuZENoaWxkKGJyZWFrcG9pbnRUcmVlRWxlbWVudCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWtwb2ludERldGFpbHNTZWN0aW9uLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fcGF1
c2VSZWFzb25UcmVlT3V0bGluZS5lbGVtZW50KTsKLQotICAgICAgICAgICAgICAgIHRoaXMuX3Bh
dXNlUmVhc29uR3JvdXAucm93cyA9IFticmVha3BvaW50RGV0YWlsc1NlY3Rpb25dOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uQ1NQVmlvbGF0
aW9uOgotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQocGF1c2VEYXRhLCAiRXhwZWN0ZWQgZGF0
YSB3aXRoIGEgQ1NQIFZpb2xhdGlvbiwgYnV0IGZvdW5kIG5vbmUuIik7Ci0gICAgICAgICAgICBp
ZiAocGF1c2VEYXRhKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ09NUEFUSUJJTElUWSAoaU9TIDgp
OiAnZGlyZWN0aXZlJyB3YXMgJ2RpcmVjdGl2ZVRleHQnLgotICAgICAgICAgICAgICAgIHRoaXMu
X3BhdXNlUmVhc29uVGV4dFJvdy50ZXh0ID0gV0kuVUlTdHJpbmcoIkNvbnRlbnQgU2VjdXJpdHkg
UG9saWN5IHZpb2xhdGlvbiBvZiBkaXJlY3RpdmU6ICVzIikuZm9ybWF0KHBhdXNlRGF0YS5kaXJl
Y3RpdmUgfHwgcGF1c2VEYXRhLmRpcmVjdGl2ZVRleHQpOwotICAgICAgICAgICAgICAgIHRoaXMu
X3BhdXNlUmVhc29uR3JvdXAucm93cyA9IFt0aGlzLl9wYXVzZVJlYXNvblRleHRSb3ddOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uRGVidWdn
ZXJTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRleHRSb3cudGV4dCA9
IFdJLlVJU3RyaW5nKCJEZWJ1Z2dlciBTdGF0ZW1lbnQiKTsKLSAgICAgICAgICAgIHRoaXMuX3Bh
dXNlUmVhc29uR3JvdXAucm93cyA9IFt0aGlzLl9wYXVzZVJlYXNvblRleHRSb3ddOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1
c2VSZWFzb24uRE9NOgotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoV0kuZG9tRGVidWdnZXJN
YW5hZ2VyLnN1cHBvcnRlZCk7Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2VydChwYXVzZURhdGEs
ICJFeHBlY3RlZCBET00gYnJlYWtwb2ludCBkYXRhLCBidXQgZm91bmQgbm9uZS4iKTsKLSAgICAg
ICAgICAgIGlmIChwYXVzZURhdGEgJiYgcGF1c2VEYXRhLm5vZGVJZCkgewotICAgICAgICAgICAg
ICAgIGxldCBkb21Ob2RlID0gV0kuZG9tTWFuYWdlci5ub2RlRm9ySWQocGF1c2VEYXRhLm5vZGVJ
ZCk7Ci0gICAgICAgICAgICAgICAgbGV0IGRvbUJyZWFrcG9pbnRzID0gV0kuZG9tRGVidWdnZXJN
YW5hZ2VyLmRvbUJyZWFrcG9pbnRzRm9yTm9kZShkb21Ob2RlKTsKLSAgICAgICAgICAgICAgICBs
ZXQgZG9tQnJlYWtwb2ludDsKLSAgICAgICAgICAgICAgICBmb3IgKGxldCBicmVha3BvaW50IG9m
IGRvbUJyZWFrcG9pbnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50LnR5
cGUgPT09IHBhdXNlRGF0YS50eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb21CcmVh
a3BvaW50ID0gYnJlYWtwb2ludDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKCFkb21CcmVha3BvaW50KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRsaW5lID0gdGhpcy5jcmVhdGVDb250
ZW50VHJlZU91dGxpbmUoe3N1cHByZXNzRmlsdGVyaW5nOiB0cnVlfSk7Ci0KLSAgICAgICAgICAg
ICAgICBsZXQgdHlwZSA9IFdJLkRPTUJyZWFrcG9pbnRUcmVlRWxlbWVudC5kaXNwbGF5TmFtZUZv
clR5cGUoZG9tQnJlYWtwb2ludC50eXBlKTsKLSAgICAgICAgICAgICAgICBsZXQgZG9tQnJlYWtw
b2ludFRyZWVFbGVtZW50ID0gbmV3IFdJLkRPTUJyZWFrcG9pbnRUcmVlRWxlbWVudChkb21CcmVh
a3BvaW50LCB7Ci0gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogV0kuRGVidWdnZXJTaWRl
YmFyUGFuZWwuUGF1c2VkQnJlYWtwb2ludEljb25TdHlsZUNsYXNzTmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgdGl0bGU6IHR5cGUsCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgbGV0IGRvbUJyZWFrcG9pbnRSb3cgPSBuZXcgV0kuRGV0YWlsc1NlY3Rpb25Sb3c7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5hcHBlbmRDaGlsZChkb21C
cmVha3BvaW50VHJlZUVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGRvbUJyZWFrcG9pbnRSb3cu
ZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRsaW5lLmVsZW1lbnQp
OwotCi0gICAgICAgICAgICAgICAgbGV0IG93bmVyRWxlbWVudFJvdyA9IG5ldyBXSS5EZXRhaWxz
U2VjdGlvblNpbXBsZVJvdyhXSS5VSVN0cmluZygiRWxlbWVudCIpLCBXSS5saW5raWZ5Tm9kZVJl
ZmVyZW5jZShkb21Ob2RlKSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25Hcm91
cC5yb3dzID0gW2RvbUJyZWFrcG9pbnRSb3csIG93bmVyRWxlbWVudFJvd107Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoZG9tQnJlYWtwb2ludC50eXBlICE9PSBXSS5ET01CcmVha3BvaW50LlR5cGUu
U3VidHJlZU1vZGlmaWVkKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBhdXNlRGF0YS50YXJnZXROb2RlKTsKLQotICAg
ICAgICAgICAgICAgIGxldCByZW1vdGVPYmplY3QgPSBXSS5SZW1vdGVPYmplY3QuZnJvbVBheWxv
YWQocGF1c2VEYXRhLnRhcmdldE5vZGUsIHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgcmVtb3Rl
T2JqZWN0LnB1c2hOb2RlVG9Gcm9udGVuZCgobm9kZUlkKSA9PiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghbm9kZUlkKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgICAgIGxldCBub2RlID0gV0kuZG9tTWFuYWdlci5ub2RlRm9ySWQobm9kZUlk
KTsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZSwgIk1pc3Npbmcgbm9k
ZSBmb3IgaWQuIiwgbm9kZUlkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIGxldCBm
cmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgbGV0IGRlc2NyaXB0aW9uID0gcGF1c2VEYXRhLmluc2VydGlvbiA/IFdJLlVJU3Ry
aW5nKCJDaGlsZCBhZGRlZCB0byAiKSA6IFdJLlVJU3RyaW5nKCJSZW1vdmVkIGRlc2NlbmRhbnQg
Iik7Ci0gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZChkZXNjcmlwdGlvbiwgV0ku
bGlua2lmeU5vZGVSZWZlcmVuY2Uobm9kZSkpOwotCi0gICAgICAgICAgICAgICAgICAgIGxldCB0
YXJnZXREZXNjcmlwdGlvblJvdyA9IG5ldyBXSS5EZXRhaWxzU2VjdGlvblNpbXBsZVJvdyhXSS5V
SVN0cmluZygiRGV0YWlscyIpLCBmcmFnbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdl
dERlc2NyaXB0aW9uUm93LmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgidGFyZ2V0LWRlc2NyaXB0aW9u
Iik7Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dzID0g
dGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dzLmNvbmNhdCh0YXJnZXREZXNjcmlwdGlvblJvdyk7
Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV0kuRGVidWdn
ZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkxpc3RlbmVyOgotICAgICAgICBjYXNlIFdJLkRlYnVnZ2Vy
TWFuYWdlci5QYXVzZVJlYXNvbi5FdmVudExpc3RlbmVyOgotICAgICAgICAgICAgY29uc29sZS5h
c3NlcnQocGF1c2VEYXRhLCAiRXhwZWN0ZWQgZGF0YSB3aXRoIGFuIGV2ZW50IGxpc3RlbmVyLCBi
dXQgZm91bmQgbm9uZS4iKTsKLSAgICAgICAgICAgIGlmICghcGF1c2VEYXRhKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgdmFyIGV2ZW50QnJlYWtwb2ludCA9
IG51bGw7Ci0gICAgICAgICAgICBpZiAocGF1c2VEYXRhLmV2ZW50TGlzdGVuZXJJZCkKLSAgICAg
ICAgICAgICAgICBldmVudEJyZWFrcG9pbnQgPSBXSS5kb21NYW5hZ2VyLmJyZWFrcG9pbnRGb3JF
dmVudExpc3RlbmVySWQocGF1c2VEYXRhLmV2ZW50TGlzdGVuZXJJZCk7Ci0gICAgICAgICAgICBp
ZiAoIWV2ZW50QnJlYWtwb2ludCkKLSAgICAgICAgICAgICAgICBldmVudEJyZWFrcG9pbnQgPSBX
SS5kb21EZWJ1Z2dlck1hbmFnZXIubGlzdGVuZXJCcmVha3BvaW50Rm9yRXZlbnROYW1lKHBhdXNl
RGF0YS5ldmVudE5hbWUpOwotCi0gICAgICAgICAgICBjb25zb2xlLmFzc2VydChldmVudEJyZWFr
cG9pbnQsICJFeHBlY3RlZCBFdmVudCBMaXN0ZW5lciBicmVha3BvaW50IGZvciBldmVudCBuYW1l
LiIsIHBhdXNlRGF0YS5ldmVudE5hbWUpOwotICAgICAgICAgICAgaWYgKCFldmVudEJyZWFrcG9p
bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICB0aGlzLl9w
YXVzZVJlYXNvblRyZWVPdXRsaW5lID0gdGhpcy5jcmVhdGVDb250ZW50VHJlZU91dGxpbmUoe3N1
cHByZXNzRmlsdGVyaW5nOiB0cnVlfSk7Ci0KLSAgICAgICAgICAgIHZhciBldmVudEJyZWFrcG9p
bnRUcmVlRWxlbWVudCA9IG5ldyBXSS5FdmVudEJyZWFrcG9pbnRUcmVlRWxlbWVudChldmVudEJy
ZWFrcG9pbnQsIHsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFdJLkRlYnVnZ2VyU2lkZWJh
clBhbmVsLlBhdXNlZEJyZWFrcG9pbnRJY29uU3R5bGVDbGFzc05hbWUsCi0gICAgICAgICAgICAg
ICAgdGl0bGU6IFdJLlVJU3RyaW5nKCJcdTIwMUMlc1x1MjAxRCBFdmVudCBGaXJlZCIpLmZvcm1h
dChwYXVzZURhdGEuZXZlbnROYW1lKSwKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdGhp
cy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5hcHBlbmRDaGlsZChldmVudEJyZWFrcG9pbnRUcmVl
RWxlbWVudCk7Ci0KLSAgICAgICAgICAgIHZhciBldmVudEJyZWFrcG9pbnRSb3cgPSBuZXcgV0ku
RGV0YWlsc1NlY3Rpb25Sb3c7Ci0gICAgICAgICAgICBldmVudEJyZWFrcG9pbnRSb3cuZWxlbWVu
dC5hcHBlbmRDaGlsZCh0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRsaW5lLmVsZW1lbnQpOwotCi0g
ICAgICAgICAgICB2YXIgcm93cyA9IFtldmVudEJyZWFrcG9pbnRSb3ddOwotCi0gICAgICAgICAg
ICB2YXIgZXZlbnRMaXN0ZW5lciA9IGV2ZW50QnJlYWtwb2ludC5ldmVudExpc3RlbmVyOwotICAg
ICAgICAgICAgaWYgKGV2ZW50TGlzdGVuZXIpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmFz
c2VydChldmVudExpc3RlbmVyLmV2ZW50TGlzdGVuZXJJZCA9PT0gcGF1c2VEYXRhLmV2ZW50TGlz
dGVuZXJJZCk7Ci0KLSAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsOwotICAgICAgICAg
ICAgICAgIGlmIChldmVudExpc3RlbmVyLm9uV2luZG93KQotICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IFdJLnVubG9jYWxpemVkU3RyaW5nKCJ3aW5kb3ciKTsKLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChldmVudExpc3RlbmVyLm5vZGUpCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0g
V0kubGlua2lmeU5vZGVSZWZlcmVuY2UoZXZlbnRMaXN0ZW5lci5ub2RlKTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaChuZXcgV0kuRGV0
YWlsc1NlY3Rpb25TaW1wbGVSb3coV0kuVUlTdHJpbmcoIlRhcmdldCIpLCB2YWx1ZSkpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvbkdyb3VwLnJvd3MgPSBy
b3dzOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dl
ck1hbmFnZXIuUGF1c2VSZWFzb24uRXhjZXB0aW9uOgotICAgICAgICAgICAgY29uc29sZS5hc3Nl
cnQocGF1c2VEYXRhLCAiRXhwZWN0ZWQgZGF0YSB3aXRoIGFuIGV4Y2VwdGlvbiwgYnV0IGZvdW5k
IG5vbmUuIik7Ci0gICAgICAgICAgICBpZiAocGF1c2VEYXRhKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBpbXByb3ZlIHRoZSBhcHBlYXJhbmNlIG9mIHRocm93biBvYmpl
Y3RzLiBUaGlzIHdvcmtzIHdlbGwgZm9yIGV4Y2VwdGlvbiBzdHJpbmdzLgotICAgICAgICAgICAg
ICAgIHZhciBkYXRhID0gV0kuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHBhdXNlRGF0YSwgdGFy
Z2V0KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRleHRSb3cudGV4dCA9IFdJ
LlVJU3RyaW5nKCJFeGNlcHRpb24gd2l0aCB0aHJvd24gdmFsdWU6ICVzIikuZm9ybWF0KGRhdGEu
ZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVhc29uR3JvdXAucm93
cyA9IFt0aGlzLl9wYXVzZVJlYXNvblRleHRSb3ddOwotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBX
SS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uSW50ZXJ2YWw6Ci0gICAgICAgICAgICB0aGlz
Ll9wYXVzZVJlYXNvblRyZWVPdXRsaW5lID0gdGhpcy5jcmVhdGVDb250ZW50VHJlZU91dGxpbmUo
e3N1cHByZXNzRmlsdGVyaW5nOiB0cnVlfSk7Ci0KLSAgICAgICAgICAgIHZhciBldmVudEJyZWFr
cG9pbnRUcmVlRWxlbWVudCA9IG5ldyBXSS5FdmVudEJyZWFrcG9pbnRUcmVlRWxlbWVudChXSS5k
b21EZWJ1Z2dlck1hbmFnZXIuYWxsSW50ZXJ2YWxzQnJlYWtwb2ludCwgewotICAgICAgICAgICAg
ICAgIGNsYXNzTmFtZTogV0kuRGVidWdnZXJTaWRlYmFyUGFuZWwuUGF1c2VkQnJlYWtwb2ludElj
b25TdHlsZUNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICB0aXRsZTogV0kuVUlTdHJpbmcoInNl
dEludGVydmFsIEZpcmVkIiksCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHRoaXMuX3Bh
dXNlUmVhc29uVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQoZXZlbnRCcmVha3BvaW50VHJlZUVsZW1l
bnQpOwotCi0gICAgICAgICAgICB2YXIgZXZlbnRCcmVha3BvaW50Um93ID0gbmV3IFdJLkRldGFp
bHNTZWN0aW9uUm93OwotICAgICAgICAgICAgZXZlbnRCcmVha3BvaW50Um93LmVsZW1lbnQuYXBw
ZW5kQ2hpbGQodGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5lbGVtZW50KTsKLQotICAgICAg
ICAgICAgdGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dzID0gW2V2ZW50QnJlYWtwb2ludFJvd107
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBjYXNlIFdJLkRlYnVnZ2VyTWFu
YWdlci5QYXVzZVJlYXNvbi5NaWNyb3Rhc2s6Ci0gICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNv
blRleHRSb3cudGV4dCA9IFdJLlVJU3RyaW5nKCJNaWNyb3Rhc2sgRmlyZWQiKTsKLSAgICAgICAg
ICAgIHRoaXMuX3BhdXNlUmVhc29uR3JvdXAucm93cyA9IFt0aGlzLl9wYXVzZVJlYXNvblRleHRS
b3ddOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dl
ck1hbmFnZXIuUGF1c2VSZWFzb24uUGF1c2VPbk5leHRTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICB0
aGlzLl9wYXVzZVJlYXNvblRleHRSb3cudGV4dCA9IFdJLlVJU3RyaW5nKCJJbW1lZGlhdGUgUGF1
c2UgUmVxdWVzdGVkIik7Ci0gICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvbkdyb3VwLnJvd3Mg
PSBbdGhpcy5fcGF1c2VSZWFzb25UZXh0Um93XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgICAgIGNhc2UgV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLlRpbWVyOgotICAg
ICAgICAgICAgY29uc29sZS5hc3NlcnQocGF1c2VEYXRhLCAiRXhwZWN0ZWQgZGF0YSB3aXRoIGEg
dGltZXIsIGJ1dCBmb3VuZCBub25lLiIpOwotICAgICAgICAgICAgaWYgKCFwYXVzZURhdGEpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICB2YXIgZXZlbnRCcmVh
a3BvaW50ID0gbnVsbDsKLSAgICAgICAgICAgIHN3aXRjaCAocGF1c2VEYXRhLmV2ZW50TmFtZSkg
ewotICAgICAgICAgICAgY2FzZSAic2V0VGltZW91dCI6Ci0gICAgICAgICAgICAgICAgZXZlbnRC
cmVha3BvaW50ID0gV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbFRpbWVvdXRzQnJlYWtwb2ludDsK
LSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAic2V0SW50ZXJ2YWwi
OgotICAgICAgICAgICAgICAgIGV2ZW50QnJlYWtwb2ludCA9IFdJLmRvbURlYnVnZ2VyTWFuYWdl
ci5hbGxJbnRlcnZhbHNCcmVha3BvaW50OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoZXZlbnRCcmVha3BvaW50LCAiRXhw
ZWN0ZWQgVGltZXIgYnJlYWtwb2ludCBmb3IgZXZlbnQgbmFtZS4iLCBwYXVzZURhdGEuZXZlbnRO
YW1lKTsKLSAgICAgICAgICAgIGlmICghZXZlbnRCcmVha3BvaW50KQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGlu
ZSA9IHRoaXMuY3JlYXRlQ29udGVudFRyZWVPdXRsaW5lKHtzdXBwcmVzc0ZpbHRlcmluZzogdHJ1
ZX0pOwotCi0gICAgICAgICAgICB2YXIgZXZlbnRCcmVha3BvaW50VHJlZUVsZW1lbnQgPSBuZXcg
V0kuRXZlbnRCcmVha3BvaW50VHJlZUVsZW1lbnQoZXZlbnRCcmVha3BvaW50LCB7Ci0gICAgICAg
ICAgICAgICAgY2xhc3NOYW1lOiBXSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5QYXVzZWRCcmVha3Bv
aW50SWNvblN0eWxlQ2xhc3NOYW1lLAotICAgICAgICAgICAgICAgIHRpdGxlOiBXSS5VSVN0cmlu
ZygiJXMgRmlyZWQiKS5mb3JtYXQocGF1c2VEYXRhLmV2ZW50TmFtZSksCi0gICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVhc29uVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQo
ZXZlbnRCcmVha3BvaW50VHJlZUVsZW1lbnQpOwotCi0gICAgICAgICAgICB2YXIgZXZlbnRCcmVh
a3BvaW50Um93ID0gbmV3IFdJLkRldGFpbHNTZWN0aW9uUm93OwotICAgICAgICAgICAgZXZlbnRC
cmVha3BvaW50Um93LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0
bGluZS5lbGVtZW50KTsKLQotICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dz
ID0gW2V2ZW50QnJlYWtwb2ludFJvd107Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICBjYXNlIFdJLkRlYnVnZ2VyTWFuYWdlci5QYXVzZVJlYXNvbi5UaW1lb3V0OgotICAgICAg
ICAgICAgdGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZSA9IHRoaXMuY3JlYXRlQ29udGVudFRy
ZWVPdXRsaW5lKHtzdXBwcmVzc0ZpbHRlcmluZzogdHJ1ZX0pOwotCi0gICAgICAgICAgICB2YXIg
ZXZlbnRCcmVha3BvaW50VHJlZUVsZW1lbnQgPSBuZXcgV0kuRXZlbnRCcmVha3BvaW50VHJlZUVs
ZW1lbnQoV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbFRpbWVvdXRzQnJlYWtwb2ludCwgewotICAg
ICAgICAgICAgICAgIGNsYXNzTmFtZTogV0kuRGVidWdnZXJTaWRlYmFyUGFuZWwuUGF1c2VkQnJl
YWtwb2ludEljb25TdHlsZUNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICB0aXRsZTogV0kuVUlT
dHJpbmcoInNldFRpbWVvdXQgRmlyZWQiKSwKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
dGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5hcHBlbmRDaGlsZChldmVudEJyZWFrcG9pbnRU
cmVlRWxlbWVudCk7Ci0KLSAgICAgICAgICAgIHZhciBldmVudEJyZWFrcG9pbnRSb3cgPSBuZXcg
V0kuRGV0YWlsc1NlY3Rpb25Sb3c7Ci0gICAgICAgICAgICBldmVudEJyZWFrcG9pbnRSb3cuZWxl
bWVudC5hcHBlbmRDaGlsZCh0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRsaW5lLmVsZW1lbnQpOwot
Ci0gICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvbkdyb3VwLnJvd3MgPSBbZXZlbnRCcmVha3Bv
aW50Um93XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGNhc2UgV0kuRGVi
dWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkZldGNoOgotICAgICAgICBjYXNlIFdJLkRlYnVnZ2Vy
TWFuYWdlci5QYXVzZVJlYXNvbi5YSFI6Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2VydChXSS5k
b21EZWJ1Z2dlck1hbmFnZXIuc3VwcG9ydGVkKTsKLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHBhdXNlRGF0YSwgIkV4cGVjdGVkIFVSTCBicmVha3BvaW50IGRhdGEsIGJ1dCBmb3VuZCBub25l
LiIpOwotICAgICAgICAgICAgaWYgKHBhdXNlRGF0YSkgewotICAgICAgICAgICAgICAgIGlmIChw
YXVzZURhdGEuYnJlYWtwb2ludFVSTCkgewotICAgICAgICAgICAgICAgICAgICBsZXQgdXJsQnJl
YWtwb2ludCA9IFdJLmRvbURlYnVnZ2VyTWFuYWdlci51cmxCcmVha3BvaW50Rm9yVVJMKHBhdXNl
RGF0YS5icmVha3BvaW50VVJMKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQo
dXJsQnJlYWtwb2ludCwgIkV4cGVjdGVkIFVSTCBicmVha3BvaW50IGZvciBVUkwuIiwgcGF1c2VE
YXRhLmJyZWFrcG9pbnRVUkwpOwotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVh
c29uVHJlZU91dGxpbmUgPSB0aGlzLmNyZWF0ZUNvbnRlbnRUcmVlT3V0bGluZSh7c3VwcHJlc3NG
aWx0ZXJpbmc6IHRydWV9KTsKLQotICAgICAgICAgICAgICAgICAgICBsZXQgdXJsQnJlYWtwb2lu
dFRyZWVFbGVtZW50ID0gbmV3IFdJLlVSTEJyZWFrcG9pbnRUcmVlRWxlbWVudCh1cmxCcmVha3Bv
aW50LCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFdJLkRlYnVnZ2VyU2lk
ZWJhclBhbmVsLlBhdXNlZEJyZWFrcG9pbnRJY29uU3R5bGVDbGFzc05hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICB0aXRsZTogV0kuRE9NRGVidWdnZXJNYW5hZ2VyLnN1cHBvcnRzVVJMQnJl
YWtwb2ludHMoKSA/IFdJLlVJU3RyaW5nKCJUcmlnZ2VyZWQgVVJMIEJyZWFrcG9pbnQiKSA6IFdJ
LlVJU3RyaW5nKCJUcmlnZ2VyZWQgWEhSIEJyZWFrcG9pbnQiKSwKLSAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGxldCB1cmxCcmVha3BvaW50Um93ID0gbmV3IFdJ
LkRldGFpbHNTZWN0aW9uUm93OwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNv
blRyZWVPdXRsaW5lLmFwcGVuZENoaWxkKHVybEJyZWFrcG9pbnRUcmVlRWxlbWVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHVybEJyZWFrcG9pbnRSb3cuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz
Ll9wYXVzZVJlYXNvblRyZWVPdXRsaW5lLmVsZW1lbnQpOwotCi0gICAgICAgICAgICAgICAgICAg
IHRoaXMuX3BhdXNlUmVhc29uVGV4dFJvdy50ZXh0ID0gcGF1c2VEYXRhLnVybDsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dzID0gW3VybEJyZWFrcG9pbnRS
b3csIHRoaXMuX3BhdXNlUmVhc29uVGV4dFJvd107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQocGF1c2VEYXRhLmJyZWFrcG9pbnRV
UkwgPT09ICIiLCAiU2hvdWxkIGJlIHRoZSBBbGwgUmVxdWVzdHMgYnJlYWtwb2ludCB3aGljaCBo
YXMgYW4gZW1wdHkgVVJMIik7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVhc29u
VGV4dFJvdy50ZXh0ID0gV0kuVUlTdHJpbmcoIlJlcXVlc3Rpbmc6ICVzIikuZm9ybWF0KHBhdXNl
RGF0YS51cmwpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvbkdyb3VwLnJv
d3MgPSBbdGhpcy5fcGF1c2VSZWFzb25UZXh0Um93XTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25UZXh0Um93LmVsZW1lbnQudGl0bGUgPSBwYXVz
ZURhdGEudXJsOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1
c2VSZWFzb24uT3RoZXI6Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQYXVzZWQgZm9yIHVu
a25vd24gcmVhc29uLiBXZSBzaG91bGQgYWx3YXlzIGhhdmUgYSByZWFzb24uIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBfdXBkYXRlUGF1c2VSZWFzb25Hb3RvQXJyb3coKQotICAgIHsKLSAgICAgICAgdGhpcy5f
cGF1c2VSZWFzb25MaW5rQ29udGFpbmVyRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAg
ICAgIHZhciBhY3RpdmVDYWxsRnJhbWUgPSBXSS5kZWJ1Z2dlck1hbmFnZXIuYWN0aXZlQ2FsbEZy
YW1lOwotICAgICAgICBpZiAoIWFjdGl2ZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICB2YXIgc291cmNlQ29kZUxvY2F0aW9uID0gYWN0aXZlQ2FsbEZyYW1lLnNvdXJj
ZUNvZGVMb2NhdGlvbjsKLSAgICAgICAgaWYgKCFzb3VyY2VDb2RlTG9jYXRpb24pCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsKLSAgICAgICAgICAgIHVz
ZUdvVG9BcnJvd0J1dHRvbjogdHJ1ZSwKLSAgICAgICAgICAgIGlnbm9yZU5ldHdvcmtUYWI6IHRy
dWUsCi0gICAgICAgICAgICBpZ25vcmVTZWFyY2hUYWI6IHRydWUsCi0gICAgICAgIH07Ci0gICAg
ICAgIGxldCBsaW5rRWxlbWVudCA9IFdJLmNyZWF0ZVNvdXJjZUNvZGVMb2NhdGlvbkxpbmsoc291
cmNlQ29kZUxvY2F0aW9uLCBvcHRpb25zKTsKLSAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25MaW5r
Q29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChsaW5rRWxlbWVudCk7Ci0gICAgfQotCi0gICAg
X2FkZElzc3VlKGlzc3VlTWVzc2FnZSwgc291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIGxldCBp
c3N1ZVRyZWVFbGVtZW50ID0gdGhpcy5fc2NyaXB0c0NvbnRlbnRUcmVlT3V0bGluZS5maW5kVHJl
ZUVsZW1lbnQoaXNzdWVNZXNzYWdlKTsKLSAgICAgICAgaWYgKGlzc3VlVHJlZUVsZW1lbnQpCi0g
ICAgICAgICAgICByZXR1cm4gaXNzdWVUcmVlRWxlbWVudDsKLQotICAgICAgICBjb25zb2xlLmFz
c2VydChzb3VyY2VDb2RlIHx8IChpc3N1ZU1lc3NhZ2Uuc291cmNlQ29kZUxvY2F0aW9uICYmIGlz
c3VlTWVzc2FnZS5zb3VyY2VDb2RlTG9jYXRpb24uc291cmNlQ29kZSkpOwotICAgICAgICBsZXQg
cGFyZW50VHJlZUVsZW1lbnQgPSB0aGlzLl9hZGRUcmVlRWxlbWVudEZvclNvdXJjZUNvZGVUb1Ry
ZWVPdXRsaW5lKHNvdXJjZUNvZGUgfHwgaXNzdWVNZXNzYWdlLnNvdXJjZUNvZGVMb2NhdGlvbi5z
b3VyY2VDb2RlLCB0aGlzLl9zY3JpcHRzQ29udGVudFRyZWVPdXRsaW5lKTsKLSAgICAgICAgaWYg
KCFwYXJlbnRUcmVlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAg
IGlzc3VlVHJlZUVsZW1lbnQgPSBuZXcgV0kuSXNzdWVUcmVlRWxlbWVudChpc3N1ZU1lc3NhZ2Up
OwotCi0gICAgICAgIHBhcmVudFRyZWVFbGVtZW50Lmluc2VydENoaWxkKGlzc3VlVHJlZUVsZW1l
bnQsIGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbihpc3N1ZVRy
ZWVFbGVtZW50LCBwYXJlbnRUcmVlRWxlbWVudC5jaGlsZHJlbiwgdGhpcy5fY29tcGFyZUJyZWFr
cG9pbnRUcmVlRWxlbWVudHMpKTsKLSAgICAgICAgaWYgKHBhcmVudFRyZWVFbGVtZW50LmNoaWxk
cmVuLmxlbmd0aCA9PT0gMSkKLSAgICAgICAgICAgIHBhcmVudFRyZWVFbGVtZW50LmV4cGFuZCgp
OwotCi0gICAgICAgIHJldHVybiBpc3N1ZVRyZWVFbGVtZW50OwotICAgIH0KLQotICAgIF9oYW5k
bGVET01CcmVha3BvaW50RE9NTm9kZUNoYW5nZWQoZXZlbnQpCi0gICAgewotICAgICAgICBsZXQg
YnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQuZG9tTm9k
ZUlkZW50aWZpZXIpCi0gICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50KGJyZWFr
cG9pbnQpOwotICAgIH0KLQotICAgIF9oYW5kbGVJc3N1ZUFkZGVkKGV2ZW50KQotICAgIHsKLSAg
ICAgICAgdmFyIGlzc3VlID0gZXZlbnQuZGF0YS5pc3N1ZTsKLQotICAgICAgICAvLyBXZSBvbmx5
IHdhbnQgdG8gc2hvdyBpc3N1ZXMgb3JpZ2luYXRpbmcgZnJvbSBKYXZhU2NyaXB0IHNvdXJjZSBj
b2RlLgotICAgICAgICBpZiAoIWlzc3VlLnNvdXJjZUNvZGVMb2NhdGlvbiB8fCAhaXNzdWUuc291
cmNlQ29kZUxvY2F0aW9uLnNvdXJjZUNvZGUgfHwgKGlzc3VlLnNvdXJjZSAhPT0gImphdmFzY3Jp
cHQiICYmIGlzc3VlLnNvdXJjZSAhPT0gImNvbnNvbGUtYXBpIikpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgdGhpcy5fYWRkSXNzdWUoaXNzdWUpOwotICAgIH0KLQotICAgIF9oYW5k
bGVJc3N1ZXNDbGVhcmVkKGV2ZW50KQotICAgIHsKLSAgICAgICAgbGV0IGN1cnJlbnRUcmVlRWxl
bWVudCA9IHRoaXMuX3NjcmlwdHNDb250ZW50VHJlZU91dGxpbmUuY2hpbGRyZW5bMF07Ci0gICAg
ICAgIGxldCBpc3N1ZVRyZWVFbGVtZW50cyA9IFtdOwotCi0gICAgICAgIHdoaWxlIChjdXJyZW50
VHJlZUVsZW1lbnQgJiYgIWN1cnJlbnRUcmVlRWxlbWVudC5yb290KSB7Ci0gICAgICAgICAgICBp
ZiAoY3VycmVudFRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuSXNzdWVUcmVlRWxlbWVudCkKLSAg
ICAgICAgICAgICAgICBpc3N1ZVRyZWVFbGVtZW50cy5wdXNoKGN1cnJlbnRUcmVlRWxlbWVudCk7
Ci0gICAgICAgICAgICBjdXJyZW50VHJlZUVsZW1lbnQgPSBjdXJyZW50VHJlZUVsZW1lbnQudHJh
dmVyc2VOZXh0VHJlZUVsZW1lbnQoZmFsc2UsIG51bGwsIHRydWUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaXNzdWVUcmVlRWxlbWVudHMuZm9yRWFjaCgodHJlZUVsZW1lbnQpID0+IHRyZWVFbGVt
ZW50LnBhcmVudC5yZW1vdmVDaGlsZCh0cmVlRWxlbWVudCkpOwotICAgIH0KLQotICAgIF9oYW5k
bGVCcmVha3BvaW50RWxlbWVudEFkZGVkT3JSZW1vdmVkKGV2ZW50KQotICAgIHsKLSAgICAgICAg
bGV0IHRyZWVFbGVtZW50ID0gZXZlbnQuZGF0YS5lbGVtZW50OwotCi0gICAgICAgIGxldCBzZXR0
aW5nID0gbnVsbDsKLSAgICAgICAgc3dpdGNoICh0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVj
dCkgewotICAgICAgICBjYXNlIFdJLmRlYnVnZ2VyTWFuYWdlci5hc3NlcnRpb25GYWlsdXJlc0Jy
ZWFrcG9pbnQ6Ci0gICAgICAgICAgICBzZXR0aW5nID0gV0kuc2V0dGluZ3Muc2hvd0Fzc2VydGlv
bkZhaWx1cmVzQnJlYWtwb2ludDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
V0kuZGVidWdnZXJNYW5hZ2VyLmFsbE1pY3JvdGFza3NCcmVha3BvaW50OgotICAgICAgICAgICAg
c2V0dGluZyA9IFdJLnNldHRpbmdzLnNob3dBbGxNaWNyb3Rhc2tzQnJlYWtwb2ludDsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbEFu
aW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQ6Ci0gICAgICAgICAgICBzZXR0aW5nID0gV0kuc2V0dGlu
Z3Muc2hvd0FsbEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQ7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxJbnRlcnZhbHNCcmVha3Bv
aW50OgotICAgICAgICAgICAgc2V0dGluZyA9IFdJLnNldHRpbmdzLnNob3dBbGxJbnRlcnZhbHNC
cmVha3BvaW50OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXSS5kb21EZWJ1
Z2dlck1hbmFnZXIuYWxsTGlzdGVuZXJzQnJlYWtwb2ludDoKLSAgICAgICAgICAgIHNldHRpbmcg
PSBXSS5zZXR0aW5ncy5zaG93QWxsTGlzdGVuZXJzQnJlYWtwb2ludDsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbFJlcXVlc3RzQnJl
YWtwb2ludDoKLSAgICAgICAgICAgIHNldHRpbmcgPSBXSS5zZXR0aW5ncy5zaG93QWxsUmVxdWVz
dHNCcmVha3BvaW50OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXSS5kb21E
ZWJ1Z2dlck1hbmFnZXIuYWxsVGltZW91dHNCcmVha3BvaW50OgotICAgICAgICAgICAgc2V0dGlu
ZyA9IFdJLnNldHRpbmdzLnNob3dBbGxUaW1lb3V0c0JyZWFrcG9pbnQ7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2V0dGluZykKLSAgICAgICAgICAgIHNldHRp
bmcudmFsdWUgPSAhIXRyZWVFbGVtZW50LnBhcmVudDsKLQotICAgICAgICBpZiAoZXZlbnQudHlw
ZSA9PT0gV0kuVHJlZU91dGxpbmUuRXZlbnQuRWxlbWVudFJlbW92ZWQpIHsKLSAgICAgICAgICAg
IGxldCBzZWxlY3RlZFRyZWVFbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJlZU91
dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudDsKLSAgICAgICAgICAgIGlmIChzZWxlY3RlZFRyZWVF
bGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkVHJlZUVsZW1lbnQucmVwcmVz
ZW50ZWRPYmplY3QgPT09IFdJLmRlYnVnZ2VyTWFuYWdlci5hc3NlcnRpb25GYWlsdXJlc0JyZWFr
cG9pbnQgfHwgIVdJLmRlYnVnZ2VyTWFuYWdlci5pc0JyZWFrcG9pbnRSZW1vdmFibGUoc2VsZWN0
ZWRUcmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc2tpcFVucmV2ZWFsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBk
b250UG9wdWxhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBsZXQgdHJlZUVsZW1lbnRU
b1NlbGVjdCA9IHNlbGVjdGVkVHJlZUVsZW1lbnQudHJhdmVyc2VOZXh0VHJlZUVsZW1lbnQoc2tp
cFVucmV2ZWFsZWQsIGRvbnRQb3B1bGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmVl
RWxlbWVudFRvU2VsZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvbWl0Rm9j
dXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRCeVVzZXIg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUVsZW1lbnRUb1NlbGVjdC5zZWxl
Y3Qob21pdEZvY3VzLCBzZWxlY3RlZEJ5VXNlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBf
cG9wdWxhdGVDcmVhdGVCcmVha3BvaW50Q29udGV4dE1lbnUoY29udGV4dE1lbnUpCi0gICAgewot
ICAgICAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgMTApOiBEZWJ1Z2dlckFnZW50LnNldFBhdXNl
T25Bc3NlcnRpb25zIGRpZCBub3QgZXhpc3QgeWV0LgotICAgICAgICBpZiAoSW5zcGVjdG9yQmFj
a2VuZC5kb21haW5zLkRlYnVnZ2VyLnNldFBhdXNlT25Bc3NlcnRpb25zKSB7Ci0gICAgICAgICAg
ICBsZXQgYXNzZXJ0aW9uRmFpbHVyZXNCcmVha3BvaW50U2hvd24gPSBXSS5zZXR0aW5ncy5zaG93
QXNzZXJ0aW9uRmFpbHVyZXNCcmVha3BvaW50LnZhbHVlOwotCi0gICAgICAgICAgICBjb250ZXh0
TWVudS5hcHBlbmRDaGVja2JveEl0ZW0oV0kucmVwZWF0ZWRVSVN0cmluZy5hc3NlcnRpb25GYWls
dXJlcygpLCAoKSA9PiB7Ci0gICAgICAgICAgICAgICAgaWYgKGFzc2VydGlvbkZhaWx1cmVzQnJl
YWtwb2ludFNob3duKQotICAgICAgICAgICAgICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIucmVt
b3ZlQnJlYWtwb2ludChXSS5kZWJ1Z2dlck1hbmFnZXIuYXNzZXJ0aW9uRmFpbHVyZXNCcmVha3Bv
aW50KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgV0kuZGVi
dWdnZXJNYW5hZ2VyLmFzc2VydGlvbkZhaWx1cmVzQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRkQnJlYWtwb2ludChX
SS5kZWJ1Z2dlck1hbmFnZXIuYXNzZXJ0aW9uRmFpbHVyZXNCcmVha3BvaW50KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9LCBhc3NlcnRpb25GYWlsdXJlc0JyZWFrcG9pbnRTaG93
bik7Ci0gICAgICAgIH0KLQotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRTZXBhcmF0b3IoKTsK
LQotICAgICAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgMTMpOiBEZWJ1Z2dlckFnZW50LnNldFBh
dXNlT25NaWNyb3Rhc2tzIGRpZCBub3QgZXhpc3QgeWV0LgotICAgICAgICBpZiAoSW5zcGVjdG9y
QmFja2VuZC5kb21haW5zLkRlYnVnZ2VyLnNldFBhdXNlT25NaWNyb3Rhc2tzKSB7Ci0gICAgICAg
ICAgICBsZXQgYWxsTWljcm90YXNrc0JyZWFrcG9pbnRTaG93biA9IFdJLnNldHRpbmdzLnNob3dB
bGxNaWNyb3Rhc2tzQnJlYWtwb2ludC52YWx1ZTsKLQotICAgICAgICAgICAgY29udGV4dE1lbnUu
YXBwZW5kQ2hlY2tib3hJdGVtKFdJLlVJU3RyaW5nKCJBbGwgTWljcm90YXNrcyIpLCAoKSA9PiB7
Ci0gICAgICAgICAgICAgICAgaWYgKGFsbE1pY3JvdGFza3NCcmVha3BvaW50U2hvd24pCi0gICAg
ICAgICAgICAgICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5yZW1vdmVCcmVha3BvaW50KFdJLmRl
YnVnZ2VyTWFuYWdlci5hbGxNaWNyb3Rhc2tzQnJlYWtwb2ludCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hbGxNaWNyb3Rh
c2tzQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBXSS5k
ZWJ1Z2dlck1hbmFnZXIuYWRkQnJlYWtwb2ludChXSS5kZWJ1Z2dlck1hbmFnZXIuYWxsTWljcm90
YXNrc0JyZWFrcG9pbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIGFsbE1p
Y3JvdGFza3NCcmVha3BvaW50U2hvd24pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFdJLkRP
TURlYnVnZ2VyTWFuYWdlci5zdXBwb3J0c0V2ZW50QnJlYWtwb2ludHMoKSB8fCBXSS5ET01EZWJ1
Z2dlck1hbmFnZXIuc3VwcG9ydHNFdmVudExpc3RlbmVyQnJlYWtwb2ludHMoKSkgewotICAgICAg
ICAgICAgZnVuY3Rpb24gYWRkVG9nZ2xlRm9yU3BlY2lhbEV2ZW50QnJlYWtwb2ludChicmVha3Bv
aW50LCBsYWJlbCwgY2hlY2tlZCkgewotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZENoZWNrYm94SXRlbShsYWJlbCwgKCkgPT4gewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hl
Y2tlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5yZW1v
dmVFdmVudEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50QnJl
YWtwb2ludChicmVha3BvaW50KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0sIGNoZWNrZWQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhZGRUb2dnbGVG
b3JTcGVjaWFsRXZlbnRCcmVha3BvaW50KFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxBbmltYXRp
b25GcmFtZXNCcmVha3BvaW50LCBXSS5VSVN0cmluZygiQWxsIEFuaW1hdGlvbiBGcmFtZXMiKSwg
V0kuc2V0dGluZ3Muc2hvd0FsbEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQudmFsdWUpOwotICAg
ICAgICAgICAgYWRkVG9nZ2xlRm9yU3BlY2lhbEV2ZW50QnJlYWtwb2ludChXSS5kb21EZWJ1Z2dl
ck1hbmFnZXIuYWxsVGltZW91dHNCcmVha3BvaW50LCBXSS5VSVN0cmluZygiQWxsIFRpbWVvdXRz
IiksIFdJLnNldHRpbmdzLnNob3dBbGxUaW1lb3V0c0JyZWFrcG9pbnQudmFsdWUpOwotICAgICAg
ICAgICAgYWRkVG9nZ2xlRm9yU3BlY2lhbEV2ZW50QnJlYWtwb2ludChXSS5kb21EZWJ1Z2dlck1h
bmFnZXIuYWxsSW50ZXJ2YWxzQnJlYWtwb2ludCwgV0kuVUlTdHJpbmcoIkFsbCBJbnRlcnZhbHMi
KSwgV0kuc2V0dGluZ3Muc2hvd0FsbEludGVydmFsc0JyZWFrcG9pbnQudmFsdWUpOwotCi0gICAg
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRTZXBhcmF0b3IoKTsKLQotICAgICAgICAgICAgaWYg
KFdJLkRPTURlYnVnZ2VyTWFuYWdlci5zdXBwb3J0c0FsbExpc3RlbmVyc0JyZWFrcG9pbnQoKSkK
LSAgICAgICAgICAgICAgICBhZGRUb2dnbGVGb3JTcGVjaWFsRXZlbnRCcmVha3BvaW50KFdJLmRv
bURlYnVnZ2VyTWFuYWdlci5hbGxMaXN0ZW5lcnNCcmVha3BvaW50LCBXSS5VSVN0cmluZygiQWxs
IEV2ZW50cyIpLCBXSS5zZXR0aW5ncy5zaG93QWxsTGlzdGVuZXJzQnJlYWtwb2ludC52YWx1ZSk7
Ci0KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV0kuVUlTdHJpbmcoIkV2ZW50
IEJyZWFrcG9pbnRcdTIwMjYiKSwgKCkgPT4gewotICAgICAgICAgICAgICAgIGxldCBwb3BvdmVy
ID0gbmV3IFdJLkV2ZW50QnJlYWtwb2ludFBvcG92ZXIodGhpcyk7Ci0gICAgICAgICAgICAgICAg
cG9wb3Zlci5zaG93KHRoaXMuX2NyZWF0ZUJyZWFrcG9pbnRCdXR0b24uZWxlbWVudCwgW1dJLlJl
Y3RFZGdlLk1BWF9ZLCBXSS5SZWN0RWRnZS5NSU5fWSwgV0kuUmVjdEVkZ2UuTUFYX1hdKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFdJLkRPTURlYnVnZ2VyTWFu
YWdlci5zdXBwb3J0c1VSTEJyZWFrcG9pbnRzKCkgfHwgV0kuRE9NRGVidWdnZXJNYW5hZ2VyLnN1
cHBvcnRzWEhSQnJlYWtwb2ludHMoKSkgewotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5k
U2VwYXJhdG9yKCk7Ci0KLSAgICAgICAgICAgIGxldCBhbGxSZXF1ZXN0c0JyZWFrcG9pbnRTaG93
biA9IFdJLnNldHRpbmdzLnNob3dBbGxSZXF1ZXN0c0JyZWFrcG9pbnQudmFsdWU7Ci0gICAgICAg
ICAgICBjb250ZXh0TWVudS5hcHBlbmRDaGVja2JveEl0ZW0oV0kucmVwZWF0ZWRVSVN0cmluZy5h
bGxSZXF1ZXN0cygpLCAoKSA9PiB7Ci0gICAgICAgICAgICAgICAgaWYgKGFsbFJlcXVlc3RzQnJl
YWtwb2ludFNob3duKQotICAgICAgICAgICAgICAgICAgICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIu
cmVtb3ZlVVJMQnJlYWtwb2ludChXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsUmVxdWVzdHNCcmVh
a3BvaW50KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgV0ku
ZG9tRGVidWdnZXJNYW5hZ2VyLmFsbFJlcXVlc3RzQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWRkVVJMQnJlYWtw
b2ludChXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsUmVxdWVzdHNCcmVha3BvaW50KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LCBhbGxSZXF1ZXN0c0JyZWFrcG9pbnRTaG93bik7
Ci0KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV0kuRE9NRGVidWdnZXJNYW5h
Z2VyLnN1cHBvcnRzVVJMQnJlYWtwb2ludHMoKSA/IFdJLlVJU3RyaW5nKCJVUkwgQnJlYWtwb2lu
dFx1MjAyNiIpIDogV0kuVUlTdHJpbmcoIlhIUiBCcmVha3BvaW50XHUyMDI2IiksICgpID0+IHsK
LSAgICAgICAgICAgICAgICBsZXQgcG9wb3ZlciA9IG5ldyBXSS5VUkxCcmVha3BvaW50UG9wb3Zl
cih0aGlzKTsKLSAgICAgICAgICAgICAgICBwb3BvdmVyLnNob3codGhpcy5fY3JlYXRlQnJlYWtw
b2ludEJ1dHRvbi5lbGVtZW50LCBbV0kuUmVjdEVkZ2UuTUFYX1ksIFdJLlJlY3RFZGdlLk1JTl9Z
LCBXSS5SZWN0RWRnZS5NQVhfWF0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9
Ci19OwotCi1XSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5EZWJ1Z2dlclBhdXNlZFN0eWxlQ2xhc3NO
YW1lID0gInBhdXNlZCI7Ci1XSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5FeGNlcHRpb25JY29uU3R5
bGVDbGFzc05hbWUgPSAiYnJlYWtwb2ludC1leGNlcHRpb24taWNvbiI7Ci1XSS5EZWJ1Z2dlclNp
ZGViYXJQYW5lbC5Bc3NlcnRpb25JY29uU3R5bGVDbGFzc05hbWUgPSAiYnJlYWtwb2ludC1hc3Nl
cnRpb24taWNvbiI7Ci1XSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5QYXVzZWRCcmVha3BvaW50SWNv
blN0eWxlQ2xhc3NOYW1lID0gImJyZWFrcG9pbnQtcGF1c2VkLWljb24iOwotCi1XSS5EZWJ1Z2dl
clNpZGViYXJQYW5lbC5TZWxlY3RlZEFsbEV4Y2VwdGlvbnNDb29raWVLZXkgPSAiZGVidWdnZXIt
c2lkZWJhci1wYW5lbC1hbGwtZXhjZXB0aW9ucy1icmVha3BvaW50IjsKLVdJLkRlYnVnZ2VyU2lk
ZWJhclBhbmVsLlNlbGVjdGVkVW5jYXVnaHRFeGNlcHRpb25zQ29va2llS2V5ID0gImRlYnVnZ2Vy
LXNpZGViYXItcGFuZWwtdW5jYXVnaHQtZXhjZXB0aW9ucy1icmVha3BvaW50IjsKLVdJLkRlYnVn
Z2VyU2lkZWJhclBhbmVsLlNlbGVjdGVkQXNzZXJ0aW9uRmFpbHVyZXNDb29raWVLZXkgPSAiZGVi
dWdnZXItc2lkZWJhci1wYW5lbC1hc3NlcnRpb24tZmFpbHVyZXMtYnJlYWtwb2ludCI7Ci1XSS5E
ZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3RlZEFsbE1pY3JvdGFza3NDb29raWVLZXkgPSAiZGVi
dWdnZXItc2lkZWJhci1wYW5lbC1hbGwtbWljcm90YXNrcy1icmVha3BvaW50IjsKLVdJLkRlYnVn
Z2VyU2lkZWJhclBhbmVsLlNlbGVjdGVkQWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2ludCA9ICJk
ZWJ1Z2dlci1zaWRlYmFyLXBhbmVsLWFsbC1hbmltYXRpb24tZnJhbWVzLWJyZWFrcG9pbnQiOwot
V0kuRGVidWdnZXJTaWRlYmFyUGFuZWwuU2VsZWN0ZWRBbGxJbnRlcnZhbHNCcmVha3BvaW50ID0g
ImRlYnVnZ2VyLXNpZGViYXItcGFuZWwtYWxsLWludGVydmFscy1icmVha3BvaW50IjsKLVdJLkRl
YnVnZ2VyU2lkZWJhclBhbmVsLlNlbGVjdGVkQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9ICJkZWJ1
Z2dlci1zaWRlYmFyLXBhbmVsLWFsbC1saXN0ZW5lcnMtYnJlYWtwb2ludCI7Ci1XSS5EZWJ1Z2dl
clNpZGViYXJQYW5lbC5TZWxlY3RlZEFsbFRpbWVvdXRzQnJlYWtwb2ludCA9ICJkZWJ1Z2dlci1z
aWRlYmFyLXBhbmVsLWFsbC10aW1lb3V0cy1icmVha3BvaW50IjsKLVdJLkRlYnVnZ2VyU2lkZWJh
clBhbmVsLlNlbGVjdGVkQWxsUmVxdWVzdHNDb29raWVLZXkgPSAiZGVidWdnZXItc2lkZWJhci1w
YW5lbC1hbGwtcmVxdWVzdHMtYnJlYWtwb2ludCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9EZWJ1Z2dlclRhYkNvbnRlbnRWaWV3LmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRGVidWdnZXJUYWJDb250
ZW50Vmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkNTViNDI3OWYuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0RlYnVnZ2VyVGFiQ29udGVudFZpZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLVdJLkRlYnVnZ2VyVGFiQ29udGVudFZpZXcgPSBjbGFzcyBEZWJ1Z2dl
clRhYkNvbnRlbnRWaWV3IGV4dGVuZHMgV0kuQ29udGVudEJyb3dzZXJUYWJDb250ZW50Vmlldwot
ewotICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXIpCi0gICAgewotICAgICAgICBsZXQgdGFiQmFy
SXRlbSA9IFdJLkdlbmVyYWxUYWJCYXJJdGVtLmZyb21UYWJJbmZvKFdJLkRlYnVnZ2VyVGFiQ29u
dGVudFZpZXcudGFiSW5mbygpKTsKLSAgICAgICAgbGV0IGRldGFpbHNTaWRlYmFyUGFuZWxDb25z
dHJ1Y3RvcnMgPSBbV0kuU2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwsIFdJLlJlc291cmNl
RGV0YWlsc1NpZGViYXJQYW5lbCwgV0kuUHJvYmVEZXRhaWxzU2lkZWJhclBhbmVsXTsKLQotICAg
ICAgICBzdXBlcihpZGVudGlmaWVyIHx8ICJkZWJ1Z2dlciIsICJkZWJ1Z2dlciIsIHRhYkJhckl0
ZW0sIFdJLkRlYnVnZ2VyU2lkZWJhclBhbmVsLCBkZXRhaWxzU2lkZWJhclBhbmVsQ29uc3RydWN0
b3JzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdGFiSW5mbygpCi0gICAgewotICAgICAgICByZXR1
cm4gewotICAgICAgICAgICAgaW1hZ2U6ICJJbWFnZXMvRGVidWdnZXIuc3ZnIiwKLSAgICAgICAg
ICAgIHRpdGxlOiBXSS5VSVN0cmluZygiRGVidWdnZXIiKSwKLSAgICAgICAgfTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgaXNUYWJBbGxvd2VkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhV0kuc2V0
dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1RhYi52YWx1ZTsKLSAgICB9Ci0KLSAgICAv
LyBQdWJsaWMKLQotICAgIGdldCB0eXBlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXSS5EZWJ1
Z2dlclRhYkNvbnRlbnRWaWV3LlR5cGU7Ci0gICAgfQotCi0gICAgZ2V0IHN1cHBvcnRzU3BsaXRD
b250ZW50QnJvd3NlcigpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBjYW5TaG93UmVwcmVzZW50ZWRPYmplY3QocmVwcmVzZW50ZWRPYmplY3QpCi0gICAgewotICAg
ICAgICBpZiAocmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5TY3JpcHQpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoIShyZXByZXNlbnRlZE9iamVjdCBpbnN0
YW5jZW9mIFdJLlJlc291cmNlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICByZXR1cm4gcmVwcmVzZW50ZWRPYmplY3QudHlwZSA9PT0gV0kuUmVzb3VyY2UuVHlwZS5Eb2N1
bWVudCB8fCByZXByZXNlbnRlZE9iamVjdC50eXBlID09PSBXSS5SZXNvdXJjZS5UeXBlLlNjcmlw
dDsKLSAgICB9Ci0KLSAgICBzaG93RGV0YWlsc1NpZGViYXJQYW5lbHMoKQotICAgIHsKLSAgICAg
ICAgc3VwZXIuc2hvd0RldGFpbHNTaWRlYmFyUGFuZWxzKCk7Ci0KLSAgICAgICAgaWYgKCF0aGlz
Ll9zaG93U2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgbGV0IHNjb3BlQ2hhaW5EZXRhaWxzU2lkZWJhclBhbmVsID0gdGhpcy5kZXRh
aWxzU2lkZWJhclBhbmVscy5maW5kKChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgV0kuU2NvcGVD
aGFpbkRldGFpbHNTaWRlYmFyUGFuZWwpOwotICAgICAgICBpZiAoIXNjb3BlQ2hhaW5EZXRhaWxz
U2lkZWJhclBhbmVsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFdJLmRldGFpbHNT
aWRlYmFyLnNlbGVjdGVkU2lkZWJhclBhbmVsID0gc2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFu
ZWw7Ci0gICAgICAgIFdJLmRldGFpbHNTaWRlYmFyLmNvbGxhcHNlZCA9IGZhbHNlOwotCi0gICAg
ICAgIHRoaXMuX3Nob3dTY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbCA9IGZhbHNlOwotICAg
IH0KLQotICAgIHNob3dTY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbCgpCi0gICAgewotICAg
ICAgICB0aGlzLl9zaG93U2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwgPSB0cnVlOwotICAg
IH0KLQotICAgIHJldmVhbEFuZFNlbGVjdEJyZWFrcG9pbnQoYnJlYWtwb2ludCkKLSAgICB7Ci0g
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXSS5CcmVha3BvaW50
KTsKLQotICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLm5hdmlnYXRpb25TaWRlYmFyUGFu
ZWwudHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdChicmVha3BvaW50KTsKLSAgICAgICAg
aWYgKHRyZWVFbGVtZW50KQotICAgICAgICAgICAgdHJlZUVsZW1lbnQucmV2ZWFsQW5kU2VsZWN0
KCk7Ci0gICAgfQotfTsKLQotV0kuRGVidWdnZXJUYWJDb250ZW50Vmlldy5UeXBlID0gImRlYnVn
Z2VyIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0RlZmF1bHREYXNoYm9hcmRWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvRGVmYXVsdERhc2hib2FyZFZpZXcuanMKaW5kZXggN2ZhZjBkNWE2YzYu
LmJlM2MxMWJkNjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9EZWZhdWx0RGFzaGJvYXJkVmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9EZWZhdWx0RGFzaGJvYXJkVmlldy5qcwpAQCAtMTMz
LDEwICsxMzMsNyBAQCBXSS5EZWZhdWx0RGFzaGJvYXJkVmlldyA9IGNsYXNzIERlZmF1bHREYXNo
Ym9hcmRWaWV3IGV4dGVuZHMgV0kuRGFzaGJvYXJkVmlldwogCiAgICAgX3Jlc291cmNlc0l0ZW1X
YXNDbGlja2VkKCkKICAgICB7Ci0gICAgICAgIGlmIChXSS5zZXR0aW5ncy5leHBlcmltZW50YWxF
bmFibGVTb3VyY2VzVGFiLnZhbHVlKQotICAgICAgICAgICAgV0kuc2hvd1NvdXJjZXNUYWIoKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgV0kuc2hvd1Jlc291cmNlc1RhYigpOworICAgICAg
ICBXSS5zaG93U291cmNlc1RhYigpOwogICAgIH0KIAogICAgIF9uZXR3b3JrSXRlbVdhc0NsaWNr
ZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvUmVjb3JkaW5nQWN0aW9uVHJlZUVsZW1lbnQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9SZWNvcmRpbmdBY3Rpb25UcmVlRWxlbWVudC5qcwppbmRleCBj
Njc3ZWE0ZDY4Ni4uYmYxNGIxZjE4ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1JlY29yZGluZ0FjdGlvblRyZWVFbGVtZW50LmpzCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1JlY29yZGluZ0FjdGlv
blRyZWVFbGVtZW50LmpzCkBAIC00MzAsMTIgKzQzMCw3IEBAIFdJLlJlY29yZGluZ0FjdGlvblRy
ZWVFbGVtZW50ID0gY2xhc3MgUmVjb3JkaW5nQWN0aW9uVHJlZUVsZW1lbnQgZXh0ZW5kcyBXSS5H
ZW5lCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc291cmNlQ29kZUxvY2F0aW9uKSB7Ci0gICAg
ICAgICAgICBsZXQgbGFiZWwgPSBudWxsOwotICAgICAgICAgICAgaWYgKFdJLnNldHRpbmdzLmV4
cGVyaW1lbnRhbEVuYWJsZVNvdXJjZXNUYWIudmFsdWUpCi0gICAgICAgICAgICAgICAgbGFiZWwg
PSBXSS5VSVN0cmluZygiUmV2ZWFsIGluIFNvdXJjZXMgVGFiIik7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbGFiZWwgPSBXSS5VSVN0cmluZygiUmV2ZWFsIGluIFJlc291cmNl
cyBUYWIiKTsKLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0obGFiZWwsICgpID0+
IHsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV0kuVUlTdHJpbmcoIlJldmVh
bCBpbiBTb3VyY2VzIFRhYiIpLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAgV0kuc2hvd1NvdXJj
ZUNvZGVMb2NhdGlvbihzb3VyY2VDb2RlTG9jYXRpb24sIHsKICAgICAgICAgICAgICAgICAgICAg
aWdub3JlTmV0d29ya1RhYjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgaWdub3JlU2VhcmNo
VGFiOiB0cnVlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvUmVzb3VyY2VTaWRlYmFyUGFuZWwuY3NzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvUmVzb3VyY2VTaWRlYmFyUGFuZWwuY3NzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmYWU2MzNlYjFiNS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUmVzb3VyY2VTaWRlYmFyUGFuZWwu
Y3NzCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS5zaWRlYmFy
ID4gLnBhbmVsLm5hdmlnYXRpb24ucmVzb3VyY2UgPiAuY29udGVudCB7Ci0gICAgdG9wOiB2YXIo
LS1uYXZpZ2F0aW9uLWJhci1oZWlnaHQpOwotfQotCi0uc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0
aW9uLnJlc291cmNlID4gLm5hdmlnYXRpb24tYmFyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7
Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9SZXNvdXJjZVNpZGVi
YXJQYW5lbC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jl
c291cmNlU2lkZWJhclBhbmVsLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTc0
YzY4YTcyMi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1
MjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVdJLlJlc291cmNlU2lkZWJhclBhbmVsID0g
Y2xhc3MgUmVzb3VyY2VTaWRlYmFyUGFuZWwgZXh0ZW5kcyBXSS5OYXZpZ2F0aW9uU2lkZWJhclBh
bmVsCi17Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAgc3VwZXIoInJlc291cmNl
IiwgV0kuVUlTdHJpbmcoIlJlc291cmNlcyIpLCB0cnVlKTsKLQotICAgICAgICB0aGlzLl9uYXZp
Z2F0aW9uQmFyID0gbmV3IFdJLk5hdmlnYXRpb25CYXI7Ci0gICAgICAgIHRoaXMuYWRkU3Vidmll
dyh0aGlzLl9uYXZpZ2F0aW9uQmFyKTsKLQotICAgICAgICB0aGlzLl90YXJnZXRUcmVlRWxlbWVu
dE1hcCA9IG5ldyBNYXA7Ci0KLSAgICAgICAgdmFyIHNjb3BlSXRlbVByZWZpeCA9ICJyZXNvdXJj
ZS1zaWRlYmFyLSI7Ci0gICAgICAgIHZhciBzY29wZUJhckl0ZW1zID0gW107Ci0KLSAgICAgICAg
c2NvcGVCYXJJdGVtcy5wdXNoKG5ldyBXSS5TY29wZUJhckl0ZW0oc2NvcGVJdGVtUHJlZml4ICsg
InR5cGUtYWxsIiwgV0kuVUlTdHJpbmcoIkFsbCBSZXNvdXJjZXMiKSwge2V4Y2x1c2l2ZTogdHJ1
ZX0pKTsKLQotICAgICAgICBmb3IgKHZhciBrZXkgaW4gV0kuUmVzb3VyY2UuVHlwZSkgewotICAg
ICAgICAgICAgdmFyIHZhbHVlID0gV0kuUmVzb3VyY2UuVHlwZVtrZXldOwotICAgICAgICAgICAg
dmFyIHNjb3BlQmFySXRlbSA9IG5ldyBXSS5TY29wZUJhckl0ZW0oc2NvcGVJdGVtUHJlZml4ICsg
dmFsdWUsIFdJLlJlc291cmNlLmRpc3BsYXlOYW1lRm9yVHlwZSh2YWx1ZSwgdHJ1ZSkpOwotICAg
ICAgICAgICAgc2NvcGVCYXJJdGVtW1dJLlJlc291cmNlU2lkZWJhclBhbmVsLlJlc291cmNlVHlw
ZVN5bWJvbF0gPSB2YWx1ZTsKLSAgICAgICAgICAgIHNjb3BlQmFySXRlbXMucHVzaChzY29wZUJh
ckl0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fc2NvcGVCYXIgPSBuZXcgV0kuU2Nv
cGVCYXIoInJlc291cmNlLXNpZGViYXItc2NvcGUtYmFyIiwgc2NvcGVCYXJJdGVtcywgc2NvcGVC
YXJJdGVtc1swXSwgdHJ1ZSk7Ci0gICAgICAgIHRoaXMuX3Njb3BlQmFyLmFkZEV2ZW50TGlzdGVu
ZXIoV0kuU2NvcGVCYXIuRXZlbnQuU2VsZWN0aW9uQ2hhbmdlZCwgdGhpcy5fc2NvcGVCYXJTZWxl
Y3Rpb25EaWRDaGFuZ2UsIHRoaXMpOwotCi0gICAgICAgIHRoaXMuX25hdmlnYXRpb25CYXIuYWRk
TmF2aWdhdGlvbkl0ZW0odGhpcy5fc2NvcGVCYXIpOwotCi0gICAgICAgIFdJLkZyYW1lLmFkZEV2
ZW50TGlzdGVuZXIoV0kuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzLl9t
YWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOwotCi0gICAgICAgIFdJLm5ldHdvcmtNYW5hZ2Vy
LmFkZEV2ZW50TGlzdGVuZXIoV0kuTmV0d29ya01hbmFnZXIuRXZlbnQuTWFpbkZyYW1lRGlkQ2hh
bmdlLCB0aGlzLl9tYWluRnJhbWVEaWRDaGFuZ2UsIHRoaXMpOwotCi0gICAgICAgIFdJLmRlYnVn
Z2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5TY3Jp
cHRBZGRlZCwgdGhpcy5fc2NyaXB0V2FzQWRkZWQsIHRoaXMpOwotICAgICAgICBXSS5kZWJ1Z2dl
ck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuU2NyaXB0
UmVtb3ZlZCwgdGhpcy5fc2NyaXB0V2FzUmVtb3ZlZCwgdGhpcyk7Ci0gICAgICAgIFdJLmRlYnVn
Z2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5TY3Jp
cHRzQ2xlYXJlZCwgdGhpcy5fc2NyaXB0c0NsZWFyZWQsIHRoaXMpOwotCi0gICAgICAgIFdJLmNz
c01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5DU1NNYW5hZ2VyLkV2ZW50LlN0eWxlU2hlZXRB
ZGRlZCwgdGhpcy5fc3R5bGVTaGVldEFkZGVkLCB0aGlzKTsKLQotICAgICAgICBXSS50YXJnZXRN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuVGFyZ2V0TWFuYWdlci5FdmVudC5UYXJnZXRSZW1v
dmVkLCB0aGlzLl90YXJnZXRSZW1vdmVkLCB0aGlzKTsKLQotICAgICAgICBXSS5ub3RpZmljYXRp
b25zLmFkZEV2ZW50TGlzdGVuZXIoV0kuTm90aWZpY2F0aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRl
ZCwgdGhpcy5fZXh0cmFEb21haW5zQWN0aXZhdGVkLCB0aGlzKTsKLQotICAgICAgICB0aGlzLmNv
bnRlbnRUcmVlT3V0bGluZS5hZGRFdmVudExpc3RlbmVyKFdJLlRyZWVPdXRsaW5lLkV2ZW50LlNl
bGVjdGlvbkRpZENoYW5nZSwgdGhpcy5fdHJlZVNlbGVjdGlvbkRpZENoYW5nZSwgdGhpcyk7Ci0g
ICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmluY2x1ZGVTb3VyY2VNYXBSZXNvdXJjZUNo
aWxkcmVuID0gdHJ1ZTsKLQotICAgICAgICBpZiAoUmVzb3VyY2VTaWRlYmFyUGFuZWwuc2hvdWxk
UGxhY2VSZXNvdXJjZXNBdFRvcExldmVsKCkpIHsKLSAgICAgICAgICAgIHRoaXMuY29udGVudFRy
ZWVPdXRsaW5lLmRpc2Nsb3N1cmVCdXR0b25zID0gZmFsc2U7Ci0gICAgICAgICAgICBXSS5Tb3Vy
Y2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV0kuU291cmNlQ29kZS5FdmVudC5Tb3VyY2VNYXBBZGRl
ZCwgKCkgPT4geyB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5kaXNjbG9zdXJlQnV0dG9ucyA9IHRy
dWU7IH0sIHRoaXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gU3RhdGljCi0KLSAgICBz
dGF0aWMgc2hvdWxkUGxhY2VSZXNvdXJjZXNBdFRvcExldmVsKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAoV0kuc2hhcmVkQXBwLmRlYnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5K
YXZhU2NyaXB0ICYmICFXSS5zaGFyZWRBcHAuaGFzRXh0cmFEb21haW5zKQotICAgICAgICAgICAg
fHwgV0kuc2hhcmVkQXBwLmRlYnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dhYmxlVHlwZS5TZXJ2
aWNlV29ya2VyOwotICAgIH0KLQotICAgIC8vIFB1YmxpYwotCi0gICAgZ2V0IG1pbmltdW1XaWR0
aCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvbkJhci5taW5pbXVtV2lk
dGg7Ci0gICAgfQotCi0gICAgY2xvc2VkKCkKLSAgICB7Ci0gICAgICAgIHN1cGVyLmNsb3NlZCgp
OwotCi0gICAgICAgIFdJLkZyYW1lLnJlbW92ZUV2ZW50TGlzdGVuZXIobnVsbCwgbnVsbCwgdGhp
cyk7Ci0gICAgICAgIFdJLm5ldHdvcmtNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIobnVsbCwg
bnVsbCwgdGhpcyk7Ci0gICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5yZW1vdmVFdmVudExpc3Rl
bmVyKG51bGwsIG51bGwsIHRoaXMpOwotICAgICAgICBXSS5ub3RpZmljYXRpb25zLnJlbW92ZUV2
ZW50TGlzdGVuZXIobnVsbCwgbnVsbCwgdGhpcyk7Ci0gICAgfQotCi0gICAgc2hvd0RlZmF1bHRD
b250ZW50VmlldygpCi0gICAgewotICAgICAgICBpZiAoV0kubmV0d29ya01hbmFnZXIubWFpbkZy
YW1lKSB7Ci0gICAgICAgICAgICB0aGlzLmNvbnRlbnRCcm93c2VyLnNob3dDb250ZW50Vmlld0Zv
clJlcHJlc2VudGVkT2JqZWN0KFdJLm5ldHdvcmtNYW5hZ2VyLm1haW5GcmFtZSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZmlyc3RUcmVlRWxlbWVudCA9
IHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmNoaWxkcmVuWzBdOwotICAgICAgICBpZiAoZmlyc3RU
cmVlRWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuc2hvd0RlZmF1bHRDb250ZW50Vmlld0ZvclRy
ZWVFbGVtZW50KGZpcnN0VHJlZUVsZW1lbnQpOwotICAgIH0KLQotICAgIHRyZWVFbGVtZW50Rm9y
UmVwcmVzZW50ZWRPYmplY3QocmVwcmVzZW50ZWRPYmplY3QpCi0gICAgewotICAgICAgICAvLyBB
IGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBpcyBuZWVkZWQgZm9yIHRoaXMgc2luY2UgdGhlIGZyYW1l
cyBhcmUgcG9wdWxhdGVkIGxhemlseS4KLQotICAgICAgICBpZiAoIXRoaXMuX21haW5GcmFtZVRy
ZWVFbGVtZW50ICYmIChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlJlc291cmNlIHx8
IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuRnJhbWUgfHwgcmVwcmVzZW50ZWRPYmpl
Y3QgaW5zdGFuY2VvZiBXSS5Db2xsZWN0aW9uKSkgewotICAgICAgICAgICAgLy8gQWxsIHJlc291
cmNlcyBhcmUgdW5kZXIgdGhlIG1haW4gZnJhbWUsIHNvIHdlIG5lZWQgdG8gcmV0dXJuIGVhcmx5
IGlmIHdlIGRvbid0IGhhdmUgdGhlIG1haW4gZnJhbWUgeWV0LgotICAgICAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgRnJhbWUgaXMgdXNlZCBhcyB0aGUg
cmVwcmVzZW50ZWRPYmplY3QgaW5zdGVhZCBvZiB0aGUgbWFpbiByZXNvdXJjZSBpbiBvdXIgdHJl
ZS4KLSAgICAgICAgaWYgKHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuUmVzb3VyY2Ug
JiYgcmVwcmVzZW50ZWRPYmplY3QucGFyZW50RnJhbWUgJiYgcmVwcmVzZW50ZWRPYmplY3QucGFy
ZW50RnJhbWUubWFpblJlc291cmNlID09PSByZXByZXNlbnRlZE9iamVjdCkKLSAgICAgICAgICAg
IHJlcHJlc2VudGVkT2JqZWN0ID0gcmVwcmVzZW50ZWRPYmplY3QucGFyZW50RnJhbWU7Ci0KLSAg
ICAgICAgZnVuY3Rpb24gaXNBbmNlc3RvcihhbmNlc3RvciwgcmVzb3VyY2VPckZyYW1lKQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBTb3VyY2VNYXBSZXNvdXJjZXMgYXJlIGRlc2NlbmRhbnRz
IG9mIGFub3RoZXIgU291cmNlQ29kZSBvYmplY3QuCi0gICAgICAgICAgICBpZiAocmVzb3VyY2VP
ckZyYW1lIGluc3RhbmNlb2YgV0kuU291cmNlTWFwUmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocmVzb3VyY2VPckZyYW1lLnNvdXJjZU1hcC5vcmlnaW5hbFNvdXJjZUNvZGUgPT09IGFu
Y2VzdG9yKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAg
ICAgIC8vIE5vdCBhIGRpcmVjdCBhbmNlc3Rvciwgc28gY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0
aGUgcGFyZW50IFNvdXJjZUNvZGUgb2JqZWN0LgotICAgICAgICAgICAgICAgIHJlc291cmNlT3JG
cmFtZSA9IHJlc291cmNlT3JGcmFtZS5zb3VyY2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gcmVzb3VyY2VPckZy
YW1lLnBhcmVudEZyYW1lOwotICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRGcmFtZSkgewotICAg
ICAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUgPT09IGFuY2VzdG9yKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgPSBjdXJy
ZW50RnJhbWUucGFyZW50RnJhbWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGdldFBhcmVudChyZXNvdXJj
ZU9yRnJhbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFNvdXJjZU1hcFJlc291cmNlcyBh
cmUgZGVzY2VuZGFudHMgb2YgYW5vdGhlciBTb3VyY2VDb2RlIG9iamVjdC4KLSAgICAgICAgICAg
IGlmIChyZXNvdXJjZU9yRnJhbWUgaW5zdGFuY2VvZiBXSS5Tb3VyY2VNYXBSZXNvdXJjZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2VPckZyYW1lLnNvdXJjZU1hcC5vcmlnaW5hbFNv
dXJjZUNvZGU7Ci0gICAgICAgICAgICByZXR1cm4gcmVzb3VyY2VPckZyYW1lLnBhcmVudEZyYW1l
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy5jb250ZW50VHJl
ZU91dGxpbmUuZmluZFRyZWVFbGVtZW50KHJlcHJlc2VudGVkT2JqZWN0LCBpc0FuY2VzdG9yLCBn
ZXRQYXJlbnQpOwotICAgICAgICBpZiAodHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4g
dHJlZUVsZW1lbnQ7Ci0KLSAgICAgICAgLy8gT25seSBzcGVjaWFsIGNhc2UgU2NyaXB0IG9iamVj
dHMuCi0gICAgICAgIGlmICghKHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0
KSkgewotICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRGlkbid0IGZpbmQgYSBUcmVlRWxlbWVu
dCBmb3IgcmVwcmVzZW50ZWRPYmplY3QiLCByZXByZXNlbnRlZE9iamVjdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBTY3JpcHQgaGFz
IGEgVVJMIHdlIHNob3VsZCBoYXZlIGZvdW5kIGl0IGVhcmxpZXIuCi0gICAgICAgIGlmIChyZXBy
ZXNlbnRlZE9iamVjdC51cmwpIHsKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkRpZG4ndCBm
aW5kIGEgU2NyaXB0VHJlZUVsZW1lbnQgZm9yIGEgU2NyaXB0IHdpdGggYSBVUkwuIik7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNpbmNlIHRoZSBT
Y3JpcHQgZG9lcyBub3QgaGF2ZSBhIFVSTCB3ZSBjb25zaWRlciBpdCBhbiAnYW5vbnltb3VzJyBz
Y3JpcHQuIFRoZXNlIHNjcmlwdHMgaGFwcGVuIGZyb20gY2FsbHMgdG8KLSAgICAgICAgLy8gd2lu
ZG93LmV2YWwoKSBvciBicm93c2VyIGZlYXR1cmVzIGxpa2UgQXV0byBGaWxsIGFuZCBSZWFkZXIu
IFRoZXkgYXJlIG5vdCBub3JtYWxseSBhZGRlZCB0byB0aGUgc2lkZWJhciwgYnV0IHNpbmNlCi0g
ICAgICAgIC8vIHdlIGhhdmUgYSBTY3JpcHRDb250ZW50VmlldyBhc2tpbmcgZm9yIHRoZSB0cmVl
IGVsZW1lbnQgd2Ugd2lsbCBtYWtlIGEgU2NyaXB0VHJlZUVsZW1lbnQgb24gZGVtYW5kIGFuZCBh
ZGQgaXQuCi0KLSAgICAgICAgaWYgKCF0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVs
ZW1lbnQpIHsKLSAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gbmV3IFdJLlNjcmlwdENvbGxl
Y3Rpb247Ci0gICAgICAgICAgICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1l
bnQgPSBuZXcgV0kuRm9sZGVyVHJlZUVsZW1lbnQoV0kuVUlTdHJpbmcoIkFub255bW91cyBTY3Jp
cHRzIiksIGNvbGxlY3Rpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9hbm9u
eW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucGFyZW50KSB7Ci0gICAgICAgICAgICB2YXIg
aW5kZXggPSBpbnNlcnRpb25JbmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVuY3Rpb24odGhp
cy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LCB0aGlzLmNvbnRlbnRUcmVlT3V0
bGluZS5jaGlsZHJlbiwgdGhpcy5fY29tcGFyZVRyZWVFbGVtZW50cyk7Ci0gICAgICAgICAgICB0
aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5pbnNlcnRDaGlsZCh0aGlzLl9hbm9ueW1vdXNTY3JpcHRz
Rm9sZGVyVHJlZUVsZW1lbnQsIGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2Fu
b255bW91c1NjcmlwdHNGb2xkZXJUcmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdC5hZGQocmVw
cmVzZW50ZWRPYmplY3QpOwotCi0gICAgICAgIHZhciBzY3JpcHRUcmVlRWxlbWVudCA9IG5ldyBX
SS5TY3JpcHRUcmVlRWxlbWVudChyZXByZXNlbnRlZE9iamVjdCk7Ci0gICAgICAgIHRoaXMuX2Fu
b255bW91c1NjcmlwdHNGb2xkZXJUcmVlRWxlbWVudC5hcHBlbmRDaGlsZChzY3JpcHRUcmVlRWxl
bWVudCk7Ci0KLSAgICAgICAgcmV0dXJuIHNjcmlwdFRyZWVFbGVtZW50OwotICAgIH0KLQotICAg
IC8vIFByb3RlY3RlZAotCi0gICAgaW5pdGlhbExheW91dCgpCi0gICAgewotICAgICAgICBzdXBl
ci5pbml0aWFsTGF5b3V0KCk7Ci0KLSAgICAgICAgaWYgKFdJLm5ldHdvcmtNYW5hZ2VyLm1haW5G
cmFtZSkKLSAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU1haW5GcmFtZVRyZWVFbGVtZW50KFdJLm5l
dHdvcmtNYW5hZ2VyLm1haW5GcmFtZSk7Ci0KLSAgICAgICAgZm9yIChsZXQgc2NyaXB0IG9mIFdJ
LmRlYnVnZ2VyTWFuYWdlci5rbm93bk5vblJlc291cmNlU2NyaXB0cykgewotICAgICAgICAgICAg
dGhpcy5fYWRkU2NyaXB0KHNjcmlwdCk7Ci0KLSAgICAgICAgICAgIGlmIChzY3JpcHQuc291cmNl
TWFwcy5sZW5ndGggJiYgUmVzb3VyY2VTaWRlYmFyUGFuZWwuc2hvdWxkUGxhY2VSZXNvdXJjZXNB
dFRvcExldmVsKCkpCi0gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuZGlz
Y2xvc3VyZUJ1dHRvbnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVzZXRGaWx0
ZXIoKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2NvcGVCYXIucmVzZXRUb0RlZmF1bHQoKTsKLQot
ICAgICAgICBzdXBlci5yZXNldEZpbHRlcigpOwotICAgIH0KLQotICAgIGhhc0N1c3RvbUZpbHRl
cnMoKQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc2NvcGVCYXIuc2VsZWN0
ZWRJdGVtcy5sZW5ndGggPT09IDEpOwotICAgICAgICB2YXIgc2VsZWN0ZWRTY29wZUJhckl0ZW0g
PSB0aGlzLl9zY29wZUJhci5zZWxlY3RlZEl0ZW1zWzBdOwotICAgICAgICByZXR1cm4gc2VsZWN0
ZWRTY29wZUJhckl0ZW0gJiYgIXNlbGVjdGVkU2NvcGVCYXJJdGVtLmV4Y2x1c2l2ZTsKLSAgICB9
Ci0KLSAgICBtYXRjaFRyZWVFbGVtZW50QWdhaW5zdEN1c3RvbUZpbHRlcnModHJlZUVsZW1lbnQs
IGZsYWdzKQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc2NvcGVCYXIuc2Vs
ZWN0ZWRJdGVtcy5sZW5ndGggPT09IDEpOwotICAgICAgICB2YXIgc2VsZWN0ZWRTY29wZUJhckl0
ZW0gPSB0aGlzLl9zY29wZUJhci5zZWxlY3RlZEl0ZW1zWzBdOwotCi0gICAgICAgIC8vIFNob3cg
ZXZlcnl0aGluZyBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24gb3IgIkFsbCBSZXNvdXJjZXMiIGlz
IHNlbGVjdGVkICh0aGUgZXhjbHVzaXZlIGl0ZW0pLgotICAgICAgICBpZiAoIXNlbGVjdGVkU2Nv
cGVCYXJJdGVtIHx8IHNlbGVjdGVkU2NvcGVCYXJJdGVtLmV4Y2x1c2l2ZSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgICAgIC8vIEZvbGRlcnMgYXJlIGhpZGRlbiBvbiB0aGUgZmly
c3QgcGFzcywgYnV0IHZpc2libGUgY2hpbGRlbiB1bmRlciB0aGUgZm9sZGVyIHdpbGwgZm9yY2Ug
dGhlIGZvbGRlciB2aXNpYmxlIGFnYWluLgotICAgICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFu
Y2VvZiBXSS5Gb2xkZXJUcmVlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBmdW5jdGlvbiBtYXRjaCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0cmVl
RWxlbWVudCBpbnN0YW5jZW9mIFdJLkZyYW1lVHJlZUVsZW1lbnQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHNlbGVjdGVkU2NvcGVCYXJJdGVtW1dJLlJlc291cmNlU2lkZWJhclBhbmVsLlJlc291
cmNlVHlwZVN5bWJvbF0gPT09IFdJLlJlc291cmNlLlR5cGUuRG9jdW1lbnQ7Ci0KLSAgICAgICAg
ICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLlNjcmlwdFRyZWVFbGVtZW50KQotICAg
ICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFNjb3BlQmFySXRlbVtXSS5SZXNvdXJjZVNpZGVi
YXJQYW5lbC5SZXNvdXJjZVR5cGVTeW1ib2xdID09PSBXSS5SZXNvdXJjZS5UeXBlLlNjcmlwdDsK
LQotICAgICAgICAgICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuQ1NTU3R5bGVTaGVl
dFRyZWVFbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFNjb3BlQmFySXRl
bVtXSS5SZXNvdXJjZVNpZGViYXJQYW5lbC5SZXNvdXJjZVR5cGVTeW1ib2xdID09PSBXSS5SZXNv
dXJjZS5UeXBlLlN0eWxlU2hlZXQ7Ci0KLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRyZWVF
bGVtZW50IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VUcmVlRWxlbWVudCwgIlVua25vd24gdHJlZUVs
ZW1lbnQiLCB0cmVlRWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoISh0cmVlRWxlbWVudCBpbnN0
YW5jZW9mIFdJLlJlc291cmNlVHJlZUVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50LnJlc291cmNlLnR5cGUgPT09
IHNlbGVjdGVkU2NvcGVCYXJJdGVtW1dJLlJlc291cmNlU2lkZWJhclBhbmVsLlJlc291cmNlVHlw
ZVN5bWJvbF07Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgbWF0Y2hlZCA9IG1hdGNoKCk7Ci0g
ICAgICAgIGlmIChtYXRjaGVkKQotICAgICAgICAgICAgZmxhZ3MuZXhwYW5kVHJlZUVsZW1lbnQg
PSB0cnVlOwotICAgICAgICByZXR1cm4gbWF0Y2hlZDsKLSAgICB9Ci0KLSAgICAvLyBQcml2YXRl
Ci0KLSAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYg
KCFldmVudC50YXJnZXQuaXNNYWluRnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICB0aGlzLl9tYWluRnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UoZXZlbnQudGFyZ2V0KTsK
LSAgICB9Ci0KLSAgICBfbWFpbkZyYW1lRGlkQ2hhbmdlKGV2ZW50KQotICAgIHsKLSAgICAgICAg
dGhpcy5fbWFpbkZyYW1lTWFpblJlc291cmNlRGlkQ2hhbmdlKFdJLm5ldHdvcmtNYW5hZ2VyLm1h
aW5GcmFtZSk7Ci0gICAgfQotCi0gICAgX21haW5GcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZSht
YWluRnJhbWUpCi0gICAgewotICAgICAgICB0aGlzLmNvbnRlbnRCcm93c2VyLmNvbnRlbnRWaWV3
Q29udGFpbmVyLmNsb3NlQWxsQ29udGVudFZpZXdzKCk7Ci0KLSAgICAgICAgdGhpcy5fY3JlYXRl
TWFpbkZyYW1lVHJlZUVsZW1lbnQobWFpbkZyYW1lKTsKLSAgICAgICAgaWYgKCFtYWluRnJhbWUp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZnVuY3Rpb24gZGVsYXllZFdvcmsoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuY29udGVudFRyZWVPdXRsaW5lLnNlbGVj
dGVkVHJlZUVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgY3VycmVudENvbnRlbnRWaWV3
ID0gdGhpcy5jb250ZW50QnJvd3Nlci5jdXJyZW50Q29udGVudFZpZXc7Ci0gICAgICAgICAgICAg
ICAgdmFyIHRyZWVFbGVtZW50ID0gY3VycmVudENvbnRlbnRWaWV3ID8gdGhpcy50cmVlRWxlbWVu
dEZvclJlcHJlc2VudGVkT2JqZWN0KGN1cnJlbnRDb250ZW50Vmlldy5yZXByZXNlbnRlZE9iamVj
dCkgOiBudWxsOwotICAgICAgICAgICAgICAgIGlmICghdHJlZUVsZW1lbnQpCi0gICAgICAgICAg
ICAgICAgICAgIHRyZWVFbGVtZW50ID0gdGhpcy5fbWFpbkZyYW1lVHJlZUVsZW1lbnQ7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5zaG93RGVmYXVsdENvbnRlbnRWaWV3Rm9yVHJlZUVsZW1lbnQodHJl
ZUVsZW1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29va2ll
IHJlc3RvcmF0aW9uIHdpbGwgYXR0ZW1wdCB0byByZS1zZWxlY3QgdGhlIHJlc291cmNlIHdlIHdl
cmUgc2hvd2luZy4KLSAgICAgICAgLy8gR2l2ZSBpdCB0aW1lIHRvIGRvIHRoYXQgYmVmb3JlIHNl
bGVjdGluZyB0aGUgbWFpbiBmcmFtZSByZXNvdXJjZS4KLSAgICAgICAgc2V0VGltZW91dChkZWxh
eWVkV29yay5iaW5kKHRoaXMpKTsKLSAgICB9Ci0KLSAgICBfY3JlYXRlTWFpbkZyYW1lVHJlZUVs
ZW1lbnQobWFpbkZyYW1lKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX21haW5GcmFtZVRyZWVF
bGVtZW50KSB7Ci0gICAgICAgICAgICB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5yZW1vdmVDaGls
ZCh0aGlzLl9tYWluRnJhbWVUcmVlRWxlbWVudCk7Ci0gICAgICAgICAgICB0aGlzLl9tYWluRnJh
bWVUcmVlRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1haW5GcmFt
ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9tYWluRnJhbWVUcmVlRWxl
bWVudCA9IG5ldyBXSS5GcmFtZVRyZWVFbGVtZW50KG1haW5GcmFtZSk7Ci0gICAgICAgIHRoaXMu
Y29udGVudFRyZWVPdXRsaW5lLmluc2VydENoaWxkKHRoaXMuX21haW5GcmFtZVRyZWVFbGVtZW50
LCAwKTsKLSAgICB9Ci0KLSAgICBfc2NyaXB0V2FzQWRkZWQoZXZlbnQpCi0gICAgewotICAgICAg
ICB0aGlzLl9hZGRTY3JpcHQoZXZlbnQuZGF0YS5zY3JpcHQpOwotICAgIH0KLQotICAgIF9hZGRT
Y3JpcHQoc2NyaXB0KQotICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgYWRkIHNjcmlwdHMgd2l0
aG91dCBVUkxzIGhlcmUuIFRob3NlIHNjcmlwdHMgY2FuIHF1aWNrbHkgY2x1dHRlciB0aGUgaW50
ZXJmYWNlIGFuZAotICAgICAgICAvLyBhcmUgdXN1YWxseSBtb3JlIHRyYW5zaWVudC4gVGhleSB3
aWxsIGdldCBhZGRlZCBpZi93aGVuIHRoZXkgbmVlZCB0byBiZSBzaG93biBpbiBhIGNvbnRlbnQg
dmlldy4KLSAgICAgICAgaWYgKCFzY3JpcHQudXJsICYmICFzY3JpcHQuc291cmNlVVJMKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFRhcmdldCBtYWluIHJlc291cmNlLgotICAg
ICAgICBpZiAoV0kuc2hhcmVkQXBwLmRlYnVnZ2FibGVUeXBlICE9PSBXSS5EZWJ1Z2dhYmxlVHlw
ZS5KYXZhU2NyaXB0KSB7Ci0gICAgICAgICAgICBpZiAoc2NyaXB0LnRhcmdldCAhPT0gV0kucGFn
ZVRhcmdldCkgewotICAgICAgICAgICAgICAgIGlmIChzY3JpcHQuaXNNYWluUmVzb3VyY2UoKSkK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkVGFyZ2V0V2l0aE1haW5SZXNvdXJjZShzY3Jp
cHQudGFyZ2V0KTsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5kaXNj
bG9zdXJlQnV0dG9ucyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHNjcmlwdCBVUkwgbWF0Y2hlcyBh
IHJlc291cmNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgcGFydCBvZiB0aGF0IHJlc291cmNlIGFuZCBk
b2VzIG5vdCBuZWVkIGFkZGVkLgotICAgICAgICBpZiAoc2NyaXB0LnJlc291cmNlIHx8IHNjcmlw
dC5keW5hbWljYWxseUFkZGVkU2NyaXB0RWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBsZXQgaW5zZXJ0SW50b1RvcExldmVsID0gZmFsc2U7Ci0gICAgICAgIGxldCBwYXJl
bnRGb2xkZXJUcmVlRWxlbWVudCA9IG51bGw7Ci0KLSAgICAgICAgaWYgKHNjcmlwdC5pbmplY3Rl
ZCkgewotICAgICAgICAgICAgaWYgKCF0aGlzLl9leHRlbnNpb25TY3JpcHRzRm9sZGVyVHJlZUVs
ZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IG5ldyBXSS5TY3JpcHRD
b2xsZWN0aW9uOwotICAgICAgICAgICAgICAgIHRoaXMuX2V4dGVuc2lvblNjcmlwdHNGb2xkZXJU
cmVlRWxlbWVudCA9IG5ldyBXSS5Gb2xkZXJUcmVlRWxlbWVudChXSS5VSVN0cmluZygiRXh0ZW5z
aW9uIFNjcmlwdHMiKSwgY29sbGVjdGlvbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHBhcmVudEZvbGRlclRyZWVFbGVtZW50ID0gdGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRlclRy
ZWVFbGVtZW50OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlc291cmNlU2lk
ZWJhclBhbmVsLnNob3VsZFBsYWNlUmVzb3VyY2VzQXRUb3BMZXZlbCgpKQotICAgICAgICAgICAg
ICAgIGluc2VydEludG9Ub3BMZXZlbCA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIXRoaXMuX2V4dHJhU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gbmV3IFdJLlNjcmlwdENvbGxlY3Rp
b247Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V4dHJhU2NyaXB0c0ZvbGRlclRyZWVFbGVt
ZW50ID0gbmV3IFdJLkZvbGRlclRyZWVFbGVtZW50KFdJLlVJU3RyaW5nKCJFeHRyYSBTY3JpcHRz
IiksIGNvbGxlY3Rpb24pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHBh
cmVudEZvbGRlclRyZWVFbGVtZW50ID0gdGhpcy5fZXh0cmFTY3JpcHRzRm9sZGVyVHJlZUVsZW1l
bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGFyZW50Rm9sZGVy
VHJlZUVsZW1lbnQpCi0gICAgICAgICAgICBwYXJlbnRGb2xkZXJUcmVlRWxlbWVudC5yZXByZXNl
bnRlZE9iamVjdC5hZGQoc2NyaXB0KTsKLQotICAgICAgICB2YXIgc2NyaXB0VHJlZUVsZW1lbnQg
PSBuZXcgV0kuU2NyaXB0VHJlZUVsZW1lbnQoc2NyaXB0KTsKLQotICAgICAgICBpZiAoaW5zZXJ0
SW50b1RvcExldmVsKSB7Ci0gICAgICAgICAgICB2YXIgaW5kZXggPSBpbnNlcnRpb25JbmRleEZv
ck9iamVjdEluTGlzdFNvcnRlZEJ5RnVuY3Rpb24oc2NyaXB0VHJlZUVsZW1lbnQsIHRoaXMuY29u
dGVudFRyZWVPdXRsaW5lLmNoaWxkcmVuLCB0aGlzLl9jb21wYXJlVHJlZUVsZW1lbnRzKTsKLSAg
ICAgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmluc2VydENoaWxkKHNjcmlwdFRyZWVF
bGVtZW50LCBpbmRleCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXBhcmVu
dEZvbGRlclRyZWVFbGVtZW50LnBhcmVudCkgewotICAgICAgICAgICAgICAgIHZhciBpbmRleCA9
IGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbihwYXJlbnRGb2xk
ZXJUcmVlRWxlbWVudCwgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuY2hpbGRyZW4sIHRoaXMuX2Nv
bXBhcmVUcmVlRWxlbWVudHMpOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRs
aW5lLmluc2VydENoaWxkKHBhcmVudEZvbGRlclRyZWVFbGVtZW50LCBpbmRleCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHBhcmVudEZvbGRlclRyZWVFbGVtZW50LmFwcGVuZENoaWxk
KHNjcmlwdFRyZWVFbGVtZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIF9zY3JpcHRXYXNS
ZW1vdmVkKGV2ZW50KQotICAgIHsKLSAgICAgICAgbGV0IHNjcmlwdCA9IGV2ZW50LmRhdGEuc2Ny
aXB0OwotICAgICAgICBsZXQgc2NyaXB0VHJlZUVsZW1lbnQgPSB0aGlzLmNvbnRlbnRUcmVlT3V0
bGluZS5nZXRDYWNoZWRUcmVlRWxlbWVudChzY3JpcHQpOwotICAgICAgICBpZiAoIXNjcmlwdFRy
ZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGxldCBwYXJlbnRUcmVl
RWxlbWVudCA9IHNjcmlwdFRyZWVFbGVtZW50LnBhcmVudDsKLSAgICAgICAgcGFyZW50VHJlZUVs
ZW1lbnQucmVtb3ZlQ2hpbGQoc2NyaXB0VHJlZUVsZW1lbnQpOwotCi0gICAgICAgIGlmIChwYXJl
bnRUcmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLkZvbGRlclRyZWVFbGVtZW50KSB7Ci0gICAgICAg
ICAgICBwYXJlbnRUcmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdC5yZW1vdmUoc2NyaXB0KTsK
LQotICAgICAgICAgICAgaWYgKCFwYXJlbnRUcmVlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpCi0g
ICAgICAgICAgICAgICAgcGFyZW50VHJlZUVsZW1lbnQucGFyZW50LnJlbW92ZUNoaWxkKHBhcmVu
dFRyZWVFbGVtZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIF9zY3JpcHRzQ2xlYXJlZChl
dmVudCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IHN1cHByZXNzT25EZXNlbGVjdCA9IHRydWU7Ci0g
ICAgICAgIGNvbnN0IHN1cHByZXNzU2VsZWN0U2libGluZyA9IHRydWU7Ci0KLSAgICAgICAgaWYg
KHRoaXMuX2V4dGVuc2lvblNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudCkgewotICAgICAgICAgICAg
aWYgKHRoaXMuX2V4dGVuc2lvblNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudC5wYXJlbnQpCi0gICAg
ICAgICAgICAgICAgdGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LnBhcmVu
dC5yZW1vdmVDaGlsZCh0aGlzLl9leHRlbnNpb25TY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQsIHN1
cHByZXNzT25EZXNlbGVjdCwgc3VwcHJlc3NTZWxlY3RTaWJsaW5nKTsKLQotICAgICAgICAgICAg
dGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0
LmNsZWFyKCk7Ci0gICAgICAgICAgICB0aGlzLl9leHRlbnNpb25TY3JpcHRzRm9sZGVyVHJlZUVs
ZW1lbnQgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuX2V4dHJhU2NyaXB0
c0ZvbGRlclRyZWVFbGVtZW50KSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fZXh0cmFTY3JpcHRz
Rm9sZGVyVHJlZUVsZW1lbnQucGFyZW50KQotICAgICAgICAgICAgICAgIHRoaXMuX2V4dHJhU2Ny
aXB0c0ZvbGRlclRyZWVFbGVtZW50LnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLl9leHRyYVNjcmlw
dHNGb2xkZXJUcmVlRWxlbWVudCwgc3VwcHJlc3NPbkRlc2VsZWN0LCBzdXBwcmVzc1NlbGVjdFNp
YmxpbmcpOwotCi0gICAgICAgICAgICB0aGlzLl9leHRyYVNjcmlwdHNGb2xkZXJUcmVlRWxlbWVu
dC5yZXByZXNlbnRlZE9iamVjdC5jbGVhcigpOwotICAgICAgICAgICAgdGhpcy5fZXh0cmFTY3Jp
cHRzRm9sZGVyVHJlZUVsZW1lbnQgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRo
aXMuX2Fub255bW91c1NjcmlwdHNGb2xkZXJUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgaWYg
KHRoaXMuX2Fub255bW91c1NjcmlwdHNGb2xkZXJUcmVlRWxlbWVudC5wYXJlbnQpCi0gICAgICAg
ICAgICAgICAgdGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LnBhcmVudC5y
ZW1vdmVDaGlsZCh0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQsIHN1cHBy
ZXNzT25EZXNlbGVjdCwgc3VwcHJlc3NTZWxlY3RTaWJsaW5nKTsKLQotICAgICAgICAgICAgdGhp
cy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LmNs
ZWFyKCk7Ci0gICAgICAgICAgICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1l
bnQgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuX3RhcmdldFRyZWVFbGVt
ZW50TWFwLnNpemUpIHsKLSAgICAgICAgICAgIGZvciAobGV0IHRyZWVFbGVtZW50IG9mIHRoaXMu
X3RhcmdldFRyZWVFbGVtZW50TWFwLnZhbHVlcygpKQotICAgICAgICAgICAgICAgIHRyZWVFbGVt
ZW50LnBhcmVudC5yZW1vdmVDaGlsZCh0cmVlRWxlbWVudCwgc3VwcHJlc3NPbkRlc2VsZWN0LCBz
dXBwcmVzc1NlbGVjdFNpYmxpbmcpOwotICAgICAgICAgICAgdGhpcy5fdGFyZ2V0VHJlZUVsZW1l
bnRNYXAuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIF9zdHlsZVNoZWV0QWRkZWQo
ZXZlbnQpCi0gICAgewotICAgICAgICBsZXQgc3R5bGVTaGVldCA9IGV2ZW50LmRhdGEuc3R5bGVT
aGVldDsKLSAgICAgICAgaWYgKCFzdHlsZVNoZWV0LmlzSW5zcGVjdG9yU3R5bGVTaGVldCgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGxldCBmcmFtZVRyZWVFbGVtZW50ID0gdGhp
cy50cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0KHN0eWxlU2hlZXQucGFyZW50RnJhbWUp
OwotICAgICAgICBpZiAoIWZyYW1lVHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgZnJhbWVUcmVlRWxlbWVudC5hZGRSZXByZXNlbnRlZE9iamVjdFRvTmV3Q2hpbGRR
dWV1ZShzdHlsZVNoZWV0KTsKLSAgICB9Ci0KLSAgICBfYWRkVGFyZ2V0V2l0aE1haW5SZXNvdXJj
ZSh0YXJnZXQpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0YXJnZXQudHlwZSA9PT0g
V0kuVGFyZ2V0LlR5cGUuV29ya2VyIHx8IHRhcmdldC50eXBlID09PSBXSS5UYXJnZXQuVHlwZS5T
ZXJ2aWNlV29ya2VyKTsKLQotICAgICAgICBsZXQgdGFyZ2V0VHJlZUVsZW1lbnQgPSBuZXcgV0ku
V29ya2VyVHJlZUVsZW1lbnQodGFyZ2V0KTsKLSAgICAgICAgdGhpcy5fdGFyZ2V0VHJlZUVsZW1l
bnRNYXAuc2V0KHRhcmdldCwgdGFyZ2V0VHJlZUVsZW1lbnQpOwotCi0gICAgICAgIGxldCBpbmRl
eCA9IGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbih0YXJnZXRU
cmVlRWxlbWVudCwgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuY2hpbGRyZW4sIHRoaXMuX2NvbXBh
cmVUcmVlRWxlbWVudHMpOwotICAgICAgICB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5pbnNlcnRD
aGlsZCh0YXJnZXRUcmVlRWxlbWVudCwgaW5kZXgpOwotICAgIH0KLQotICAgIF90YXJnZXRSZW1v
dmVkKGV2ZW50KQotICAgIHsKLSAgICAgICAgbGV0IHJlbW92ZWRUYXJnZXQgPSBldmVudC5kYXRh
LnRhcmdldDsKLQotICAgICAgICBsZXQgdGFyZ2V0VHJlZUVsZW1lbnQgPSB0aGlzLl90YXJnZXRU
cmVlRWxlbWVudE1hcC50YWtlKHJlbW92ZWRUYXJnZXQpOwotICAgICAgICBpZiAodGFyZ2V0VHJl
ZUVsZW1lbnQpCi0gICAgICAgICAgICB0YXJnZXRUcmVlRWxlbWVudC5wYXJlbnQucmVtb3ZlQ2hp
bGQodGFyZ2V0VHJlZUVsZW1lbnQpOwotICAgIH0KLQotICAgIF90cmVlU2VsZWN0aW9uRGlkQ2hh
bmdlKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGxldCB0cmVlRWxlbWVudCA9IHRoaXMuY29udGVudFRyZWVP
dXRsaW5lLnNlbGVjdGVkVHJlZUVsZW1lbnQ7Ci0gICAgICAgIGlmICghdHJlZUVsZW1lbnQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2Yg
V0kuRm9sZGVyVHJlZUVsZW1lbnQKLSAgICAgICAgICAgIHx8IHRyZWVFbGVtZW50IGluc3RhbmNl
b2YgV0kuUmVzb3VyY2VUcmVlRWxlbWVudAotICAgICAgICAgICAgfHwgdHJlZUVsZW1lbnQgaW5z
dGFuY2VvZiBXSS5TY3JpcHRUcmVlRWxlbWVudAotICAgICAgICAgICAgfHwgdHJlZUVsZW1lbnQg
aW5zdGFuY2VvZiBXSS5DU1NTdHlsZVNoZWV0VHJlZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIGNv
bnN0IGNvb2tpZSA9IG51bGw7Ci0gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gewotICAgICAg
ICAgICAgICAgIGlnbm9yZU5ldHdvcmtUYWI6IHRydWUsCi0gICAgICAgICAgICAgICAgaWdub3Jl
U2VhcmNoVGFiOiB0cnVlLAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIFdJLnNob3dSZXBy
ZXNlbnRlZE9iamVjdCh0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCwgY29va2llLCBvcHRp
b25zKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnNvbGUu
ZXJyb3IoIlVua25vd24gdHJlZSBlbGVtZW50IiwgdHJlZUVsZW1lbnQpOwotICAgIH0KLQotICAg
IF9jb21wYXJlVHJlZUVsZW1lbnRzKGEsIGIpCi0gICAgewotICAgICAgICAvLyBBbHdheXMgc29y
dCB0aGUgbWFpbiBmcmFtZSBlbGVtZW50IGZpcnN0LgotICAgICAgICBpZiAoYSBpbnN0YW5jZW9m
IFdJLkZyYW1lVHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlm
IChiIGluc3RhbmNlb2YgV0kuRnJhbWVUcmVlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiAx
OwotCi0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGEubWFpblRpdGxlKTsKLSAgICAgICAgY29uc29s
ZS5hc3NlcnQoYi5tYWluVGl0bGUpOwotCi0gICAgICAgIHJldHVybiAoYS5tYWluVGl0bGUgfHwg
IiIpLmV4dGVuZGVkTG9jYWxlQ29tcGFyZShiLm1haW5UaXRsZSB8fCAiIik7Ci0gICAgfQotCi0g
ICAgX2V4dHJhRG9tYWluc0FjdGl2YXRlZCgpCi0gICAgewotICAgICAgICBpZiAoUmVzb3VyY2VT
aWRlYmFyUGFuZWwuc2hvdWxkUGxhY2VSZXNvdXJjZXNBdFRvcExldmVsKCkpCi0gICAgICAgICAg
ICB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5kaXNjbG9zdXJlQnV0dG9ucyA9IHRydWU7Ci0gICAg
fQotCi0gICAgX3Njb3BlQmFyU2VsZWN0aW9uRGlkQ2hhbmdlKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgdGhpcy51cGRhdGVGaWx0ZXIoKTsKLSAgICB9Ci19OwotCi1XSS5SZXNvdXJjZVNpZGViYXJQ
YW5lbC5SZXNvdXJjZVR5cGVTeW1ib2wgPSBTeW1ib2woInJlc291cmNlLXR5cGUiKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291cmNl
c1RhYkNvbnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvUmVzb3VyY2VzVGFiQ29udGVudFZpZXcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDRmOGFmYzYzNWQwLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9SZXNvdXJjZXNUYWJDb250ZW50Vmlldy5qcworKysgL2Rl
di9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1XSS5SZXNvdXJjZXNUYWJDb250
ZW50VmlldyA9IGNsYXNzIFJlc291cmNlc1RhYkNvbnRlbnRWaWV3IGV4dGVuZHMgV0kuQ29udGVu
dEJyb3dzZXJUYWJDb250ZW50VmlldwotewotICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXIpCi0g
ICAgewotICAgICAgICBsZXQgdGFiQmFySXRlbSA9IFdJLkdlbmVyYWxUYWJCYXJJdGVtLmZyb21U
YWJJbmZvKFdJLlJlc291cmNlc1RhYkNvbnRlbnRWaWV3LnRhYkluZm8oKSk7Ci0gICAgICAgIGNv
bnN0IGRldGFpbHNTaWRlYmFyUGFuZWxDb25zdHJ1Y3RvcnMgPSBbV0kuUmVzb3VyY2VEZXRhaWxz
U2lkZWJhclBhbmVsLCBXSS5Qcm9iZURldGFpbHNTaWRlYmFyUGFuZWxdOwotICAgICAgICBzdXBl
cihpZGVudGlmaWVyIHx8ICJyZXNvdXJjZXMiLCAicmVzb3VyY2VzIiwgdGFiQmFySXRlbSwgV0ku
UmVzb3VyY2VTaWRlYmFyUGFuZWwsIGRldGFpbHNTaWRlYmFyUGFuZWxDb25zdHJ1Y3RvcnMpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB0YWJJbmZvKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICBpbWFnZTogIkltYWdlcy9SZXNvdXJjZXMuc3ZnIiwKLSAgICAgICAgICAgIHRp
dGxlOiBXSS5VSVN0cmluZygiUmVzb3VyY2VzIiksCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAg
c3RhdGljIGlzVGFiQWxsb3dlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gIVdJLnNldHRpbmdz
LmV4cGVyaW1lbnRhbEVuYWJsZVNvdXJjZXNUYWIudmFsdWU7Ci0gICAgfQotCi0gICAgLy8gUHVi
bGljCi0KLSAgICBnZXQgdHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gV0kuUmVzb3VyY2Vz
VGFiQ29udGVudFZpZXcuVHlwZTsKLSAgICB9Ci0KLSAgICBnZXQgc3VwcG9ydHNTcGxpdENvbnRl
bnRCcm93c2VyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNh
blNob3dSZXByZXNlbnRlZE9iamVjdChyZXByZXNlbnRlZE9iamVjdCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkZyYW1lCi0gICAgICAgICAg
ICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkZyYW1lQ29sbGVjdGlvbgotICAg
ICAgICAgICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZQotICAg
ICAgICAgICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZUNvbGxl
Y3Rpb24KLSAgICAgICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2Ny
aXB0Ci0gICAgICAgICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlNjcmlw
dENvbGxlY3Rpb24KLSAgICAgICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2Yg
V0kuQ1NTU3R5bGVTaGVldAotICAgICAgICAgICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFu
Y2VvZiBXSS5DU1NTdHlsZVNoZWV0Q29sbGVjdGlvbjsKLSAgICB9Ci19OwotCi1XSS5SZXNvdXJj
ZXNUYWJDb250ZW50Vmlldy5UeXBlID0gInJlc291cmNlcyI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZWFyY2hSZXN1bHRUcmVlRWxlbWVu
dC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NlYXJjaFJl
c3VsdFRyZWVFbGVtZW50LmpzCmluZGV4IDdhMzljZGQwOWJiLi5iMzQ1YjY1NmQ2NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2VhcmNoUmVz
dWx0VHJlZUVsZW1lbnQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQuanMKQEAgLTk5LDEyICs5OSw3IEBAIFdJ
LlNlYXJjaFJlc3VsdFRyZWVFbGVtZW50ID0gY2xhc3MgU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQg
ZXh0ZW5kcyBXSS5HZW5lcmFsVHJlCiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2Yg
V0kuU291cmNlQ29kZVNlYXJjaE1hdGNoT2JqZWN0KSB7Ci0gICAgICAgICAgICBsZXQgbGFiZWwg
PSBudWxsOwotICAgICAgICAgICAgaWYgKFdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZVNv
dXJjZXNUYWIudmFsdWUpCi0gICAgICAgICAgICAgICAgbGFiZWwgPSBXSS5VSVN0cmluZygiUmV2
ZWFsIGluIFNvdXJjZXMgVGFiIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bGFiZWwgPSBXSS5VSVN0cmluZygiUmV2ZWFsIGluIFJlc291cmNlcyBUYWIiKTsKLSAgICAgICAg
ICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0obGFiZWwsICgpID0+IHsKKyAgICAgICAgICAgIGNv
bnRleHRNZW51LmFwcGVuZEl0ZW0oV0kuVUlTdHJpbmcoIlJldmVhbCBpbiBTb3VyY2VzIFRhYiIp
LCAoKSA9PiB7CiAgICAgICAgICAgICAgICAgV0kuc2hvd09yaWdpbmFsT3JGb3JtYXR0ZWRTb3Vy
Y2VDb2RlVGV4dFJhbmdlKHRoaXMucmVwcmVzZW50ZWRPYmplY3Quc291cmNlQ29kZVRleHRSYW5n
ZSwgewogICAgICAgICAgICAgICAgICAgICBpZ25vcmVOZXR3b3JrVGFiOiB0cnVlLAogICAgICAg
ICAgICAgICAgICAgICBpZ25vcmVTZWFyY2hUYWI6IHRydWUsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NU
YWJDb250ZW50Vmlldy5qcwppbmRleCA0MDg2YTk3NWQ4MC4uZWFkOTNlNDcwZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFi
Q29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qcwpAQCAtMzI0LDkgKzMyNCw2IEBAIFdJLlNl
dHRpbmdzVGFiQ29udGVudFZpZXcgPSBjbGFzcyBTZXR0aW5nc1RhYkNvbnRlbnRWaWV3IGV4dGVu
ZHMgV0kuVGFiQ29udGVudFZpCiAKICAgICAgICAgbGV0IGluaXRpYWxWYWx1ZXMgPSBuZXcgTWFw
OwogCi0gICAgICAgIGV4cGVyaW1lbnRhbFNldHRpbmdzVmlldy5hZGRTZXR0aW5nKFdJLlVJU3Ry
aW5nKCJTb3VyY2VzOiIpLCBXSS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVTb3VyY2VzVGFi
LCBXSS5VSVN0cmluZygiRW5hYmxlIFNvdXJjZXMgVGFiIikpOwotICAgICAgICBleHBlcmltZW50
YWxTZXR0aW5nc1ZpZXcuYWRkU2VwYXJhdG9yKCk7Ci0KICAgICAgICAgaWYgKHdpbmRvdy5MYXll
clRyZWVBZ2VudCkgewogICAgICAgICAgICAgZXhwZXJpbWVudGFsU2V0dGluZ3NWaWV3LmFkZFNl
dHRpbmcoV0kuVUlTdHJpbmcoIkxheWVyczoiKSwgV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5h
YmxlTGF5ZXJzVGFiLCBXSS5VSVN0cmluZygiRW5hYmxlIExheWVycyBUYWIiKSk7CiAgICAgICAg
ICAgICBleHBlcmltZW50YWxTZXR0aW5nc1ZpZXcuYWRkU2VwYXJhdG9yKCk7CkBAIC0zNDUsMjAg
KzM0Miw4IEBAIFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcgPSBjbGFzcyBTZXR0aW5nc1RhYkNv
bnRlbnRWaWV3IGV4dGVuZHMgV0kuVGFiQ29udGVudFZpCiAgICAgICAgIGxldCByZWxvYWRJbnNw
ZWN0b3JCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgICAgICAg
cmVsb2FkSW5zcGVjdG9yQnV0dG9uLnRleHRDb250ZW50ID0gV0kuVUlTdHJpbmcoIlJlbG9hZCBX
ZWIgSW5zcGVjdG9yIik7CiAgICAgICAgIHJlbG9hZEluc3BlY3RvckJ1dHRvbi5hZGRFdmVudExp
c3RlbmVyKCJjbGljayIsIChldmVudCkgPT4gewotICAgICAgICAgICAgLy8gRm9yY2UgYSBjb3B5
IHNvIHRoYXQgV0kuU2V0dGluZyBzZWVzIGl0IGFzIGEgbmV3IHZhbHVlLgotICAgICAgICAgICAg
bGV0IG5ld1RhYnMgPSBXSS5fb3BlblRhYnNTZXR0aW5nLnZhbHVlOwotICAgICAgICAgICAgaWYg
KCFpbml0aWFsVmFsdWVzLmdldChXSS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVTb3VyY2Vz
VGFiKSAmJiBXSS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVTb3VyY2VzVGFiLnZhbHVlKSB7
Ci0gICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nSW5kZXggPSBuZXdUYWJzLmluZGV4T2YoV0ku
U291cmNlc1RhYkNvbnRlbnRWaWV3LlR5cGUpOwotICAgICAgICAgICAgICAgIGlmIChleGlzdGlu
Z0luZGV4ID09PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBuZXdUYWJz
LmluZGV4T2YoV0kuRGVidWdnZXJUYWJDb250ZW50Vmlldy5UeXBlKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGluZGV4ICE9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RhYnMu
aW5zZXJ0QXRJbmRleChXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcuVHlwZSwgaW5kZXgpOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdUYWJzLnB1
c2goV0kuU291cmNlc1RhYkNvbnRlbnRWaWV3LlR5cGUpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghaW5pdGlhbFZhbHVlcy5nZXQoV0kuc2V0dGlu
Z3MuZXhwZXJpbWVudGFsRW5hYmxlTGF5ZXJzVGFiKSAmJiB3aW5kb3cuTGF5ZXJUcmVlQWdlbnQg
JiYgV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlTGF5ZXJzVGFiLnZhbHVlKQotICAgICAg
ICAgICAgICAgIG5ld1RhYnMucHVzaChXSS5MYXllcnNUYWJDb250ZW50Vmlldy5UeXBlKTsKKyAg
ICAgICAgICAgICAgICBXSS5fb3BlblRhYnNTZXR0aW5nLnZhbHVlLnB1c2goV0kuTGF5ZXJzVGFi
Q29udGVudFZpZXcuVHlwZSk7CiAgICAgICAgICAgICBXSS5fb3BlblRhYnNTZXR0aW5nLnNhdmUo
KTsKIAogICAgICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnJlb3BlbigpOwpAQCAtMzc0
LDcgKzM1OSw2IEBAIFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcgPSBjbGFzcyBTZXR0aW5nc1Rh
YkNvbnRlbnRWaWV3IGV4dGVuZHMgV0kuVGFiQ29udGVudFZpCiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQogCi0gICAgICAgIGxpc3RlbkZvckNoYW5nZShXSS5zZXR0aW5ncy5leHBlcmltZW50
YWxFbmFibGVTb3VyY2VzVGFiKTsKICAgICAgICAgbGlzdGVuRm9yQ2hhbmdlKFdJLnNldHRpbmdz
LmV4cGVyaW1lbnRhbEVuYWJsZUxheWVyc1RhYik7CiAgICAgICAgIGxpc3RlbkZvckNoYW5nZShX
SS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVOZXdUYWJCYXIpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVk
aXRvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJj
ZUNvZGVUZXh0RWRpdG9yLmpzCmluZGV4IDNmN2E2NDYyNzE2Li5hODE4ZDI0YzM1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29k
ZVRleHRFZGl0b3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMKQEAgLTEyNTcsMjAgKzEyNTcsMTEgQEAgV0ku
U291cmNlQ29kZVRleHRFZGl0b3IgPSBjbGFzcyBTb3VyY2VDb2RlVGV4dEVkaXRvciBleHRlbmRz
IFdJLlRleHRFZGl0b3IKICAgICAgICAgaWYgKGJyZWFrcG9pbnRzLmxlbmd0aCA9PT0gMSkgewog
ICAgICAgICAgICAgV0kuYnJlYWtwb2ludFBvcG92ZXJDb250cm9sbGVyLmFwcGVuZENvbnRleHRN
ZW51SXRlbXMoY29udGV4dE1lbnUsIGJyZWFrcG9pbnRzWzBdLCBldmVudC50YXJnZXQpOwogCi0g
ICAgICAgICAgICBpZiAoV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1RhYi52
YWx1ZSkgewotICAgICAgICAgICAgICAgIGlmICghV0kuaXNTaG93aW5nU291cmNlc1RhYigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRvcigpOwotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdJLlVJU3RyaW5nKCJSZXZl
YWwgaW4gU291cmNlcyBUYWIiKSwgKCkgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgV0ku
c2hvd1NvdXJjZXNUYWIoe2JyZWFrcG9pbnRUb1NlbGVjdDogYnJlYWtwb2ludHNbMF19KTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIVdJLmlzU2hvd2luZ0RlYnVnZ2VyVGFiKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV0kuVUlTdHJpbmcoIlJldmVh
bCBpbiBEZWJ1Z2dlciBUYWIiKSwgKCkgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgV0ku
c2hvd0RlYnVnZ2VyVGFiKHticmVha3BvaW50VG9TZWxlY3Q6IGJyZWFrcG9pbnRzWzBdfSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICghV0kuaXNTaG93aW5nU291cmNlc1RhYigpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dE1l
bnUuYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5k
SXRlbShXSS5VSVN0cmluZygiUmV2ZWFsIGluIFNvdXJjZXMgVGFiIiksICgpID0+IHsKKyAgICAg
ICAgICAgICAgICAgICAgV0kuc2hvd1NvdXJjZXNUYWIoe2JyZWFrcG9pbnRUb1NlbGVjdDogYnJl
YWtwb2ludHNbMF19KTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvU291cmNlc1RhYkNvbnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlc1RhYkNvbnRlbnRWaWV3LmpzCmluZGV4
IGFkZWQxYWU0Njk2Li5jNWFkNzdiNGIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlc1RhYkNvbnRlbnRWaWV3LmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZXNUYWJDb250ZW50
Vmlldy5qcwpAQCAtNDIsMTEgKzQyLDYgQEAgV0kuU291cmNlc1RhYkNvbnRlbnRWaWV3ID0gY2xh
c3MgU291cmNlc1RhYkNvbnRlbnRWaWV3IGV4dGVuZHMgV0kuQ29udGVudEJyb3dzZXIKICAgICAg
ICAgfTsKICAgICB9CiAKLSAgICBzdGF0aWMgaXNUYWJBbGxvd2VkKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAhIVdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZVNvdXJjZXNUYWIudmFsdWU7
Ci0gICAgfQotCiAgICAgLy8gUHVibGljCiAKICAgICBnZXQgdHlwZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldENTU1N0
eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvU3ByZWFkc2hlZXRDU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5qcwppbmRl
eCBiNDE3YzM4MzIwOS4uYjFjNzYwYzFmYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0Q1NTU3R5bGVEZWNsYXJhdGlvblNl
Y3Rpb24uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
U3ByZWFkc2hlZXRDU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5qcwpAQCAtNTYwLDExICs1NjAs
OCBAQCBXSS5TcHJlYWRzaGVldENTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uID0gY2xhc3MgU3By
ZWFkc2hlZXRDU1NTdHlsZURlY2xhcmF0aW9uUwogICAgICAgICAgICAgbGV0IHNvdXJjZUNvZGUg
PSB0aGlzLl9zdHlsZS5vd25lclJ1bGUuc291cmNlQ29kZUxvY2F0aW9uLmRpc3BsYXlTb3VyY2VD
b2RlOwogICAgICAgICAgICAgaWYgKHNvdXJjZUNvZGUgaW5zdGFuY2VvZiBXSS5DU1NTdHlsZVNo
ZWV0IHx8IChzb3VyY2VDb2RlIGluc3RhbmNlb2YgV0kuUmVzb3VyY2UgJiYgc291cmNlQ29kZS50
eXBlID09PSBXSS5SZXNvdXJjZS5UeXBlLlN0eWxlU2hlZXQpKQogICAgICAgICAgICAgICAgIGxh
YmVsID0gV0kuVUlTdHJpbmcoIlJldmVhbCBpbiBTdHlsZSBTaGVldCIpOwotICAgICAgICAgICAg
ZWxzZSBpZiAoV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1RhYi52YWx1ZSkK
LSAgICAgICAgICAgICAgICBsYWJlbCA9IFdJLlVJU3RyaW5nKCJSZXZlYWwgaW4gU291cmNlcyBU
YWIiKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsYWJlbCA9IFdJLlVJU3Ry
aW5nKCJSZXZlYWwgaW4gUmVzb3VyY2VzIFRhYiIpOwotCisgICAgICAgICAgICAgICAgbGFiZWwg
PSBXSS5VSVN0cmluZygiUmV2ZWFsIGluIFNvdXJjZXMgVGFiIik7CiAgICAgICAgICAgICBjb250
ZXh0TWVudS5hcHBlbmRJdGVtKGxhYmVsLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAgV0kuc2hv
d1NvdXJjZUNvZGVMb2NhdGlvbih0aGlzLl9zdHlsZS5vd25lclJ1bGUuc291cmNlQ29kZUxvY2F0
aW9uLCB7CiAgICAgICAgICAgICAgICAgICAgIGlnbm9yZU5ldHdvcmtUYWI6IHRydWUsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvV2ViSW5zcGVjdG9yVUkudmN4cHJvai9XZWJJ
bnNwZWN0b3JVSS52Y3hwcm9qIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1dlYkluc3BlY3RvclVJ
LnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvagppbmRleCAwZDIzMGY5YjU2Yi4uNjc1YjIy
MTk3YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS52
Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1dlYkluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvagpAQCAtMzY1LDgg
KzM2NSw2IEBACiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxEYXRhR3JpZC5q
cyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXERlYnVnZ2VyTWFuYWdl
ci5qcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXERlYnVnZ2VyT2Jz
ZXJ2ZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxEZWJ1Z2dl
clNpZGViYXJQYW5lbC5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFj
ZVxEZWJ1Z2dlclNpZGViYXJQYW5lbC5qcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2Vy
SW50ZXJmYWNlXERldGFpbHNTZWN0aW9uLmNzcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxV
c2VySW50ZXJmYWNlXERldGFpbHNTZWN0aW9uLmpzIiAvPgogICAgIDxOb25lIEluY2x1ZGU9Ii4u
XFVzZXJJbnRlcmZhY2VcRGV0YWlsc1NlY3Rpb25EYXRhR3JpZFJvdy5qcyIgLz4KQEAgLTcyNSw4
ICs3MjMsNiBAQAogICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcUmVzb3VyY2VD
b250ZW50Vmlldy5qcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXFJl
c291cmNlRGV0YWlsc1NpZGViYXJQYW5lbC5qcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxV
c2VySW50ZXJmYWNlXFJlc291cmNlSWNvbnMuY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XFVzZXJJbnRlcmZhY2VcUmVzb3VyY2VTaWRlYmFyUGFuZWwuY3NzIiAvPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcUmVzb3VyY2VTaWRlYmFyUGFuZWwuanMiIC8+CiAgICAg
PE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxSZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWRO
b2RlLmpzIiAvPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcUmVzb3VyY2VU
aW1lbGluZURhdGFHcmlkTm9kZVBhdGhDb21wb25lbnQuanMiIC8+CiAgICAgPE5vbmUgSW5jbHVk
ZT0iLi5cVXNlckludGVyZmFjZVxSZXNvdXJjZVRpbWVsaW5lUmVjb3JkLmpzIiAvPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1dlYkluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5z
cGVjdG9yVUkudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1dlYkluc3Bl
Y3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvai5maWx0ZXJzCmluZGV4IDhkODMx
MTQwNGFiLi5mOGEwN2QzYWQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1dl
Ykluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvai5maWx0ZXJzCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYkluc3BlY3Rv
clVJLnZjeHByb2ouZmlsdGVycwpAQCAtMzQ1LDEyICszNDUsNiBAQAogICAgIDxOb25lIEluY2x1
ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcRGVidWdnZXJPYnNlcnZlci5qcyI+CiAgICAgICA8RmlsdGVy
PlVzZXJJbnRlcmZhY2U8L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5cVXNlckludGVyZmFjZVxEZWJ1Z2dlclNpZGViYXJQYW5lbC5jc3MiPgotICAgICAgPEZpbHRl
cj5Vc2VySW50ZXJmYWNlPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXFVzZXJJbnRlcmZhY2VcRGVidWdnZXJTaWRlYmFyUGFuZWwuanMiPgotICAgICAgPEZpbHRl
cj5Vc2VySW50ZXJmYWNlPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgogICAgIDxOb25lIEluY2x1ZGU9
Ii4uXFVzZXJJbnRlcmZhY2VcRGV0YWlsc1NlY3Rpb24uY3NzIj4KICAgICAgIDxGaWx0ZXI+VXNl
ckludGVyZmFjZTwvRmlsdGVyPgogICAgIDwvTm9uZT4KQEAgLTc4OSwxMiArNzgzLDYgQEAKICAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXFJlc291cmNlSWNvbnMuY3NzIj4KICAg
ICAgIDxGaWx0ZXI+VXNlckludGVyZmFjZTwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXFJlc291cmNlU2lkZWJhclBhbmVsLmNzcyI+Ci0g
ICAgICA8RmlsdGVyPlVzZXJJbnRlcmZhY2U8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxSZXNvdXJjZVNpZGViYXJQYW5lbC5qcyI+Ci0g
ICAgICA8RmlsdGVyPlVzZXJJbnRlcmZhY2U8L0ZpbHRlcj4KLSAgICA8L05vbmU+CiAgICAgPE5v
bmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxSZXNvdXJjZVRpbWVsaW5lRGF0YUdyaWROb2Rl
LmpzIj4KICAgICAgIDxGaWx0ZXI+VXNlckludGVyZmFjZTwvRmlsdGVyPgogICAgIDwvTm9uZT4K
</data>
<flag name="review"
          id="395530"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380678</attachid>
            <date>2019-10-10 14:00:43 -0700</date>
            <delta_ts>2019-10-10 14:57:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>202341.diff</filename>
            <type>text/plain</type>
            <size>149782</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDAwMjU1OTJhMGI2Li5iNDJhYWVmOGQ1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTktMTAtMTAgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNv
dXJjZXM6IGVuYWJsZSB0YWIgYnkgZGVmYXVsdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMzQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBo
IFBlY29yYXJvLgorCisgICAgICAgIFRoZSBleHBlcmltZW50YWwgU291cmNlcyBUYWIgaGFzIHBy
b2dyZXNzZWQgZW5vdWdoIHRoYXQgaXQgY2FuIGJlIGVuYWJsZWQgYnkgZGVmYXVsdC4gVGhlcmUK
KyAgICAgICAgYXJlIHNvbWUgbmV3IGZlYXR1cmVzIHRoYXQgYXJlIG9ubHkgYXZhaWxhYmxlIGlu
IHRoZSBTb3VyY2VzIFRhYiB0aGF0IGFyZSBhbHNvIHJlYWR5IHRvIGJlCisgICAgICAgIHVzZWQg
KGUuZy4gbG9jYWwgcmVzb3VyY2Ugb3ZlcnJpZGVzKS4KKworICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvTWFpbi5odG1sOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzOgorICAg
ICAgICAoV0kubG9hZGVkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jhc2UvU2V0dGluZy5q
czoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvckZyb250ZW5kQVBJ
LmpzOgorICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuc2hvd1Jlc291cmNlcyk6CisgICAg
ICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9OZXR3b3JrTWFuYWdlci5qczoKKyAgICAg
ICAgKFdJLk5ldHdvcmtNYW5hZ2VyKToKKyAgICAgICAgKFdJLk5ldHdvcmtNYW5hZ2VyLnN1cHBv
cnRzTG9jYWxSZXNvdXJjZU92ZXJyaWRlcyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3
cy9Db250ZXh0TWVudVV0aWxpdGllcy5qczoKKyAgICAgICAgKFdJLmFwcGVuZENvbnRleHRNZW51
SXRlbXNGb3JVUkwpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvRGVmYXVsdERhc2hi
b2FyZFZpZXcuanM6CisgICAgICAgIChXSS5EZWZhdWx0RGFzaGJvYXJkVmlldy5wcm90b3R5cGUu
X3Jlc291cmNlc0l0ZW1XYXNDbGlja2VkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdz
L1JlY29yZGluZ0FjdGlvblRyZWVFbGVtZW50LmpzOgorICAgICAgICAoV0kuUmVjb3JkaW5nQWN0
aW9uVHJlZUVsZW1lbnQucHJvdG90eXBlLnBvcHVsYXRlQ29udGV4dE1lbnUpOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvVmlld3MvU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQuanM6CisgICAgICAg
IChXSS5TZWFyY2hSZXN1bHRUcmVlRWxlbWVudC5wcm90b3R5cGUucG9wdWxhdGVDb250ZXh0TWVu
dSk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3
LmpzOgorICAgICAgICAoV0kuU2V0dGluZ3NUYWJDb250ZW50Vmlldy5wcm90b3R5cGUuX2NyZWF0
ZUV4cGVyaW1lbnRhbFNldHRpbmdzVmlldyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3
cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKKyAgICAgICAgKFdJLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLnByb3RvdHlwZS50ZXh0RWRpdG9yR3V0dGVyQ29udGV4dE1lbnUpOgorICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRDU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5q
czoKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0Q1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24ucHJv
dG90eXBlLl9wb3B1bGF0ZUljb25FbGVtZW50Q29udGV4dE1lbnUpOgorICAgICAgICAqIExvY2Fs
aXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKKworICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvVmlld3MvU291cmNlc1RhYkNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuU291
cmNlc1RhYkNvbnRlbnRWaWV3LmlzVGFiQWxsb3dlZCk6IERlbGV0ZWQuCisgICAgICAgICogVXNl
ckludGVyZmFjZS9WaWV3cy9EZWJ1Z2dlclNpZGViYXJQYW5lbC5jc3M6IFJlbW92ZWQuCisgICAg
ICAgICogVXNlckludGVyZmFjZS9WaWV3cy9EZWJ1Z2dlclNpZGViYXJQYW5lbC5qczogUmVtb3Zl
ZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0RlYnVnZ2VyVGFiQ29udGVudFZpZXcu
anM6IFJlbW92ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9SZXNvdXJjZVNpZGVi
YXJQYW5lbC5jc3M6IFJlbW92ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9SZXNv
dXJjZVNpZGViYXJQYW5lbC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Zp
ZXdzL1Jlc291cmNlc1RhYkNvbnRlbnRWaWV3LmpzOiBSZW1vdmVkLgorICAgICAgICBSZW1vdmUg
dGhlIGV4cGVyaW1lbnRhbCBzZXR0aW5nLCBhcyB3ZWxsIGFzIGNvZGUgZm9yIHRoZSBSZXNvdXJj
ZXMgVGFiIGFuZCB0aGUgRGVidWdnZXIgVGFiLgorCisgICAgICAgICogV2ViSW5zcGVjdG9yVUku
dmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qOgorICAgICAgICAqIFdlYkluc3BlY3RvclVJ
LnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvai5maWx0ZXJzOgorCiAyMDE5LTEwLTA3ICBE
ZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBTZXR0aW5nczogZW5hYmxlIHRoZSBpbWFnZSB0cmFuc3BhcmVuY3kgZ3JpZCBieSBkZWZhdWx0
IGFuZCBjcmVhdGUgYSBjaGVja2JveCBmb3IgaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdz
LmpzCmluZGV4IDdhMWY0MTE3ZjExLi4wZmVkYWE1OTU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6
ZWRTdHJpbmdzLmpzCkBAIC0xMTAsNyArMTEwLDYgQEAgbG9jYWxpemVkU3RyaW5nc1siQWxsIExh
eWVycyJdID0gIkFsbCBMYXllcnMiOwogbG9jYWxpemVkU3RyaW5nc1siQWxsIE1pY3JvdGFza3Mi
XSA9ICJBbGwgTWljcm90YXNrcyI7CiAvKiBBIHN1Ym1lbnUgaXRlbSBvZiAnQnJlYWsgb24nIHRo
YXQgYnJlYWtzIChwYXVzZXMpIGJlZm9yZSBhbGwgbmV0d29yayByZXF1ZXN0cyAqLwogbG9jYWxp
emVkU3RyaW5nc1siQWxsIFJlcXVlc3RzIl0gPSAiQWxsIFJlcXVlc3RzIjsKLWxvY2FsaXplZFN0
cmluZ3NbIkFsbCBSZXNvdXJjZXMiXSA9ICJBbGwgUmVzb3VyY2VzIjsKIGxvY2FsaXplZFN0cmlu
Z3NbIkFsbCBTdG9yYWdlIl0gPSAiQWxsIFN0b3JhZ2UiOwogbG9jYWxpemVkU3RyaW5nc1siQWxs
IFRpbWVvdXRzIl0gPSAiQWxsIFRpbWVvdXRzIjsKIGxvY2FsaXplZFN0cmluZ3NbIkFsbCBpdGVt
cyBpbiBcdTAwMjIlc1x1MDAyMiBtdXN0IGJlIGVycm9yIG9iamVjdHMiXSA9ICJBbGwgaXRlbXMg
aW4gXHUwMDIyJXNcdTAwMjIgbXVzdCBiZSBlcnJvciBvYmplY3RzIjsKQEAgLTMzMCw3ICszMjks
NiBAQCBsb2NhbGl6ZWRTdHJpbmdzWyJEYXRhYmFzZSBubyBsb25nZXIgaGFzIGV4cGVjdGVkIHZl
cnNpb24uIl0gPSAiRGF0YWJhc2Ugbm8gbG9uZwogbG9jYWxpemVkU3RyaW5nc1siRGF0YWJhc2Vz
Il0gPSAiRGF0YWJhc2VzIjsKIGxvY2FsaXplZFN0cmluZ3NbIkRhdGUiXSA9ICJEYXRlIjsKIGxv
Y2FsaXplZFN0cmluZ3NbIkRlYnVnOiAiXSA9ICJEZWJ1ZzogIjsKLWxvY2FsaXplZFN0cmluZ3Nb
IkRlYnVnZ2VyIl0gPSAiRGVidWdnZXIiOwogbG9jYWxpemVkU3RyaW5nc1siRGVidWdnZXIgUGF1
c2VkIl0gPSAiRGVidWdnZXIgUGF1c2VkIjsKIGxvY2FsaXplZFN0cmluZ3NbIkRlYnVnZ2VyIFN0
YXRlbWVudCJdID0gIkRlYnVnZ2VyIFN0YXRlbWVudCI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJEZWJ1
Z2dlciBkaXNhYmxlZCBkdXJpbmcgQXVkaXQiXSA9ICJEZWJ1Z2dlciBkaXNhYmxlZCBkdXJpbmcg
QXVkaXQiOwpAQCAtNDQyLDkgKzQ0MCw3IEBAIGxvY2FsaXplZFN0cmluZ3NbIkVuYWJsZSBMb2Nh
bCBPdmVycmlkZSJdID0gIkVuYWJsZSBMb2NhbCBPdmVycmlkZSI7CiBsb2NhbGl6ZWRTdHJpbmdz
WyJFbmFibGUgTmV3IFRhYiBCYXIiXSA9ICJFbmFibGUgTmV3IFRhYiBCYXIiOwogbG9jYWxpemVk
U3RyaW5nc1siRW5hYmxlIFByb2dyYW0iXSA9ICJFbmFibGUgUHJvZ3JhbSI7CiBsb2NhbGl6ZWRT
dHJpbmdzWyJFbmFibGUgUnVsZSJdID0gIkVuYWJsZSBSdWxlIjsKLWxvY2FsaXplZFN0cmluZ3Nb
IkVuYWJsZSBTb3VyY2VzIFRhYiJdID0gIkVuYWJsZSBTb3VyY2VzIFRhYiI7CiBsb2NhbGl6ZWRT
dHJpbmdzWyJFbmFibGUgYWxsIGJyZWFrcG9pbnRzICglcykiXSA9ICJFbmFibGUgYWxsIGJyZWFr
cG9pbnRzICglcykiOwotbG9jYWxpemVkU3RyaW5nc1siRW5hYmxlIGJyZWFrcG9pbnRzIl0gPSAi
RW5hYmxlIGJyZWFrcG9pbnRzIjsKIGxvY2FsaXplZFN0cmluZ3NbIkVuYWJsZSBwYWludCBmbGFz
aGluZyJdID0gIkVuYWJsZSBwYWludCBmbGFzaGluZyI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJFbmFi
bGUgc291cmNlIG1hcHMiXSA9ICJFbmFibGUgc291cmNlIG1hcHMiOwogbG9jYWxpemVkU3RyaW5n
c1siRW5hYmxlZCJdID0gIkVuYWJsZWQiOwpAQCAtOTMxLDEzICs5MjcsMTEgQEAgbG9jYWxpemVk
U3RyaW5nc1siUmV2ZWFsIl0gPSAiUmV2ZWFsIjsKIGxvY2FsaXplZFN0cmluZ3NbIlJldmVhbCBE
ZXNjZW5kYW50IEJyZWFrcG9pbnRzIl0gPSAiUmV2ZWFsIERlc2NlbmRhbnQgQnJlYWtwb2ludHMi
OwogLyogT3BlbiBFbGVtZW50cyB0YWIgYW5kIHNlbGVjdCB0aGlzIG5vZGUgaW4gRE9NIHRyZWUg
Ki8KIGxvY2FsaXplZFN0cmluZ3NbIlJldmVhbCBpbiBET00gVHJlZSJdID0gIlJldmVhbCBpbiBE
T00gVHJlZSI7Ci1sb2NhbGl6ZWRTdHJpbmdzWyJSZXZlYWwgaW4gRGVidWdnZXIgVGFiIl0gPSAi
UmV2ZWFsIGluIERlYnVnZ2VyIFRhYiI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJSZXZlYWwgaW4gRWxl
bWVudHMgVGFiIl0gPSAiUmV2ZWFsIGluIEVsZW1lbnRzIFRhYiI7CiAvKiBPcGVuIExheWVycyB0
YWIgYW5kIHNlbGVjdCB0aGUgbGF5ZXIgY29ycmVzcG9uZGluZyB0byB0aGlzIG5vZGUgKi8KIGxv
Y2FsaXplZFN0cmluZ3NbIlJldmVhbCBpbiBMYXllcnMgVGFiIl0gPSAiUmV2ZWFsIGluIExheWVy
cyBUYWIiOwogbG9jYWxpemVkU3RyaW5nc1siUmV2ZWFsIGluIE5ldHdvcmsgVGFiIl0gPSAiUmV2
ZWFsIGluIE5ldHdvcmsgVGFiIjsKIGxvY2FsaXplZFN0cmluZ3NbIlJldmVhbCBpbiBPcmlnaW5h
bCBSZXNvdXJjZSJdID0gIlJldmVhbCBpbiBPcmlnaW5hbCBSZXNvdXJjZSI7Ci1sb2NhbGl6ZWRT
dHJpbmdzWyJSZXZlYWwgaW4gUmVzb3VyY2VzIFRhYiJdID0gIlJldmVhbCBpbiBSZXNvdXJjZXMg
VGFiIjsKIGxvY2FsaXplZFN0cmluZ3NbIlJldmVhbCBpbiBTb3VyY2VzIFRhYiJdID0gIlJldmVh
bCBpbiBTb3VyY2VzIFRhYiI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJSZXZlYWwgaW4gU3R5bGUgU2hl
ZXQiXSA9ICJSZXZlYWwgaW4gU3R5bGUgU2hlZXQiOwogbG9jYWxpemVkU3RyaW5nc1siUm9sZSJd
ID0gIlJvbGUiOwpAQCAtMTA1NCw3ICsxMDQ4LDYgQEAgbG9jYWxpemVkU3RyaW5nc1siU29ydCBE
ZXNjZW5kaW5nIl0gPSAiU29ydCBEZXNjZW5kaW5nIjsKIGxvY2FsaXplZFN0cmluZ3NbIlNvdXJj
ZSJdID0gIlNvdXJjZSI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJTb3VyY2UgTWFwczoiXSA9ICJTb3Vy
Y2UgTWFwczoiOwogbG9jYWxpemVkU3RyaW5nc1siU291cmNlcyJdID0gIlNvdXJjZXMiOwotbG9j
YWxpemVkU3RyaW5nc1siU291cmNlczoiXSA9ICJTb3VyY2VzOiI7CiBsb2NhbGl6ZWRTdHJpbmdz
WyJTcGFjZSJdID0gIlNwYWNlIjsKIGxvY2FsaXplZFN0cmluZ3NbIlNwYWNlcyJdID0gIlNwYWNl
cyI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJTcGVjaWFsbHkgRXhwb3NlZCBEYXRhIl0gPSAiU3BlY2lh
bGx5IEV4cG9zZWQgRGF0YSI7CkBAIC0xMTk0LDcgKzExODcsNiBAQCBsb2NhbGl6ZWRTdHJpbmdz
WyJUcmFuc2ZlciBTaXplIl0gPSAiVHJhbnNmZXIgU2l6ZSI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJU
cmFuc2ZlcnJlZCJdID0gIlRyYW5zZmVycmVkIjsKIGxvY2FsaXplZFN0cmluZ3NbIlRyaWdnZXJl
ZCBCcmVha3BvaW50Il0gPSAiVHJpZ2dlcmVkIEJyZWFrcG9pbnQiOwogbG9jYWxpemVkU3RyaW5n
c1siVHJpZ2dlcmVkIFVSTCBCcmVha3BvaW50Il0gPSAiVHJpZ2dlcmVkIFVSTCBCcmVha3BvaW50
IjsKLWxvY2FsaXplZFN0cmluZ3NbIlRyaWdnZXJlZCBYSFIgQnJlYWtwb2ludCJdID0gIlRyaWdn
ZXJlZCBYSFIgQnJlYWtwb2ludCI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJUcnVlIl0gPSAiVHJ1ZSI7
CiBsb2NhbGl6ZWRTdHJpbmdzWyJUeXBlIl0gPSAiVHlwZSI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJU
eXBlIElzc3VlIl0gPSAiVHlwZSBJc3N1ZSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9CYXNlL01haW4uanMKaW5kZXggZjI0NjE2Mjk2ZTQuLmRjODVhZGZjNTJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01h
aW4uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWlu
LmpzCkBAIC0xNDIsOCArMTQyLDcgQEAgV0kubG9hZGVkID0gZnVuY3Rpb24oKQogICAgIFdJLl9v
cGVuVGFic1NldHRpbmcgPSBuZXcgV0kuU2V0dGluZygib3Blbi10YWItdHlwZXMiLCBbCiAgICAg
ICAgIFdJLkVsZW1lbnRzVGFiQ29udGVudFZpZXcuVHlwZSwKICAgICAgICAgV0kuTmV0d29ya1Rh
YkNvbnRlbnRWaWV3LlR5cGUsCi0gICAgICAgIFdJLkRlYnVnZ2VyVGFiQ29udGVudFZpZXcuVHlw
ZSwKLSAgICAgICAgV0kuUmVzb3VyY2VzVGFiQ29udGVudFZpZXcuVHlwZSwKKyAgICAgICAgV0ku
U291cmNlc1RhYkNvbnRlbnRWaWV3LlR5cGUsCiAgICAgICAgIFdJLlRpbWVsaW5lVGFiQ29udGVu
dFZpZXcuVHlwZSwKICAgICAgICAgV0kuU3RvcmFnZVRhYkNvbnRlbnRWaWV3LlR5cGUsCiAgICAg
ICAgIFdJLkNhbnZhc1RhYkNvbnRlbnRWaWV3LlR5cGUsCkBAIC01MTQsOCArNTEzLDYgQEAgV0ku
Y29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgV0kuRWxlbWVudHNUYWJDb250ZW50
VmlldywKICAgICAgICAgV0kuTmV0d29ya1RhYkNvbnRlbnRWaWV3LAogICAgICAgICBXSS5Tb3Vy
Y2VzVGFiQ29udGVudFZpZXcsCi0gICAgICAgIFdJLkRlYnVnZ2VyVGFiQ29udGVudFZpZXcsCi0g
ICAgICAgIFdJLlJlc291cmNlc1RhYkNvbnRlbnRWaWV3LAogICAgICAgICBXSS5UaW1lbGluZVRh
YkNvbnRlbnRWaWV3LAogICAgICAgICBXSS5TdG9yYWdlVGFiQ29udGVudFZpZXcsCiAgICAgICAg
IFdJLkNhbnZhc1RhYkNvbnRlbnRWaWV3LApAQCAtMTA5OCwzOSArMTA5NSw2IEBAIFdJLmlzU2hv
d2luZ1NvdXJjZXNUYWIgPSBmdW5jdGlvbigpCiAgICAgcmV0dXJuIFdJLnRhYkJyb3dzZXIuc2Vs
ZWN0ZWRUYWJDb250ZW50VmlldyBpbnN0YW5jZW9mIFdJLlNvdXJjZXNUYWJDb250ZW50VmlldzsK
IH07CiAKLVdJLnNob3dEZWJ1Z2dlclRhYiA9IGZ1bmN0aW9uKG9wdGlvbnMpCi17Ci0gICAgdmFy
IHRhYkNvbnRlbnRWaWV3ID0gV0kudGFiQnJvd3Nlci5iZXN0VGFiQ29udGVudFZpZXdGb3JDbGFz
cyhXSS5EZWJ1Z2dlclRhYkNvbnRlbnRWaWV3KTsKLSAgICBpZiAoIXRhYkNvbnRlbnRWaWV3KQot
ICAgICAgICB0YWJDb250ZW50VmlldyA9IG5ldyBXSS5EZWJ1Z2dlclRhYkNvbnRlbnRWaWV3Owot
Ci0gICAgaWYgKG9wdGlvbnMuYnJlYWtwb2ludFRvU2VsZWN0IGluc3RhbmNlb2YgV0kuQnJlYWtw
b2ludCkKLSAgICAgICAgdGFiQ29udGVudFZpZXcucmV2ZWFsQW5kU2VsZWN0QnJlYWtwb2ludChv
cHRpb25zLmJyZWFrcG9pbnRUb1NlbGVjdCk7Ci0KLSAgICBpZiAob3B0aW9ucy5zaG93U2NvcGVD
aGFpblNpZGViYXIpCi0gICAgICAgIHRhYkNvbnRlbnRWaWV3LnNob3dTY29wZUNoYWluRGV0YWls
c1NpZGViYXJQYW5lbCgpOwotCi0gICAgV0kudGFiQnJvd3Nlci5zaG93VGFiRm9yQ29udGVudFZp
ZXcodGFiQ29udGVudFZpZXcpOwotfTsKLQotV0kuaXNTaG93aW5nRGVidWdnZXJUYWIgPSBmdW5j
dGlvbigpCi17Ci0gICAgcmV0dXJuIFdJLnRhYkJyb3dzZXIuc2VsZWN0ZWRUYWJDb250ZW50Vmll
dyBpbnN0YW5jZW9mIFdJLkRlYnVnZ2VyVGFiQ29udGVudFZpZXc7Ci19OwotCi1XSS5zaG93UmVz
b3VyY2VzVGFiID0gZnVuY3Rpb24oKQotewotICAgIHZhciB0YWJDb250ZW50VmlldyA9IFdJLnRh
YkJyb3dzZXIuYmVzdFRhYkNvbnRlbnRWaWV3Rm9yQ2xhc3MoV0kuUmVzb3VyY2VzVGFiQ29udGVu
dFZpZXcpOwotICAgIGlmICghdGFiQ29udGVudFZpZXcpCi0gICAgICAgIHRhYkNvbnRlbnRWaWV3
ID0gbmV3IFdJLlJlc291cmNlc1RhYkNvbnRlbnRWaWV3OwotICAgIFdJLnRhYkJyb3dzZXIuc2hv
d1RhYkZvckNvbnRlbnRWaWV3KHRhYkNvbnRlbnRWaWV3KTsKLX07Ci0KLVdJLmlzU2hvd2luZ1Jl
c291cmNlc1RhYiA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gV0kudGFiQnJvd3Nlci5zZWxl
Y3RlZFRhYkNvbnRlbnRWaWV3IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VzVGFiQ29udGVudFZpZXc7
Ci19OwotCiBXSS5zaG93U3RvcmFnZVRhYiA9IGZ1bmN0aW9uKCkKIHsKICAgICB2YXIgdGFiQ29u
dGVudFZpZXcgPSBXSS50YWJCcm93c2VyLmJlc3RUYWJDb250ZW50Vmlld0ZvckNsYXNzKFdJLlN0
b3JhZ2VUYWJDb250ZW50Vmlldyk7CkBAIC0xMjU0LDM1ICsxMjE4LDE1IEBAIFdJLnRhYkNvbnRl
bnRWaWV3Q2xhc3NGb3JSZXByZXNlbnRlZE9iamVjdCA9IGZ1bmN0aW9uKHJlcHJlc2VudGVkT2Jq
ZWN0KQogICAgIGlmIChyZXByZXNlbnRlZE9iamVjdCA9PT0gV0kuX2NvbnNvbGVSZXByZXNlbnRl
ZE9iamVjdCkKICAgICAgICAgcmV0dXJuIFdJLkNvbnNvbGVUYWJDb250ZW50VmlldzsKIAotICAg
IGlmIChXSS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVTb3VyY2VzVGFiLnZhbHVlKSB7Ci0g
ICAgICAgIGlmIChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkZyYW1lCi0gICAgICAg
ICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkZyYW1lQ29sbGVjdGlvbgot
ICAgICAgICAgICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZQot
ICAgICAgICAgICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZUNv
bGxlY3Rpb24KLSAgICAgICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0ku
U2NyaXB0Ci0gICAgICAgICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlNj
cmlwdENvbGxlY3Rpb24KLSAgICAgICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNl
b2YgV0kuQ1NTU3R5bGVTaGVldAotICAgICAgICAgICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5z
dGFuY2VvZiBXSS5DU1NTdHlsZVNoZWV0Q29sbGVjdGlvbikKLSAgICAgICAgICAgIHJldHVybiBX
SS5Tb3VyY2VzVGFiQ29udGVudFZpZXc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFdJLmRl
YnVnZ2VyTWFuYWdlci5wYXVzZWQpIHsKLSAgICAgICAgICAgIGlmIChyZXByZXNlbnRlZE9iamVj
dCBpbnN0YW5jZW9mIFdJLlNjcmlwdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gV0kuRGVidWdn
ZXJUYWJDb250ZW50VmlldzsKLQotICAgICAgICAgICAgaWYgKHJlcHJlc2VudGVkT2JqZWN0IGlu
c3RhbmNlb2YgV0kuUmVzb3VyY2UgJiYgKHJlcHJlc2VudGVkT2JqZWN0LnR5cGUgPT09IFdJLlJl
c291cmNlLlR5cGUuRG9jdW1lbnQgfHwgcmVwcmVzZW50ZWRPYmplY3QudHlwZSA9PT0gV0kuUmVz
b3VyY2UuVHlwZS5TY3JpcHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBXSS5EZWJ1Z2dlclRh
YkNvbnRlbnRWaWV3OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlcHJlc2VudGVkT2JqZWN0
IGluc3RhbmNlb2YgV0kuRnJhbWUKLSAgICAgICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGlu
c3RhbmNlb2YgV0kuRnJhbWVDb2xsZWN0aW9uCi0gICAgICAgICAgICB8fCByZXByZXNlbnRlZE9i
amVjdCBpbnN0YW5jZW9mIFdJLlJlc291cmNlCi0gICAgICAgICAgICB8fCByZXByZXNlbnRlZE9i
amVjdCBpbnN0YW5jZW9mIFdJLlJlc291cmNlQ29sbGVjdGlvbgotICAgICAgICAgICAgfHwgcmVw
cmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5TY3JpcHQKLSAgICAgICAgICAgIHx8IHJlcHJl
c2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0Q29sbGVjdGlvbgotICAgICAgICAgICAg
fHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5DU1NTdHlsZVNoZWV0Ci0gICAgICAg
ICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkNTU1N0eWxlU2hlZXRDb2xs
ZWN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIFdJLlJlc291cmNlc1RhYkNvbnRlbnRWaWV3Owot
ICAgIH0KKyAgICBpZiAocmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5GcmFtZQorICAg
ICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkZyYW1lQ29sbGVjdGlvbgor
ICAgICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlJlc291cmNlCisgICAg
ICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VDb2xsZWN0aW9u
CisgICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0CisgICAg
ICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0Q29sbGVjdGlvbgor
ICAgICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkNTU1N0eWxlU2hlZXQK
KyAgICAgICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5DU1NTdHlsZVNoZWV0
Q29sbGVjdGlvbikKKyAgICAgICAgcmV0dXJuIFdJLlNvdXJjZXNUYWJDb250ZW50VmlldzsKIAog
ICAgIGlmIChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkRPTVN0b3JhZ2VPYmplY3Qg
fHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5Db29raWVTdG9yYWdlT2JqZWN0IHx8
CiAgICAgICAgIHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuRGF0YWJhc2VUYWJsZU9i
amVjdCB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkRhdGFiYXNlT2JqZWN0IHx8
CkBAIC0xNTc2LDEwICsxNTIwLDcgQEAgV0kuX2hhbmRsZURyb3AgPSBmdW5jdGlvbihldmVudCkK
IAogV0kuX2RlYnVnZ2VyRGlkUGF1c2UgPSBmdW5jdGlvbihldmVudCkKIHsKLSAgICBpZiAoV0ku
c2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1RhYi52YWx1ZSkKLSAgICAgICAgV0ku
c2hvd1NvdXJjZXNUYWIoe3Nob3dTY29wZUNoYWluU2lkZWJhcjogV0kuc2V0dGluZ3Muc2hvd1Nj
b3BlQ2hhaW5PblBhdXNlLnZhbHVlfSk7Ci0gICAgZWxzZQotICAgICAgICBXSS5zaG93RGVidWdn
ZXJUYWIoe3Nob3dTY29wZUNoYWluU2lkZWJhcjogV0kuc2V0dGluZ3Muc2hvd1Njb3BlQ2hhaW5P
blBhdXNlLnZhbHVlfSk7CisgICAgV0kuc2hvd1NvdXJjZXNUYWIoe3Nob3dTY29wZUNoYWluU2lk
ZWJhcjogV0kuc2V0dGluZ3Muc2hvd1Njb3BlQ2hhaW5PblBhdXNlLnZhbHVlfSk7CiAKICAgICBX
SS5fZGFzaGJvYXJkQ29udGFpbmVyLnNob3dEYXNoYm9hcmRWaWV3Rm9yUmVwcmVzZW50ZWRPYmpl
Y3QoV0kuX2Rhc2hib2FyZHMuZGVidWdnZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1NldHRpbmcuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1NldHRpbmcuanMKaW5kZXggNmM3ZTVmMGJiNzcuLmYx
NTU3NzkyNDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9CYXNlL1NldHRpbmcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQmFzZS9TZXR0aW5nLmpzCkBAIC0xODgsNyArMTg4LDYgQEAgV0kuc2V0dGluZ3MgPSB7CiAg
ICAgLy8gRXhwZXJpbWVudGFsCiAgICAgZXhwZXJpbWVudGFsRW5hYmxlTGF5ZXJzVGFiOiBuZXcg
V0kuU2V0dGluZygiZXhwZXJpbWVudGFsLWVuYWJsZS1sYXllcnMtdGFiIiwgZmFsc2UpLAogICAg
IGV4cGVyaW1lbnRhbEVuYWJsZU5ld1RhYkJhcjogbmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRh
bC1lbmFibGUtbmV3LXRhYi1iYXIiLCBmYWxzZSksCi0gICAgZXhwZXJpbWVudGFsRW5hYmxlU291
cmNlc1RhYjogbmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRhbC1lbmFibGUtc291cmNlcy10YWIi
LCBmYWxzZSksCiAgICAgZXhwZXJpbWVudGFsRW5hYmxlU3R5bGVzSWNvbnM6IG5ldyBXSS5TZXR0
aW5nKCJleHBlcmltZW50YWwtc3R5bGVzLWljb25zIiwgZmFsc2UpLAogICAgIGV4cGVyaW1lbnRh
bEVuYWJsZVN0eWxlc0p1bXBUb0VmZmVjdGl2ZTogbmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRh
bC1zdHlsZXMtanVtcC10by1lZmZlY3RpdmUiLCBmYWxzZSksCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL05ldHdvcmtNYW5hZ2Vy
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTmV0
d29ya01hbmFnZXIuanMKaW5kZXggZGZmZTk4Yzg4ZTQuLmZhNGYzM2NhZWYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9OZXR3b3Jr
TWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250
cm9sbGVycy9OZXR3b3JrTWFuYWdlci5qcwpAQCAtNTAsNyArNTAsNyBAQCBXSS5OZXR3b3JrTWFu
YWdlciA9IGNsYXNzIE5ldHdvcmtNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHRo
aXMuX3NhdmVMb2NhbFJlc291cmNlT3ZlcnJpZGVzRGVib3VuY2VyID0gbnVsbDsKIAogICAgICAg
ICAvLyBGSVhNRTogUHJvdmlkZSBkZWRpY2F0ZWQgVUkgdG8gdG9nZ2xlIE5ldHdvcmsgSW50ZXJj
ZXB0aW9uIGdsb2JhbGx5PwotICAgICAgICB0aGlzLl9pbnRlcmNlcHRpb25FbmFibGVkID0gV0ku
c2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1RhYi52YWx1ZSB8fCAhIXdpbmRvdy5J
bnNwZWN0b3JUZXN0OworICAgICAgICB0aGlzLl9pbnRlcmNlcHRpb25FbmFibGVkID0gISF3aW5k
b3cuSW5zcGVjdG9yVGVzdDsKIAogICAgICAgICBXSS5ub3RpZmljYXRpb25zLmFkZEV2ZW50TGlz
dGVuZXIoV0kuTm90aWZpY2F0aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRlZCwgdGhpcy5fZXh0cmFE
b21haW5zQWN0aXZhdGVkLCB0aGlzKTsKICAgICAgICAgV0kuRnJhbWUuYWRkRXZlbnRMaXN0ZW5l
cihXSS5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX2hhbmRsZUZyYW1l
TWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKQEAgLTg1LDkgKzg1LDYgQEAgV0kuTmV0d29y
a01hbmFnZXIgPSBjbGFzcyBOZXR3b3JrTWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogCiAgICAg
c3RhdGljIHN1cHBvcnRzTG9jYWxSZXNvdXJjZU92ZXJyaWRlcygpCiAgICAgewotICAgICAgICBp
ZiAoIVdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZVNvdXJjZXNUYWIudmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgcmV0dXJuIHdpbmRvdy5OZXR3b3JrQWdl
bnQgJiYgSW5zcGVjdG9yQmFja2VuZC5kb21haW5zLk5ldHdvcmsgJiYgSW5zcGVjdG9yQmFja2Vu
ZC5kb21haW5zLk5ldHdvcmsuc2V0SW50ZXJjZXB0aW9uRW5hYmxlZDsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbCBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAppbmRleCA2ZTRjMjNj
NjBjMC4uOGE5NzkxNTk1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9NYWluLmh0bWwKQEAgLTkxLDcgKzkxLDYgQEAKICAgICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9IlZpZXdzL0RhdGFiYXNlQ29udGVudFZpZXcuY3NzIj4KICAgICA8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL0RhdGFiYXNlVGFibGVDb250ZW50Vmlldy5jc3MiPgog
ICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvRGVidWdnZXJEYXNoYm9hcmRW
aWV3LmNzcyI+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9EZWJ1Z2dl
clNpZGViYXJQYW5lbC5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmll
d3MvRGVmYXVsdERhc2hib2FyZFZpZXcuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9IlZpZXdzL0RldGFpbHNTZWN0aW9uLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSJWaWV3cy9EaXZpZGVyTmF2aWdhdGlvbkl0ZW0uY3NzIj4KQEAgLTE4MSw3ICsx
ODAsNiBAQAogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvUmVzb3VyY2VJ
Y29ucy5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvUmVzb3Vy
Y2VTZWN1cml0eUNvbnRlbnRWaWV3LmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSJWaWV3cy9SZXNvdXJjZVNpemVzQ29udGVudFZpZXcuY3NzIj4KLSAgICA8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1Jlc291cmNlU2lkZWJhclBhbmVsLmNzcyI+CiAgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9SZXNvdXJjZVRpbWVsaW5lRGF0YUdy
aWROb2RlLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9SZXNv
dXJjZVRpbWluZ0JyZWFrZG93blZpZXcuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9IlZpZXdzL1Jlc291cmNlVHJlZUVsZW1lbnQuY3NzIj4KQEAgLTU2NCwxMSArNTYyLDkg
QEAKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvQXVkaXRUYWJDb250ZW50Vmlldy5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0NhbnZhc1RhYkNvbnRlbnRWaWV3LmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvQ29uc29sZVRhYkNvbnRlbnRWaWV3LmpzIj48
L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGVidWdnZXJUYWJDb250ZW50Vmlldy5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0VsZW1lbnRzVGFiQ29udGVudFZp
ZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9MYXllcnNUYWJDb250ZW50
Vmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1Jlc291cmNlVHJlZUVs
ZW1lbnQuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9SZXNvdXJjZXNUYWJD
b250ZW50Vmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1NlYXJjaFRh
YkNvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvU2V0dGlu
Z3NUYWJDb250ZW50Vmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1Nv
dXJjZXNUYWJDb250ZW50Vmlldy5qcyI+PC9zY3JpcHQ+CkBAIC02NjIsNyArNjU4LDYgQEAKICAg
ICA8c2NyaXB0IHNyYz0iVmlld3MvRGF0YWJhc2VUYWJsZVRyZWVFbGVtZW50LmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGF0YWJhc2VUcmVlRWxlbWVudC5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0RlYnVnZ2VyRGFzaGJvYXJkVmlldy5qcyI+PC9z
Y3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9IlZpZXdzL0RlYnVnZ2VyU2lkZWJhclBhbmVsLmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGVmYXVsdERhc2hib2FyZFZpZXcuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9EaXZpZGVyTmF2aWdhdGlvbkl0ZW0u
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9FZGl0YWJsZURhdGFHcmlkTm9k
ZS5qcyI+PC9zY3JpcHQ+CkBAIC03ODAsNyArNzc1LDYgQEAKICAgICA8c2NyaXB0IHNyYz0iVmll
d3MvUmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHNyYz0iVmlld3MvUmVzb3VyY2VIZWFkZXJzQ29udGVudFZpZXcuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJWaWV3cy9SZXNvdXJjZVNlY3VyaXR5Q29udGVudFZpZXcuanMiPjwvc2Ny
aXB0PgotICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9SZXNvdXJjZVNpZGViYXJQYW5lbC5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1Jlc291cmNlU2l6ZXNDb250ZW50Vmlldy5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1Jlc291cmNlVGltZWxpbmVEYXRh
R3JpZE5vZGUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9SZXNvdXJjZVRp
bWluZ0JyZWFrZG93blZpZXcuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JG
cm9udGVuZEFQSS5qcwppbmRleCBmMDg5MDRjZTdhMi4uYzc3Njg4OTMxOWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvckZy
b250ZW5kQVBJLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1By
b3RvY29sL0luc3BlY3RvckZyb250ZW5kQVBJLmpzCkBAIC0xMDEsMTEgKzEwMSw3IEBAIEluc3Bl
Y3RvckZyb250ZW5kQVBJID0gewogCiAgICAgc2hvd1Jlc291cmNlczogZnVuY3Rpb24oKQogICAg
IHsKLSAgICAgICAgaWYgKFdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZVNvdXJjZXNUYWIu
dmFsdWUpCi0gICAgICAgICAgICBXSS5zaG93U291cmNlc1RhYigpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBXSS5zaG93UmVzb3VyY2VzVGFiKCk7Ci0KKyAgICAgICAgV0kuc2hvd1NvdXJj
ZXNUYWIoKTsKICAgICB9LAogCiAgICAgLy8gQ09NUEFUSUJJTElUWSAoaU9TIDEzKTogbWVyZ2Vk
IGludG8gSW5zcGVjdG9yRnJvbnRlbmRBUEkuc2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29u
dGV4dE1lbnVVdGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9Db250ZXh0TWVudVV0aWxpdGllcy5qcwppbmRleCA4MGY5ZDFiNWMxMS4uMTc5OGQw
YTFiYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0NvbnRleHRNZW51VXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRleHRNZW51VXRpbGl0aWVzLmpzCkBAIC0xNjcsMTggKzE2
NywxMCBAQCBXSS5hcHBlbmRDb250ZXh0TWVudUl0ZW1zRm9yVVJMID0gZnVuY3Rpb24oY29udGV4
dE1lbnUsIHVybCwgb3B0aW9ucyA9IHt9KQogICAgIH0KIAogICAgIGlmIChXSS5uZXR3b3JrTWFu
YWdlci5yZXNvdXJjZUZvclVSTCh1cmwpKSB7Ci0gICAgICAgIGlmIChXSS5zZXR0aW5ncy5leHBl
cmltZW50YWxFbmFibGVTb3VyY2VzVGFiLnZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAoIVdJLmlz
U2hvd2luZ1NvdXJjZXNUYWIoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oV0kuVUlTdHJpbmcoIlJldmVhbCBpbiBTb3VyY2VzIFRhYiIpLCAoKSA9PiB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNob3dSZXNvdXJjZVdpdGhPcHRpb25zKHtwcmVmZXJyZWRUYWJUeXBl
OiBXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcuVHlwZX0pOwotICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFXSS5pc1No
b3dpbmdSZXNvdXJjZXNUYWIoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oV0kuVUlTdHJpbmcoIlJldmVhbCBpbiBSZXNvdXJjZXMgVGFiIiksICgpID0+IHsKLSAg
ICAgICAgICAgICAgICAgICAgc2hvd1Jlc291cmNlV2l0aE9wdGlvbnMoe3ByZWZlcnJlZFRhYlR5
cGU6IFdJLlJlc291cmNlc1RhYkNvbnRlbnRWaWV3LlR5cGV9KTsKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKCFXSS5pc1Nob3dpbmdTb3VyY2VzVGFiKCkp
IHsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV0kuVUlTdHJpbmcoIlJldmVh
bCBpbiBTb3VyY2VzIFRhYiIpLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgc2hvd1Jlc291cmNl
V2l0aE9wdGlvbnMoe3ByZWZlcnJlZFRhYlR5cGU6IFdJLlNvdXJjZXNUYWJDb250ZW50Vmlldy5U
eXBlfSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghV0kuaXNT
aG93aW5nTmV0d29ya1RhYigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9EZWJ1Z2dlclNpZGViYXJQYW5lbC5jc3MgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9EZWJ1Z2dlclNpZGViYXJQYW5lbC5jc3MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwOTk0OTMxYTQxLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9EZWJ1Z2dlclNp
ZGViYXJQYW5lbC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24uZGVidWdnZXIgPiAuY29udGVudCB7Ci0g
ICAgdG9wOiB2YXIoLS1uYXZpZ2F0aW9uLWJhci1oZWlnaHQpOwotfQotCi0uc2lkZWJhciA+IC5w
YW5lbC5uYXZpZ2F0aW9uLmRlYnVnZ2VyID4gLm5hdmlnYXRpb24tYmFyIHsKLSAgICBwb3NpdGlv
bjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci19
Ci0KLS5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24uZGVidWdnZXIgPiAubmF2aWdhdGlvbi1i
YXIgLmRlYnVnZ2VyLWJyZWFrcG9pbnRzIHsKLSAgICBmaWxsOiBub25lOwotICAgIHN0cm9rZTog
dmFyKC0tZ2x5cGgtY29sb3IpOwotfQotLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5kZWJ1
Z2dlciA+IC5uYXZpZ2F0aW9uLWJhciAuZGVidWdnZXItYnJlYWtwb2ludHMuYWN0aXZhdGVkIHsK
LSAgICBmaWxsOiB2YXIoLS1nbHlwaC1jb2xvci1hY3RpdmUpOwotICAgIHN0cm9rZTogdmFyKC0t
Z2x5cGgtY29sb3ItYWN0aXZlKTsKLX0KLQotLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5k
ZWJ1Z2dlciA+IC5uYXZpZ2F0aW9uLWJhciAuZGVidWdnZXItcGF1c2UtcmVzdW1lIHsKLSAgICBm
aWxsOiBub25lOwotICAgIHN0cm9rZTogdmFyKC0tZ2x5cGgtY29sb3IpOwotfQotLnNpZGViYXIg
PiAucGFuZWwubmF2aWdhdGlvbi5kZWJ1Z2dlciA+IC5uYXZpZ2F0aW9uLWJhciAuZGVidWdnZXIt
cGF1c2UtcmVzdW1lLmFjdGl2YXRlZCB7Ci0gICAgc3Ryb2tlOiB2YXIoLS1nbHlwaC1jb2xvci1h
Y3RpdmUpOwotfQotCi0uc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0aW9uLmRlYnVnZ2VyIC53YXJu
aW5nLWJhbm5lciB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgIGZvbnQtc2l6ZTogMTFw
eDsKLSAgICBwYWRkaW5nOiAxMXB4IDZweDsKLSAgICBjb2xvcjogdmFyKC0teWVsbG93LWhpZ2hs
aWdodC10ZXh0LWNvbG9yKTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS15ZWxsb3ctaGln
aGxpZ2h0LWJhY2tncm91bmQtY29sb3IpOwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2
YXIoLS1ib3JkZXItY29sb3IpOwotfQotCi0uc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0aW9uLmRl
YnVnZ2VyIC53YXJuaW5nLWJhbm5lciArIC53YXJuaW5nLWJhbm5lciB7Ci0gICAgZGlzcGxheTog
bm9uZTsKLX0KLQotLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5kZWJ1Z2dlciAudHJlZS1v
dXRsaW5lLnNpbmdsZS10aHJlYWQgPiAuaXRlbS50aHJlYWQgewotICAgIGRpc3BsYXk6IG5vbmU7
Ci19Ci0KLS5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24uZGVidWdnZXIgLnRyZWUtb3V0bGlu
ZS5zaW5nbGUtdGhyZWFkIHsKLSAgICAtd2Via2l0LW1hcmdpbi1zdGFydDogLTEwcHg7Ci19Ci0K
LS5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24uZGVidWdnZXIgLndhcm5pbmctYmFubmVyID4g
YSB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci0gICAgY3Vyc29yOiBwb2ludGVy
OwotfQotCi0uc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0aW9uLmRlYnVnZ2VyIC5kZXRhaWxzLXNl
Y3Rpb24gewotICAgIGZvbnQtc2l6ZTogMTFweDsKLX0KLQotLnNpZGViYXIgPiAucGFuZWwubmF2
aWdhdGlvbi5kZWJ1Z2dlciAuZGV0YWlscy1zZWN0aW9uLnBhdXNlZC1yZWFzb24uY29sbGFwc2Vk
ID4gLmhlYWRlciA+IC5vcHRpb25zIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotLnNpZGVi
YXIgPiAucGFuZWwubmF2aWdhdGlvbi5kZWJ1Z2dlciAuZGV0YWlscy1zZWN0aW9uID4gLmNvbnRl
bnQgewotICAgIGRpc3BsYXk6IGJsb2NrOwotfQotCi0uc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0
aW9uLmRlYnVnZ2VyIC5kZXRhaWxzLXNlY3Rpb24uY29sbGFwc2VkID4gLmNvbnRlbnQgewotICAg
IGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24uZGVidWdn
ZXIgLmRldGFpbHMtc2VjdGlvbiA+IC5jb250ZW50ID4gLmdyb3VwIHsKLSAgICBkaXNwbGF5OiBi
bG9jazsKLX0KLQotLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5kZWJ1Z2dlciAuZGV0YWls
cy1zZWN0aW9uLnNjcmlwdHM6bm90KC5jb2xsYXBzZWQpIHsKLSAgICBib3JkZXItYm90dG9tOiBu
b25lOwotfQotCi0uc2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0aW9uLmRlYnVnZ2VyID4gLmNvbnRl
bnQgPiAuYnJlYWtwb2ludHMgLnRyZWUtb3V0bGluZSAuaXRlbS5ldmVudC10YXJnZXQtd2luZG93
IC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoLi4vSW1hZ2VzL1R5cGVPYmplY3Quc3ZnKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0Rl
YnVnZ2VyU2lkZWJhclBhbmVsLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvRGVidWdnZXJTaWRlYmFyUGFuZWwuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGRiZmQ1ZmY3YzNiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9EZWJ1Z2dlclNpZGViYXJQYW5lbC5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDE3MDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVdJLkRlYnVnZ2VyU2lk
ZWJhclBhbmVsID0gY2xhc3MgRGVidWdnZXJTaWRlYmFyUGFuZWwgZXh0ZW5kcyBXSS5OYXZpZ2F0
aW9uU2lkZWJhclBhbmVsCi17Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAgc3Vw
ZXIoImRlYnVnZ2VyIiwgV0kuVUlTdHJpbmcoIkRlYnVnZ2VyIiksIHRydWUpOwotCi0gICAgICAg
IFdJLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV0kuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlk
Q2hhbmdlLCB0aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOwotICAgICAgICBXSS5G
cmFtZS5hZGRFdmVudExpc3RlbmVyKFdJLkZyYW1lLkV2ZW50LlJlc291cmNlV2FzQWRkZWQsIHRo
aXMuX3Jlc291cmNlQWRkZWQsIHRoaXMpOwotICAgICAgICBXSS5UYXJnZXQuYWRkRXZlbnRMaXN0
ZW5lcihXSS5UYXJnZXQuRXZlbnQuUmVzb3VyY2VBZGRlZCwgdGhpcy5fcmVzb3VyY2VBZGRlZCwg
dGhpcyk7Ci0KLSAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0ku
RGVidWdnZXJNYW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRBZGRlZCwgdGhpcy5fYnJlYWtwb2ludEFk
ZGVkLCB0aGlzKTsKLSAgICAgICAgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu
ZXIoV0kuRE9NRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkRPTUJyZWFrcG9pbnRBZGRlZCwgdGhpcy5f
YnJlYWtwb2ludEFkZGVkLCB0aGlzKTsKLSAgICAgICAgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFk
ZEV2ZW50TGlzdGVuZXIoV0kuRE9NRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkV2ZW50QnJlYWtwb2lu
dEFkZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQsIHRoaXMpOwotICAgICAgICBXSS5kb21EZWJ1
Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5ET01EZWJ1Z2dlck1hbmFnZXIuRXZlbnQu
VVJMQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQsIHRoaXMpOwotCi0gICAg
ICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRlYnVnZ2VyTWFuYWdl
ci5FdmVudC5CcmVha3BvaW50UmVtb3ZlZCwgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMp
OwotICAgICAgICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5ET01E
ZWJ1Z2dlck1hbmFnZXIuRXZlbnQuRE9NQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMuX2JyZWFrcG9p
bnRSZW1vdmVkLCB0aGlzKTsKLSAgICAgICAgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50
TGlzdGVuZXIoV0kuRE9NRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkV2ZW50QnJlYWtwb2ludFJlbW92
ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKLSAgICAgICAgV0kuZG9tRGVidWdn
ZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuRE9NRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlVS
TEJyZWFrcG9pbnRSZW1vdmVkLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7Ci0KLSAg
ICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5h
Z2VyLkV2ZW50LkJyZWFrcG9pbnRzRW5hYmxlZERpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2ludHNF
bmFibGVkRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2
ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdEFkZGVkLCB0aGlzLl9z
Y3JpcHRBZGRlZCwgdGhpcyk7Ci0gICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExp
c3RlbmVyKFdJLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5TY3JpcHRSZW1vdmVkLCB0aGlzLl9zY3Jp
cHRSZW1vdmVkLCB0aGlzKTsKLSAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlz
dGVuZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdHNDbGVhcmVkLCB0aGlzLl9zY3Jp
cHRzQ2xlYXJlZCwgdGhpcyk7Ci0gICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExp
c3RlbmVyKFdJLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5QYXVzZWQsIHRoaXMuX2RlYnVnZ2VyRGlk
UGF1c2UsIHRoaXMpOwotICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l
cihXSS5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuUmVzdW1lZCwgdGhpcy5fZGVidWdnZXJEaWRSZXN1
bWUsIHRoaXMpOwotICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihX
SS5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgdGhpcy5fZGVidWdn
ZXJDYWxsRnJhbWVzRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2Vy
LmFkZEV2ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkFjdGl2ZUNhbGxGcmFt
ZURpZENoYW5nZSwgdGhpcy5fZGVidWdnZXJBY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHRoaXMp
OwotICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5EZWJ1Z2dl
ck1hbmFnZXIuRXZlbnQuV2FpdGluZ1RvUGF1c2UsIHRoaXMuX2RlYnVnZ2VyV2FpdGluZ1RvUGF1
c2UsIHRoaXMpOwotCi0gICAgICAgIFdJLkRPTUJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihX
SS5ET01CcmVha3BvaW50LkV2ZW50LkRPTU5vZGVDaGFuZ2VkLCB0aGlzLl9oYW5kbGVET01CcmVh
a3BvaW50RE9NTm9kZUNoYW5nZWQsIHRoaXMpOwotCi0gICAgICAgIFdJLnRpbWVsaW5lTWFuYWdl
ci5hZGRFdmVudExpc3RlbmVyKFdJLlRpbWVsaW5lTWFuYWdlci5FdmVudC5DYXB0dXJpbmdTdGF0
ZUNoYW5nZWQsIHRoaXMuX2hhbmRsZVRpbWVsaW5lQ2FwdHVyaW5nU3RhdGVDaGFuZ2VkLCB0aGlz
KTsKLQotICAgICAgICBXSS5hdWRpdE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5BdWRpdE1h
bmFnZXIuRXZlbnQuVGVzdFNjaGVkdWxlZCwgdGhpcy5faGFuZGxlQXVkaXRNYW5hZ2VyVGVzdFNj
aGVkdWxlZCwgdGhpcyk7Ci0gICAgICAgIFdJLmF1ZGl0TWFuYWdlci5hZGRFdmVudExpc3RlbmVy
KFdJLkF1ZGl0TWFuYWdlci5FdmVudC5UZXN0Q29tcGxldGVkLCB0aGlzLl9oYW5kbGVBdWRpdE1h
bmFnZXJUZXN0Q29tcGxldGVkLCB0aGlzKTsKLQotICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLmFk
ZEV2ZW50TGlzdGVuZXIoV0kuVGFyZ2V0TWFuYWdlci5FdmVudC5UYXJnZXRBZGRlZCwgdGhpcy5f
dGFyZ2V0QWRkZWQsIHRoaXMpOwotICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLmFkZEV2ZW50TGlz
dGVuZXIoV0kuVGFyZ2V0TWFuYWdlci5FdmVudC5UYXJnZXRSZW1vdmVkLCB0aGlzLl90YXJnZXRS
ZW1vdmVkLCB0aGlzKTsKLQotICAgICAgICB0aGlzLl90aW1lbGluZVJlY29yZGluZ1dhcm5pbmdF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHRoaXMuX3Rp
bWVsaW5lUmVjb3JkaW5nV2FybmluZ0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgid2FybmluZy1iYW5u
ZXIiKTsKLSAgICAgICAgdGhpcy5fdGltZWxpbmVSZWNvcmRpbmdXYXJuaW5nRWxlbWVudC5hcHBl
bmQoV0kuVUlTdHJpbmcoIkRlYnVnZ2VyIGRpc2FibGVkIGR1cmluZyBUaW1lbGluZSByZWNvcmRp
bmciKSwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Ci0gICAgICAgIGxldCB0aW1lbGlu
ZVN0b3BSZWNvcmRpbmdMaW5rID0gdGhpcy5fdGltZWxpbmVSZWNvcmRpbmdXYXJuaW5nRWxlbWVu
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpOwotICAgICAgICB0aW1l
bGluZVN0b3BSZWNvcmRpbmdMaW5rLnRleHRDb250ZW50ID0gV0kuVUlTdHJpbmcoIlN0b3AgcmVj
b3JkaW5nIik7Ci0gICAgICAgIHRpbWVsaW5lU3RvcFJlY29yZGluZ0xpbmsuYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCAoKSA9PiB7IFdJLnRpbWVsaW5lTWFuYWdlci5zdG9wQ2FwdHVyaW5nKCk7
IH0pOwotCi0gICAgICAgIHRoaXMuX2F1ZGl0VGVzdFdhcm5pbmdFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHRoaXMuX2F1ZGl0VGVzdFdhcm5pbmdFbGVt
ZW50LmNsYXNzTGlzdC5hZGQoIndhcm5pbmctYmFubmVyIik7Ci0gICAgICAgIHRoaXMuX2F1ZGl0
VGVzdFdhcm5pbmdFbGVtZW50LmFwcGVuZChXSS5VSVN0cmluZygiRGVidWdnZXIgZGlzYWJsZWQg
ZHVyaW5nIEF1ZGl0IiksIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwotICAgICAgICBs
ZXQgYXVkaXRTdG9wUmVjb3JkaW5nTGluayA9IHRoaXMuX2F1ZGl0VGVzdFdhcm5pbmdFbGVtZW50
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSk7Ci0gICAgICAgIGF1ZGl0
U3RvcFJlY29yZGluZ0xpbmsudGV4dENvbnRlbnQgPSBXSS5VSVN0cmluZygiU3RvcCBBdWRpdCIp
OwotICAgICAgICBhdWRpdFN0b3BSZWNvcmRpbmdMaW5rLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNr
IiwgKCkgPT4geyBXSS5hdWRpdE1hbmFnZXIuc3RvcCgpOyB9KTsKLQotICAgICAgICB0aGlzLl9i
cmVha3BvaW50c0Rpc2FibGVkV2FybmluZ0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNEaXNhYmxlZFdhcm5pbmdFbGVtZW50
LmNsYXNzTGlzdC5hZGQoIndhcm5pbmctYmFubmVyIik7Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9p
bnRzRGlzYWJsZWRXYXJuaW5nRWxlbWVudC5hcHBlbmQoV0kuVUlTdHJpbmcoIkJyZWFrcG9pbnRz
IGRpc2FibGVkIiksIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwotICAgICAgICBsZXQg
ZW5hYmxlQnJlYWtwb2ludHNMaW5rID0gdGhpcy5fYnJlYWtwb2ludHNEaXNhYmxlZFdhcm5pbmdF
bGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSk7Ci0gICAgICAg
IGVuYWJsZUJyZWFrcG9pbnRzTGluay50ZXh0Q29udGVudCA9IFdJLlVJU3RyaW5nKCJFbmFibGUg
YnJlYWtwb2ludHMiKTsKLSAgICAgICAgZW5hYmxlQnJlYWtwb2ludHNMaW5rLmFkZEV2ZW50TGlz
dGVuZXIoImNsaWNrIiwgKCkgPT4geyBXSS5kZWJ1Z2dlclRvZ2dsZUJyZWFrcG9pbnRzKCk7IH0p
OwotCi0gICAgICAgIHRoaXMuX25hdmlnYXRpb25CYXIgPSBuZXcgV0kuTmF2aWdhdGlvbkJhcjsK
LSAgICAgICAgdGhpcy5hZGRTdWJ2aWV3KHRoaXMuX25hdmlnYXRpb25CYXIpOwotCi0gICAgICAg
IHZhciBicmVha3BvaW50c0ltYWdlID0ge3NyYzogIkltYWdlcy9CcmVha3BvaW50cy5zdmciLCB3
aWR0aDogMTUsIGhlaWdodDogMTV9OwotICAgICAgICB2YXIgcGF1c2VJbWFnZSA9IHtzcmM6ICJJ
bWFnZXMvUGF1c2Uuc3ZnIiwgd2lkdGg6IDE1LCBoZWlnaHQ6IDE1fTsKLSAgICAgICAgdmFyIHJl
c3VtZUltYWdlID0ge3NyYzogIkltYWdlcy9SZXN1bWUuc3ZnIiwgd2lkdGg6IDE1LCBoZWlnaHQ6
IDE1fTsKLSAgICAgICAgdmFyIHN0ZXBPdmVySW1hZ2UgPSB7c3JjOiAiSW1hZ2VzL1N0ZXBPdmVy
LnN2ZyIsIHdpZHRoOiAxNSwgaGVpZ2h0OiAxNX07Ci0gICAgICAgIHZhciBzdGVwSW50b0ltYWdl
ID0ge3NyYzogIkltYWdlcy9TdGVwSW50by5zdmciLCB3aWR0aDogMTUsIGhlaWdodDogMTV9Owot
ICAgICAgICB2YXIgc3RlcE91dEltYWdlID0ge3NyYzogIkltYWdlcy9TdGVwT3V0LnN2ZyIsIHdp
ZHRoOiAxNSwgaGVpZ2h0OiAxNX07Ci0KLSAgICAgICAgdmFyIHRvb2xUaXAgPSBXSS5VSVN0cmlu
ZygiRW5hYmxlIGFsbCBicmVha3BvaW50cyAoJXMpIikuZm9ybWF0KFdJLnRvZ2dsZUJyZWFrcG9p
bnRzS2V5Ym9hcmRTaG9ydGN1dC5kaXNwbGF5TmFtZSk7Ci0gICAgICAgIHZhciBhbHRUb29sVGlw
ID0gV0kuVUlTdHJpbmcoIkRpc2FibGUgYWxsIGJyZWFrcG9pbnRzICglcykiKS5mb3JtYXQoV0ku
dG9nZ2xlQnJlYWtwb2ludHNLZXlib2FyZFNob3J0Y3V0LmRpc3BsYXlOYW1lKTsKLQotICAgICAg
ICB0aGlzLl9kZWJ1Z2dlckJyZWFrcG9pbnRzQnV0dG9uSXRlbSA9IG5ldyBXSS5BY3RpdmF0ZUJ1
dHRvbk5hdmlnYXRpb25JdGVtKCJkZWJ1Z2dlci1icmVha3BvaW50cyIsIHRvb2xUaXAsIGFsdFRv
b2xUaXAsIGJyZWFrcG9pbnRzSW1hZ2Uuc3JjLCBicmVha3BvaW50c0ltYWdlLndpZHRoLCBicmVh
a3BvaW50c0ltYWdlLmhlaWdodCk7Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyQnJlYWtwb2ludHNC
dXR0b25JdGVtLmFjdGl2YXRlZCA9IFdJLmRlYnVnZ2VyTWFuYWdlci5icmVha3BvaW50c0VuYWJs
ZWQ7Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyQnJlYWtwb2ludHNCdXR0b25JdGVtLmFkZEV2ZW50
TGlzdGVuZXIoV0kuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgV0kuZGVidWdn
ZXJUb2dnbGVCcmVha3BvaW50cywgdGhpcyk7Ci0gICAgICAgIHRoaXMuX25hdmlnYXRpb25CYXIu
YWRkTmF2aWdhdGlvbkl0ZW0odGhpcy5fZGVidWdnZXJCcmVha3BvaW50c0J1dHRvbkl0ZW0pOwot
Ci0gICAgICAgIHRvb2xUaXAgPSBXSS5VSVN0cmluZygiUGF1c2Ugc2NyaXB0IGV4ZWN1dGlvbiAo
JXMgb3IgJXMpIikuZm9ybWF0KFdJLnBhdXNlT3JSZXN1bWVLZXlib2FyZFNob3J0Y3V0LmRpc3Bs
YXlOYW1lLCBXSS5wYXVzZU9yUmVzdW1lQWx0ZXJuYXRlS2V5Ym9hcmRTaG9ydGN1dC5kaXNwbGF5
TmFtZSk7Ci0gICAgICAgIGFsdFRvb2xUaXAgPSBXSS5VSVN0cmluZygiQ29udGludWUgc2NyaXB0
IGV4ZWN1dGlvbiAoJXMgb3IgJXMpIikuZm9ybWF0KFdJLnBhdXNlT3JSZXN1bWVLZXlib2FyZFNo
b3J0Y3V0LmRpc3BsYXlOYW1lLCBXSS5wYXVzZU9yUmVzdW1lQWx0ZXJuYXRlS2V5Ym9hcmRTaG9y
dGN1dC5kaXNwbGF5TmFtZSk7Ci0KLSAgICAgICAgdGhpcy5fZGVidWdnZXJQYXVzZVJlc3VtZUJ1
dHRvbkl0ZW0gPSBuZXcgV0kuVG9nZ2xlQnV0dG9uTmF2aWdhdGlvbkl0ZW0oImRlYnVnZ2VyLXBh
dXNlLXJlc3VtZSIsIHRvb2xUaXAsIGFsdFRvb2xUaXAsIHBhdXNlSW1hZ2Uuc3JjLCByZXN1bWVJ
bWFnZS5zcmMsIHBhdXNlSW1hZ2Uud2lkdGgsIHBhdXNlSW1hZ2UuaGVpZ2h0KTsKLSAgICAgICAg
dGhpcy5fZGVidWdnZXJQYXVzZVJlc3VtZUJ1dHRvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXSS5C
dXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCBXSS5kZWJ1Z2dlclBhdXNlUmVzdW1l
VG9nZ2xlLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkJhci5hZGROYXZpZ2F0aW9u
SXRlbSh0aGlzLl9kZWJ1Z2dlclBhdXNlUmVzdW1lQnV0dG9uSXRlbSk7Ci0KLSAgICAgICAgdGhp
cy5fZGVidWdnZXJTdGVwT3ZlckJ1dHRvbkl0ZW0gPSBuZXcgV0kuQnV0dG9uTmF2aWdhdGlvbkl0
ZW0oImRlYnVnZ2VyLXN0ZXAtb3ZlciIsIFdJLlVJU3RyaW5nKCJTdGVwIG92ZXIgKCVzIG9yICVz
KSIpLmZvcm1hdChXSS5zdGVwT3ZlcktleWJvYXJkU2hvcnRjdXQuZGlzcGxheU5hbWUsIFdJLnN0
ZXBPdmVyQWx0ZXJuYXRlS2V5Ym9hcmRTaG9ydGN1dC5kaXNwbGF5TmFtZSksIHN0ZXBPdmVySW1h
Z2Uuc3JjLCBzdGVwT3ZlckltYWdlLndpZHRoLCBzdGVwT3ZlckltYWdlLmhlaWdodCk7Ci0gICAg
ICAgIHRoaXMuX2RlYnVnZ2VyU3RlcE92ZXJCdXR0b25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV0ku
QnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgV0kuZGVidWdnZXJTdGVwT3Zlciwg
dGhpcyk7Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyU3RlcE92ZXJCdXR0b25JdGVtLmVuYWJsZWQg
PSBmYWxzZTsKLSAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkJhci5hZGROYXZpZ2F0aW9uSXRlbSh0
aGlzLl9kZWJ1Z2dlclN0ZXBPdmVyQnV0dG9uSXRlbSk7Ci0KLSAgICAgICAgdGhpcy5fZGVidWdn
ZXJTdGVwSW50b0J1dHRvbkl0ZW0gPSBuZXcgV0kuQnV0dG9uTmF2aWdhdGlvbkl0ZW0oImRlYnVn
Z2VyLXN0ZXAtaW50byIsIFdJLlVJU3RyaW5nKCJTdGVwIGludG8gKCVzIG9yICVzKSIpLmZvcm1h
dChXSS5zdGVwSW50b0tleWJvYXJkU2hvcnRjdXQuZGlzcGxheU5hbWUsIFdJLnN0ZXBJbnRvQWx0
ZXJuYXRlS2V5Ym9hcmRTaG9ydGN1dC5kaXNwbGF5TmFtZSksIHN0ZXBJbnRvSW1hZ2Uuc3JjLCBz
dGVwSW50b0ltYWdlLndpZHRoLCBzdGVwSW50b0ltYWdlLmhlaWdodCk7Ci0gICAgICAgIHRoaXMu
X2RlYnVnZ2VyU3RlcEludG9CdXR0b25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV0kuQnV0dG9uTmF2
aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgV0kuZGVidWdnZXJTdGVwSW50bywgdGhpcyk7Ci0g
ICAgICAgIHRoaXMuX2RlYnVnZ2VyU3RlcEludG9CdXR0b25JdGVtLmVuYWJsZWQgPSBmYWxzZTsK
LSAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkJhci5hZGROYXZpZ2F0aW9uSXRlbSh0aGlzLl9kZWJ1
Z2dlclN0ZXBJbnRvQnV0dG9uSXRlbSk7Ci0KLSAgICAgICAgdGhpcy5fZGVidWdnZXJTdGVwT3V0
QnV0dG9uSXRlbSA9IG5ldyBXSS5CdXR0b25OYXZpZ2F0aW9uSXRlbSgiZGVidWdnZXItc3RlcC1v
dXQiLCBXSS5VSVN0cmluZygiU3RlcCBvdXQgKCVzIG9yICVzKSIpLmZvcm1hdChXSS5zdGVwT3V0
S2V5Ym9hcmRTaG9ydGN1dC5kaXNwbGF5TmFtZSwgV0kuc3RlcE91dEFsdGVybmF0ZUtleWJvYXJk
U2hvcnRjdXQuZGlzcGxheU5hbWUpLCBzdGVwT3V0SW1hZ2Uuc3JjLCBzdGVwT3V0SW1hZ2Uud2lk
dGgsIHN0ZXBPdXRJbWFnZS5oZWlnaHQpOwotICAgICAgICB0aGlzLl9kZWJ1Z2dlclN0ZXBPdXRC
dXR0b25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV0kuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQu
Q2xpY2tlZCwgV0kuZGVidWdnZXJTdGVwT3V0LCB0aGlzKTsKLSAgICAgICAgdGhpcy5fZGVidWdn
ZXJTdGVwT3V0QnV0dG9uSXRlbS5lbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX25hdmln
YXRpb25CYXIuYWRkTmF2aWdhdGlvbkl0ZW0odGhpcy5fZGVidWdnZXJTdGVwT3V0QnV0dG9uSXRl
bSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gc2hvd1Jlc291cmNlc1dpdGhJc3N1ZXNPbmx5RmlsdGVy
RnVuY3Rpb24odHJlZUVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElzc3VlcyBh
cmUgb25seSBzaG93biBpbiB0aGUgc2NyaXB0cyB0cmVlIG91dGxpbmUuCi0gICAgICAgICAgICBp
ZiAodHJlZUVsZW1lbnQudHJlZU91dGxpbmUgIT09IHRoaXMuX3NjcmlwdHNDb250ZW50VHJlZU91
dGxpbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIC8vIEtl
ZXAgaXNzdWVzLgotICAgICAgICAgICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuSXNz
dWVUcmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAg
ICAgLy8gS2VlcCByZXNvdXJjZXMgd2l0aCBpc3N1ZXMuCi0gICAgICAgICAgICBpZiAodHJlZUVs
ZW1lbnQuaGFzQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiB0
cmVlRWxlbWVudC5jaGlsZHJlbikgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQgaW5z
dGFuY2VvZiBXSS5Jc3N1ZVRyZWVFbGVtZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5maWx0ZXJCYXIuYWRkRmls
dGVyQmFyQnV0dG9uKCJkZWJ1Z2dlci1zaG93LXJlc291cmNlcy13aXRoLWlzc3Vlcy1vbmx5Iiwg
c2hvd1Jlc291cmNlc1dpdGhJc3N1ZXNPbmx5RmlsdGVyRnVuY3Rpb24uYmluZCh0aGlzKSwgZmFs
c2UsIFdJLlVJU3RyaW5nKCJPbmx5IHNob3cgcmVzb3VyY2VzIHdpdGggaXNzdWVzIiksIFdJLlVJ
U3RyaW5nKCJTaG93IGFsbCByZXNvdXJjZXMiKSwgIkltYWdlcy9FcnJvcnMuc3ZnIiwgMTUsIDE1
KTsKLQotICAgICAgICB0aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZSA9IHRoaXMu
Y29udGVudFRyZWVPdXRsaW5lOwotCi0gICAgICAgIGxldCBicmVha3BvaW50c1JvdyA9IG5ldyBX
SS5EZXRhaWxzU2VjdGlvblJvdzsKLSAgICAgICAgYnJlYWtwb2ludHNSb3cuZWxlbWVudC5hcHBl
bmRDaGlsZCh0aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZS5lbGVtZW50KTsKLQot
ICAgICAgICBsZXQgYnJlYWtwb2ludE5hdmlnYXRpb25CYXJXcmFwcGVyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7Ci0KLSAgICAgICAgbGV0IGJyZWFrcG9pbnROYXZpZ2F0aW9uQmFy
ID0gbmV3IFdJLk5hdmlnYXRpb25CYXI7Ci0gICAgICAgIGJyZWFrcG9pbnROYXZpZ2F0aW9uQmFy
V3JhcHBlci5hcHBlbmRDaGlsZChicmVha3BvaW50TmF2aWdhdGlvbkJhci5lbGVtZW50KTsKLQot
ICAgICAgICB0aGlzLl9jcmVhdGVCcmVha3BvaW50QnV0dG9uID0gbmV3IFdJLkJ1dHRvbk5hdmln
YXRpb25JdGVtKCJjcmVhdGUtYnJlYWtwb2ludCIsIFdJLlVJU3RyaW5nKCJDcmVhdGUgQnJlYWtw
b2ludCIpLCAiSW1hZ2VzL1BsdXMxMy5zdmciLCAxMywgMTMpOwotICAgICAgICBXSS5hZGRNb3Vz
ZURvd25Db250ZXh0TWVudUhhbmRsZXJzKHRoaXMuX2NyZWF0ZUJyZWFrcG9pbnRCdXR0b24uZWxl
bWVudCwgdGhpcy5fcG9wdWxhdGVDcmVhdGVCcmVha3BvaW50Q29udGV4dE1lbnUuYmluZCh0aGlz
KSk7Ci0gICAgICAgIGJyZWFrcG9pbnROYXZpZ2F0aW9uQmFyLmFkZE5hdmlnYXRpb25JdGVtKHRo
aXMuX2NyZWF0ZUJyZWFrcG9pbnRCdXR0b24pOwotCi0gICAgICAgIGxldCBicmVha3BvaW50c0dy
b3VwID0gbmV3IFdJLkRldGFpbHNTZWN0aW9uR3JvdXAoW2JyZWFrcG9pbnRzUm93XSk7Ci0gICAg
ICAgIHRoaXMuX2JyZWFrcG9pbnRzU2VjdGlvbiA9IG5ldyBXSS5EZXRhaWxzU2VjdGlvbigiYnJl
YWtwb2ludHMiLCBXSS5VSVN0cmluZygiQnJlYWtwb2ludHMiKSwgW2JyZWFrcG9pbnRzR3JvdXBd
LCBicmVha3BvaW50TmF2aWdhdGlvbkJhcldyYXBwZXIpOwotICAgICAgICB0aGlzLmNvbnRlbnRW
aWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fYnJlYWtwb2ludHNTZWN0aW9uLmVsZW1lbnQp
OwotCi0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLmFkZEV2ZW50
TGlzdGVuZXIoV0kuVHJlZU91dGxpbmUuRXZlbnQuRWxlbWVudEFkZGVkLCB0aGlzLl9oYW5kbGVC
cmVha3BvaW50RWxlbWVudEFkZGVkT3JSZW1vdmVkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fYnJl
YWtwb2ludHNDb250ZW50VHJlZU91dGxpbmUuYWRkRXZlbnRMaXN0ZW5lcihXSS5UcmVlT3V0bGlu
ZS5FdmVudC5FbGVtZW50UmVtb3ZlZCwgdGhpcy5faGFuZGxlQnJlYWtwb2ludEVsZW1lbnRBZGRl
ZE9yUmVtb3ZlZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVP
dXRsaW5lLmFkZEV2ZW50TGlzdGVuZXIoV0kuVHJlZU91dGxpbmUuRXZlbnQuU2VsZWN0aW9uRGlk
Q2hhbmdlLCB0aGlzLl90cmVlU2VsZWN0aW9uRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICAgICAgdGhp
cy5fYnJlYWtwb2ludHNDb250ZW50VHJlZU91dGxpbmUub25kZWxldGUgPSB0aGlzLl9icmVha3Bv
aW50VHJlZU91dGxpbmVEZWxldGVUcmVlRWxlbWVudC5iaW5kKHRoaXMpOwotICAgICAgICB0aGlz
Ll9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZS5wb3B1bGF0ZUNvbnRleHRNZW51ID0gZnVu
Y3Rpb24oY29udGV4dE1lbnUsIGV2ZW50LCB0cmVlRWxlbWVudCkgewotICAgICAgICAgICAgdGhp
cy5fYnJlYWtwb2ludFRyZWVPdXRsaW5lQ29udGV4dE1lbnVUcmVlRWxlbWVudChjb250ZXh0TWVu
dSwgZXZlbnQsIHRyZWVFbGVtZW50KTsKLQotICAgICAgICAgICAgV0kuVHJlZU91dGxpbmUucHJv
dG90eXBlLnBvcHVsYXRlQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIGV2ZW50LCB0cmVlRWxlbWVu
dCk7Ci0gICAgICAgIH0uYmluZCh0aGlzKTsKLQotICAgICAgICB0aGlzLl9zY3JpcHRzQ29udGVu
dFRyZWVPdXRsaW5lID0gdGhpcy5jcmVhdGVDb250ZW50VHJlZU91dGxpbmUoKTsKLSAgICAgICAg
dGhpcy5fc2NyaXB0c0NvbnRlbnRUcmVlT3V0bGluZS5hZGRFdmVudExpc3RlbmVyKFdJLlRyZWVP
dXRsaW5lLkV2ZW50LlNlbGVjdGlvbkRpZENoYW5nZSwgdGhpcy5fdHJlZVNlbGVjdGlvbkRpZENo
YW5nZSwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX3NjcmlwdHNDb250ZW50VHJlZU91dGxpbmUuaW5j
bHVkZVNvdXJjZU1hcFJlc291cmNlQ2hpbGRyZW4gPSB0cnVlOwotCi0gICAgICAgIGxldCBzY3Jp
cHRzUm93ID0gbmV3IFdJLkRldGFpbHNTZWN0aW9uUm93OwotICAgICAgICBzY3JpcHRzUm93LmVs
ZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fc2NyaXB0c0NvbnRlbnRUcmVlT3V0bGluZS5lbGVtZW50
KTsKLQotICAgICAgICBsZXQgc2NyaXB0c0dyb3VwID0gbmV3IFdJLkRldGFpbHNTZWN0aW9uR3Jv
dXAoW3NjcmlwdHNSb3ddKTsKLSAgICAgICAgdGhpcy5fc2NyaXB0c1NlY3Rpb24gPSBuZXcgV0ku
RGV0YWlsc1NlY3Rpb24oInNjcmlwdHMiLCBXSS5VSVN0cmluZygiU291cmNlcyIpLCBbc2NyaXB0
c0dyb3VwXSk7Ci0gICAgICAgIHRoaXMuY29udGVudFZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZCh0
aGlzLl9zY3JpcHRzU2VjdGlvbi5lbGVtZW50KTsKLQotICAgICAgICB0aGlzLl9jYWxsU3RhY2tU
cmVlT3V0bGluZSA9IHRoaXMuY3JlYXRlQ29udGVudFRyZWVPdXRsaW5lKHtzdXBwcmVzc0ZpbHRl
cmluZzogdHJ1ZX0pOwotICAgICAgICB0aGlzLl9jYWxsU3RhY2tUcmVlT3V0bGluZS5hZGRFdmVu
dExpc3RlbmVyKFdJLlRyZWVPdXRsaW5lLkV2ZW50LlNlbGVjdGlvbkRpZENoYW5nZSwgdGhpcy5f
dHJlZVNlbGVjdGlvbkRpZENoYW5nZSwgdGhpcyk7Ci0KLSAgICAgICAgdGhpcy5fY2FsbFN0YWNr
Um93ID0gbmV3IFdJLkRldGFpbHNTZWN0aW9uUm93OwotICAgICAgICB0aGlzLl9jYWxsU3RhY2tS
b3cuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jYWxsU3RhY2tUcmVlT3V0bGluZS5lbGVtZW50
KTsKLQotICAgICAgICB0aGlzLl9jYWxsU3RhY2tHcm91cCA9IG5ldyBXSS5EZXRhaWxzU2VjdGlv
bkdyb3VwKFt0aGlzLl9jYWxsU3RhY2tSb3ddKTsKLSAgICAgICAgdGhpcy5fY2FsbFN0YWNrU2Vj
dGlvbiA9IG5ldyBXSS5EZXRhaWxzU2VjdGlvbigiY2FsbC1zdGFjayIsIFdJLlVJU3RyaW5nKCJD
YWxsIFN0YWNrIiksIFt0aGlzLl9jYWxsU3RhY2tHcm91cF0pOwotCi0gICAgICAgIHRoaXMuX21h
aW5UYXJnZXRUcmVlRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIHRoaXMuX2FjdGl2ZUNhbGxGcmFt
ZVRyZWVFbGVtZW50ID0gbnVsbDsKLQotICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRs
aW5lID0gbnVsbDsKLQotICAgICAgICB0aGlzLl9wYXVzZVJlYXNvbkxpbmtDb250YWluZXJFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICB0aGlzLl9wYXVz
ZVJlYXNvblRleHRSb3cgPSBuZXcgV0kuRGV0YWlsc1NlY3Rpb25UZXh0Um93OwotICAgICAgICB0
aGlzLl9wYXVzZVJlYXNvbkdyb3VwID0gbmV3IFdJLkRldGFpbHNTZWN0aW9uR3JvdXAoW3RoaXMu
X3BhdXNlUmVhc29uVGV4dFJvd10pOwotICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblNlY3Rpb24g
PSBuZXcgV0kuRGV0YWlsc1NlY3Rpb24oInBhdXNlZC1yZWFzb24iLCBXSS5VSVN0cmluZygiUGF1
c2UgUmVhc29uIiksIFt0aGlzLl9wYXVzZVJlYXNvbkdyb3VwXSwgdGhpcy5fcGF1c2VSZWFzb25M
aW5rQ29udGFpbmVyRWxlbWVudCk7Ci0KLSAgICAgICAgV0kuQnJlYWtwb2ludC5hZGRFdmVudExp
c3RlbmVyKFdJLkJyZWFrcG9pbnQuRXZlbnQuRGlzcGxheUxvY2F0aW9uRGlkQ2hhbmdlLCB0aGlz
Ll9oYW5kbGVEZWJ1Z2dlck9iamVjdERpc3BsYXlMb2NhdGlvbkRpZENoYW5nZSwgdGhpcyk7Ci0g
ICAgICAgIFdJLklzc3VlTWVzc2FnZS5hZGRFdmVudExpc3RlbmVyKFdJLklzc3VlTWVzc2FnZS5F
dmVudC5EaXNwbGF5TG9jYXRpb25EaWRDaGFuZ2UsIHRoaXMuX2hhbmRsZURlYnVnZ2VyT2JqZWN0
RGlzcGxheUxvY2F0aW9uRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICAgICAgV0kuY29uc29sZU1hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5Db25zb2xlTWFuYWdlci5FdmVudC5Jc3N1ZUFkZGVkLCB0
aGlzLl9oYW5kbGVJc3N1ZUFkZGVkLCB0aGlzKTsKLSAgICAgICAgV0kuY29uc29sZU1hbmFnZXIu
YWRkRXZlbnRMaXN0ZW5lcihXSS5Db25zb2xlTWFuYWdlci5FdmVudC5DbGVhcmVkLCB0aGlzLl9o
YW5kbGVJc3N1ZXNDbGVhcmVkLCB0aGlzKTsKLQotICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIu
YWRkQnJlYWtwb2ludChXSS5kZWJ1Z2dlck1hbmFnZXIuYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQp
OwotICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRkQnJlYWtwb2ludChXSS5kZWJ1Z2dlck1h
bmFnZXIudW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCk7Ci0KLSAgICAgICAgLy8gQ09NUEFU
SUJJTElUWSAoaU9TIDEwKTogRGVidWdnZXJBZ2VudC5zZXRQYXVzZU9uQXNzZXJ0aW9ucyBkaWQg
bm90IGV4aXN0IHlldC4KLSAgICAgICAgaWYgKEluc3BlY3RvckJhY2tlbmQuZG9tYWlucy5EZWJ1
Z2dlci5zZXRQYXVzZU9uQXNzZXJ0aW9ucyAmJiBXSS5zZXR0aW5ncy5zaG93QXNzZXJ0aW9uRmFp
bHVyZXNCcmVha3BvaW50LnZhbHVlKQotICAgICAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFk
ZEJyZWFrcG9pbnQoV0kuZGVidWdnZXJNYW5hZ2VyLmFzc2VydGlvbkZhaWx1cmVzQnJlYWtwb2lu
dCk7Ci0KLSAgICAgICAgLy8gQ09NUEFUSUJJTElUWSAoaU9TIDEzKTogRGVidWdnZXJBZ2VudC5z
ZXRQYXVzZU9uTWljcm90YXNrcyBkaWQgbm90IGV4aXN0IHlldC4KLSAgICAgICAgaWYgKEluc3Bl
Y3RvckJhY2tlbmQuZG9tYWlucy5EZWJ1Z2dlci5zZXRQYXVzZU9uTWljcm90YXNrcyAmJiBXSS5z
ZXR0aW5ncy5zaG93QWxsTWljcm90YXNrc0JyZWFrcG9pbnQudmFsdWUpCi0gICAgICAgICAgICBX
SS5kZWJ1Z2dlck1hbmFnZXIuYWRkQnJlYWtwb2ludChXSS5kZWJ1Z2dlck1hbmFnZXIuYWxsTWlj
cm90YXNrc0JyZWFrcG9pbnQpOwotCi0gICAgICAgIGZvciAobGV0IHRhcmdldCBvZiBXSS50YXJn
ZXRzKQotICAgICAgICAgICAgdGhpcy5fYWRkVGFyZ2V0KHRhcmdldCk7Ci0gICAgICAgIHRoaXMu
X3VwZGF0ZUNhbGxTdGFja1RyZWVPdXRsaW5lKCk7Ci0KLSAgICAgICAgaWYgKFdJLm5ldHdvcmtN
YW5hZ2VyLm1haW5GcmFtZSkKLSAgICAgICAgICAgIHRoaXMuX2FkZFJlc291cmNlc1JlY3Vyc2l2
ZWx5Rm9yRnJhbWUoV0kubmV0d29ya01hbmFnZXIubWFpbkZyYW1lKTsKLQotICAgICAgICBmb3Ig
KGxldCBzY3JpcHQgb2YgV0kuZGVidWdnZXJNYW5hZ2VyLmtub3duTm9uUmVzb3VyY2VTY3JpcHRz
KQotICAgICAgICAgICAgdGhpcy5fYWRkU2NyaXB0KHNjcmlwdCk7Ci0KLSAgICAgICAgaWYgKFdJ
LmRvbURlYnVnZ2VyTWFuYWdlci5zdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgIGlmIChXSS5zZXR0
aW5ncy5zaG93QWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2ludC52YWx1ZSkKLSAgICAgICAgICAg
ICAgICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRCcmVha3BvaW50KFdJLmRvbURlYnVn
Z2VyTWFuYWdlci5hbGxBbmltYXRpb25GcmFtZXNCcmVha3BvaW50KTsKLQotICAgICAgICAgICAg
aWYgKFdJLnNldHRpbmdzLnNob3dBbGxUaW1lb3V0c0JyZWFrcG9pbnQudmFsdWUpCi0gICAgICAg
ICAgICAgICAgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50QnJlYWtwb2ludChXSS5kb21E
ZWJ1Z2dlck1hbmFnZXIuYWxsVGltZW91dHNCcmVha3BvaW50KTsKLQotICAgICAgICAgICAgaWYg
KFdJLnNldHRpbmdzLnNob3dBbGxJbnRlcnZhbHNCcmVha3BvaW50LnZhbHVlKQotICAgICAgICAg
ICAgICAgIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hZGRFdmVudEJyZWFrcG9pbnQoV0kuZG9tRGVi
dWdnZXJNYW5hZ2VyLmFsbEludGVydmFsc0JyZWFrcG9pbnQpOwotCi0gICAgICAgICAgICBpZiAo
V0kuc2V0dGluZ3Muc2hvd0FsbExpc3RlbmVyc0JyZWFrcG9pbnQudmFsdWUpCi0gICAgICAgICAg
ICAgICAgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50QnJlYWtwb2ludChXSS5kb21EZWJ1
Z2dlck1hbmFnZXIuYWxsTGlzdGVuZXJzQnJlYWtwb2ludCk7Ci0KLSAgICAgICAgICAgIGZvciAo
bGV0IGV2ZW50QnJlYWtwb2ludCBvZiBXSS5kb21EZWJ1Z2dlck1hbmFnZXIubGlzdGVuZXJCcmVh
a3BvaW50cykKLSAgICAgICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50KGV2ZW50QnJlYWtw
b2ludCk7Ci0KLSAgICAgICAgICAgIGZvciAobGV0IGV2ZW50TGlzdGVuZXJCcmVha3BvaW50IG9m
IFdJLmRvbU1hbmFnZXIuZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzKQotICAgICAgICAgICAgICAg
IHRoaXMuX2FkZEJyZWFrcG9pbnQoZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQpOwotCi0gICAgICAg
ICAgICBmb3IgKGxldCBkb21CcmVha3BvaW50IG9mIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5kb21C
cmVha3BvaW50cykKLSAgICAgICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50KGRvbUJyZWFr
cG9pbnQpOwotCi0gICAgICAgICAgICBpZiAoV0kuc2V0dGluZ3Muc2hvd0FsbFJlcXVlc3RzQnJl
YWtwb2ludC52YWx1ZSkKLSAgICAgICAgICAgICAgICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWRk
VVJMQnJlYWtwb2ludChXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsUmVxdWVzdHNCcmVha3BvaW50
KTsKLQotICAgICAgICAgICAgZm9yIChsZXQgdXJsQnJlYWtwb2ludHMgb2YgV0kuZG9tRGVidWdn
ZXJNYW5hZ2VyLnVybEJyZWFrcG9pbnRzKQotICAgICAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFr
cG9pbnQodXJsQnJlYWtwb2ludHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFdJLmRlYnVn
Z2VyTWFuYWdlci5wYXVzZWQpCi0gICAgICAgICAgICB0aGlzLl9kZWJ1Z2dlckRpZFBhdXNlKG51
bGwpOwotCi0gICAgICAgIGlmIChXSS5kZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2ludHNEaXNhYmxl
ZFRlbXBvcmFyaWx5KSB7Ci0gICAgICAgICAgICB0aGlzLl9oYW5kbGVUaW1lbGluZUNhcHR1cmlu
Z1N0YXRlQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICBpZiAoV0kuYXVkaXRNYW5hZ2VyLnJ1bm5p
bmdTdGF0ZSA9PT0gV0kuQXVkaXRNYW5hZ2VyLlJ1bm5pbmdTdGF0ZS5BY3RpdmUgfHwgV0kuYXVk
aXRNYW5hZ2VyLnJ1bm5pbmdTdGF0ZSA9PT0gV0kuQXVkaXRNYW5hZ2VyLlJ1bm5pbmdTdGF0ZS5T
dG9wcGluZykKLSAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVBdWRpdE1hbmFnZXJUZXN0U2No
ZWR1bGVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl91cGRhdGVCcmVha3BvaW50c0Rp
c2FibGVkQmFubmVyKCk7Ci0gICAgfQotCi0gICAgLy8gUHVibGljCi0KLSAgICBnZXQgbWluaW11
bVdpZHRoKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uQmFyLm1pbmlt
dW1XaWR0aDsKLSAgICB9Ci0KLSAgICBjbG9zZWQoKQotICAgIHsKLSAgICAgICAgc3VwZXIuY2xv
c2VkKCk7Ci0KLSAgICAgICAgV0kuRnJhbWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihudWxsLCBudWxs
LCB0aGlzKTsKLSAgICAgICAgV0kuVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIobnVsbCwgbnVs
bCwgdGhpcyk7Ci0gICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVy
KG51bGwsIG51bGwsIHRoaXMpOwotICAgICAgICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIucmVtb3Zl
RXZlbnRMaXN0ZW5lcihudWxsLCBudWxsLCB0aGlzKTsKLSAgICAgICAgV0kuRE9NQnJlYWtwb2lu
dC5yZW1vdmVFdmVudExpc3RlbmVyKG51bGwsIG51bGwsIHRoaXMpOwotICAgICAgICBXSS50aW1l
bGluZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihudWxsLCBudWxsLCB0aGlzKTsKLSAgICAg
ICAgV0kudGFyZ2V0TWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKG51bGwsIG51bGwsIHRoaXMp
OwotICAgICAgICBXSS5CcmVha3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobnVsbCwgbnVsbCwg
dGhpcyk7Ci0gICAgICAgIFdJLklzc3VlTWVzc2FnZS5yZW1vdmVFdmVudExpc3RlbmVyKG51bGws
IG51bGwsIHRoaXMpOwotICAgIH0KLQotICAgIHNob3dEZWZhdWx0Q29udGVudFZpZXcoKQotICAg
IHsKLSAgICAgICAgaWYgKFdJLm5ldHdvcmtNYW5hZ2VyLm1haW5GcmFtZSkgewotICAgICAgICAg
ICAgbGV0IG1haW5UcmVlRWxlbWVudCA9IHRoaXMuX3NjcmlwdHNDb250ZW50VHJlZU91dGxpbmUu
ZmluZFRyZWVFbGVtZW50KFdJLm5ldHdvcmtNYW5hZ2VyLm1haW5GcmFtZS5tYWluUmVzb3VyY2Up
OwotICAgICAgICAgICAgaWYgKG1haW5UcmVlRWxlbWVudCAmJiB0aGlzLnNob3dEZWZhdWx0Q29u
dGVudFZpZXdGb3JUcmVlRWxlbWVudChtYWluVHJlZUVsZW1lbnQpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGxldCBjdXJyZW50VHJlZUVsZW1lbnQgPSB0
aGlzLl9zY3JpcHRzQ29udGVudFRyZWVPdXRsaW5lLmNoaWxkcmVuWzBdOwotICAgICAgICB3aGls
ZSAoY3VycmVudFRyZWVFbGVtZW50ICYmICFjdXJyZW50VHJlZUVsZW1lbnQucm9vdCkgewotICAg
ICAgICAgICAgaWYgKGN1cnJlbnRUcmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLlJlc291cmNlVHJl
ZUVsZW1lbnQgfHwgY3VycmVudFRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuU2NyaXB0VHJlZUVs
ZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93RGVmYXVsdENvbnRlbnRWaWV3
Rm9yVHJlZUVsZW1lbnQoY3VycmVudFRyZWVFbGVtZW50KSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjdXJyZW50VHJlZUVsZW1lbnQg
PSBjdXJyZW50VHJlZUVsZW1lbnQudHJhdmVyc2VOZXh0VHJlZUVsZW1lbnQoZmFsc2UsIG51bGws
IHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdHJlZUVsZW1lbnRGb3JSZXByZXNlbnRl
ZE9iamVjdChyZXByZXNlbnRlZE9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmIChyZXByZXNlbnRl
ZE9iamVjdCBpbnN0YW5jZW9mIFdJLkxvY2FsUmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbDsKLQotICAgICAgICAvLyBUaGUgbWFpbiByZXNvdXJjZSBpcyB1c2VkIGFzIHRoZSByZXBy
ZXNlbnRlZE9iamVjdCBpbnN0ZWFkIG9mIEZyYW1lIGluIG91ciB0cmVlLgotICAgICAgICBpZiAo
cmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5GcmFtZSkKLSAgICAgICAgICAgIHJlcHJl
c2VudGVkT2JqZWN0ID0gcmVwcmVzZW50ZWRPYmplY3QubWFpblJlc291cmNlOwotCi0gICAgICAg
IGxldCB0cmVlRWxlbWVudCA9IHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLmZp
bmRUcmVlRWxlbWVudChyZXByZXNlbnRlZE9iamVjdCk7Ci0gICAgICAgIGlmICghdHJlZUVsZW1l
bnQpCi0gICAgICAgICAgICB0cmVlRWxlbWVudCA9IHRoaXMuX3NjcmlwdHNDb250ZW50VHJlZU91
dGxpbmUuZmluZFRyZWVFbGVtZW50KHJlcHJlc2VudGVkT2JqZWN0KTsKLQotICAgICAgICBpZiAo
dHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQ7Ci0KLSAgICAgICAg
Ly8gT25seSBzcGVjaWFsIGNhc2UgU2NyaXB0IG9iamVjdHMuCi0gICAgICAgIGlmICghKHJlcHJl
c2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0KSkgewotICAgICAgICAgICAgY29uc29s
ZS5lcnJvcigiRGlkbid0IGZpbmQgYSBUcmVlRWxlbWVudCBmb3IgcmVwcmVzZW50ZWRPYmplY3Qi
LCByZXByZXNlbnRlZE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIElmIHRoZSBTY3JpcHQgaGFzIGEgVVJMIHdlIHNob3VsZCBoYXZlIGZv
dW5kIGl0IGVhcmxpZXIuCi0gICAgICAgIGlmIChyZXByZXNlbnRlZE9iamVjdC51cmwpIHsKLSAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkRpZG4ndCBmaW5kIGEgU2NyaXB0VHJlZUVsZW1lbnQg
Zm9yIGEgU2NyaXB0IHdpdGggYSBVUkwuIik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFNpbmNlIHRoZSBTY3JpcHQgZG9lcyBub3QgaGF2ZSBhIFVS
TCB3ZSBjb25zaWRlciBpdCBhbiAnYW5vbnltb3VzJyBzY3JpcHQuIFRoZXNlIHNjcmlwdHMgaGFw
cGVuIGZyb20gY2FsbHMgdG8KLSAgICAgICAgLy8gd2luZG93LmV2YWwoKSBvciBicm93c2VyIGZl
YXR1cmVzIGxpa2UgQXV0byBGaWxsIGFuZCBSZWFkZXIuIFRoZXkgYXJlIG5vdCBub3JtYWxseSBh
ZGRlZCB0byB0aGUgc2lkZWJhciwgYnV0IHNpbmNlCi0gICAgICAgIC8vIHdlIGhhdmUgYSBTY3Jp
cHRDb250ZW50VmlldyBhc2tpbmcgZm9yIHRoZSB0cmVlIGVsZW1lbnQgd2Ugd2lsbCBtYWtlIGEg
U2NyaXB0VHJlZUVsZW1lbnQgb24gZGVtYW5kIGFuZCBhZGQgaXQuCi0KLSAgICAgICAgcmV0dXJu
IHRoaXMuX2FkZFNjcmlwdChyZXByZXNlbnRlZE9iamVjdCk7Ci0gICAgfQotCi0gICAgY3JlYXRl
Q29udGVudFRyZWVPdXRsaW5lKG9wdGlvbnMgPSB7fSkKLSAgICB7Ci0gICAgICAgIGxldCB0cmVl
T3V0bGluZSA9IHN1cGVyLmNyZWF0ZUNvbnRlbnRUcmVlT3V0bGluZShvcHRpb25zKTsKLQotICAg
ICAgICB0cmVlT3V0bGluZS5hZGRFdmVudExpc3RlbmVyKFdJLlRyZWVPdXRsaW5lLkV2ZW50LkVs
ZW1lbnRSZXZlYWxlZCwgKGV2ZW50KSA9PiB7Ci0gICAgICAgICAgICBsZXQgdHJlZUVsZW1lbnQg
PSBldmVudC5kYXRhLmVsZW1lbnQ7Ci0gICAgICAgICAgICBsZXQgZGV0YWlsc1NlY3Rpb25zID0g
W3RoaXMuX3BhdXNlUmVhc29uU2VjdGlvbiwgdGhpcy5fY2FsbFN0YWNrU2VjdGlvbiwgdGhpcy5f
YnJlYWtwb2ludHNTZWN0aW9uLCB0aGlzLl9zY3JpcHRzU2VjdGlvbl07Ci0gICAgICAgICAgICBs
ZXQgZGV0YWlsc1NlY3Rpb24gPSBkZXRhaWxzU2VjdGlvbnMuZmluZCgoZGV0YWlsc1NlY3Rpb24p
ID0+IGRldGFpbHNTZWN0aW9uLmVsZW1lbnQuY29udGFpbnModHJlZUVsZW1lbnQubGlzdEl0ZW1F
bGVtZW50KSk7Ci0gICAgICAgICAgICBpZiAoIWRldGFpbHNTZWN0aW9uKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAgICAgLy8gUmV2ZWFsaW5nIGEgVHJlZUVsZW1lbnQgYXQg
dGhlIHNjcm9sbCBjb250YWluZXIncyB0b3Btb3N0IGVkZ2Ugd2l0aAotICAgICAgICAgICAgLy8g
c2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCBtYXkgcmVzdWx0IGluIHRoZSBlbGVtZW50IGJlaW5nIGNv
dmVyZWQgYnkgdGhlCi0gICAgICAgICAgICAvLyBEZXRhaWxzU2VjdGlvbiBoZWFkZXIsIHdoaWNo
IHVzZXMgc3RpY2t5IHBvc2l0aW9uaW5nLiBEZXRlY3QgdGhpcyBjYXNlLAotICAgICAgICAgICAg
Ly8gYW5kIGFkanVzdCB0aGUgc2lkZWJhciBjb250ZW50J3Mgc2Nyb2xsIHBvc2l0aW9uIHRvIGNv
bXBlbnNhdGUuCi0gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gZGV0YWlsc1NlY3Rpb24uaGVhZGVy
RWxlbWVudC50b3RhbE9mZnNldEJvdHRvbSAtIHRyZWVFbGVtZW50Lmxpc3RJdGVtRWxlbWVudC50
b3RhbE9mZnNldFRvcDsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgPiAwKQotICAgICAgICAgICAg
ICAgIHRoaXMuc2Nyb2xsRWxlbWVudC5zY3JvbGxCeSgwLCAtb2Zmc2V0KTsKLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgcmV0dXJuIHRyZWVPdXRsaW5lOwotICAgIH0KLQotICAgIC8vIFByb3RlY3Rl
ZAotCi0gICAgc2F2ZVN0YXRlVG9Db29raWUoY29va2llKQotICAgIHsKLSAgICAgICAgY29uc29s
ZS5hc3NlcnQoY29va2llKTsKLQotICAgICAgICB2YXIgc2VsZWN0ZWRUcmVlRWxlbWVudCA9IHRo
aXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLnNlbGVjdGVkVHJlZUVsZW1lbnQ7Ci0g
ICAgICAgIGlmICghc2VsZWN0ZWRUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgc3VwZXIuc2F2
ZVN0YXRlVG9Db29raWUoY29va2llKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN3aXRjaCAoc2VsZWN0ZWRUcmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCkg
ewotICAgICAgICBjYXNlIFdJLmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRpb25zQnJlYWtwb2lu
dDoKLSAgICAgICAgICAgIGNvb2tpZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3RlZEFsbEV4
Y2VwdGlvbnNDb29raWVLZXldID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBjYXNlIFdJLmRlYnVnZ2VyTWFuYWdlci51bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50Ogot
ICAgICAgICAgICAgY29va2llW0RlYnVnZ2VyU2lkZWJhclBhbmVsLlNlbGVjdGVkVW5jYXVnaHRF
eGNlcHRpb25zQ29va2llS2V5XSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgY2FzZSBXSS5kZWJ1Z2dlck1hbmFnZXIuYXNzZXJ0aW9uRmFpbHVyZXNCcmVha3BvaW50Ogot
ICAgICAgICAgICAgY29va2llW0RlYnVnZ2VyU2lkZWJhclBhbmVsLlNlbGVjdGVkQXNzZXJ0aW9u
RmFpbHVyZXNDb29raWVLZXldID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBjYXNlIFdJLmRlYnVnZ2VyTWFuYWdlci5hbGxNaWNyb3Rhc2tzQnJlYWtwb2ludDoKLSAgICAg
ICAgICAgIGNvb2tpZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3RlZEFsbE1pY3JvdGFza3ND
b29raWVLZXldID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIFdJ
LmRvbURlYnVnZ2VyTWFuYWdlci5hbGxBbmltYXRpb25GcmFtZXNCcmVha3BvaW50OgotICAgICAg
ICAgICAgY29va2llW0RlYnVnZ2VyU2lkZWJhclBhbmVsLlNlbGVjdGVkQWxsQW5pbWF0aW9uRnJh
bWVzQnJlYWtwb2ludF0gPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNh
c2UgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbEludGVydmFsc0JyZWFrcG9pbnQ6Ci0gICAgICAg
ICAgICBjb29raWVbRGVidWdnZXJTaWRlYmFyUGFuZWwuU2VsZWN0ZWRBbGxJbnRlcnZhbHNCcmVh
a3BvaW50XSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBXSS5k
b21EZWJ1Z2dlck1hbmFnZXIuYWxsTGlzdGVuZXJzQnJlYWtwb2ludDoKLSAgICAgICAgICAgIGNv
b2tpZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3RlZEFsbExpc3RlbmVyc0JyZWFrcG9pbnRd
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIFdJLmRvbURlYnVn
Z2VyTWFuYWdlci5hbGxUaW1lb3V0c0JyZWFrcG9pbnQ6Ci0gICAgICAgICAgICBjb29raWVbRGVi
dWdnZXJTaWRlYmFyUGFuZWwuU2VsZWN0ZWRBbGxUaW1lb3V0c0JyZWFrcG9pbnRdID0gdHJ1ZTsK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIFdJLmRvbURlYnVnZ2VyTWFuYWdl
ci5hbGxSZXF1ZXN0c0JyZWFrcG9pbnQ6Ci0gICAgICAgICAgICBjb29raWVbRGVidWdnZXJTaWRl
YmFyUGFuZWwuU2VsZWN0ZWRBbGxSZXF1ZXN0c0Nvb2tpZUtleV0gPSB0cnVlOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3VwZXIuc2F2ZVN0YXRlVG9Db29raWUo
Y29va2llKTsKLSAgICB9Ci0KLSAgICByZXN0b3JlU3RhdGVGcm9tQ29va2llKGNvb2tpZSwgcmVs
YXhlZE1hdGNoRGVsYXkpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydChjb29raWUpOwot
Ci0gICAgICAgIGZ1bmN0aW9uIHJldmVhbEFuZFNlbGVjdCh0cmVlT3V0bGluZSwgYnJlYWtwb2lu
dCkgewotICAgICAgICAgICAgbGV0IHRyZWVFbGVtZW50ID0gdHJlZU91dGxpbmUuZmluZFRyZWVF
bGVtZW50KGJyZWFrcG9pbnQpOwotICAgICAgICAgICAgaWYgKCF0cmVlRWxlbWVudCkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHRyZWVFbGVtZW50LnJldmVhbEFuZFNl
bGVjdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRWFnZXJseSByZXNvbHZlIHRoZSBzcGVj
aWFsIGJyZWFrcG9pbnRzOyBvdGhlcndpc2UsIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvci4KLSAg
ICAgICAgaWYgKGNvb2tpZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3RlZEFsbEV4Y2VwdGlv
bnNDb29raWVLZXldKQotICAgICAgICAgICAgcmV2ZWFsQW5kU2VsZWN0KHRoaXMuX2JyZWFrcG9p
bnRzQ29udGVudFRyZWVPdXRsaW5lLCBXSS5kZWJ1Z2dlck1hbmFnZXIuYWxsRXhjZXB0aW9uc0Jy
ZWFrcG9pbnQpOwotICAgICAgICBlbHNlIGlmIChjb29raWVbRGVidWdnZXJTaWRlYmFyUGFuZWwu
U2VsZWN0ZWRVbmNhdWdodEV4Y2VwdGlvbnNDb29raWVLZXldKQotICAgICAgICAgICAgcmV2ZWFs
QW5kU2VsZWN0KHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLCBXSS5kZWJ1Z2dl
ck1hbmFnZXIudW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UgaWYg
KGNvb2tpZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3RlZEFzc2VydGlvbkZhaWx1cmVzQ29v
a2llS2V5XSkKLSAgICAgICAgICAgIHJldmVhbEFuZFNlbGVjdCh0aGlzLl9icmVha3BvaW50c0Nv
bnRlbnRUcmVlT3V0bGluZSwgV0kuZGVidWdnZXJNYW5hZ2VyLmFzc2VydGlvbkZhaWx1cmVzQnJl
YWtwb2ludCk7Ci0gICAgICAgIGVsc2UgaWYgKGNvb2tpZVtEZWJ1Z2dlclNpZGViYXJQYW5lbC5T
ZWxlY3RlZEFsbE1pY3JvdGFza3NDb29raWVLZXldKQotICAgICAgICAgICAgcmV2ZWFsQW5kU2Vs
ZWN0KHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLCBXSS5kZWJ1Z2dlck1hbmFn
ZXIuYWxsTWljcm90YXNrc0JyZWFrcG9pbnQpOwotICAgICAgICBlbHNlIGlmIChjb29raWVbRGVi
dWdnZXJTaWRlYmFyUGFuZWwuU2VsZWN0ZWRBbGxBbmltYXRpb25GcmFtZXNCcmVha3BvaW50XSkK
LSAgICAgICAgICAgIHJldmVhbEFuZFNlbGVjdCh0aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVl
T3V0bGluZSwgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9p
bnQpOwotICAgICAgICBlbHNlIGlmIChjb29raWVbRGVidWdnZXJTaWRlYmFyUGFuZWwuU2VsZWN0
ZWRBbGxJbnRlcnZhbHNCcmVha3BvaW50XSkKLSAgICAgICAgICAgIHJldmVhbEFuZFNlbGVjdCh0
aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZSwgV0kuZG9tRGVidWdnZXJNYW5hZ2Vy
LmFsbEludGVydmFsc0JyZWFrcG9pbnQpOwotICAgICAgICBlbHNlIGlmIChjb29raWVbRGVidWdn
ZXJTaWRlYmFyUGFuZWwuU2VsZWN0ZWRBbGxMaXN0ZW5lcnNCcmVha3BvaW50XSkKLSAgICAgICAg
ICAgIHJldmVhbEFuZFNlbGVjdCh0aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZSwg
V0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbExpc3RlbmVyc0JyZWFrcG9pbnQpOwotICAgICAgICBl
bHNlIGlmIChjb29raWVbRGVidWdnZXJTaWRlYmFyUGFuZWwuU2VsZWN0ZWRBbGxSZXF1ZXN0c0Nv
b2tpZUtleV0pCi0gICAgICAgICAgICByZXZlYWxBbmRTZWxlY3QodGhpcy5fYnJlYWtwb2ludHND
b250ZW50VHJlZU91dGxpbmUsIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxSZXF1ZXN0c0JyZWFr
cG9pbnQpOwotICAgICAgICBlbHNlIGlmIChjb29raWVbRGVidWdnZXJTaWRlYmFyUGFuZWwuU2Vs
ZWN0ZWRBbGxUaW1lb3V0c0JyZWFrcG9pbnRdKQotICAgICAgICAgICAgcmV2ZWFsQW5kU2VsZWN0
KHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLCBXSS5kb21EZWJ1Z2dlck1hbmFn
ZXIuYWxsVGltZW91dHNCcmVha3BvaW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Vw
ZXIucmVzdG9yZVN0YXRlRnJvbUNvb2tpZShjb29raWUsIHJlbGF4ZWRNYXRjaERlbGF5KTsKLSAg
ICB9Ci0KLSAgICAvLyBQb3BvdmVyIGRlbGVnYXRlCi0KLSAgICB3aWxsRGlzbWlzc1BvcG92ZXIo
cG9wb3ZlcikKLSAgICB7Ci0gICAgICAgIGxldCBicmVha3BvaW50ID0gcG9wb3Zlci5icmVha3Bv
aW50OwotICAgICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgaWYgKGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXSS5FdmVudEJyZWFrcG9pbnQpCi0gICAg
ICAgICAgICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRCcmVha3BvaW50KGJyZWFrcG9p
bnQpOwotICAgICAgICBlbHNlIGlmIChicmVha3BvaW50IGluc3RhbmNlb2YgV0kuVVJMQnJlYWtw
b2ludCkKLSAgICAgICAgICAgIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hZGRVUkxCcmVha3BvaW50
KGJyZWFrcG9pbnQpOwotICAgIH0KLQotICAgIC8vIFByaXZhdGUKLQotICAgIF9kZWJ1Z2dlcldh
aXRpbmdUb1BhdXNlKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJQYXVzZVJl
c3VtZUJ1dHRvbkl0ZW0uZW5hYmxlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIF9kZWJ1Z2dlckRp
ZFBhdXNlKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5jb250ZW50Vmlldy5lbGVtZW50Lmlu
c2VydEJlZm9yZSh0aGlzLl9jYWxsU3RhY2tTZWN0aW9uLmVsZW1lbnQsIHRoaXMuY29udGVudFZp
ZXcuZWxlbWVudC5maXJzdENoaWxkKTsKLQotICAgICAgICBpZiAodGhpcy5fdXBkYXRlUGF1c2VS
ZWFzb24oKSkKLSAgICAgICAgICAgIHRoaXMuY29udGVudFZpZXcuZWxlbWVudC5pbnNlcnRCZWZv
cmUodGhpcy5fcGF1c2VSZWFzb25TZWN0aW9uLmVsZW1lbnQsIHRoaXMuY29udGVudFZpZXcuZWxl
bWVudC5maXJzdENoaWxkKTsKLQotICAgICAgICB0aGlzLl9kZWJ1Z2dlclBhdXNlUmVzdW1lQnV0
dG9uSXRlbS5lbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJQYXVzZVJlc3Vt
ZUJ1dHRvbkl0ZW0udG9nZ2xlZCA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyU3RlcE92
ZXJCdXR0b25JdGVtLmVuYWJsZWQgPSB0cnVlOwotICAgICAgICB0aGlzLl9kZWJ1Z2dlclN0ZXBJ
bnRvQnV0dG9uSXRlbS5lbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJTdGVw
T3V0QnV0dG9uSXRlbS5lbmFibGVkID0gdHJ1ZTsKLQotICAgICAgICB0aGlzLmVsZW1lbnQuY2xh
c3NMaXN0LmFkZChXSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5EZWJ1Z2dlclBhdXNlZFN0eWxlQ2xh
c3NOYW1lKTsKLSAgICB9Ci0KLSAgICBfZGVidWdnZXJEaWRSZXN1bWUoZXZlbnQpCi0gICAgewot
ICAgICAgICB0aGlzLl9jYWxsU3RhY2tTZWN0aW9uLmVsZW1lbnQucmVtb3ZlKCk7Ci0KLSAgICAg
ICAgdGhpcy5fcGF1c2VSZWFzb25TZWN0aW9uLmVsZW1lbnQucmVtb3ZlKCk7Ci0KLSAgICAgICAg
dGhpcy5fZGVidWdnZXJQYXVzZVJlc3VtZUJ1dHRvbkl0ZW0uZW5hYmxlZCA9IHRydWU7Ci0gICAg
ICAgIHRoaXMuX2RlYnVnZ2VyUGF1c2VSZXN1bWVCdXR0b25JdGVtLnRvZ2dsZWQgPSBmYWxzZTsK
LSAgICAgICAgdGhpcy5fZGVidWdnZXJTdGVwT3ZlckJ1dHRvbkl0ZW0uZW5hYmxlZCA9IGZhbHNl
OwotICAgICAgICB0aGlzLl9kZWJ1Z2dlclN0ZXBJbnRvQnV0dG9uSXRlbS5lbmFibGVkID0gZmFs
c2U7Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyU3RlcE91dEJ1dHRvbkl0ZW0uZW5hYmxlZCA9IGZh
bHNlOwotCi0gICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFdJLkRlYnVnZ2Vy
U2lkZWJhclBhbmVsLkRlYnVnZ2VyUGF1c2VkU3R5bGVDbGFzc05hbWUpOwotICAgIH0KLQotICAg
IF9icmVha3BvaW50c0VuYWJsZWREaWRDaGFuZ2UoZXZlbnQpCi0gICAgewotICAgICAgICB0aGlz
Ll9kZWJ1Z2dlckJyZWFrcG9pbnRzQnV0dG9uSXRlbS5hY3RpdmF0ZWQgPSBXSS5kZWJ1Z2dlck1h
bmFnZXIuYnJlYWtwb2ludHNFbmFibGVkOwotCi0gICAgICAgIHRoaXMuX3VwZGF0ZUJyZWFrcG9p
bnRzRGlzYWJsZWRCYW5uZXIoKTsKLSAgICB9Ci0KLSAgICBfYWRkQnJlYWtwb2ludChicmVha3Bv
aW50KQotICAgIHsKLSAgICAgICAgbGV0IGNvbnN0cnVjdG9yID0gV0kuQnJlYWtwb2ludFRyZWVF
bGVtZW50OwotICAgICAgICBsZXQgb3B0aW9ucyA9IHt9OwotICAgICAgICBsZXQgcGFyZW50VHJl
ZUVsZW1lbnQgPSB0aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZTsKLQotICAgICAg
ICBsZXQgZ2V0RE9NTm9kZVRyZWVFbGVtZW50ID0gKGRvbU5vZGUpID0+IHsKLSAgICAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KGRvbU5vZGUsICJNaXNzaW5nIERPTU5vZGUgZm9yIGlkZW50aWZpZXIi
LCBicmVha3BvaW50LmRvbU5vZGVJZGVudGlmaWVyKTsKLSAgICAgICAgICAgIGlmICghZG9tTm9k
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgbGV0IGRvbU5v
ZGVUcmVlRWxlbWVudCA9IHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLmZpbmRU
cmVlRWxlbWVudChkb21Ob2RlKTsKLSAgICAgICAgICAgIGlmICghZG9tTm9kZVRyZWVFbGVtZW50
KSB7Ci0gICAgICAgICAgICAgICAgZG9tTm9kZVRyZWVFbGVtZW50ID0gbmV3IFdJLkRPTU5vZGVU
cmVlRWxlbWVudChkb21Ob2RlKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9hZGRUcmVlRWxlbWVu
dChkb21Ob2RlVHJlZUVsZW1lbnQsIHBhcmVudFRyZWVFbGVtZW50KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBkb21Ob2RlVHJlZUVsZW1lbnQ7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgaWYgKGJyZWFrcG9pbnQgPT09IFdJLmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRpb25z
QnJlYWtwb2ludCkgewotICAgICAgICAgICAgb3B0aW9ucy5jbGFzc05hbWUgPSBXSS5EZWJ1Z2dl
clNpZGViYXJQYW5lbC5FeGNlcHRpb25JY29uU3R5bGVDbGFzc05hbWU7Ci0gICAgICAgICAgICBv
cHRpb25zLnRpdGxlID0gV0kucmVwZWF0ZWRVSVN0cmluZy5hbGxFeGNlcHRpb25zKCk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoYnJlYWtwb2ludCA9PT0gV0kuZGVidWdnZXJNYW5hZ2VyLnVuY2F1Z2h0
RXhjZXB0aW9uc0JyZWFrcG9pbnQpIHsKLSAgICAgICAgICAgIG9wdGlvbnMuY2xhc3NOYW1lID0g
V0kuRGVidWdnZXJTaWRlYmFyUGFuZWwuRXhjZXB0aW9uSWNvblN0eWxlQ2xhc3NOYW1lOwotICAg
ICAgICAgICAgb3B0aW9ucy50aXRsZSA9IFdJLnJlcGVhdGVkVUlTdHJpbmcudW5jYXVnaHRFeGNl
cHRpb25zKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYnJlYWtwb2ludCA9PT0gV0kuZGVidWdnZXJN
YW5hZ2VyLmFzc2VydGlvbkZhaWx1cmVzQnJlYWtwb2ludCkgewotICAgICAgICAgICAgb3B0aW9u
cy5jbGFzc05hbWUgPSBXSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5Bc3NlcnRpb25JY29uU3R5bGVD
bGFzc05hbWU7Ci0gICAgICAgICAgICBvcHRpb25zLnRpdGxlID0gV0kucmVwZWF0ZWRVSVN0cmlu
Zy5hc3NlcnRpb25GYWlsdXJlcygpOwotICAgICAgICB9IGVsc2UgaWYgKGJyZWFrcG9pbnQgPT09
IFdJLmRlYnVnZ2VyTWFuYWdlci5hbGxNaWNyb3Rhc2tzQnJlYWtwb2ludCkgewotICAgICAgICAg
ICAgb3B0aW9ucy5jbGFzc05hbWUgPSAiYnJlYWtwb2ludC1taWNyb3Rhc2staWNvbiI7Ci0gICAg
ICAgICAgICBvcHRpb25zLnRpdGxlID0gV0kuVUlTdHJpbmcoIkFsbCBNaWNyb3Rhc2tzIik7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoYnJlYWtwb2ludCBpbnN0YW5jZW9mIFdJLkRPTUJyZWFrcG9pbnQp
IHsKLSAgICAgICAgICAgIGlmICghYnJlYWtwb2ludC5kb21Ob2RlSWRlbnRpZmllcikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgY29uc3RydWN0b3IgPSBXSS5E
T01CcmVha3BvaW50VHJlZUVsZW1lbnQ7Ci0KLSAgICAgICAgICAgIGxldCBkb21Ob2RlID0gV0ku
ZG9tTWFuYWdlci5ub2RlRm9ySWQoYnJlYWtwb2ludC5kb21Ob2RlSWRlbnRpZmllcik7Ci0gICAg
ICAgICAgICBwYXJlbnRUcmVlRWxlbWVudCA9IGdldERPTU5vZGVUcmVlRWxlbWVudChkb21Ob2Rl
KTsKLSAgICAgICAgfSBlbHNlIGlmIChicmVha3BvaW50IGluc3RhbmNlb2YgV0kuRXZlbnRCcmVh
a3BvaW50KSB7Ci0gICAgICAgICAgICBjb25zdHJ1Y3RvciA9IFdJLkV2ZW50QnJlYWtwb2ludFRy
ZWVFbGVtZW50OwotCi0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludCA9PT0gV0kuZG9tRGVidWdn
ZXJNYW5hZ2VyLmFsbEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICAgICAg
b3B0aW9ucy50aXRsZSA9IFdJLlVJU3RyaW5nKCJBbGwgQW5pbWF0aW9uIEZyYW1lcyIpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoYnJlYWtwb2ludCA9PT0gV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFs
bEludGVydmFsc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICAgICAgb3B0aW9ucy50aXRsZSA9IFdJ
LlVJU3RyaW5nKCJBbGwgSW50ZXJ2YWxzIik7Ci0gICAgICAgICAgICBlbHNlIGlmIChicmVha3Bv
aW50ID09PSBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsTGlzdGVuZXJzQnJlYWtwb2ludCkKLSAg
ICAgICAgICAgICAgICBvcHRpb25zLnRpdGxlID0gV0kuVUlTdHJpbmcoIkFsbCBFdmVudHMiKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGJyZWFrcG9pbnQgPT09IFdJLmRvbURlYnVnZ2VyTWFuYWdl
ci5hbGxUaW1lb3V0c0JyZWFrcG9pbnQpCi0gICAgICAgICAgICAgICAgb3B0aW9ucy50aXRsZSA9
IFdJLlVJU3RyaW5nKCJBbGwgVGltZW91dHMiKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGJyZWFr
cG9pbnQuZXZlbnRMaXN0ZW5lcikgewotICAgICAgICAgICAgICAgIGxldCBldmVudFRhcmdldFRy
ZWVFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5ldmVudExp
c3RlbmVyLm9uV2luZG93KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghRGVidWdnZXJTaWRl
YmFyUGFuZWwuX193aW5kb3dFdmVudFRhcmdldFJlcHJlc2VudGVkT2JqZWN0KQotICAgICAgICAg
ICAgICAgICAgICAgICAgRGVidWdnZXJTaWRlYmFyUGFuZWwuX193aW5kb3dFdmVudFRhcmdldFJl
cHJlc2VudGVkT2JqZWN0ID0ge19fd2luZG93OiB0cnVlfTsKLQotICAgICAgICAgICAgICAgICAg
ICBldmVudFRhcmdldFRyZWVFbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJlZU91
dGxpbmUuZmluZFRyZWVFbGVtZW50KERlYnVnZ2VyU2lkZWJhclBhbmVsLl9fd2luZG93RXZlbnRU
YXJnZXRSZXByZXNlbnRlZE9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnRU
YXJnZXRUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VidGl0
bGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXRUcmVlRWxlbWVu
dCA9IG5ldyBXSS5HZW5lcmFsVHJlZUVsZW1lbnQoWyJldmVudC10YXJnZXQtd2luZG93Il0sIFdJ
LnVubG9jYWxpemVkU3RyaW5nKCJ3aW5kb3ciKSwgc3VidGl0bGUsIERlYnVnZ2VyU2lkZWJhclBh
bmVsLl9fd2luZG93RXZlbnRUYXJnZXRSZXByZXNlbnRlZE9iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9hZGRUcmVlRWxlbWVudChldmVudFRhcmdldFRyZWVFbGVtZW50LCBw
YXJlbnRUcmVlRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGJyZWFrcG9pbnQuZXZlbnRMaXN0ZW5lci5ub2RlKQotICAgICAgICAgICAg
ICAgICAgICBldmVudFRhcmdldFRyZWVFbGVtZW50ID0gZ2V0RE9NTm9kZVRyZWVFbGVtZW50KGJy
ZWFrcG9pbnQuZXZlbnRMaXN0ZW5lci5ub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoZXZlbnRU
YXJnZXRUcmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50VHJlZUVsZW1lbnQg
PSBldmVudFRhcmdldFRyZWVFbGVtZW50OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXSS5VUkxCcmVha3BvaW50KSB7Ci0gICAgICAgICAg
ICBjb25zdHJ1Y3RvciA9IFdJLlVSTEJyZWFrcG9pbnRUcmVlRWxlbWVudDsKLQotICAgICAgICAg
ICAgaWYgKGJyZWFrcG9pbnQgPT09IFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxSZXF1ZXN0c0Jy
ZWFrcG9pbnQpCi0gICAgICAgICAgICAgICAgb3B0aW9ucy50aXRsZSA9IFdJLnJlcGVhdGVkVUlT
dHJpbmcuYWxsUmVxdWVzdHMoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxldCBz
b3VyY2VDb2RlID0gYnJlYWtwb2ludC5zb3VyY2VDb2RlTG9jYXRpb24gJiYgYnJlYWtwb2ludC5z
b3VyY2VDb2RlTG9jYXRpb24uZGlzcGxheVNvdXJjZUNvZGU7Ci0gICAgICAgICAgICBpZiAoIXNv
dXJjZUNvZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIGlm
ICh0aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQoYnJl
YWtwb2ludCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIHBh
cmVudFRyZWVFbGVtZW50ID0gdGhpcy5fYWRkVHJlZUVsZW1lbnRGb3JTb3VyY2VDb2RlVG9UcmVl
T3V0bGluZShzb3VyY2VDb2RlLCB0aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZSk7
Ci0KLSAgICAgICAgICAgIC8vIE1hcmsgZGlzYWJsZWQgYnJlYWtwb2ludHMgYXMgcmVzb2x2ZWQg
aWYgdGhlcmUgaXMgc291cmNlIGNvZGUgbG9hZGVkIHdpdGggdGhhdCBVUkwuCi0gICAgICAgICAg
ICAvLyBUaGlzIGdpdmVzIHRoZSBpbGx1c2lvbiB0aGUgYnJlYWtwb2ludCB3YXMgcmVzb2x2ZWQs
IGJ1dCBzaW5jZSB3ZSBkb24ndCBzZW5kIGRpc2FibGVkCi0gICAgICAgICAgICAvLyBicmVha3Bv
aW50cyB0byB0aGUgYmFja2VuZCB3ZSBkb24ndCBrbm93IGZvciBzdXJlLiBJZiB0aGUgdXNlciBl
bmFibGVzIHRoZSBicmVha3BvaW50Ci0gICAgICAgICAgICAvLyBpdCB3aWxsIGJlIHJlc29sdmVk
IHByb3Blcmx5LgotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZGlzYWJsZWQpCi0gICAgICAg
ICAgICAgICAgYnJlYWtwb2ludC5yZXNvbHZlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBsZXQgYnJlYWtwb2ludFRyZWVFbGVtZW50ID0gbmV3IGNvbnN0cnVjdG9yKGJyZWFrcG9pbnQs
IG9wdGlvbnMpOwotICAgICAgICB0aGlzLl9hZGRUcmVlRWxlbWVudChicmVha3BvaW50VHJlZUVs
ZW1lbnQsIHBhcmVudFRyZWVFbGVtZW50KTsKLSAgICAgICAgaWYgKHBhcmVudFRyZWVFbGVtZW50
LmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkKLSAgICAgICAgICAgIHBhcmVudFRyZWVFbGVtZW50LmV4
cGFuZCgpOwotICAgICAgICByZXR1cm4gYnJlYWtwb2ludFRyZWVFbGVtZW50OwotICAgIH0KLQot
ICAgIF9yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZSkgewotICAgICAgICAgICAgbGV0IHBhdXNlUmVhc29u
QnJlYWtwb2ludFRyZWVFbGVtZW50ID0gdGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5nZXRD
YWNoZWRUcmVlRWxlbWVudChicmVha3BvaW50KTsKLSAgICAgICAgICAgIGlmIChwYXVzZVJlYXNv
bkJyZWFrcG9pbnRUcmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICBwYXVzZVJlYXNvbkJyZWFr
cG9pbnRUcmVlRWxlbWVudC5zdGF0dXMgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgbGV0
IGJyZWFrcG9pbnRUcmVlRWxlbWVudCA9IHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRs
aW5lLmdldENhY2hlZFRyZWVFbGVtZW50KGJyZWFrcG9pbnQpOwotICAgICAgICBpZiAoIWJyZWFr
cG9pbnRUcmVlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9y
ZW1vdmVEZWJ1Z2dlclRyZWVFbGVtZW50KGJyZWFrcG9pbnRUcmVlRWxlbWVudCk7Ci0gICAgfQot
Ci0gICAgX2FkZEJyZWFrcG9pbnRzRm9yU291cmNlQ29kZShzb3VyY2VDb2RlKQotICAgIHsKLSAg
ICAgICAgZm9yIChsZXQgYnJlYWtwb2ludCBvZiBXSS5kZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2lu
dHNGb3JTb3VyY2VDb2RlKHNvdXJjZUNvZGUpKQotICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtw
b2ludChicmVha3BvaW50LCBzb3VyY2VDb2RlKTsKLSAgICB9Ci0KLSAgICBfYWRkSXNzdWVzRm9y
U291cmNlQ29kZShzb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgdmFyIGlzc3VlcyA9IFdJLmNv
bnNvbGVNYW5hZ2VyLmlzc3Vlc0ZvclNvdXJjZUNvZGUoc291cmNlQ29kZSk7Ci0gICAgICAgIGZv
ciAodmFyIGlzc3VlIG9mIGlzc3VlcykKLSAgICAgICAgICAgIHRoaXMuX2FkZElzc3VlKGlzc3Vl
LCBzb3VyY2VDb2RlKTsKLSAgICB9Ci0KLSAgICBfYWRkVHJlZUVsZW1lbnRGb3JTb3VyY2VDb2Rl
VG9UcmVlT3V0bGluZShzb3VyY2VDb2RlLCB0cmVlT3V0bGluZSkKLSAgICB7Ci0gICAgICAgIGxl
dCB0cmVlRWxlbWVudCA9IHRyZWVPdXRsaW5lLmdldENhY2hlZFRyZWVFbGVtZW50KHNvdXJjZUNv
ZGUpOwotICAgICAgICBpZiAoIXRyZWVFbGVtZW50KSB7Ci0gICAgICAgICAgICBpZiAoc291cmNl
Q29kZSBpbnN0YW5jZW9mIFdJLlNvdXJjZU1hcFJlc291cmNlKQotICAgICAgICAgICAgICAgIHRy
ZWVFbGVtZW50ID0gbmV3IFdJLlNvdXJjZU1hcFJlc291cmNlVHJlZUVsZW1lbnQoc291cmNlQ29k
ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VDb2RlIGluc3RhbmNlb2YgV0kuUmVzb3Vy
Y2UpCi0gICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSBuZXcgV0kuUmVzb3VyY2VUcmVlRWxl
bWVudChzb3VyY2VDb2RlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZUNvZGUgaW5zdGFu
Y2VvZiBXSS5TY3JpcHQpCi0gICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSBuZXcgV0kuU2Ny
aXB0VHJlZUVsZW1lbnQoc291cmNlQ29kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRy
ZWVFbGVtZW50KSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCJVbmtub3duIHNvdXJjZUNv
ZGUgaW5zdGFuY2UiLCBzb3VyY2VDb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCF0cmVlRWxlbWVudC5wYXJlbnQpIHsKLSAgICAgICAgICAg
IHRyZWVFbGVtZW50Lmhhc0NoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgICAgICB0cmVlRWxlbWVu
dC5leHBhbmQoKTsKLQotICAgICAgICAgICAgdGhpcy5fYWRkVHJlZUVsZW1lbnQodHJlZUVsZW1l
bnQsIHRyZWVPdXRsaW5lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cmVlRWxlbWVu
dDsKLSAgICB9Ci0KLSAgICBfYWRkUmVzb3VyY2VzUmVjdXJzaXZlbHlGb3JGcmFtZShmcmFtZSkK
LSAgICB7Ci0gICAgICAgIHRoaXMuX2FkZFJlc291cmNlKGZyYW1lLm1haW5SZXNvdXJjZSk7Ci0K
LSAgICAgICAgZm9yIChsZXQgcmVzb3VyY2Ugb2YgZnJhbWUucmVzb3VyY2VDb2xsZWN0aW9uKQot
ICAgICAgICAgICAgdGhpcy5fYWRkUmVzb3VyY2UocmVzb3VyY2UpOwotCi0gICAgICAgIGZvciAo
bGV0IGNoaWxkRnJhbWUgb2YgZnJhbWUuY2hpbGRGcmFtZUNvbGxlY3Rpb24pCi0gICAgICAgICAg
ICB0aGlzLl9hZGRSZXNvdXJjZXNSZWN1cnNpdmVseUZvckZyYW1lKGNoaWxkRnJhbWUpOwotICAg
IH0KLQotICAgIF9yZXNvdXJjZUFkZGVkKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fYWRk
UmVzb3VyY2UoZXZlbnQuZGF0YS5yZXNvdXJjZSk7Ci0gICAgfQotCi0gICAgX2FkZFJlc291cmNl
KHJlc291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKCFbV0kuUmVzb3VyY2UuVHlwZS5Eb2N1bWVu
dCwgV0kuUmVzb3VyY2UuVHlwZS5TY3JpcHRdLmluY2x1ZGVzKHJlc291cmNlLnR5cGUpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGxldCB0cmVlRWxlbWVudCA9IHRoaXMuX2FkZFRy
ZWVFbGVtZW50Rm9yU291cmNlQ29kZVRvVHJlZU91dGxpbmUocmVzb3VyY2UsIHRoaXMuX3Njcmlw
dHNDb250ZW50VHJlZU91dGxpbmUpOwotICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50c0ZvclNv
dXJjZUNvZGUocmVzb3VyY2UpOwotICAgICAgICB0aGlzLl9hZGRJc3N1ZXNGb3JTb3VyY2VDb2Rl
KHJlc291cmNlKTsKLQotICAgICAgICBpZiAodGhpcy5wYXJlbnRTaWRlYmFyICYmICF0aGlzLmNv
bnRlbnRCcm93c2VyLmN1cnJlbnRDb250ZW50VmlldykKLSAgICAgICAgICAgIHRoaXMuc2hvd0Rl
ZmF1bHRDb250ZW50Vmlld0ZvclRyZWVFbGVtZW50KHRyZWVFbGVtZW50KTsKLSAgICB9Ci0KLSAg
ICBfbWFpblJlc291cmNlRGlkQ2hhbmdlKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50
LnRhcmdldC5pc01haW5GcmFtZSgpKSB7Ci0gICAgICAgICAgICAvLyBBZ2dyZXNzaXZlbHkgcHJ1
bmUgcmVzb3VyY2VzIG5vdyBzbyB0aGUgb2xkIHJlc291cmNlcyBhcmUgcmVtb3ZlZCBiZWZvcmUK
LSAgICAgICAgICAgIC8vIHRoZSBuZXcgbWFpbiByZXNvdXJjZSBpcyBhZGRlZCBiZWxvdy4gVGhp
cyBhdm9pZHMgYSB2aXN1YWwgZmxhc2ggd2hlbiB0aGUKLSAgICAgICAgICAgIC8vIHBydW5lIG5v
cm1hbGx5IGhhcHBlbnMgb24gYSBsYXRlciBldmVudCBsb29wIGN5Y2xlLgotICAgICAgICAgICAg
dGhpcy5wcnVuZVN0YWxlUmVzb3VyY2VUcmVlRWxlbWVudHMoKTsKLSAgICAgICAgICAgIHRoaXMu
Y29udGVudEJyb3dzZXIuY29udGVudFZpZXdDb250YWluZXIuY2xvc2VBbGxDb250ZW50Vmlld3Mo
KTsKLQotICAgICAgICAgICAgZm9yIChsZXQgZG9tQnJlYWtwb2ludCBvZiBXSS5kb21EZWJ1Z2dl
ck1hbmFnZXIuZG9tQnJlYWtwb2ludHMpCi0gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJl
YWtwb2ludChkb21CcmVha3BvaW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZXZlbnQu
ZGF0YS5vbGRNYWluUmVzb3VyY2UpIHsKLSAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IGV2ZW50
LnRhcmdldC5tYWluUmVzb3VyY2U7Ci0gICAgICAgICAgICB0aGlzLl9hZGRUcmVlRWxlbWVudEZv
clNvdXJjZUNvZGVUb1RyZWVPdXRsaW5lKHJlc291cmNlLCB0aGlzLl9zY3JpcHRzQ29udGVudFRy
ZWVPdXRsaW5lKTsKLSAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRzRm9yU291cmNlQ29k
ZShyZXNvdXJjZSk7Ci0gICAgICAgICAgICB0aGlzLl9hZGRJc3N1ZXNGb3JTb3VyY2VDb2RlKHJl
c291cmNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIF9oYW5kbGVUaW1lbGluZUNhcHR1cmlu
Z1N0YXRlQ2hhbmdlZChldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVRlbXBvcmFy
aWx5RGlzYWJsZWRCcmVha3BvaW50c0J1dHRvbnMoKTsKLQotICAgICAgICBzd2l0Y2ggKFdJLnRp
bWVsaW5lTWFuYWdlci5jYXB0dXJpbmdTdGF0ZSkgewotICAgICAgICBjYXNlIFdJLlRpbWVsaW5l
TWFuYWdlci5DYXB0dXJpbmdTdGF0ZS5TdGFydGluZzoKLSAgICAgICAgICAgIHRoaXMuY29udGVu
dFZpZXcuZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5fdGltZWxpbmVSZWNvcmRpbmdXYXJuaW5n
RWxlbWVudCwgdGhpcy5jb250ZW50Vmlldy5lbGVtZW50LmZpcnN0Q2hpbGQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXSS5UaW1lbGluZU1hbmFnZXIuQ2FwdHVyaW5nU3Rh
dGUuSW5hY3RpdmU6Ci0gICAgICAgICAgICB0aGlzLl90aW1lbGluZVJlY29yZGluZ1dhcm5pbmdF
bGVtZW50LnJlbW92ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICB0aGlzLl91cGRhdGVCcmVha3BvaW50c0Rpc2FibGVkQmFubmVyKCk7Ci0gICAgfQotCi0gICAg
X2hhbmRsZUF1ZGl0TWFuYWdlclRlc3RTY2hlZHVsZWQoZXZlbnQpCi0gICAgewotICAgICAgICB0
aGlzLl91cGRhdGVUZW1wb3JhcmlseURpc2FibGVkQnJlYWtwb2ludHNCdXR0b25zKCk7Ci0KLSAg
ICAgICAgdGhpcy5jb250ZW50Vmlldy5lbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLl9hdWRpdFRl
c3RXYXJuaW5nRWxlbWVudCwgdGhpcy5jb250ZW50Vmlldy5lbGVtZW50LmZpcnN0Q2hpbGQpOwot
ICAgICAgICB0aGlzLl91cGRhdGVCcmVha3BvaW50c0Rpc2FibGVkQmFubmVyKCk7Ci0gICAgfQot
Ci0gICAgX2hhbmRsZUF1ZGl0TWFuYWdlclRlc3RDb21wbGV0ZWQoZXZlbnQpCi0gICAgewotICAg
ICAgICB0aGlzLl91cGRhdGVUZW1wb3JhcmlseURpc2FibGVkQnJlYWtwb2ludHNCdXR0b25zKCk7
Ci0KLSAgICAgICAgdGhpcy5fYXVkaXRUZXN0V2FybmluZ0VsZW1lbnQucmVtb3ZlKCk7Ci0gICAg
ICAgIHRoaXMuX3VwZGF0ZUJyZWFrcG9pbnRzRGlzYWJsZWRCYW5uZXIoKTsKLSAgICB9Ci0KLSAg
ICBfdXBkYXRlVGVtcG9yYXJpbHlEaXNhYmxlZEJyZWFrcG9pbnRzQnV0dG9ucygpCi0gICAgewot
ICAgICAgICBsZXQgYnJlYWtwb2ludHNEaXNhYmxlZFRlbXBvcmFyaWx5ID0gV0kuZGVidWdnZXJN
YW5hZ2VyLmJyZWFrcG9pbnRzRGlzYWJsZWRUZW1wb3JhcmlseTsKLSAgICAgICAgdGhpcy5fZGVi
dWdnZXJCcmVha3BvaW50c0J1dHRvbkl0ZW0uZW5hYmxlZCA9ICFicmVha3BvaW50c0Rpc2FibGVk
VGVtcG9yYXJpbHk7Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyUGF1c2VSZXN1bWVCdXR0b25JdGVt
LmVuYWJsZWQgPSAhYnJlYWtwb2ludHNEaXNhYmxlZFRlbXBvcmFyaWx5OwotICAgIH0KLQotICAg
IF91cGRhdGVCcmVha3BvaW50c0Rpc2FibGVkQmFubmVyKCkKLSAgICB7Ci0gICAgICAgIGxldCBi
cmVha3BvaW50c0VuYWJsZWQgPSBXSS5kZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2ludHNFbmFibGVk
OwotICAgICAgICBsZXQgdGltZWxpbmVXYXJuaW5nU2hvd2luZyA9ICEhdGhpcy5fdGltZWxpbmVS
ZWNvcmRpbmdXYXJuaW5nRWxlbWVudC5wYXJlbnRFbGVtZW50OwotICAgICAgICBsZXQgYXVkaXRX
YXJuaW5nU2hvd2luZyA9ICEhdGhpcy5fYXVkaXRUZXN0V2FybmluZ0VsZW1lbnQucGFyZW50RWxl
bWVudDsKLQotICAgICAgICBpZiAoIWJyZWFrcG9pbnRzRW5hYmxlZCAmJiAhdGltZWxpbmVXYXJu
aW5nU2hvd2luZyAmJiAhYXVkaXRXYXJuaW5nU2hvd2luZykKLSAgICAgICAgICAgIHRoaXMuY29u
dGVudFZpZXcuZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5fYnJlYWtwb2ludHNEaXNhYmxlZFdh
cm5pbmdFbGVtZW50LCB0aGlzLmNvbnRlbnRWaWV3LmVsZW1lbnQuZmlyc3RDaGlsZCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzRGlzYWJsZWRXYXJuaW5nRWxl
bWVudC5yZW1vdmUoKTsKLSAgICB9Ci0KLSAgICBfc2NyaXB0QWRkZWQoZXZlbnQpCi0gICAgewot
ICAgICAgICB0aGlzLl9hZGRTY3JpcHQoZXZlbnQuZGF0YS5zY3JpcHQpOwotICAgIH0KLQotICAg
IF9hZGRTY3JpcHQoc2NyaXB0KQotICAgIHsKLSAgICAgICAgLy8gQ09NUEFUSUJJTElUWShpT1Mg
OSk6IEJhY2tlbmRzIGNvdWxkIHNlbmQgdGhlIGZyb250ZW5kIGJ1aWx0LWluIGNvZGUsIGZpbHRl
ciBvdXQgSlNDIGludGVybmFscy4KLSAgICAgICAgaWYgKCFzY3JpcHQudXJsICYmICFzY3JpcHQu
c291cmNlVVJMKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgLy8gSW4gZ2Vu
ZXJhbCwgZG8gbm90IHNob3cgZHluYW1pY2FsbHkgYWRkZWQgc2NyaXB0IGVsZW1lbnRzLgotICAg
ICAgICBpZiAoc2NyaXB0LmR5bmFtaWNhbGx5QWRkZWRTY3JpcHRFbGVtZW50ICYmICFzY3JpcHQu
c291cmNlVVJMKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgLy8gRG9uJ3Qg
YWRkIGJyZWFrcG9pbnRzIGlmIHRoZSBzY3JpcHQgaXMgcmVwcmVzZW50ZWQgYnkgYSBSZXNvdXJj
ZS4gVGhleSB3ZXJlCi0gICAgICAgIC8vIGFscmVhZHkgYWRkZWQgYnkgX3Jlc291cmNlQWRkZWQu
Ci0gICAgICAgIGlmIChzY3JpcHQucmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsK
LQotICAgICAgICBsZXQgdHJlZUVsZW1lbnQgPSB0aGlzLl9hZGRUcmVlRWxlbWVudEZvclNvdXJj
ZUNvZGVUb1RyZWVPdXRsaW5lKHNjcmlwdCwgdGhpcy5fc2NyaXB0c0NvbnRlbnRUcmVlT3V0bGlu
ZSk7Ci0gICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRzRm9yU291cmNlQ29kZShzY3JpcHQpOwot
ICAgICAgICB0aGlzLl9hZGRJc3N1ZXNGb3JTb3VyY2VDb2RlKHNjcmlwdCk7Ci0KLSAgICAgICAg
aWYgKHRoaXMucGFyZW50U2lkZWJhciAmJiAhdGhpcy5jb250ZW50QnJvd3Nlci5jdXJyZW50Q29u
dGVudFZpZXcpCi0gICAgICAgICAgICB0aGlzLnNob3dEZWZhdWx0Q29udGVudFZpZXdGb3JUcmVl
RWxlbWVudCh0cmVlRWxlbWVudCk7Ci0KLSAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50OwotICAg
IH0KLQotICAgIF9zY3JpcHRSZW1vdmVkKGV2ZW50KQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24g
cmVtb3ZlU2NyaXB0KHNjcmlwdCwgdHJlZU91dGxpbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGxldCBzY3JpcHRUcmVlRWxlbWVudCA9IHRyZWVPdXRsaW5lLmdldENhY2hlZFRyZWVFbGVtZW50
KHNjcmlwdCk7Ci0gICAgICAgICAgICBpZiAoc2NyaXB0VHJlZUVsZW1lbnQpCi0gICAgICAgICAg
ICAgICAgc2NyaXB0VHJlZUVsZW1lbnQucGFyZW50LnJlbW92ZUNoaWxkKHNjcmlwdFRyZWVFbGVt
ZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGxldCBzY3JpcHQgPSBldmVudC5kYXRhLnNjcmlw
dDsKLSAgICAgICAgcmVtb3ZlU2NyaXB0KHNjcmlwdCwgdGhpcy5fYnJlYWtwb2ludHNDb250ZW50
VHJlZU91dGxpbmUpOwotICAgICAgICByZW1vdmVTY3JpcHQoc2NyaXB0LCB0aGlzLl9zY3JpcHRz
Q29udGVudFRyZWVPdXRsaW5lKTsKLSAgICB9Ci0KLSAgICBfc2NyaXB0c0NsZWFyZWQoZXZlbnQp
Ci0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fYnJlYWtwb2ludHNDb250ZW50VHJl
ZU91dGxpbmUuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAg
IHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLmNo
aWxkcmVuW2ldOwotICAgICAgICAgICAgaWYgKCEodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5T
Y3JpcHRUcmVlRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgIHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLnJlbW92ZUNoaWxkQXRJbmRl
eChpLCB0cnVlLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3NjcmlwdHNDb250
ZW50VHJlZU91dGxpbmUucmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAgICB0aGlzLl9hZGRSZXNv
dXJjZXNSZWN1cnNpdmVseUZvckZyYW1lKFdJLm5ldHdvcmtNYW5hZ2VyLm1haW5GcmFtZSk7Ci0g
ICAgfQotCi0gICAgX2JyZWFrcG9pbnRBZGRlZChldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBi
cmVha3BvaW50ID0gZXZlbnQuZGF0YS5icmVha3BvaW50OwotICAgICAgICB0aGlzLl9hZGRCcmVh
a3BvaW50KGJyZWFrcG9pbnQpOwotICAgIH0KLQotICAgIF9icmVha3BvaW50UmVtb3ZlZChldmVu
dCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YS5icmVha3BvaW50
OwotICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotICAgIH0KLQot
ICAgIF9maW5kVGhyZWFkVHJlZUVsZW1lbnRGb3JUYXJnZXQodGFyZ2V0KQotICAgIHsKLSAgICAg
ICAgZm9yIChsZXQgY2hpbGQgb2YgdGhpcy5fY2FsbFN0YWNrVHJlZU91dGxpbmUuY2hpbGRyZW4p
IHsKLSAgICAgICAgICAgIGlmIChjaGlsZC50YXJnZXQgPT09IHRhcmdldCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAg
ICB9Ci0KLSAgICBfdGFyZ2V0QWRkZWQoZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9hZGRU
YXJnZXQoZXZlbnQuZGF0YS50YXJnZXQpOwotICAgIH0KLQotICAgIF9hZGRUYXJnZXQodGFyZ2V0
KQotICAgIHsKLSAgICAgICAgbGV0IHRyZWVFbGVtZW50ID0gbmV3IFdJLlRocmVhZFRyZWVFbGVt
ZW50KHRhcmdldCk7Ci0gICAgICAgIHRoaXMuX2NhbGxTdGFja1RyZWVPdXRsaW5lLmFwcGVuZENo
aWxkKHRyZWVFbGVtZW50KTsKLQotICAgICAgICAvLyBGSVhNRTogV2hlbiBXSS5tYWluVGFyZ2V0
IGNoYW5nZXM/Ci0gICAgICAgIGlmICh0YXJnZXQgPT09IFdJLm1haW5UYXJnZXQpCi0gICAgICAg
ICAgICB0aGlzLl9tYWluVGFyZ2V0VHJlZUVsZW1lbnQgPSB0cmVlRWxlbWVudDsKLQotICAgICAg
ICB0aGlzLl91cGRhdGVDYWxsU3RhY2tUcmVlT3V0bGluZSgpOwotICAgIH0KLQotICAgIF90YXJn
ZXRSZW1vdmVkKGV2ZW50KQotICAgIHsKLSAgICAgICAgbGV0IHRhcmdldCA9IGV2ZW50LmRhdGEu
dGFyZ2V0OwotICAgICAgICBsZXQgdHJlZUVsZW1lbnQgPSB0aGlzLl9maW5kVGhyZWFkVHJlZUVs
ZW1lbnRGb3JUYXJnZXQodGFyZ2V0KTsKLSAgICAgICAgdGhpcy5fY2FsbFN0YWNrVHJlZU91dGxp
bmUucmVtb3ZlQ2hpbGQodHJlZUVsZW1lbnQpOwotCi0gICAgICAgIHRoaXMuX3VwZGF0ZUNhbGxT
dGFja1RyZWVPdXRsaW5lKCk7Ci0gICAgfQotCi0gICAgX3VwZGF0ZUNhbGxTdGFja1RyZWVPdXRs
aW5lKCkKLSAgICB7Ci0gICAgICAgIGxldCBzaW5nbGVUaHJlYWRTaG93aW5nID0gV0kudGFyZ2V0
cy5sZW5ndGggPD0gMTsKLSAgICAgICAgdGhpcy5fY2FsbFN0YWNrVHJlZU91dGxpbmUuZWxlbWVu
dC5jbGFzc0xpc3QudG9nZ2xlKCJzaW5nbGUtdGhyZWFkIiwgc2luZ2xlVGhyZWFkU2hvd2luZyk7
Ci0gICAgICAgIGlmICh0aGlzLl9tYWluVGFyZ2V0VHJlZUVsZW1lbnQpCi0gICAgICAgICAgICB0
aGlzLl9tYWluVGFyZ2V0VHJlZUVsZW1lbnQuc2VsZWN0YWJsZSA9ICFzaW5nbGVUaHJlYWRTaG93
aW5nOwotICAgIH0KLQotICAgIF9oYW5kbGVEZWJ1Z2dlck9iamVjdERpc3BsYXlMb2NhdGlvbkRp
ZENoYW5nZShldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBkZWJ1Z2dlck9iamVjdCA9IGV2ZW50
LnRhcmdldDsKLQotICAgICAgICBpZiAoZXZlbnQuZGF0YS5vbGREaXNwbGF5U291cmNlQ29kZSA9
PT0gZGVidWdnZXJPYmplY3Quc291cmNlQ29kZUxvY2F0aW9uLmRpc3BsYXlTb3VyY2VDb2RlKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIEEga25vd24gZGVidWdnZXIgb2JqZWN0
IChicmVha3BvaW50LCBpc3N1ZU1lc3NhZ2UsIGV0Yy4pIG1vdmVkIGJldHdlZW4gcmVzb3VyY2Vz
LiBSZW1vdmUKLSAgICAgICAgLy8gdGhlIG9sZCB0cmVlIGVsZW1lbnQgYW5kIGNyZWF0ZSBhIG5l
dyB0cmVlIGVsZW1lbnQgd2l0aCB0aGUgdXBkYXRlZCBmaWxlLgotCi0gICAgICAgIGxldCB3YXNT
ZWxlY3RlZCA9IGZhbHNlOwotICAgICAgICBsZXQgb2xkRGVidWdnZXJUcmVlRWxlbWVudCA9IHRo
aXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLmdldENhY2hlZFRyZWVFbGVtZW50KGRl
YnVnZ2VyT2JqZWN0KTsKLSAgICAgICAgaWYgKG9sZERlYnVnZ2VyVHJlZUVsZW1lbnQpCi0gICAg
ICAgICAgICB3YXNTZWxlY3RlZCA9IG9sZERlYnVnZ2VyVHJlZUVsZW1lbnQuc2VsZWN0ZWQ7Ci0K
LSAgICAgICAgbGV0IG5ld0RlYnVnZ2VyVHJlZUVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAo
ZGVidWdnZXJPYmplY3QgaW5zdGFuY2VvZiBXSS5CcmVha3BvaW50KQotICAgICAgICAgICAgbmV3
RGVidWdnZXJUcmVlRWxlbWVudCA9IHRoaXMuX2FkZEJyZWFrcG9pbnQoZGVidWdnZXJPYmplY3Qp
OwotICAgICAgICBlbHNlIGlmIChkZWJ1Z2dlck9iamVjdCBpbnN0YW5jZW9mIFdJLklzc3VlTWVz
c2FnZSkKLSAgICAgICAgICAgIG5ld0RlYnVnZ2VyVHJlZUVsZW1lbnQgPSB0aGlzLl9hZGRJc3N1
ZShkZWJ1Z2dlck9iamVjdCk7Ci0gICAgICAgIGlmICghbmV3RGVidWdnZXJUcmVlRWxlbWVudCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAob2xkRGVidWdnZXJUcmVlRWxlbWVu
dCkKLSAgICAgICAgICAgIHRoaXMuX3JlbW92ZURlYnVnZ2VyVHJlZUVsZW1lbnQob2xkRGVidWdn
ZXJUcmVlRWxlbWVudCk7Ci0KLSAgICAgICAgaWYgKHdhc1NlbGVjdGVkKQotICAgICAgICAgICAg
bmV3RGVidWdnZXJUcmVlRWxlbWVudC5yZXZlYWxBbmRTZWxlY3QodHJ1ZSwgZmFsc2UsIHRydWUp
OwotICAgIH0KLQotICAgIF9yZW1vdmVEZWJ1Z2dlclRyZWVFbGVtZW50KGRlYnVnZ2VyVHJlZUVs
ZW1lbnQpCi0gICAgewotICAgICAgICAvLyBJZiB0aGlzIGlzIGEgQnJlYWtwb2ludFRyZWVFbGVt
ZW50IGJlaW5nIGRlbGV0ZWQgYmVjYXVzZSBvZiBhIGNhdXNlCi0gICAgICAgIC8vIG91dHNpZGUg
b2YgdGhlIFRyZWVPdXRsaW5lIHRoZW4gZGVzZWxlY3QgaWYgaXQgaXMgc2VsZWN0ZWQgdG8gYXZv
aWQKLSAgICAgICAgLy8gVHJlZU91dGxpbmUgc2VsZWN0aW9uIGNoYW5nZXMgY2F1c2luZyB1bmV4
cGVjdGVkIENvbnRlbnRWaWV3IGNoYW5nZXMuCi0gICAgICAgIGlmICghZGVidWdnZXJUcmVlRWxl
bWVudC5fX2RlbGV0ZWRWaWFEZWxldGVLZXlib2FyZFNob3J0Y3V0KQotICAgICAgICAgICAgZGVi
dWdnZXJUcmVlRWxlbWVudC5kZXNlbGVjdCgpOwotCi0gICAgICAgIGxldCBwYXJlbnRUcmVlRWxl
bWVudCA9IGRlYnVnZ2VyVHJlZUVsZW1lbnQucGFyZW50OwotICAgICAgICBwYXJlbnRUcmVlRWxl
bWVudC5yZW1vdmVDaGlsZChkZWJ1Z2dlclRyZWVFbGVtZW50KTsKLQotICAgICAgICBpZiAocGFy
ZW50VHJlZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIHx8IHBhcmVudFRyZWVFbGVtZW50ID09PSB0
aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBwYXJlbnRUcmVlRWxlbWVudC50cmVlT3V0bGluZS5yZW1vdmVDaGlsZChwYXJl
bnRUcmVlRWxlbWVudCk7Ci0gICAgfQotCi0gICAgX2RlYnVnZ2VyQ2FsbEZyYW1lc0RpZENoYW5n
ZShldmVudCkKLSAgICB7Ci0gICAgICAgIGxldCB0YXJnZXQgPSBldmVudC5kYXRhLnRhcmdldDsK
LSAgICAgICAgbGV0IHRyZWVFbGVtZW50ID0gdGhpcy5fZmluZFRocmVhZFRyZWVFbGVtZW50Rm9y
VGFyZ2V0KHRhcmdldCk7Ci0gICAgICAgIHRyZWVFbGVtZW50LnJlZnJlc2goKTsKLQotICAgICAg
ICBsZXQgYWN0aXZlQ2FsbEZyYW1lVHJlZUVsZW1lbnQgPSB0aGlzLl9jYWxsU3RhY2tUcmVlT3V0
bGluZS5maW5kVHJlZUVsZW1lbnQoV0kuZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZSk7
Ci0gICAgICAgIGlmIChhY3RpdmVDYWxsRnJhbWVUcmVlRWxlbWVudCkKLSAgICAgICAgICAgIGFj
dGl2ZUNhbGxGcmFtZVRyZWVFbGVtZW50LnJldmVhbCgpOwotICAgIH0KLQotICAgIF9kZWJ1Z2dl
ckFjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fYWN0
aXZlQ2FsbEZyYW1lVHJlZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUNhbGxG
cmFtZVRyZWVFbGVtZW50LmlzQWN0aXZlQ2FsbEZyYW1lID0gZmFsc2U7Ci0gICAgICAgICAgICB0
aGlzLl9hY3RpdmVDYWxsRnJhbWVUcmVlRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIVdJLmRlYnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fYWN0aXZlQ2FsbEZyYW1lVHJlZUVsZW1lbnQgPSB0
aGlzLl9jYWxsU3RhY2tUcmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQoV0kuZGVidWdnZXJNYW5h
Z2VyLmFjdGl2ZUNhbGxGcmFtZSk7Ci0gICAgICAgIGlmICh0aGlzLl9hY3RpdmVDYWxsRnJhbWVU
cmVlRWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUNhbGxGcmFtZVRyZWVFbGVtZW50
LmlzQWN0aXZlQ2FsbEZyYW1lID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBfYnJlYWtwb2ludHNCZW5l
YXRoVHJlZUVsZW1lbnQodHJlZUVsZW1lbnQpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2Vy
dCh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLlJlc291cmNlVHJlZUVsZW1lbnQgfHwgdHJlZUVs
ZW1lbnQgaW5zdGFuY2VvZiBXSS5TY3JpcHRUcmVlRWxlbWVudCk7Ci0gICAgICAgIGlmICghKHRy
ZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VUcmVlRWxlbWVudCkgJiYgISh0cmVlRWxl
bWVudCBpbnN0YW5jZW9mIFdJLlNjcmlwdFRyZWVFbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVy
biBbXTsKLQotICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKLSAgICAgICAgdmFyIGJyZWFr
cG9pbnRUcmVlRWxlbWVudHMgPSB0cmVlRWxlbWVudC5jaGlsZHJlbjsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBicmVha3BvaW50VHJlZUVsZW1lbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICBjb25zb2xlLmFzc2VydChicmVha3BvaW50VHJlZUVsZW1lbnRzW2ldIGluc3RhbmNl
b2YgV0kuQnJlYWtwb2ludFRyZWVFbGVtZW50KTsKLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KGJyZWFrcG9pbnRUcmVlRWxlbWVudHNbaV0uYnJlYWtwb2ludCk7Ci0gICAgICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IGJyZWFrcG9pbnRUcmVlRWxlbWVudHNbaV0uYnJlYWtwb2ludDsKLSAgICAg
ICAgICAgIGlmIChicmVha3BvaW50KQotICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1c2go
YnJlYWtwb2ludCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYnJlYWtwb2ludHM7Ci0g
ICAgfQotCi0gICAgX3JlbW92ZUFsbEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKQotICAgIHsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsKLSAgICAgICAgICAgIGlm
IChXSS5kZWJ1Z2dlck1hbmFnZXIuaXNCcmVha3BvaW50UmVtb3ZhYmxlKGJyZWFrcG9pbnQpKQot
ICAgICAgICAgICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5yZW1vdmVCcmVha3BvaW50KGJyZWFr
cG9pbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgX3RvZ2dsZUFsbEJyZWFrcG9pbnRzKGJy
ZWFrcG9pbnRzLCBkaXNhYmxlZCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
YnJlYWtwb2ludHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBicmVha3BvaW50c1tpXS5kaXNh
YmxlZCA9IGRpc2FibGVkOwotICAgIH0KLQotICAgIF9icmVha3BvaW50VHJlZU91dGxpbmVEZWxl
dGVUcmVlRWxlbWVudChzZWxlY3RlZFRyZWVFbGVtZW50KQotICAgIHsKLSAgICAgICAgY29uc29s
ZS5hc3NlcnQoc2VsZWN0ZWRUcmVlRWxlbWVudC5zZWxlY3RlZCk7Ci0KLSAgICAgICAgaWYgKCFX
SS5kZWJ1Z2dlck1hbmFnZXIuaXNCcmVha3BvaW50UmVtb3ZhYmxlKHNlbGVjdGVkVHJlZUVsZW1l
bnQucmVwcmVzZW50ZWRPYmplY3QpKSB7Ci0gICAgICAgICAgICBsZXQgdHJlZUVsZW1lbnRUb1Nl
bGVjdCA9IHNlbGVjdGVkVHJlZUVsZW1lbnQubmV4dFNlbGVjdGFibGVTaWJsaW5nOwotICAgICAg
ICAgICAgaWYgKHRyZWVFbGVtZW50VG9TZWxlY3QpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBv
bWl0Rm9jdXMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQnlVc2VyID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB0cmVlRWxlbWVudFRvU2VsZWN0LnNlbGVjdChvbWl0Rm9j
dXMsIHNlbGVjdGVkQnlVc2VyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChz
ZWxlY3RlZFRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VUcmVlRWxlbWVudCB8fCBz
ZWxlY3RlZFRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuU2NyaXB0VHJlZUVsZW1lbnQpIHsKLSAg
ICAgICAgICAgIGxldCBicmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzQmVuZWF0aFRyZWVF
bGVtZW50KHNlbGVjdGVkVHJlZUVsZW1lbnQpOwotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxs
QnJlYWtwb2ludHMoYnJlYWtwb2ludHMpOwotICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVHJl
ZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QgPT09IERlYnVnZ2VyU2lkZWJhclBhbmVsLl9fd2lu
ZG93RXZlbnRUYXJnZXRSZXByZXNlbnRlZE9iamVjdCkgewotICAgICAgICAgICAgbGV0IGV2ZW50
QnJlYWtwb2ludHNPbldpbmRvdyA9IFdJLmRvbU1hbmFnZXIuZXZlbnRMaXN0ZW5lckJyZWFrcG9p
bnRzLmZpbHRlcigoZXZlbnRCcmVha3BvaW50KSA9PiBldmVudEJyZWFrcG9pbnQuZXZlbnRMaXN0
ZW5lci5vbldpbmRvdyk7Ci0gICAgICAgICAgICBmb3IgKGxldCBldmVudEJyZWFrcG9pbnQgb2Yg
ZXZlbnRCcmVha3BvaW50c09uV2luZG93KQotICAgICAgICAgICAgICAgIFdJLmRvbU1hbmFnZXIu
cmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoZXZlbnRCcmVha3BvaW50LmV2ZW50TGlz
dGVuZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
X2JyZWFrcG9pbnRUcmVlT3V0bGluZUNvbnRleHRNZW51VHJlZUVsZW1lbnQoY29udGV4dE1lbnUs
IGV2ZW50LCB0cmVlRWxlbWVudCkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgbmVj
ZXNzYXJ5IHNpbmNlIHRoZSBjb250ZXh0IG1lbnUgaXMgY3JlYXRlZCBieSB0aGUgVHJlZU91dGxp
bmUsIG1lYW5pbmcKLSAgICAgICAgLy8gdGhhdCBhbnkgY2hpbGQgY291bGQgYmUgdGhlIHRhcmdl
dCBvZiB0aGUgY29udGV4dCBtZW51IGV2ZW50LgotICAgICAgICBpZiAoISh0cmVlRWxlbWVudCBp
bnN0YW5jZW9mIFdJLlJlc291cmNlVHJlZUVsZW1lbnQpICYmICEodHJlZUVsZW1lbnQgaW5zdGFu
Y2VvZiBXSS5TY3JpcHRUcmVlRWxlbWVudCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgbGV0IGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHNCZW5lYXRoVHJlZUVsZW1lbnQo
dHJlZUVsZW1lbnQpOwotICAgICAgICBsZXQgc2hvdWxkRGlzYWJsZSA9IGJyZWFrcG9pbnRzLnNv
bWUoKGJyZWFrcG9pbnQpID0+ICFicmVha3BvaW50LmRpc2FibGVkKTsKLQotICAgICAgICBsZXQg
cmVtb3ZlQWxsUmVzb3VyY2VCcmVha3BvaW50cyA9ICgpID0+IHsKLSAgICAgICAgICAgIHRoaXMu
X3JlbW92ZUFsbEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKTsKLSAgICAgICAgfTsKLQotICAgICAg
ICBsZXQgdG9nZ2xlQWxsUmVzb3VyY2VCcmVha3BvaW50cyA9ICgpID0+IHsKLSAgICAgICAgICAg
IHRoaXMuX3RvZ2dsZUFsbEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzLCBzaG91bGREaXNhYmxlKTsK
LSAgICAgICAgfTsKLQotICAgICAgICBpZiAoc2hvdWxkRGlzYWJsZSkKLSAgICAgICAgICAgIGNv
bnRleHRNZW51LmFwcGVuZEl0ZW0oV0kuVUlTdHJpbmcoIkRpc2FibGUgQnJlYWtwb2ludHMiKSwg
dG9nZ2xlQWxsUmVzb3VyY2VCcmVha3BvaW50cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV0kuVUlTdHJpbmcoIkVuYWJsZSBCcmVha3BvaW50cyIp
LCB0b2dnbGVBbGxSZXNvdXJjZUJyZWFrcG9pbnRzKTsKLSAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kSXRlbShXSS5VSVN0cmluZygiRGVsZXRlIEJyZWFrcG9pbnRzIiksIHJlbW92ZUFsbFJlc291
cmNlQnJlYWtwb2ludHMpOwotICAgIH0KLQotICAgIF90cmVlU2VsZWN0aW9uRGlkQ2hhbmdlKGV2
ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGxldCB0cmVlRWxlbWVudCA9IGV2ZW50LnRhcmdldC5zZWxlY3RlZFRy
ZWVFbGVtZW50OwotICAgICAgICBpZiAoIXRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLkRPTU5vZGVUcmVlRWxl
bWVudAotICAgICAgICAgICAgfHwgdHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5ET01CcmVha3Bv
aW50VHJlZUVsZW1lbnQKLSAgICAgICAgICAgIHx8IHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0ku
RXZlbnRCcmVha3BvaW50VHJlZUVsZW1lbnQKLSAgICAgICAgICAgIHx8IHRyZWVFbGVtZW50IGlu
c3RhbmNlb2YgV0kuVVJMQnJlYWtwb2ludFRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmICh0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCA9PT0gRGVidWdn
ZXJTaWRlYmFyUGFuZWwuX193aW5kb3dFdmVudFRhcmdldFJlcHJlc2VudGVkT2JqZWN0KQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7Ci0gICAgICAgICAg
ICBpZ25vcmVOZXR3b3JrVGFiOiB0cnVlLAotICAgICAgICAgICAgaWdub3JlU2VhcmNoVGFiOiB0
cnVlLAotICAgICAgICB9OwotCi0gICAgICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJ
LlJlc291cmNlVHJlZUVsZW1lbnQgfHwgdHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5TY3JpcHRU
cmVlRWxlbWVudCkgewotICAgICAgICAgICAgV0kuc2hvd1NvdXJjZUNvZGUodHJlZUVsZW1lbnQu
cmVwcmVzZW50ZWRPYmplY3QsIG9wdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuQ2FsbEZyYW1lVHJl
ZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIGxldCBjYWxsRnJhbWUgPSB0cmVlRWxlbWVudC5jYWxs
RnJhbWU7Ci0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLmlkKQotICAgICAgICAgICAgICAgIFdJ
LmRlYnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWUgPSBjYWxsRnJhbWU7Ci0KLSAgICAgICAg
ICAgIGlmIChjYWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9uKQotICAgICAgICAgICAgICAgIFdJ
LnNob3dTb3VyY2VDb2RlTG9jYXRpb24oY2FsbEZyYW1lLnNvdXJjZUNvZGVMb2NhdGlvbiwgb3B0
aW9ucyk7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0
cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLklzc3VlVHJlZUVsZW1lbnQpIHsKLSAgICAgICAgICAg
IFdJLnNob3dTb3VyY2VDb2RlTG9jYXRpb24odHJlZUVsZW1lbnQuaXNzdWVNZXNzYWdlLnNvdXJj
ZUNvZGVMb2NhdGlvbiwgb3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoISh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLkJyZWFrcG9pbnRUcmVl
RWxlbWVudCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbGV0IGJyZWFrcG9pbnQg
PSB0cmVlRWxlbWVudC5icmVha3BvaW50OwotICAgICAgICBpZiAodHJlZUVsZW1lbnQudHJlZU91
dGxpbmUgPT09IHRoaXMuX3BhdXNlUmVhc29uVHJlZU91dGxpbmUpIHsKLSAgICAgICAgICAgIFdJ
LnNob3dTb3VyY2VDb2RlTG9jYXRpb24oYnJlYWtwb2ludC5zb3VyY2VDb2RlTG9jYXRpb24sIG9w
dGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0
cmVlRWxlbWVudC5wYXJlbnQucmVwcmVzZW50ZWRPYmplY3QpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgY29uc29sZS5hc3NlcnQodHJlZUVsZW1lbnQucGFyZW50LnJlcHJlc2VudGVk
T2JqZWN0IGluc3RhbmNlb2YgV0kuU291cmNlQ29kZSk7Ci0gICAgICAgIGlmICghKHRyZWVFbGVt
ZW50LnBhcmVudC5yZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlNvdXJjZUNvZGUpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFdJLnNob3dTb3VyY2VDb2RlTG9jYXRpb24o
YnJlYWtwb2ludC5zb3VyY2VDb2RlTG9jYXRpb24sIG9wdGlvbnMpOwotICAgIH0KLQotICAgIF9h
ZGRUcmVlRWxlbWVudCh0cmVlRWxlbWVudCwgcGFyZW50VHJlZUVsZW1lbnQpCi0gICAgewotICAg
ICAgICBpZiAoIXBhcmVudFRyZWVFbGVtZW50KQotICAgICAgICAgICAgcGFyZW50VHJlZUVsZW1l
bnQgPSB0aGlzLl9icmVha3BvaW50c0NvbnRlbnRUcmVlT3V0bGluZTsKLQotICAgICAgICBsZXQg
Y29tcGFyYXRvciA9IChhLCBiKSA9PiB7Ci0gICAgICAgICAgICBjb25zdCByYW5rRnVuY3Rpb25z
ID0gWwotICAgICAgICAgICAgICAgICh0cmVlRWxlbWVudCkgPT4gdHJlZUVsZW1lbnQucmVwcmVz
ZW50ZWRPYmplY3QgPT09IFdJLmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRpb25zQnJlYWtwb2lu
dCwKLSAgICAgICAgICAgICAgICAodHJlZUVsZW1lbnQpID0+IHRyZWVFbGVtZW50LnJlcHJlc2Vu
dGVkT2JqZWN0ID09PSBXSS5kZWJ1Z2dlck1hbmFnZXIudW5jYXVnaHRFeGNlcHRpb25zQnJlYWtw
b2ludCwKLSAgICAgICAgICAgICAgICAodHJlZUVsZW1lbnQpID0+IHRyZWVFbGVtZW50LnJlcHJl
c2VudGVkT2JqZWN0ID09PSBXSS5kZWJ1Z2dlck1hbmFnZXIuYXNzZXJ0aW9uRmFpbHVyZXNCcmVh
a3BvaW50LAotICAgICAgICAgICAgICAgICh0cmVlRWxlbWVudCkgPT4gdHJlZUVsZW1lbnQgaW5z
dGFuY2VvZiBXSS5CcmVha3BvaW50VHJlZUVsZW1lbnQgfHwgdHJlZUVsZW1lbnQgaW5zdGFuY2Vv
ZiBXSS5SZXNvdXJjZVRyZWVFbGVtZW50IHx8IHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuU2Ny
aXB0VHJlZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgKHRyZWVFbGVtZW50KSA9PiB0cmVlRWxl
bWVudC5yZXByZXNlbnRlZE9iamVjdCA9PT0gV0kuZGVidWdnZXJNYW5hZ2VyLmFsbE1pY3JvdGFz
a3NCcmVha3BvaW50LAotICAgICAgICAgICAgICAgICh0cmVlRWxlbWVudCkgPT4gdHJlZUVsZW1l
bnQucmVwcmVzZW50ZWRPYmplY3QgPT09IFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxBbmltYXRp
b25GcmFtZXNCcmVha3BvaW50LAotICAgICAgICAgICAgICAgICh0cmVlRWxlbWVudCkgPT4gdHJl
ZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QgPT09IFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxU
aW1lb3V0c0JyZWFrcG9pbnQsCi0gICAgICAgICAgICAgICAgKHRyZWVFbGVtZW50KSA9PiB0cmVl
RWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCA9PT0gV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbElu
dGVydmFsc0JyZWFrcG9pbnQsCi0gICAgICAgICAgICAgICAgKHRyZWVFbGVtZW50KSA9PiB0cmVl
RWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCA9PT0gV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbExp
c3RlbmVyc0JyZWFrcG9pbnQsCi0gICAgICAgICAgICAgICAgKHRyZWVFbGVtZW50KSA9PiB0cmVl
RWxlbWVudCBpbnN0YW5jZW9mIFdJLkV2ZW50QnJlYWtwb2ludFRyZWVFbGVtZW50LAotICAgICAg
ICAgICAgICAgICh0cmVlRWxlbWVudCkgPT4gdHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5ET01O
b2RlVHJlZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgKHRyZWVFbGVtZW50KSA9PiB0cmVlRWxl
bWVudC5yZXByZXNlbnRlZE9iamVjdCA9PT0gRGVidWdnZXJTaWRlYmFyUGFuZWwuX193aW5kb3dF
dmVudFRhcmdldFJlcHJlc2VudGVkT2JqZWN0LAotICAgICAgICAgICAgICAgICh0cmVlRWxlbWVu
dCkgPT4gdHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5ET01CcmVha3BvaW50VHJlZUVsZW1lbnQs
Ci0gICAgICAgICAgICAgICAgKHRyZWVFbGVtZW50KSA9PiB0cmVlRWxlbWVudC5yZXByZXNlbnRl
ZE9iamVjdCA9PT0gV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbFJlcXVlc3RzQnJlYWtwb2ludCwK
LSAgICAgICAgICAgICAgICAodHJlZUVsZW1lbnQpID0+IHRyZWVFbGVtZW50IGluc3RhbmNlb2Yg
V0kuVVJMQnJlYWtwb2ludFRyZWVFbGVtZW50LAotICAgICAgICAgICAgXTsKLQotICAgICAgICAg
ICAgbGV0IGFSYW5rID0gcmFua0Z1bmN0aW9ucy5maW5kSW5kZXgoKHJhbmtGdW5jdGlvbikgPT4g
cmFua0Z1bmN0aW9uKGEpKTsKLSAgICAgICAgICAgIGxldCBiUmFuayA9IHJhbmtGdW5jdGlvbnMu
ZmluZEluZGV4KChyYW5rRnVuY3Rpb24pID0+IHJhbmtGdW5jdGlvbihiKSk7Ci0gICAgICAgICAg
ICBpZiAoYVJhbmsgPj0gMCAmJiBiUmFuayA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFS
YW5rIDwgYlJhbmspCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAg
ICAgICBpZiAoYlJhbmsgPCBhUmFuaykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChhIGluc3RhbmNlb2YgV0kuQnJlYWtwb2lu
dFRyZWVFbGVtZW50ICYmIGIgaW5zdGFuY2VvZiBXSS5CcmVha3BvaW50VHJlZUVsZW1lbnQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBhcmVCcmVha3BvaW50VHJlZUVsZW1lbnRz
KGEsIGIpOwotCi0gICAgICAgICAgICByZXR1cm4gYS5tYWluVGl0bGUuZXh0ZW5kZWRMb2NhbGVD
b21wYXJlKGIubWFpblRpdGxlKSB8fCBhLnN1YnRpdGxlLmV4dGVuZGVkTG9jYWxlQ29tcGFyZShi
LnN1YnRpdGxlKTsKLSAgICAgICAgfTsKLQotICAgICAgICBwYXJlbnRUcmVlRWxlbWVudC5pbnNl
cnRDaGlsZCh0cmVlRWxlbWVudCwgaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRC
eUZ1bmN0aW9uKHRyZWVFbGVtZW50LCBwYXJlbnRUcmVlRWxlbWVudC5jaGlsZHJlbiwgY29tcGFy
YXRvcikpOwotICAgIH0KLQotICAgIF9jb21wYXJlQnJlYWtwb2ludFRyZWVFbGVtZW50cyhhLCBi
KQotICAgIHsKLSAgICAgICAgaWYgKCFhLnJlcHJlc2VudGVkT2JqZWN0IHx8ICFiLnJlcHJlc2Vu
dGVkT2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgbGV0IGFMb2NhdGlv
biA9IGEucmVwcmVzZW50ZWRPYmplY3Quc291cmNlQ29kZUxvY2F0aW9uOwotICAgICAgICBsZXQg
YkxvY2F0aW9uID0gYi5yZXByZXNlbnRlZE9iamVjdC5zb3VyY2VDb2RlTG9jYXRpb247Ci0gICAg
ICAgIGlmICghYUxvY2F0aW9uIHx8ICFiTG9jYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gMDsK
LQotICAgICAgICB2YXIgY29tcGFyaXNvblJlc3VsdCA9IGFMb2NhdGlvbi5kaXNwbGF5TGluZU51
bWJlciAtIGJMb2NhdGlvbi5kaXNwbGF5TGluZU51bWJlcjsKLSAgICAgICAgaWYgKGNvbXBhcmlz
b25SZXN1bHQgIT09IDApCi0gICAgICAgICAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdDsKLQot
ICAgICAgICByZXR1cm4gYUxvY2F0aW9uLmRpc3BsYXlDb2x1bW5OdW1iZXIgLSBiTG9jYXRpb24u
ZGlzcGxheUNvbHVtbk51bWJlcjsKLSAgICB9Ci0KLSAgICBfdXBkYXRlUGF1c2VSZWFzb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZSA9IG51bGw7Ci0KLSAg
ICAgICAgdGhpcy5fdXBkYXRlUGF1c2VSZWFzb25Hb3RvQXJyb3coKTsKLSAgICAgICAgbGV0IHRh
cmdldCA9IFdJLmRlYnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWUudGFyZ2V0OwotICAgICAg
ICBsZXQgdGFyZ2V0RGF0YSA9IFdJLmRlYnVnZ2VyTWFuYWdlci5kYXRhRm9yVGFyZ2V0KHRhcmdl
dCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVQYXVzZVJlYXNvblNlY3Rpb24odGFyZ2V0
LCB0YXJnZXREYXRhLnBhdXNlUmVhc29uLCB0YXJnZXREYXRhLnBhdXNlRGF0YSk7Ci0gICAgfQot
Ci0gICAgX3VwZGF0ZVBhdXNlUmVhc29uU2VjdGlvbih0YXJnZXQsIHBhdXNlUmVhc29uLCBwYXVz
ZURhdGEpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHBhdXNlUmVhc29uKSB7Ci0gICAgICAgIGNh
c2UgV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkFuaW1hdGlvbkZyYW1lOgotICAgICAg
ICAgICAgdGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZSA9IHRoaXMuY3JlYXRlQ29udGVudFRy
ZWVPdXRsaW5lKHtzdXBwcmVzc0ZpbHRlcmluZzogdHJ1ZX0pOwotCi0gICAgICAgICAgICB2YXIg
ZXZlbnRCcmVha3BvaW50VHJlZUVsZW1lbnQgPSBuZXcgV0kuRXZlbnRCcmVha3BvaW50VHJlZUVs
ZW1lbnQoV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQs
IHsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFdJLkRlYnVnZ2VyU2lkZWJhclBhbmVsLlBh
dXNlZEJyZWFrcG9pbnRJY29uU3R5bGVDbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgdGl0bGU6
IFdJLlVJU3RyaW5nKCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUgRmlyZWQiKSwKLSAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5hcHBlbmRDaGls
ZChldmVudEJyZWFrcG9pbnRUcmVlRWxlbWVudCk7Ci0KLSAgICAgICAgICAgIHZhciBldmVudEJy
ZWFrcG9pbnRSb3cgPSBuZXcgV0kuRGV0YWlsc1NlY3Rpb25Sb3c7Ci0gICAgICAgICAgICBldmVu
dEJyZWFrcG9pbnRSb3cuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9wYXVzZVJlYXNvblRyZWVP
dXRsaW5lLmVsZW1lbnQpOwotCi0gICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvbkdyb3VwLnJv
d3MgPSBbZXZlbnRCcmVha3BvaW50Um93XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgICAgIGNhc2UgV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkFzc2VydGlvbjoKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW5jbHVkZSB0aGUgYXNzZXJ0aW9uIGNvbmRp
dGlvbiBzdHJpbmcuCi0gICAgICAgICAgICBjb25zb2xlLmFzc2VydChwYXVzZURhdGEsICJFeHBl
Y3RlZCBkYXRhIHdpdGggYW4gYXNzZXJ0aW9uLCBidXQgZm91bmQgbm9uZS4iKTsKLSAgICAgICAg
ICAgIGlmIChwYXVzZURhdGEgJiYgcGF1c2VEYXRhLm1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLl9wYXVzZVJlYXNvblRleHRSb3cudGV4dCA9IFdJLlVJU3RyaW5nKCJBc3NlcnRpb24g
d2l0aCBtZXNzYWdlOiAlcyIpLmZvcm1hdChwYXVzZURhdGEubWVzc2FnZSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRoaXMuX3Bh
dXNlUmVhc29uVGV4dFJvdy50ZXh0ID0gV0kuVUlTdHJpbmcoIkFzc2VydGlvbiBGYWlsZWQiKTsK
LSAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVhc29uR3JvdXAucm93cyA9IFt0aGlzLl9wYXVzZVJl
YXNvblRleHRSb3ddOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgY2FzZSBX
SS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uQmxhY2tib3hlZFNjcmlwdDogewotICAgICAg
ICAgICAgY29uc29sZS5hc3NlcnQocGF1c2VEYXRhKTsKLSAgICAgICAgICAgIGlmIChwYXVzZURh
dGEpCi0gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGF1c2VSZWFzb25TZWN0aW9uKHRhcmdl
dCwgV0kuRGVidWdnZXJNYW5hZ2VyLnBhdXNlUmVhc29uRnJvbVBheWxvYWQocGF1c2VEYXRhLm9y
aWdpbmFsUmVhc29uKSwgcGF1c2VEYXRhLm9yaWdpbmFsRGF0YSk7Ci0KLSAgICAgICAgICAgIC8v
IERvbid0IHVzZSBgX3BhdXNlUmVhc29uVGV4dFJvd2AgYXMgaXQgbWF5IGhhdmUgYWxyZWFkeSBi
ZWVuIHNldC4KLSAgICAgICAgICAgIGxldCBibGFja2JveFJlYXNvblRleHRSb3cgPSBuZXcgV0ku
RGV0YWlsc1NlY3Rpb25UZXh0Um93KFdJLlVJU3RyaW5nKCJEZWZlcnJlZCBwYXVzZSBmcm9tIGJs
YWNrYm94ZWQgc2NyaXB0IikpOwotICAgICAgICAgICAgYmxhY2tib3hSZWFzb25UZXh0Um93Ll9f
YmxhY2tib3hSZWFzb24gPSB0cnVlOwotCi0gICAgICAgICAgICBsZXQgZXhpc3RpbmdSb3dzID0g
dGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dzLmZpbHRlcigocm93KSA9PiAhcm93Ll9fYmxhY2ti
b3hSZWFzb24pOwotICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dzID0gW2Js
YWNrYm94UmVhc29uVGV4dFJvdywgLi4uZXhpc3RpbmdSb3dzXTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1
c2VSZWFzb24uQnJlYWtwb2ludDoKLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBhdXNlRGF0
YSwgIkV4cGVjdGVkIGJyZWFrcG9pbnQgaWRlbnRpZmllciwgYnV0IGZvdW5kIG5vbmUuIik7Ci0g
ICAgICAgICAgICBpZiAocGF1c2VEYXRhICYmIHBhdXNlRGF0YS5icmVha3BvaW50SWQpIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRsaW5lID0gdGhpcy5jcmVhdGVD
b250ZW50VHJlZU91dGxpbmUoe3N1cHByZXNzRmlsdGVyaW5nOiB0cnVlfSk7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5hZGRFdmVudExpc3RlbmVyKFdJLlRy
ZWVPdXRsaW5lLkV2ZW50LlNlbGVjdGlvbkRpZENoYW5nZSwgdGhpcy5fdHJlZVNlbGVjdGlvbkRp
ZENoYW5nZSwgdGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludCA9IFdJLmRl
YnVnZ2VyTWFuYWdlci5icmVha3BvaW50Rm9ySWRlbnRpZmllcihwYXVzZURhdGEuYnJlYWtwb2lu
dElkKTsKLSAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludFRyZWVFbGVtZW50ID0gbmV3IFdJ
LkJyZWFrcG9pbnRUcmVlRWxlbWVudChicmVha3BvaW50LCB7Ci0gICAgICAgICAgICAgICAgICAg
IGNsYXNzTmFtZTogV0kuRGVidWdnZXJTaWRlYmFyUGFuZWwuUGF1c2VkQnJlYWtwb2ludEljb25T
dHlsZUNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFdJLlVJU3RyaW5nKCJU
cmlnZ2VyZWQgQnJlYWtwb2ludCIpLAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgIGxldCBicmVha3BvaW50RGV0YWlsc1NlY3Rpb24gPSBuZXcgV0kuRGV0YWlsc1NlY3Rpb25S
b3c7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5hcHBlbmRD
aGlsZChicmVha3BvaW50VHJlZUVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRE
ZXRhaWxzU2VjdGlvbi5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3BhdXNlUmVhc29uVHJlZU91
dGxpbmUuZWxlbWVudCk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvbkdyb3Vw
LnJvd3MgPSBbYnJlYWtwb2ludERldGFpbHNTZWN0aW9uXTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkNTUFZpb2xhdGlvbjoKLSAgICAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHBhdXNlRGF0YSwgIkV4cGVjdGVkIGRhdGEgd2l0aCBhIENTUCBW
aW9sYXRpb24sIGJ1dCBmb3VuZCBub25lLiIpOwotICAgICAgICAgICAgaWYgKHBhdXNlRGF0YSkg
ewotICAgICAgICAgICAgICAgIC8vIENPTVBBVElCSUxJVFkgKGlPUyA4KTogJ2RpcmVjdGl2ZScg
d2FzICdkaXJlY3RpdmVUZXh0Jy4KLSAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRl
eHRSb3cudGV4dCA9IFdJLlVJU3RyaW5nKCJDb250ZW50IFNlY3VyaXR5IFBvbGljeSB2aW9sYXRp
b24gb2YgZGlyZWN0aXZlOiAlcyIpLmZvcm1hdChwYXVzZURhdGEuZGlyZWN0aXZlIHx8IHBhdXNl
RGF0YS5kaXJlY3RpdmVUZXh0KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvbkdy
b3VwLnJvd3MgPSBbdGhpcy5fcGF1c2VSZWFzb25UZXh0Um93XTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkRlYnVnZ2VyU3RhdGVtZW50Ogot
ICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25UZXh0Um93LnRleHQgPSBXSS5VSVN0cmluZygi
RGVidWdnZXIgU3RhdGVtZW50Iik7Ci0gICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvbkdyb3Vw
LnJvd3MgPSBbdGhpcy5fcGF1c2VSZWFzb25UZXh0Um93XTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgICAgIGNhc2UgV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkRPTToK
LSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KFdJLmRvbURlYnVnZ2VyTWFuYWdlci5zdXBwb3J0
ZWQpOwotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQocGF1c2VEYXRhLCAiRXhwZWN0ZWQgRE9N
IGJyZWFrcG9pbnQgZGF0YSwgYnV0IGZvdW5kIG5vbmUuIik7Ci0gICAgICAgICAgICBpZiAocGF1
c2VEYXRhICYmIHBhdXNlRGF0YS5ub2RlSWQpIHsKLSAgICAgICAgICAgICAgICBsZXQgZG9tTm9k
ZSA9IFdJLmRvbU1hbmFnZXIubm9kZUZvcklkKHBhdXNlRGF0YS5ub2RlSWQpOwotICAgICAgICAg
ICAgICAgIGxldCBkb21CcmVha3BvaW50cyA9IFdJLmRvbURlYnVnZ2VyTWFuYWdlci5kb21CcmVh
a3BvaW50c0Zvck5vZGUoZG9tTm9kZSk7Ci0gICAgICAgICAgICAgICAgbGV0IGRvbUJyZWFrcG9p
bnQ7Ci0gICAgICAgICAgICAgICAgZm9yIChsZXQgYnJlYWtwb2ludCBvZiBkb21CcmVha3BvaW50
cykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC50eXBlID09PSBwYXVzZURh
dGEudHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZG9tQnJlYWtwb2ludCA9IGJyZWFr
cG9pbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghZG9tQnJlYWtw
b2ludCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgdGhp
cy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZSA9IHRoaXMuY3JlYXRlQ29udGVudFRyZWVPdXRsaW5l
KHtzdXBwcmVzc0ZpbHRlcmluZzogdHJ1ZX0pOwotCi0gICAgICAgICAgICAgICAgbGV0IHR5cGUg
PSBXSS5ET01CcmVha3BvaW50VHJlZUVsZW1lbnQuZGlzcGxheU5hbWVGb3JUeXBlKGRvbUJyZWFr
cG9pbnQudHlwZSk7Ci0gICAgICAgICAgICAgICAgbGV0IGRvbUJyZWFrcG9pbnRUcmVlRWxlbWVu
dCA9IG5ldyBXSS5ET01CcmVha3BvaW50VHJlZUVsZW1lbnQoZG9tQnJlYWtwb2ludCwgewotICAg
ICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFdJLkRlYnVnZ2VyU2lkZWJhclBhbmVsLlBhdXNl
ZEJyZWFrcG9pbnRJY29uU3R5bGVDbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgICAgIHRpdGxl
OiB0eXBlLAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGxldCBkb21CcmVh
a3BvaW50Um93ID0gbmV3IFdJLkRldGFpbHNTZWN0aW9uUm93OwotICAgICAgICAgICAgICAgIHRo
aXMuX3BhdXNlUmVhc29uVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQoZG9tQnJlYWtwb2ludFRyZWVF
bGVtZW50KTsKLSAgICAgICAgICAgICAgICBkb21CcmVha3BvaW50Um93LmVsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5lbGVtZW50KTsKLQotICAgICAgICAg
ICAgICAgIGxldCBvd25lckVsZW1lbnRSb3cgPSBuZXcgV0kuRGV0YWlsc1NlY3Rpb25TaW1wbGVS
b3coV0kuVUlTdHJpbmcoIkVsZW1lbnQiKSwgV0kubGlua2lmeU5vZGVSZWZlcmVuY2UoZG9tTm9k
ZSkpOwotICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVhc29uR3JvdXAucm93cyA9IFtkb21C
cmVha3BvaW50Um93LCBvd25lckVsZW1lbnRSb3ddOwotCi0gICAgICAgICAgICAgICAgaWYgKGRv
bUJyZWFrcG9pbnQudHlwZSAhPT0gV0kuRE9NQnJlYWtwb2ludC5UeXBlLlN1YnRyZWVNb2RpZmll
ZCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgICAgICBj
b25zb2xlLmFzc2VydChwYXVzZURhdGEudGFyZ2V0Tm9kZSk7Ci0KLSAgICAgICAgICAgICAgICBs
ZXQgcmVtb3RlT2JqZWN0ID0gV0kuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHBhdXNlRGF0YS50
YXJnZXROb2RlLCB0YXJnZXQpOwotICAgICAgICAgICAgICAgIHJlbW90ZU9iamVjdC5wdXNoTm9k
ZVRvRnJvbnRlbmQoKG5vZGVJZCkgPT4gewotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGVJ
ZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAg
ICBsZXQgbm9kZSA9IFdJLmRvbU1hbmFnZXIubm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5vZGUsICJNaXNzaW5nIG5vZGUgZm9yIGlkLiIsIG5v
ZGVJZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICBsZXQgZnJhZ21lbnQgPSBkb2N1
bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBk
ZXNjcmlwdGlvbiA9IHBhdXNlRGF0YS5pbnNlcnRpb24gPyBXSS5VSVN0cmluZygiQ2hpbGQgYWRk
ZWQgdG8gIikgOiBXSS5VSVN0cmluZygiUmVtb3ZlZCBkZXNjZW5kYW50ICIpOwotICAgICAgICAg
ICAgICAgICAgICBmcmFnbWVudC5hcHBlbmQoZGVzY3JpcHRpb24sIFdJLmxpbmtpZnlOb2RlUmVm
ZXJlbmNlKG5vZGUpKTsKLQotICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0RGVzY3JpcHRp
b25Sb3cgPSBuZXcgV0kuRGV0YWlsc1NlY3Rpb25TaW1wbGVSb3coV0kuVUlTdHJpbmcoIkRldGFp
bHMiKSwgZnJhZ21lbnQpOwotICAgICAgICAgICAgICAgICAgICB0YXJnZXREZXNjcmlwdGlvblJv
dy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoInRhcmdldC1kZXNjcmlwdGlvbiIpOwotCi0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVhc29uR3JvdXAucm93cyA9IHRoaXMuX3BhdXNlUmVh
c29uR3JvdXAucm93cy5jb25jYXQodGFyZ2V0RGVzY3JpcHRpb25Sb3cpOwotICAgICAgICAgICAg
ICAgIH0pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdJLkRlYnVnZ2VyTWFuYWdlci5QYXVz
ZVJlYXNvbi5MaXN0ZW5lcjoKLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VS
ZWFzb24uRXZlbnRMaXN0ZW5lcjoKLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBhdXNlRGF0
YSwgIkV4cGVjdGVkIGRhdGEgd2l0aCBhbiBldmVudCBsaXN0ZW5lciwgYnV0IGZvdW5kIG5vbmUu
Iik7Ci0gICAgICAgICAgICBpZiAoIXBhdXNlRGF0YSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIHZhciBldmVudEJyZWFrcG9pbnQgPSBudWxsOwotICAgICAg
ICAgICAgaWYgKHBhdXNlRGF0YS5ldmVudExpc3RlbmVySWQpCi0gICAgICAgICAgICAgICAgZXZl
bnRCcmVha3BvaW50ID0gV0kuZG9tTWFuYWdlci5icmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcklk
KHBhdXNlRGF0YS5ldmVudExpc3RlbmVySWQpOwotICAgICAgICAgICAgaWYgKCFldmVudEJyZWFr
cG9pbnQpCi0gICAgICAgICAgICAgICAgZXZlbnRCcmVha3BvaW50ID0gV0kuZG9tRGVidWdnZXJN
YW5hZ2VyLmxpc3RlbmVyQnJlYWtwb2ludEZvckV2ZW50TmFtZShwYXVzZURhdGEuZXZlbnROYW1l
KTsKLQotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoZXZlbnRCcmVha3BvaW50LCAiRXhwZWN0
ZWQgRXZlbnQgTGlzdGVuZXIgYnJlYWtwb2ludCBmb3IgZXZlbnQgbmFtZS4iLCBwYXVzZURhdGEu
ZXZlbnROYW1lKTsKLSAgICAgICAgICAgIGlmICghZXZlbnRCcmVha3BvaW50KQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25UcmVl
T3V0bGluZSA9IHRoaXMuY3JlYXRlQ29udGVudFRyZWVPdXRsaW5lKHtzdXBwcmVzc0ZpbHRlcmlu
ZzogdHJ1ZX0pOwotCi0gICAgICAgICAgICB2YXIgZXZlbnRCcmVha3BvaW50VHJlZUVsZW1lbnQg
PSBuZXcgV0kuRXZlbnRCcmVha3BvaW50VHJlZUVsZW1lbnQoZXZlbnRCcmVha3BvaW50LCB7Ci0g
ICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBXSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5QYXVzZWRC
cmVha3BvaW50SWNvblN0eWxlQ2xhc3NOYW1lLAotICAgICAgICAgICAgICAgIHRpdGxlOiBXSS5V
SVN0cmluZygiXHUyMDFDJXNcdTIwMUQgRXZlbnQgRmlyZWQiKS5mb3JtYXQocGF1c2VEYXRhLmV2
ZW50TmFtZSksCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVhc29u
VHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQoZXZlbnRCcmVha3BvaW50VHJlZUVsZW1lbnQpOwotCi0g
ICAgICAgICAgICB2YXIgZXZlbnRCcmVha3BvaW50Um93ID0gbmV3IFdJLkRldGFpbHNTZWN0aW9u
Um93OwotICAgICAgICAgICAgZXZlbnRCcmVha3BvaW50Um93LmVsZW1lbnQuYXBwZW5kQ2hpbGQo
dGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5lbGVtZW50KTsKLQotICAgICAgICAgICAgdmFy
IHJvd3MgPSBbZXZlbnRCcmVha3BvaW50Um93XTsKLQotICAgICAgICAgICAgdmFyIGV2ZW50TGlz
dGVuZXIgPSBldmVudEJyZWFrcG9pbnQuZXZlbnRMaXN0ZW5lcjsKLSAgICAgICAgICAgIGlmIChl
dmVudExpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoZXZlbnRMaXN0
ZW5lci5ldmVudExpc3RlbmVySWQgPT09IHBhdXNlRGF0YS5ldmVudExpc3RlbmVySWQpOwotCi0g
ICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDsKLSAgICAgICAgICAgICAgICBpZiAoZXZl
bnRMaXN0ZW5lci5vbldpbmRvdykKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBXSS51bmxv
Y2FsaXplZFN0cmluZygid2luZG93Iik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRM
aXN0ZW5lci5ub2RlKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFdJLmxpbmtpZnlOb2Rl
UmVmZXJlbmNlKGV2ZW50TGlzdGVuZXIubm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVl
KQotICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2gobmV3IFdJLkRldGFpbHNTZWN0aW9uU2lt
cGxlUm93KFdJLlVJU3RyaW5nKCJUYXJnZXQiKSwgdmFsdWUpKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dzID0gcm93czsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGNhc2UgV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNl
UmVhc29uLkV4Y2VwdGlvbjoKLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBhdXNlRGF0YSwg
IkV4cGVjdGVkIGRhdGEgd2l0aCBhbiBleGNlcHRpb24sIGJ1dCBmb3VuZCBub25lLiIpOwotICAg
ICAgICAgICAgaWYgKHBhdXNlRGF0YSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgaW1wcm92ZSB0aGUgYXBwZWFyYW5jZSBvZiB0aHJvd24gb2JqZWN0cy4gVGhpcyB3b3Jr
cyB3ZWxsIGZvciBleGNlcHRpb24gc3RyaW5ncy4KLSAgICAgICAgICAgICAgICB2YXIgZGF0YSA9
IFdJLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChwYXVzZURhdGEsIHRhcmdldCk7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25UZXh0Um93LnRleHQgPSBXSS5VSVN0cmluZygiRXhj
ZXB0aW9uIHdpdGggdGhyb3duIHZhbHVlOiAlcyIpLmZvcm1hdChkYXRhLmRlc2NyaXB0aW9uKTsK
LSAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvbkdyb3VwLnJvd3MgPSBbdGhpcy5fcGF1
c2VSZWFzb25UZXh0Um93XTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV0kuRGVidWdnZXJNYW5h
Z2VyLlBhdXNlUmVhc29uLkludGVydmFsOgotICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25U
cmVlT3V0bGluZSA9IHRoaXMuY3JlYXRlQ29udGVudFRyZWVPdXRsaW5lKHtzdXBwcmVzc0ZpbHRl
cmluZzogdHJ1ZX0pOwotCi0gICAgICAgICAgICB2YXIgZXZlbnRCcmVha3BvaW50VHJlZUVsZW1l
bnQgPSBuZXcgV0kuRXZlbnRCcmVha3BvaW50VHJlZUVsZW1lbnQoV0kuZG9tRGVidWdnZXJNYW5h
Z2VyLmFsbEludGVydmFsc0JyZWFrcG9pbnQsIHsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWU6
IFdJLkRlYnVnZ2VyU2lkZWJhclBhbmVsLlBhdXNlZEJyZWFrcG9pbnRJY29uU3R5bGVDbGFzc05h
bWUsCi0gICAgICAgICAgICAgICAgdGl0bGU6IFdJLlVJU3RyaW5nKCJzZXRJbnRlcnZhbCBGaXJl
ZCIpLAotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRyZWVP
dXRsaW5lLmFwcGVuZENoaWxkKGV2ZW50QnJlYWtwb2ludFRyZWVFbGVtZW50KTsKLQotICAgICAg
ICAgICAgdmFyIGV2ZW50QnJlYWtwb2ludFJvdyA9IG5ldyBXSS5EZXRhaWxzU2VjdGlvblJvdzsK
LSAgICAgICAgICAgIGV2ZW50QnJlYWtwb2ludFJvdy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu
X3BhdXNlUmVhc29uVHJlZU91dGxpbmUuZWxlbWVudCk7Ci0KLSAgICAgICAgICAgIHRoaXMuX3Bh
dXNlUmVhc29uR3JvdXAucm93cyA9IFtldmVudEJyZWFrcG9pbnRSb3ddOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFz
b24uTWljcm90YXNrOgotICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25UZXh0Um93LnRleHQg
PSBXSS5VSVN0cmluZygiTWljcm90YXNrIEZpcmVkIik7Ci0gICAgICAgICAgICB0aGlzLl9wYXVz
ZVJlYXNvbkdyb3VwLnJvd3MgPSBbdGhpcy5fcGF1c2VSZWFzb25UZXh0Um93XTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGNhc2UgV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNl
UmVhc29uLlBhdXNlT25OZXh0U3RhdGVtZW50OgotICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFz
b25UZXh0Um93LnRleHQgPSBXSS5VSVN0cmluZygiSW1tZWRpYXRlIFBhdXNlIFJlcXVlc3RlZCIp
OwotICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dzID0gW3RoaXMuX3BhdXNl
UmVhc29uVGV4dFJvd107Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBjYXNl
IFdJLkRlYnVnZ2VyTWFuYWdlci5QYXVzZVJlYXNvbi5UaW1lcjoKLSAgICAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHBhdXNlRGF0YSwgIkV4cGVjdGVkIGRhdGEgd2l0aCBhIHRpbWVyLCBidXQgZm91
bmQgbm9uZS4iKTsKLSAgICAgICAgICAgIGlmICghcGF1c2VEYXRhKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgdmFyIGV2ZW50QnJlYWtwb2ludCA9IG51bGw7
Ci0gICAgICAgICAgICBzd2l0Y2ggKHBhdXNlRGF0YS5ldmVudE5hbWUpIHsKLSAgICAgICAgICAg
IGNhc2UgInNldFRpbWVvdXQiOgotICAgICAgICAgICAgICAgIGV2ZW50QnJlYWtwb2ludCA9IFdJ
LmRvbURlYnVnZ2VyTWFuYWdlci5hbGxUaW1lb3V0c0JyZWFrcG9pbnQ7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgInNldEludGVydmFsIjoKLSAgICAgICAgICAg
ICAgICBldmVudEJyZWFrcG9pbnQgPSBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsSW50ZXJ2YWxz
QnJlYWtwb2ludDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KGV2ZW50QnJlYWtwb2ludCwgIkV4cGVjdGVkIFRpbWVyIGJy
ZWFrcG9pbnQgZm9yIGV2ZW50IG5hbWUuIiwgcGF1c2VEYXRhLmV2ZW50TmFtZSk7Ci0gICAgICAg
ICAgICBpZiAoIWV2ZW50QnJlYWtwb2ludCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVhc29uVHJlZU91dGxpbmUgPSB0aGlzLmNyZWF0
ZUNvbnRlbnRUcmVlT3V0bGluZSh7c3VwcHJlc3NGaWx0ZXJpbmc6IHRydWV9KTsKLQotICAgICAg
ICAgICAgdmFyIGV2ZW50QnJlYWtwb2ludFRyZWVFbGVtZW50ID0gbmV3IFdJLkV2ZW50QnJlYWtw
b2ludFRyZWVFbGVtZW50KGV2ZW50QnJlYWtwb2ludCwgewotICAgICAgICAgICAgICAgIGNsYXNz
TmFtZTogV0kuRGVidWdnZXJTaWRlYmFyUGFuZWwuUGF1c2VkQnJlYWtwb2ludEljb25TdHlsZUNs
YXNzTmFtZSwKLSAgICAgICAgICAgICAgICB0aXRsZTogV0kuVUlTdHJpbmcoIiVzIEZpcmVkIiku
Zm9ybWF0KHBhdXNlRGF0YS5ldmVudE5hbWUpLAotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRsaW5lLmFwcGVuZENoaWxkKGV2ZW50QnJlYWtwb2lu
dFRyZWVFbGVtZW50KTsKLQotICAgICAgICAgICAgdmFyIGV2ZW50QnJlYWtwb2ludFJvdyA9IG5l
dyBXSS5EZXRhaWxzU2VjdGlvblJvdzsKLSAgICAgICAgICAgIGV2ZW50QnJlYWtwb2ludFJvdy5l
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3BhdXNlUmVhc29uVHJlZU91dGxpbmUuZWxlbWVudCk7
Ci0KLSAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVhc29uR3JvdXAucm93cyA9IFtldmVudEJyZWFr
cG9pbnRSb3ddOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgY2FzZSBXSS5E
ZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uVGltZW91dDoKLSAgICAgICAgICAgIHRoaXMuX3Bh
dXNlUmVhc29uVHJlZU91dGxpbmUgPSB0aGlzLmNyZWF0ZUNvbnRlbnRUcmVlT3V0bGluZSh7c3Vw
cHJlc3NGaWx0ZXJpbmc6IHRydWV9KTsKLQotICAgICAgICAgICAgdmFyIGV2ZW50QnJlYWtwb2lu
dFRyZWVFbGVtZW50ID0gbmV3IFdJLkV2ZW50QnJlYWtwb2ludFRyZWVFbGVtZW50KFdJLmRvbURl
YnVnZ2VyTWFuYWdlci5hbGxUaW1lb3V0c0JyZWFrcG9pbnQsIHsKLSAgICAgICAgICAgICAgICBj
bGFzc05hbWU6IFdJLkRlYnVnZ2VyU2lkZWJhclBhbmVsLlBhdXNlZEJyZWFrcG9pbnRJY29uU3R5
bGVDbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgdGl0bGU6IFdJLlVJU3RyaW5nKCJzZXRUaW1l
b3V0IEZpcmVkIiksCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHRoaXMuX3BhdXNlUmVh
c29uVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQoZXZlbnRCcmVha3BvaW50VHJlZUVsZW1lbnQpOwot
Ci0gICAgICAgICAgICB2YXIgZXZlbnRCcmVha3BvaW50Um93ID0gbmV3IFdJLkRldGFpbHNTZWN0
aW9uUm93OwotICAgICAgICAgICAgZXZlbnRCcmVha3BvaW50Um93LmVsZW1lbnQuYXBwZW5kQ2hp
bGQodGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5lbGVtZW50KTsKLQotICAgICAgICAgICAg
dGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dzID0gW2V2ZW50QnJlYWtwb2ludFJvd107Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBjYXNlIFdJLkRlYnVnZ2VyTWFuYWdlci5Q
YXVzZVJlYXNvbi5GZXRjaDoKLSAgICAgICAgY2FzZSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VS
ZWFzb24uWEhSOgotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoV0kuZG9tRGVidWdnZXJNYW5h
Z2VyLnN1cHBvcnRlZCk7Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2VydChwYXVzZURhdGEsICJF
eHBlY3RlZCBVUkwgYnJlYWtwb2ludCBkYXRhLCBidXQgZm91bmQgbm9uZS4iKTsKLSAgICAgICAg
ICAgIGlmIChwYXVzZURhdGEpIHsKLSAgICAgICAgICAgICAgICBpZiAocGF1c2VEYXRhLmJyZWFr
cG9pbnRVUkwpIHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IHVybEJyZWFrcG9pbnQgPSBXSS5k
b21EZWJ1Z2dlck1hbmFnZXIudXJsQnJlYWtwb2ludEZvclVSTChwYXVzZURhdGEuYnJlYWtwb2lu
dFVSTCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHVybEJyZWFrcG9pbnQs
ICJFeHBlY3RlZCBVUkwgYnJlYWtwb2ludCBmb3IgVVJMLiIsIHBhdXNlRGF0YS5icmVha3BvaW50
VVJMKTsKLQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRyZWVPdXRsaW5l
ID0gdGhpcy5jcmVhdGVDb250ZW50VHJlZU91dGxpbmUoe3N1cHByZXNzRmlsdGVyaW5nOiB0cnVl
fSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbGV0IHVybEJyZWFrcG9pbnRUcmVlRWxlbWVudCA9
IG5ldyBXSS5VUkxCcmVha3BvaW50VHJlZUVsZW1lbnQodXJsQnJlYWtwb2ludCwgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBXSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5QYXVz
ZWRCcmVha3BvaW50SWNvblN0eWxlQ2xhc3NOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
dGl0bGU6IFdJLkRPTURlYnVnZ2VyTWFuYWdlci5zdXBwb3J0c1VSTEJyZWFrcG9pbnRzKCkgPyBX
SS5VSVN0cmluZygiVHJpZ2dlcmVkIFVSTCBCcmVha3BvaW50IikgOiBXSS5VSVN0cmluZygiVHJp
Z2dlcmVkIFhIUiBCcmVha3BvaW50IiksCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgICAgICBsZXQgdXJsQnJlYWtwb2ludFJvdyA9IG5ldyBXSS5EZXRhaWxzU2VjdGlv
blJvdzsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25UcmVlT3V0bGluZS5h
cHBlbmRDaGlsZCh1cmxCcmVha3BvaW50VHJlZUVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAg
ICB1cmxCcmVha3BvaW50Um93LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fcGF1c2VSZWFzb25U
cmVlT3V0bGluZS5lbGVtZW50KTsKLQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJl
YXNvblRleHRSb3cudGV4dCA9IHBhdXNlRGF0YS51cmw7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuX3BhdXNlUmVhc29uR3JvdXAucm93cyA9IFt1cmxCcmVha3BvaW50Um93LCB0aGlzLl9wYXVz
ZVJlYXNvblRleHRSb3ddOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBhdXNlRGF0YS5icmVha3BvaW50VVJMID09PSAiIiwgIlNo
b3VsZCBiZSB0aGUgQWxsIFJlcXVlc3RzIGJyZWFrcG9pbnQgd2hpY2ggaGFzIGFuIGVtcHR5IFVS
TCIpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZVJlYXNvblRleHRSb3cudGV4dCA9
IFdJLlVJU3RyaW5nKCJSZXF1ZXN0aW5nOiAlcyIpLmZvcm1hdChwYXVzZURhdGEudXJsKTsKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fcGF1c2VSZWFzb25Hcm91cC5yb3dzID0gW3RoaXMuX3Bh
dXNlUmVhc29uVGV4dFJvd107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRo
aXMuX3BhdXNlUmVhc29uVGV4dFJvdy5lbGVtZW50LnRpdGxlID0gcGF1c2VEYXRhLnVybDsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLk90aGVy
OgotICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUGF1c2VkIGZvciB1bmtub3duIHJlYXNvbi4g
V2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgcmVhc29uLiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgX3VwZGF0ZVBh
dXNlUmVhc29uR290b0Fycm93KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhdXNlUmVhc29uTGlu
a0NvbnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAgICB2YXIgYWN0aXZl
Q2FsbEZyYW1lID0gV0kuZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZTsKLSAgICAgICAg
aWYgKCFhY3RpdmVDYWxsRnJhbWUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFy
IHNvdXJjZUNvZGVMb2NhdGlvbiA9IGFjdGl2ZUNhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRpb247
Ci0gICAgICAgIGlmICghc291cmNlQ29kZUxvY2F0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7Ci0gICAgICAgICAgICB1c2VHb1RvQXJyb3dCdXR0
b246IHRydWUsCi0gICAgICAgICAgICBpZ25vcmVOZXR3b3JrVGFiOiB0cnVlLAotICAgICAgICAg
ICAgaWdub3JlU2VhcmNoVGFiOiB0cnVlLAotICAgICAgICB9OwotICAgICAgICBsZXQgbGlua0Vs
ZW1lbnQgPSBXSS5jcmVhdGVTb3VyY2VDb2RlTG9jYXRpb25MaW5rKHNvdXJjZUNvZGVMb2NhdGlv
biwgb3B0aW9ucyk7Ci0gICAgICAgIHRoaXMuX3BhdXNlUmVhc29uTGlua0NvbnRhaW5lckVsZW1l
bnQuYXBwZW5kQ2hpbGQobGlua0VsZW1lbnQpOwotICAgIH0KLQotICAgIF9hZGRJc3N1ZShpc3N1
ZU1lc3NhZ2UsIHNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICBsZXQgaXNzdWVUcmVlRWxlbWVu
dCA9IHRoaXMuX3NjcmlwdHNDb250ZW50VHJlZU91dGxpbmUuZmluZFRyZWVFbGVtZW50KGlzc3Vl
TWVzc2FnZSk7Ci0gICAgICAgIGlmIChpc3N1ZVRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0
dXJuIGlzc3VlVHJlZUVsZW1lbnQ7Ci0KLSAgICAgICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29k
ZSB8fCAoaXNzdWVNZXNzYWdlLnNvdXJjZUNvZGVMb2NhdGlvbiAmJiBpc3N1ZU1lc3NhZ2Uuc291
cmNlQ29kZUxvY2F0aW9uLnNvdXJjZUNvZGUpKTsKLSAgICAgICAgbGV0IHBhcmVudFRyZWVFbGVt
ZW50ID0gdGhpcy5fYWRkVHJlZUVsZW1lbnRGb3JTb3VyY2VDb2RlVG9UcmVlT3V0bGluZShzb3Vy
Y2VDb2RlIHx8IGlzc3VlTWVzc2FnZS5zb3VyY2VDb2RlTG9jYXRpb24uc291cmNlQ29kZSwgdGhp
cy5fc2NyaXB0c0NvbnRlbnRUcmVlT3V0bGluZSk7Ci0gICAgICAgIGlmICghcGFyZW50VHJlZUVs
ZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBpc3N1ZVRyZWVFbGVt
ZW50ID0gbmV3IFdJLklzc3VlVHJlZUVsZW1lbnQoaXNzdWVNZXNzYWdlKTsKLQotICAgICAgICBw
YXJlbnRUcmVlRWxlbWVudC5pbnNlcnRDaGlsZChpc3N1ZVRyZWVFbGVtZW50LCBpbnNlcnRpb25J
bmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVuY3Rpb24oaXNzdWVUcmVlRWxlbWVudCwgcGFy
ZW50VHJlZUVsZW1lbnQuY2hpbGRyZW4sIHRoaXMuX2NvbXBhcmVCcmVha3BvaW50VHJlZUVsZW1l
bnRzKSk7Ci0gICAgICAgIGlmIChwYXJlbnRUcmVlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09
IDEpCi0gICAgICAgICAgICBwYXJlbnRUcmVlRWxlbWVudC5leHBhbmQoKTsKLQotICAgICAgICBy
ZXR1cm4gaXNzdWVUcmVlRWxlbWVudDsKLSAgICB9Ci0KLSAgICBfaGFuZGxlRE9NQnJlYWtwb2lu
dERPTU5vZGVDaGFuZ2VkKGV2ZW50KQotICAgIHsKLSAgICAgICAgbGV0IGJyZWFrcG9pbnQgPSBl
dmVudC50YXJnZXQ7Ci0gICAgICAgIGlmIChicmVha3BvaW50LmRvbU5vZGVJZGVudGlmaWVyKQot
ICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsKLSAgICB9
Ci0KLSAgICBfaGFuZGxlSXNzdWVBZGRlZChldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBpc3N1
ZSA9IGV2ZW50LmRhdGEuaXNzdWU7Ci0KLSAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHNob3cg
aXNzdWVzIG9yaWdpbmF0aW5nIGZyb20gSmF2YVNjcmlwdCBzb3VyY2UgY29kZS4KLSAgICAgICAg
aWYgKCFpc3N1ZS5zb3VyY2VDb2RlTG9jYXRpb24gfHwgIWlzc3VlLnNvdXJjZUNvZGVMb2NhdGlv
bi5zb3VyY2VDb2RlIHx8IChpc3N1ZS5zb3VyY2UgIT09ICJqYXZhc2NyaXB0IiAmJiBpc3N1ZS5z
b3VyY2UgIT09ICJjb25zb2xlLWFwaSIpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHRoaXMuX2FkZElzc3VlKGlzc3VlKTsKLSAgICB9Ci0KLSAgICBfaGFuZGxlSXNzdWVzQ2xlYXJl
ZChldmVudCkKLSAgICB7Ci0gICAgICAgIGxldCBjdXJyZW50VHJlZUVsZW1lbnQgPSB0aGlzLl9z
Y3JpcHRzQ29udGVudFRyZWVPdXRsaW5lLmNoaWxkcmVuWzBdOwotICAgICAgICBsZXQgaXNzdWVU
cmVlRWxlbWVudHMgPSBbXTsKLQotICAgICAgICB3aGlsZSAoY3VycmVudFRyZWVFbGVtZW50ICYm
ICFjdXJyZW50VHJlZUVsZW1lbnQucm9vdCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRUcmVl
RWxlbWVudCBpbnN0YW5jZW9mIFdJLklzc3VlVHJlZUVsZW1lbnQpCi0gICAgICAgICAgICAgICAg
aXNzdWVUcmVlRWxlbWVudHMucHVzaChjdXJyZW50VHJlZUVsZW1lbnQpOwotICAgICAgICAgICAg
Y3VycmVudFRyZWVFbGVtZW50ID0gY3VycmVudFRyZWVFbGVtZW50LnRyYXZlcnNlTmV4dFRyZWVF
bGVtZW50KGZhbHNlLCBudWxsLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlzc3VlVHJl
ZUVsZW1lbnRzLmZvckVhY2goKHRyZWVFbGVtZW50KSA9PiB0cmVlRWxlbWVudC5wYXJlbnQucmVt
b3ZlQ2hpbGQodHJlZUVsZW1lbnQpKTsKLSAgICB9Ci0KLSAgICBfaGFuZGxlQnJlYWtwb2ludEVs
ZW1lbnRBZGRlZE9yUmVtb3ZlZChldmVudCkKLSAgICB7Ci0gICAgICAgIGxldCB0cmVlRWxlbWVu
dCA9IGV2ZW50LmRhdGEuZWxlbWVudDsKLQotICAgICAgICBsZXQgc2V0dGluZyA9IG51bGw7Ci0g
ICAgICAgIHN3aXRjaCAodHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QpIHsKLSAgICAgICAg
Y2FzZSBXSS5kZWJ1Z2dlck1hbmFnZXIuYXNzZXJ0aW9uRmFpbHVyZXNCcmVha3BvaW50OgotICAg
ICAgICAgICAgc2V0dGluZyA9IFdJLnNldHRpbmdzLnNob3dBc3NlcnRpb25GYWlsdXJlc0JyZWFr
cG9pbnQ7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdJLmRlYnVnZ2VyTWFu
YWdlci5hbGxNaWNyb3Rhc2tzQnJlYWtwb2ludDoKLSAgICAgICAgICAgIHNldHRpbmcgPSBXSS5z
ZXR0aW5ncy5zaG93QWxsTWljcm90YXNrc0JyZWFrcG9pbnQ7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxBbmltYXRpb25GcmFtZXNC
cmVha3BvaW50OgotICAgICAgICAgICAgc2V0dGluZyA9IFdJLnNldHRpbmdzLnNob3dBbGxBbmlt
YXRpb25GcmFtZXNCcmVha3BvaW50OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsSW50ZXJ2YWxzQnJlYWtwb2ludDoKLSAgICAgICAg
ICAgIHNldHRpbmcgPSBXSS5zZXR0aW5ncy5zaG93QWxsSW50ZXJ2YWxzQnJlYWtwb2ludDsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFs
bExpc3RlbmVyc0JyZWFrcG9pbnQ6Ci0gICAgICAgICAgICBzZXR0aW5nID0gV0kuc2V0dGluZ3Mu
c2hvd0FsbExpc3RlbmVyc0JyZWFrcG9pbnQ7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hbGxSZXF1ZXN0c0JyZWFrcG9pbnQ6Ci0gICAg
ICAgICAgICBzZXR0aW5nID0gV0kuc2V0dGluZ3Muc2hvd0FsbFJlcXVlc3RzQnJlYWtwb2ludDsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV0kuZG9tRGVidWdnZXJNYW5hZ2Vy
LmFsbFRpbWVvdXRzQnJlYWtwb2ludDoKLSAgICAgICAgICAgIHNldHRpbmcgPSBXSS5zZXR0aW5n
cy5zaG93QWxsVGltZW91dHNCcmVha3BvaW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHNldHRpbmcpCi0gICAgICAgICAgICBzZXR0aW5nLnZhbHVlID0gISF0
cmVlRWxlbWVudC5wYXJlbnQ7Ci0KLSAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFdJLlRyZWVP
dXRsaW5lLkV2ZW50LkVsZW1lbnRSZW1vdmVkKSB7Ci0gICAgICAgICAgICBsZXQgc2VsZWN0ZWRU
cmVlRWxlbWVudCA9IHRoaXMuX2JyZWFrcG9pbnRzQ29udGVudFRyZWVPdXRsaW5lLnNlbGVjdGVk
VHJlZUVsZW1lbnQ7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0ZWRUcmVlRWxlbWVudCkgewotICAg
ICAgICAgICAgICAgIGlmIChzZWxlY3RlZFRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0ID09
PSBXSS5kZWJ1Z2dlck1hbmFnZXIuYXNzZXJ0aW9uRmFpbHVyZXNCcmVha3BvaW50IHx8ICFXSS5k
ZWJ1Z2dlck1hbmFnZXIuaXNCcmVha3BvaW50UmVtb3ZhYmxlKHNlbGVjdGVkVHJlZUVsZW1lbnQu
cmVwcmVzZW50ZWRPYmplY3QpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNraXBVbnJl
dmVhbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9udFBvcHVsYXRlID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbGV0IHRyZWVFbGVtZW50VG9TZWxlY3QgPSBzZWxl
Y3RlZFRyZWVFbGVtZW50LnRyYXZlcnNlTmV4dFRyZWVFbGVtZW50KHNraXBVbnJldmVhbGVkLCBk
b250UG9wdWxhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHJlZUVsZW1lbnRUb1NlbGVj
dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb21pdEZvY3VzID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQnlVc2VyID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRyZWVFbGVtZW50VG9TZWxlY3Quc2VsZWN0KG9taXRGb2N1cywg
c2VsZWN0ZWRCeVVzZXIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgX3BvcHVsYXRlQ3JlYXRl
QnJlYWtwb2ludENvbnRleHRNZW51KGNvbnRleHRNZW51KQotICAgIHsKLSAgICAgICAgLy8gQ09N
UEFUSUJJTElUWSAoaU9TIDEwKTogRGVidWdnZXJBZ2VudC5zZXRQYXVzZU9uQXNzZXJ0aW9ucyBk
aWQgbm90IGV4aXN0IHlldC4KLSAgICAgICAgaWYgKEluc3BlY3RvckJhY2tlbmQuZG9tYWlucy5E
ZWJ1Z2dlci5zZXRQYXVzZU9uQXNzZXJ0aW9ucykgewotICAgICAgICAgICAgbGV0IGFzc2VydGlv
bkZhaWx1cmVzQnJlYWtwb2ludFNob3duID0gV0kuc2V0dGluZ3Muc2hvd0Fzc2VydGlvbkZhaWx1
cmVzQnJlYWtwb2ludC52YWx1ZTsKLQotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kQ2hl
Y2tib3hJdGVtKFdJLnJlcGVhdGVkVUlTdHJpbmcuYXNzZXJ0aW9uRmFpbHVyZXMoKSwgKCkgPT4g
ewotICAgICAgICAgICAgICAgIGlmIChhc3NlcnRpb25GYWlsdXJlc0JyZWFrcG9pbnRTaG93bikK
LSAgICAgICAgICAgICAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLnJlbW92ZUJyZWFrcG9pbnQo
V0kuZGVidWdnZXJNYW5hZ2VyLmFzc2VydGlvbkZhaWx1cmVzQnJlYWtwb2ludCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5h
c3NlcnRpb25GYWlsdXJlc0JyZWFrcG9pbnQuZGlzYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEJyZWFrcG9pbnQoV0kuZGVidWdnZXJNYW5h
Z2VyLmFzc2VydGlvbkZhaWx1cmVzQnJlYWtwb2ludCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSwgYXNzZXJ0aW9uRmFpbHVyZXNCcmVha3BvaW50U2hvd24pOwotICAgICAgICB9
Ci0KLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7Ci0KLSAgICAgICAgLy8g
Q09NUEFUSUJJTElUWSAoaU9TIDEzKTogRGVidWdnZXJBZ2VudC5zZXRQYXVzZU9uTWljcm90YXNr
cyBkaWQgbm90IGV4aXN0IHlldC4KLSAgICAgICAgaWYgKEluc3BlY3RvckJhY2tlbmQuZG9tYWlu
cy5EZWJ1Z2dlci5zZXRQYXVzZU9uTWljcm90YXNrcykgewotICAgICAgICAgICAgbGV0IGFsbE1p
Y3JvdGFza3NCcmVha3BvaW50U2hvd24gPSBXSS5zZXR0aW5ncy5zaG93QWxsTWljcm90YXNrc0Jy
ZWFrcG9pbnQudmFsdWU7Ci0KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZENoZWNrYm94
SXRlbShXSS5VSVN0cmluZygiQWxsIE1pY3JvdGFza3MiKSwgKCkgPT4gewotICAgICAgICAgICAg
ICAgIGlmIChhbGxNaWNyb3Rhc2tzQnJlYWtwb2ludFNob3duKQotICAgICAgICAgICAgICAgICAg
ICBXSS5kZWJ1Z2dlck1hbmFnZXIucmVtb3ZlQnJlYWtwb2ludChXSS5kZWJ1Z2dlck1hbmFnZXIu
YWxsTWljcm90YXNrc0JyZWFrcG9pbnQpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWxsTWljcm90YXNrc0JyZWFrcG9pbnQu
ZGlzYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2Vy
LmFkZEJyZWFrcG9pbnQoV0kuZGVidWdnZXJNYW5hZ2VyLmFsbE1pY3JvdGFza3NCcmVha3BvaW50
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LCBhbGxNaWNyb3Rhc2tzQnJlYWtw
b2ludFNob3duKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChXSS5ET01EZWJ1Z2dlck1hbmFn
ZXIuc3VwcG9ydHNFdmVudEJyZWFrcG9pbnRzKCkgfHwgV0kuRE9NRGVidWdnZXJNYW5hZ2VyLnN1
cHBvcnRzRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzKCkpIHsKLSAgICAgICAgICAgIGZ1bmN0aW9u
IGFkZFRvZ2dsZUZvclNwZWNpYWxFdmVudEJyZWFrcG9pbnQoYnJlYWtwb2ludCwgbGFiZWwsIGNo
ZWNrZWQpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRDaGVja2JveEl0ZW0o
bGFiZWwsICgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrZWQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBXSS5kb21EZWJ1Z2dlck1hbmFnZXIucmVtb3ZlRXZlbnRCcmVha3Bv
aW50KGJyZWFrcG9pbnQpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrcG9pbnQuZGlzYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFdJLmRvbURlYnVnZ2VyTWFuYWdlci5hZGRFdmVudEJyZWFrcG9pbnQoYnJlYWtw
b2ludCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LCBjaGVja2Vk
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYWRkVG9nZ2xlRm9yU3BlY2lhbEV2ZW50
QnJlYWtwb2ludChXSS5kb21EZWJ1Z2dlck1hbmFnZXIuYWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtw
b2ludCwgV0kuVUlTdHJpbmcoIkFsbCBBbmltYXRpb24gRnJhbWVzIiksIFdJLnNldHRpbmdzLnNo
b3dBbGxBbmltYXRpb25GcmFtZXNCcmVha3BvaW50LnZhbHVlKTsKLSAgICAgICAgICAgIGFkZFRv
Z2dsZUZvclNwZWNpYWxFdmVudEJyZWFrcG9pbnQoV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbFRp
bWVvdXRzQnJlYWtwb2ludCwgV0kuVUlTdHJpbmcoIkFsbCBUaW1lb3V0cyIpLCBXSS5zZXR0aW5n
cy5zaG93QWxsVGltZW91dHNCcmVha3BvaW50LnZhbHVlKTsKLSAgICAgICAgICAgIGFkZFRvZ2ds
ZUZvclNwZWNpYWxFdmVudEJyZWFrcG9pbnQoV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbEludGVy
dmFsc0JyZWFrcG9pbnQsIFdJLlVJU3RyaW5nKCJBbGwgSW50ZXJ2YWxzIiksIFdJLnNldHRpbmdz
LnNob3dBbGxJbnRlcnZhbHNCcmVha3BvaW50LnZhbHVlKTsKLQotICAgICAgICAgICAgY29udGV4
dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7Ci0KLSAgICAgICAgICAgIGlmIChXSS5ET01EZWJ1Z2dl
ck1hbmFnZXIuc3VwcG9ydHNBbGxMaXN0ZW5lcnNCcmVha3BvaW50KCkpCi0gICAgICAgICAgICAg
ICAgYWRkVG9nZ2xlRm9yU3BlY2lhbEV2ZW50QnJlYWtwb2ludChXSS5kb21EZWJ1Z2dlck1hbmFn
ZXIuYWxsTGlzdGVuZXJzQnJlYWtwb2ludCwgV0kuVUlTdHJpbmcoIkFsbCBFdmVudHMiKSwgV0ku
c2V0dGluZ3Muc2hvd0FsbExpc3RlbmVyc0JyZWFrcG9pbnQudmFsdWUpOwotCi0gICAgICAgICAg
ICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdJLlVJU3RyaW5nKCJFdmVudCBCcmVha3BvaW50XHUy
MDI2IiksICgpID0+IHsKLSAgICAgICAgICAgICAgICBsZXQgcG9wb3ZlciA9IG5ldyBXSS5FdmVu
dEJyZWFrcG9pbnRQb3BvdmVyKHRoaXMpOwotICAgICAgICAgICAgICAgIHBvcG92ZXIuc2hvdyh0
aGlzLl9jcmVhdGVCcmVha3BvaW50QnV0dG9uLmVsZW1lbnQsIFtXSS5SZWN0RWRnZS5NQVhfWSwg
V0kuUmVjdEVkZ2UuTUlOX1ksIFdJLlJlY3RFZGdlLk1BWF9YXSk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChXSS5ET01EZWJ1Z2dlck1hbmFnZXIuc3VwcG9ydHNV
UkxCcmVha3BvaW50cygpIHx8IFdJLkRPTURlYnVnZ2VyTWFuYWdlci5zdXBwb3J0c1hIUkJyZWFr
cG9pbnRzKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRvcigpOwot
Ci0gICAgICAgICAgICBsZXQgYWxsUmVxdWVzdHNCcmVha3BvaW50U2hvd24gPSBXSS5zZXR0aW5n
cy5zaG93QWxsUmVxdWVzdHNCcmVha3BvaW50LnZhbHVlOwotICAgICAgICAgICAgY29udGV4dE1l
bnUuYXBwZW5kQ2hlY2tib3hJdGVtKFdJLnJlcGVhdGVkVUlTdHJpbmcuYWxsUmVxdWVzdHMoKSwg
KCkgPT4gewotICAgICAgICAgICAgICAgIGlmIChhbGxSZXF1ZXN0c0JyZWFrcG9pbnRTaG93bikK
LSAgICAgICAgICAgICAgICAgICAgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLnJlbW92ZVVSTEJyZWFr
cG9pbnQoV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFsbFJlcXVlc3RzQnJlYWtwb2ludCk7Ci0gICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFdJLmRvbURlYnVnZ2VyTWFu
YWdlci5hbGxSZXF1ZXN0c0JyZWFrcG9pbnQuZGlzYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgV0kuZG9tRGVidWdnZXJNYW5hZ2VyLmFkZFVSTEJyZWFrcG9pbnQoV0kuZG9tRGVi
dWdnZXJNYW5hZ2VyLmFsbFJlcXVlc3RzQnJlYWtwb2ludCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSwgYWxsUmVxdWVzdHNCcmVha3BvaW50U2hvd24pOwotCi0gICAgICAgICAg
ICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdJLkRPTURlYnVnZ2VyTWFuYWdlci5zdXBwb3J0c1VS
TEJyZWFrcG9pbnRzKCkgPyBXSS5VSVN0cmluZygiVVJMIEJyZWFrcG9pbnRcdTIwMjYiKSA6IFdJ
LlVJU3RyaW5nKCJYSFIgQnJlYWtwb2ludFx1MjAyNiIpLCAoKSA9PiB7Ci0gICAgICAgICAgICAg
ICAgbGV0IHBvcG92ZXIgPSBuZXcgV0kuVVJMQnJlYWtwb2ludFBvcG92ZXIodGhpcyk7Ci0gICAg
ICAgICAgICAgICAgcG9wb3Zlci5zaG93KHRoaXMuX2NyZWF0ZUJyZWFrcG9pbnRCdXR0b24uZWxl
bWVudCwgW1dJLlJlY3RFZGdlLk1BWF9ZLCBXSS5SZWN0RWRnZS5NSU5fWSwgV0kuUmVjdEVkZ2Uu
TUFYX1hdKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotfTsKLQotV0kuRGVi
dWdnZXJTaWRlYmFyUGFuZWwuRGVidWdnZXJQYXVzZWRTdHlsZUNsYXNzTmFtZSA9ICJwYXVzZWQi
OwotV0kuRGVidWdnZXJTaWRlYmFyUGFuZWwuRXhjZXB0aW9uSWNvblN0eWxlQ2xhc3NOYW1lID0g
ImJyZWFrcG9pbnQtZXhjZXB0aW9uLWljb24iOwotV0kuRGVidWdnZXJTaWRlYmFyUGFuZWwuQXNz
ZXJ0aW9uSWNvblN0eWxlQ2xhc3NOYW1lID0gImJyZWFrcG9pbnQtYXNzZXJ0aW9uLWljb24iOwot
V0kuRGVidWdnZXJTaWRlYmFyUGFuZWwuUGF1c2VkQnJlYWtwb2ludEljb25TdHlsZUNsYXNzTmFt
ZSA9ICJicmVha3BvaW50LXBhdXNlZC1pY29uIjsKLQotV0kuRGVidWdnZXJTaWRlYmFyUGFuZWwu
U2VsZWN0ZWRBbGxFeGNlcHRpb25zQ29va2llS2V5ID0gImRlYnVnZ2VyLXNpZGViYXItcGFuZWwt
YWxsLWV4Y2VwdGlvbnMtYnJlYWtwb2ludCI7Ci1XSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxl
Y3RlZFVuY2F1Z2h0RXhjZXB0aW9uc0Nvb2tpZUtleSA9ICJkZWJ1Z2dlci1zaWRlYmFyLXBhbmVs
LXVuY2F1Z2h0LWV4Y2VwdGlvbnMtYnJlYWtwb2ludCI7Ci1XSS5EZWJ1Z2dlclNpZGViYXJQYW5l
bC5TZWxlY3RlZEFzc2VydGlvbkZhaWx1cmVzQ29va2llS2V5ID0gImRlYnVnZ2VyLXNpZGViYXIt
cGFuZWwtYXNzZXJ0aW9uLWZhaWx1cmVzLWJyZWFrcG9pbnQiOwotV0kuRGVidWdnZXJTaWRlYmFy
UGFuZWwuU2VsZWN0ZWRBbGxNaWNyb3Rhc2tzQ29va2llS2V5ID0gImRlYnVnZ2VyLXNpZGViYXIt
cGFuZWwtYWxsLW1pY3JvdGFza3MtYnJlYWtwb2ludCI7Ci1XSS5EZWJ1Z2dlclNpZGViYXJQYW5l
bC5TZWxlY3RlZEFsbEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQgPSAiZGVidWdnZXItc2lkZWJh
ci1wYW5lbC1hbGwtYW5pbWF0aW9uLWZyYW1lcy1icmVha3BvaW50IjsKLVdJLkRlYnVnZ2VyU2lk
ZWJhclBhbmVsLlNlbGVjdGVkQWxsSW50ZXJ2YWxzQnJlYWtwb2ludCA9ICJkZWJ1Z2dlci1zaWRl
YmFyLXBhbmVsLWFsbC1pbnRlcnZhbHMtYnJlYWtwb2ludCI7Ci1XSS5EZWJ1Z2dlclNpZGViYXJQ
YW5lbC5TZWxlY3RlZEFsbExpc3RlbmVyc0JyZWFrcG9pbnQgPSAiZGVidWdnZXItc2lkZWJhci1w
YW5lbC1hbGwtbGlzdGVuZXJzLWJyZWFrcG9pbnQiOwotV0kuRGVidWdnZXJTaWRlYmFyUGFuZWwu
U2VsZWN0ZWRBbGxUaW1lb3V0c0JyZWFrcG9pbnQgPSAiZGVidWdnZXItc2lkZWJhci1wYW5lbC1h
bGwtdGltZW91dHMtYnJlYWtwb2ludCI7Ci1XSS5EZWJ1Z2dlclNpZGViYXJQYW5lbC5TZWxlY3Rl
ZEFsbFJlcXVlc3RzQ29va2llS2V5ID0gImRlYnVnZ2VyLXNpZGViYXItcGFuZWwtYWxsLXJlcXVl
c3RzLWJyZWFrcG9pbnQiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvRGVidWdnZXJUYWJDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RlYnVnZ2VyVGFiQ29udGVudFZpZXcuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZDU1YjQyNzlmLi4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9EZWJ1Z2dlclRhYkNv
bnRlbnRWaWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci1XSS5EZWJ1Z2dlclRhYkNvbnRlbnRWaWV3ID0gY2xhc3MgRGVidWdnZXJUYWJDb250ZW50Vmll
dyBleHRlbmRzIFdJLkNvbnRlbnRCcm93c2VyVGFiQ29udGVudFZpZXcKLXsKLSAgICBjb25zdHJ1
Y3RvcihpZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgbGV0IHRhYkJhckl0ZW0gPSBXSS5HZW5l
cmFsVGFiQmFySXRlbS5mcm9tVGFiSW5mbyhXSS5EZWJ1Z2dlclRhYkNvbnRlbnRWaWV3LnRhYklu
Zm8oKSk7Ci0gICAgICAgIGxldCBkZXRhaWxzU2lkZWJhclBhbmVsQ29uc3RydWN0b3JzID0gW1dJ
LlNjb3BlQ2hhaW5EZXRhaWxzU2lkZWJhclBhbmVsLCBXSS5SZXNvdXJjZURldGFpbHNTaWRlYmFy
UGFuZWwsIFdJLlByb2JlRGV0YWlsc1NpZGViYXJQYW5lbF07Ci0KLSAgICAgICAgc3VwZXIoaWRl
bnRpZmllciB8fCAiZGVidWdnZXIiLCAiZGVidWdnZXIiLCB0YWJCYXJJdGVtLCBXSS5EZWJ1Z2dl
clNpZGViYXJQYW5lbCwgZGV0YWlsc1NpZGViYXJQYW5lbENvbnN0cnVjdG9ycyk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHRhYkluZm8oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgIGltYWdlOiAiSW1hZ2VzL0RlYnVnZ2VyLnN2ZyIsCi0gICAgICAgICAgICB0aXRsZTogV0ku
VUlTdHJpbmcoIkRlYnVnZ2VyIiksCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAgc3RhdGljIGlz
VGFiQWxsb3dlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gIVdJLnNldHRpbmdzLmV4cGVyaW1l
bnRhbEVuYWJsZVNvdXJjZXNUYWIudmFsdWU7Ci0gICAgfQotCi0gICAgLy8gUHVibGljCi0KLSAg
ICBnZXQgdHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gV0kuRGVidWdnZXJUYWJDb250ZW50
Vmlldy5UeXBlOwotICAgIH0KLQotICAgIGdldCBzdXBwb3J0c1NwbGl0Q29udGVudEJyb3dzZXIo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FuU2hvd1JlcHJl
c2VudGVkT2JqZWN0KHJlcHJlc2VudGVkT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHJlcHJl
c2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0KQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAgICAgaWYgKCEocmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5SZXNv
dXJjZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHJlcHJl
c2VudGVkT2JqZWN0LnR5cGUgPT09IFdJLlJlc291cmNlLlR5cGUuRG9jdW1lbnQgfHwgcmVwcmVz
ZW50ZWRPYmplY3QudHlwZSA9PT0gV0kuUmVzb3VyY2UuVHlwZS5TY3JpcHQ7Ci0gICAgfQotCi0g
ICAgc2hvd0RldGFpbHNTaWRlYmFyUGFuZWxzKCkKLSAgICB7Ci0gICAgICAgIHN1cGVyLnNob3dE
ZXRhaWxzU2lkZWJhclBhbmVscygpOwotCi0gICAgICAgIGlmICghdGhpcy5fc2hvd1Njb3BlQ2hh
aW5EZXRhaWxzU2lkZWJhclBhbmVsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGxl
dCBzY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbCA9IHRoaXMuZGV0YWlsc1NpZGViYXJQYW5l
bHMuZmluZCgoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIFdJLlNjb3BlQ2hhaW5EZXRhaWxzU2lk
ZWJhclBhbmVsKTsKLSAgICAgICAgaWYgKCFzY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBXSS5kZXRhaWxzU2lkZWJhci5zZWxlY3Rl
ZFNpZGViYXJQYW5lbCA9IHNjb3BlQ2hhaW5EZXRhaWxzU2lkZWJhclBhbmVsOwotICAgICAgICBX
SS5kZXRhaWxzU2lkZWJhci5jb2xsYXBzZWQgPSBmYWxzZTsKLQotICAgICAgICB0aGlzLl9zaG93
U2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBzaG93
U2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWwoKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2hv
d1Njb3BlQ2hhaW5EZXRhaWxzU2lkZWJhclBhbmVsID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXZl
YWxBbmRTZWxlY3RCcmVha3BvaW50KGJyZWFrcG9pbnQpCi0gICAgewotICAgICAgICBjb25zb2xl
LmFzc2VydChicmVha3BvaW50IGluc3RhbmNlb2YgV0kuQnJlYWtwb2ludCk7Ci0KLSAgICAgICAg
dmFyIHRyZWVFbGVtZW50ID0gdGhpcy5uYXZpZ2F0aW9uU2lkZWJhclBhbmVsLnRyZWVFbGVtZW50
Rm9yUmVwcmVzZW50ZWRPYmplY3QoYnJlYWtwb2ludCk7Ci0gICAgICAgIGlmICh0cmVlRWxlbWVu
dCkKLSAgICAgICAgICAgIHRyZWVFbGVtZW50LnJldmVhbEFuZFNlbGVjdCgpOwotICAgIH0KLX07
Ci0KLVdJLkRlYnVnZ2VyVGFiQ29udGVudFZpZXcuVHlwZSA9ICJkZWJ1Z2dlciI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9EZWZhdWx0RGFz
aGJvYXJkVmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0RlZmF1bHREYXNoYm9hcmRWaWV3LmpzCmluZGV4IDdmYWYwZDVhNmM2Li5iZTNjMTFiZDY0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRGVm
YXVsdERhc2hib2FyZFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvRGVmYXVsdERhc2hib2FyZFZpZXcuanMKQEAgLTEzMywxMCArMTMzLDcgQEAg
V0kuRGVmYXVsdERhc2hib2FyZFZpZXcgPSBjbGFzcyBEZWZhdWx0RGFzaGJvYXJkVmlldyBleHRl
bmRzIFdJLkRhc2hib2FyZFZpZXcKIAogICAgIF9yZXNvdXJjZXNJdGVtV2FzQ2xpY2tlZCgpCiAg
ICAgewotICAgICAgICBpZiAoV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1Rh
Yi52YWx1ZSkKLSAgICAgICAgICAgIFdJLnNob3dTb3VyY2VzVGFiKCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIFdJLnNob3dSZXNvdXJjZXNUYWIoKTsKKyAgICAgICAgV0kuc2hvd1NvdXJj
ZXNUYWIoKTsKICAgICB9CiAKICAgICBfbmV0d29ya0l0ZW1XYXNDbGlja2VkKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1JlY29yZGluZ0Fj
dGlvblRyZWVFbGVtZW50LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvUmVjb3JkaW5nQWN0aW9uVHJlZUVsZW1lbnQuanMKaW5kZXggYzY3N2VhNGQ2ODYuLmJm
MTRiMWYxODg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9SZWNvcmRpbmdBY3Rpb25UcmVlRWxlbWVudC5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9SZWNvcmRpbmdBY3Rpb25UcmVlRWxlbWVudC5q
cwpAQCAtNDMwLDEyICs0MzAsNyBAQCBXSS5SZWNvcmRpbmdBY3Rpb25UcmVlRWxlbWVudCA9IGNs
YXNzIFJlY29yZGluZ0FjdGlvblRyZWVFbGVtZW50IGV4dGVuZHMgV0kuR2VuZQogICAgICAgICB9
CiAKICAgICAgICAgaWYgKHNvdXJjZUNvZGVMb2NhdGlvbikgewotICAgICAgICAgICAgbGV0IGxh
YmVsID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChXSS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFi
bGVTb3VyY2VzVGFiLnZhbHVlKQotICAgICAgICAgICAgICAgIGxhYmVsID0gV0kuVUlTdHJpbmco
IlJldmVhbCBpbiBTb3VyY2VzIFRhYiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGxhYmVsID0gV0kuVUlTdHJpbmcoIlJldmVhbCBpbiBSZXNvdXJjZXMgVGFiIik7Ci0gICAg
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKGxhYmVsLCAoKSA9PiB7CisgICAgICAgICAg
ICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdJLlVJU3RyaW5nKCJSZXZlYWwgaW4gU291cmNlcyBU
YWIiKSwgKCkgPT4gewogICAgICAgICAgICAgICAgIFdJLnNob3dTb3VyY2VDb2RlTG9jYXRpb24o
c291cmNlQ29kZUxvY2F0aW9uLCB7CiAgICAgICAgICAgICAgICAgICAgIGlnbm9yZU5ldHdvcmtU
YWI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgIGlnbm9yZVNlYXJjaFRhYjogdHJ1ZSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291
cmNlU2lkZWJhclBhbmVsLmNzcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1Jlc291cmNlU2lkZWJhclBhbmVsLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZmFlNjMzZWIxYjUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291cmNlU2lkZWJhclBhbmVsLmNzcworKysgL2Rldi9u
dWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0uc2lkZWJhciA+IC5wYW5lbC5uYXZp
Z2F0aW9uLnJlc291cmNlID4gLmNvbnRlbnQgewotICAgIHRvcDogdmFyKC0tbmF2aWdhdGlvbi1i
YXItaGVpZ2h0KTsKLX0KLQotLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5yZXNvdXJjZSA+
IC5uYXZpZ2F0aW9uLWJhciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsK
LSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUmVzb3VyY2VTaWRlYmFyUGFuZWwuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9SZXNvdXJjZVNpZGViYXJQ
YW5lbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE3NGM2OGE3MjIuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jl
c291cmNlU2lkZWJhclBhbmVsLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTIwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi1XSS5SZXNvdXJjZVNpZGViYXJQYW5lbCA9IGNsYXNzIFJlc291cmNl
U2lkZWJhclBhbmVsIGV4dGVuZHMgV0kuTmF2aWdhdGlvblNpZGViYXJQYW5lbAotewotICAgIGNv
bnN0cnVjdG9yKCkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCJyZXNvdXJjZSIsIFdJLlVJU3RyaW5n
KCJSZXNvdXJjZXMiKSwgdHJ1ZSk7Ci0KLSAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkJhciA9IG5l
dyBXSS5OYXZpZ2F0aW9uQmFyOwotICAgICAgICB0aGlzLmFkZFN1YnZpZXcodGhpcy5fbmF2aWdh
dGlvbkJhcik7Ci0KLSAgICAgICAgdGhpcy5fdGFyZ2V0VHJlZUVsZW1lbnRNYXAgPSBuZXcgTWFw
OwotCi0gICAgICAgIHZhciBzY29wZUl0ZW1QcmVmaXggPSAicmVzb3VyY2Utc2lkZWJhci0iOwot
ICAgICAgICB2YXIgc2NvcGVCYXJJdGVtcyA9IFtdOwotCi0gICAgICAgIHNjb3BlQmFySXRlbXMu
cHVzaChuZXcgV0kuU2NvcGVCYXJJdGVtKHNjb3BlSXRlbVByZWZpeCArICJ0eXBlLWFsbCIsIFdJ
LlVJU3RyaW5nKCJBbGwgUmVzb3VyY2VzIiksIHtleGNsdXNpdmU6IHRydWV9KSk7Ci0KLSAgICAg
ICAgZm9yICh2YXIga2V5IGluIFdJLlJlc291cmNlLlR5cGUpIHsKLSAgICAgICAgICAgIHZhciB2
YWx1ZSA9IFdJLlJlc291cmNlLlR5cGVba2V5XTsKLSAgICAgICAgICAgIHZhciBzY29wZUJhckl0
ZW0gPSBuZXcgV0kuU2NvcGVCYXJJdGVtKHNjb3BlSXRlbVByZWZpeCArIHZhbHVlLCBXSS5SZXNv
dXJjZS5kaXNwbGF5TmFtZUZvclR5cGUodmFsdWUsIHRydWUpKTsKLSAgICAgICAgICAgIHNjb3Bl
QmFySXRlbVtXSS5SZXNvdXJjZVNpZGViYXJQYW5lbC5SZXNvdXJjZVR5cGVTeW1ib2xdID0gdmFs
dWU7Ci0gICAgICAgICAgICBzY29wZUJhckl0ZW1zLnB1c2goc2NvcGVCYXJJdGVtKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMuX3Njb3BlQmFyID0gbmV3IFdJLlNjb3BlQmFyKCJyZXNvdXJj
ZS1zaWRlYmFyLXNjb3BlLWJhciIsIHNjb3BlQmFySXRlbXMsIHNjb3BlQmFySXRlbXNbMF0sIHRy
dWUpOwotICAgICAgICB0aGlzLl9zY29wZUJhci5hZGRFdmVudExpc3RlbmVyKFdJLlNjb3BlQmFy
LkV2ZW50LlNlbGVjdGlvbkNoYW5nZWQsIHRoaXMuX3Njb3BlQmFyU2VsZWN0aW9uRGlkQ2hhbmdl
LCB0aGlzKTsKLQotICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyLmFkZE5hdmlnYXRpb25JdGVt
KHRoaXMuX3Njb3BlQmFyKTsKLQotICAgICAgICBXSS5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdJ
LkZyYW1lLkV2ZW50Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlk
Q2hhbmdlLCB0aGlzKTsKLQotICAgICAgICBXSS5uZXR3b3JrTWFuYWdlci5hZGRFdmVudExpc3Rl
bmVyKFdJLk5ldHdvcmtNYW5hZ2VyLkV2ZW50Lk1haW5GcmFtZURpZENoYW5nZSwgdGhpcy5fbWFp
bkZyYW1lRGlkQ2hhbmdlLCB0aGlzKTsKLQotICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRk
RXZlbnRMaXN0ZW5lcihXSS5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuU2NyaXB0QWRkZWQsIHRoaXMu
X3NjcmlwdFdhc0FkZGVkLCB0aGlzKTsKLSAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2
ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdFJlbW92ZWQsIHRoaXMu
X3NjcmlwdFdhc1JlbW92ZWQsIHRoaXMpOwotICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRk
RXZlbnRMaXN0ZW5lcihXSS5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuU2NyaXB0c0NsZWFyZWQsIHRo
aXMuX3NjcmlwdHNDbGVhcmVkLCB0aGlzKTsKLQotICAgICAgICBXSS5jc3NNYW5hZ2VyLmFkZEV2
ZW50TGlzdGVuZXIoV0kuQ1NTTWFuYWdlci5FdmVudC5TdHlsZVNoZWV0QWRkZWQsIHRoaXMuX3N0
eWxlU2hlZXRBZGRlZCwgdGhpcyk7Ci0KLSAgICAgICAgV0kudGFyZ2V0TWFuYWdlci5hZGRFdmVu
dExpc3RlbmVyKFdJLlRhcmdldE1hbmFnZXIuRXZlbnQuVGFyZ2V0UmVtb3ZlZCwgdGhpcy5fdGFy
Z2V0UmVtb3ZlZCwgdGhpcyk7Ci0KLSAgICAgICAgV0kubm90aWZpY2F0aW9ucy5hZGRFdmVudExp
c3RlbmVyKFdJLk5vdGlmaWNhdGlvbi5FeHRyYURvbWFpbnNBY3RpdmF0ZWQsIHRoaXMuX2V4dHJh
RG9tYWluc0FjdGl2YXRlZCwgdGhpcyk7Ci0KLSAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxp
bmUuYWRkRXZlbnRMaXN0ZW5lcihXSS5UcmVlT3V0bGluZS5FdmVudC5TZWxlY3Rpb25EaWRDaGFu
Z2UsIHRoaXMuX3RyZWVTZWxlY3Rpb25EaWRDaGFuZ2UsIHRoaXMpOwotICAgICAgICB0aGlzLmNv
bnRlbnRUcmVlT3V0bGluZS5pbmNsdWRlU291cmNlTWFwUmVzb3VyY2VDaGlsZHJlbiA9IHRydWU7
Ci0KLSAgICAgICAgaWYgKFJlc291cmNlU2lkZWJhclBhbmVsLnNob3VsZFBsYWNlUmVzb3VyY2Vz
QXRUb3BMZXZlbCgpKSB7Ci0gICAgICAgICAgICB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5kaXNj
bG9zdXJlQnV0dG9ucyA9IGZhbHNlOwotICAgICAgICAgICAgV0kuU291cmNlQ29kZS5hZGRFdmVu
dExpc3RlbmVyKFdJLlNvdXJjZUNvZGUuRXZlbnQuU291cmNlTWFwQWRkZWQsICgpID0+IHsgdGhp
cy5jb250ZW50VHJlZU91dGxpbmUuZGlzY2xvc3VyZUJ1dHRvbnMgPSB0cnVlOyB9LCB0aGlzKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFN0YXRpYwotCi0gICAgc3RhdGljIHNob3VsZFBs
YWNlUmVzb3VyY2VzQXRUb3BMZXZlbCgpCi0gICAgewotICAgICAgICByZXR1cm4gKFdJLnNoYXJl
ZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUuSmF2YVNjcmlwdCAmJiAh
V0kuc2hhcmVkQXBwLmhhc0V4dHJhRG9tYWlucykKLSAgICAgICAgICAgIHx8IFdJLnNoYXJlZEFw
cC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVidWdnYWJsZVR5cGUuU2VydmljZVdvcmtlcjsKLSAg
ICB9Ci0KLSAgICAvLyBQdWJsaWMKLQotICAgIGdldCBtaW5pbXVtV2lkdGgoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25CYXIubWluaW11bVdpZHRoOwotICAgIH0KLQot
ICAgIGNsb3NlZCgpCi0gICAgewotICAgICAgICBzdXBlci5jbG9zZWQoKTsKLQotICAgICAgICBX
SS5GcmFtZS5yZW1vdmVFdmVudExpc3RlbmVyKG51bGwsIG51bGwsIHRoaXMpOwotICAgICAgICBX
SS5uZXR3b3JrTWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKG51bGwsIG51bGwsIHRoaXMpOwot
ICAgICAgICBXSS5kZWJ1Z2dlck1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihudWxsLCBudWxs
LCB0aGlzKTsKLSAgICAgICAgV0kubm90aWZpY2F0aW9ucy5yZW1vdmVFdmVudExpc3RlbmVyKG51
bGwsIG51bGwsIHRoaXMpOwotICAgIH0KLQotICAgIHNob3dEZWZhdWx0Q29udGVudFZpZXcoKQot
ICAgIHsKLSAgICAgICAgaWYgKFdJLm5ldHdvcmtNYW5hZ2VyLm1haW5GcmFtZSkgewotICAgICAg
ICAgICAgdGhpcy5jb250ZW50QnJvd3Nlci5zaG93Q29udGVudFZpZXdGb3JSZXByZXNlbnRlZE9i
amVjdChXSS5uZXR3b3JrTWFuYWdlci5tYWluRnJhbWUpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGZpcnN0VHJlZUVsZW1lbnQgPSB0aGlzLmNvbnRlbnRU
cmVlT3V0bGluZS5jaGlsZHJlblswXTsKLSAgICAgICAgaWYgKGZpcnN0VHJlZUVsZW1lbnQpCi0g
ICAgICAgICAgICB0aGlzLnNob3dEZWZhdWx0Q29udGVudFZpZXdGb3JUcmVlRWxlbWVudChmaXJz
dFRyZWVFbGVtZW50KTsKLSAgICB9Ci0KLSAgICB0cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2Jq
ZWN0KHJlcHJlc2VudGVkT2JqZWN0KQotICAgIHsKLSAgICAgICAgLy8gQSBjdXN0b20gaW1wbGVt
ZW50YXRpb24gaXMgbmVlZGVkIGZvciB0aGlzIHNpbmNlIHRoZSBmcmFtZXMgYXJlIHBvcHVsYXRl
ZCBsYXppbHkuCi0KLSAgICAgICAgaWYgKCF0aGlzLl9tYWluRnJhbWVUcmVlRWxlbWVudCAmJiAo
cmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZSB8fCByZXByZXNlbnRlZE9i
amVjdCBpbnN0YW5jZW9mIFdJLkZyYW1lIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2Yg
V0kuQ29sbGVjdGlvbikpIHsKLSAgICAgICAgICAgIC8vIEFsbCByZXNvdXJjZXMgYXJlIHVuZGVy
IHRoZSBtYWluIGZyYW1lLCBzbyB3ZSBuZWVkIHRvIHJldHVybiBlYXJseSBpZiB3ZSBkb24ndCBo
YXZlIHRoZSBtYWluIGZyYW1lIHlldC4KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gVGhlIEZyYW1lIGlzIHVzZWQgYXMgdGhlIHJlcHJlc2VudGVkT2Jq
ZWN0IGluc3RlYWQgb2YgdGhlIG1haW4gcmVzb3VyY2UgaW4gb3VyIHRyZWUuCi0gICAgICAgIGlm
IChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlJlc291cmNlICYmIHJlcHJlc2VudGVk
T2JqZWN0LnBhcmVudEZyYW1lICYmIHJlcHJlc2VudGVkT2JqZWN0LnBhcmVudEZyYW1lLm1haW5S
ZXNvdXJjZSA9PT0gcmVwcmVzZW50ZWRPYmplY3QpCi0gICAgICAgICAgICByZXByZXNlbnRlZE9i
amVjdCA9IHJlcHJlc2VudGVkT2JqZWN0LnBhcmVudEZyYW1lOwotCi0gICAgICAgIGZ1bmN0aW9u
IGlzQW5jZXN0b3IoYW5jZXN0b3IsIHJlc291cmNlT3JGcmFtZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gU291cmNlTWFwUmVzb3VyY2VzIGFyZSBkZXNjZW5kYW50cyBvZiBhbm90aGVyIFNv
dXJjZUNvZGUgb2JqZWN0LgotICAgICAgICAgICAgaWYgKHJlc291cmNlT3JGcmFtZSBpbnN0YW5j
ZW9mIFdJLlNvdXJjZU1hcFJlc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc291cmNl
T3JGcmFtZS5zb3VyY2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlID09PSBhbmNlc3RvcikKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgICAgICAvLyBOb3QgYSBk
aXJlY3QgYW5jZXN0b3IsIHNvIGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhlIHBhcmVudCBTb3Vy
Y2VDb2RlIG9iamVjdC4KLSAgICAgICAgICAgICAgICByZXNvdXJjZU9yRnJhbWUgPSByZXNvdXJj
ZU9yRnJhbWUuc291cmNlTWFwLm9yaWdpbmFsU291cmNlQ29kZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZSA9IHJlc291cmNlT3JGcmFtZS5wYXJlbnRGcmFt
ZTsKLSAgICAgICAgICAgIHdoaWxlIChjdXJyZW50RnJhbWUpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudEZyYW1lID09PSBhbmNlc3RvcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lLnBhcmVu
dEZyYW1lOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBnZXRQYXJlbnQocmVzb3VyY2VPckZyYW1lKQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBTb3VyY2VNYXBSZXNvdXJjZXMgYXJlIGRlc2NlbmRhbnRz
IG9mIGFub3RoZXIgU291cmNlQ29kZSBvYmplY3QuCi0gICAgICAgICAgICBpZiAocmVzb3VyY2VP
ckZyYW1lIGluc3RhbmNlb2YgV0kuU291cmNlTWFwUmVzb3VyY2UpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlc291cmNlT3JGcmFtZS5zb3VyY2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlOwotICAg
ICAgICAgICAgcmV0dXJuIHJlc291cmNlT3JGcmFtZS5wYXJlbnRGcmFtZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmZpbmRU
cmVlRWxlbWVudChyZXByZXNlbnRlZE9iamVjdCwgaXNBbmNlc3RvciwgZ2V0UGFyZW50KTsKLSAg
ICAgICAgaWYgKHRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50Owot
Ci0gICAgICAgIC8vIE9ubHkgc3BlY2lhbCBjYXNlIFNjcmlwdCBvYmplY3RzLgotICAgICAgICBp
ZiAoIShyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlNjcmlwdCkpIHsKLSAgICAgICAg
ICAgIGNvbnNvbGUuZXJyb3IoIkRpZG4ndCBmaW5kIGEgVHJlZUVsZW1lbnQgZm9yIHJlcHJlc2Vu
dGVkT2JqZWN0IiwgcmVwcmVzZW50ZWRPYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgU2NyaXB0IGhhcyBhIFVSTCB3ZSBzaG91
bGQgaGF2ZSBmb3VuZCBpdCBlYXJsaWVyLgotICAgICAgICBpZiAocmVwcmVzZW50ZWRPYmplY3Qu
dXJsKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCJEaWRuJ3QgZmluZCBhIFNjcmlwdFRy
ZWVFbGVtZW50IGZvciBhIFNjcmlwdCB3aXRoIGEgVVJMLiIpOwotICAgICAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTaW5jZSB0aGUgU2NyaXB0IGRvZXMgbm90
IGhhdmUgYSBVUkwgd2UgY29uc2lkZXIgaXQgYW4gJ2Fub255bW91cycgc2NyaXB0LiBUaGVzZSBz
Y3JpcHRzIGhhcHBlbiBmcm9tIGNhbGxzIHRvCi0gICAgICAgIC8vIHdpbmRvdy5ldmFsKCkgb3Ig
YnJvd3NlciBmZWF0dXJlcyBsaWtlIEF1dG8gRmlsbCBhbmQgUmVhZGVyLiBUaGV5IGFyZSBub3Qg
bm9ybWFsbHkgYWRkZWQgdG8gdGhlIHNpZGViYXIsIGJ1dCBzaW5jZQotICAgICAgICAvLyB3ZSBo
YXZlIGEgU2NyaXB0Q29udGVudFZpZXcgYXNraW5nIGZvciB0aGUgdHJlZSBlbGVtZW50IHdlIHdp
bGwgbWFrZSBhIFNjcmlwdFRyZWVFbGVtZW50IG9uIGRlbWFuZCBhbmQgYWRkIGl0LgotCi0gICAg
ICAgIGlmICghdGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7Ci0gICAg
ICAgICAgICBsZXQgY29sbGVjdGlvbiA9IG5ldyBXSS5TY3JpcHRDb2xsZWN0aW9uOwotICAgICAg
ICAgICAgdGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50ID0gbmV3IFdJLkZv
bGRlclRyZWVFbGVtZW50KFdJLlVJU3RyaW5nKCJBbm9ueW1vdXMgU2NyaXB0cyIpLCBjb2xsZWN0
aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdGhpcy5fYW5vbnltb3VzU2NyaXB0c0Zv
bGRlclRyZWVFbGVtZW50LnBhcmVudCkgewotICAgICAgICAgICAgdmFyIGluZGV4ID0gaW5zZXJ0
aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKHRoaXMuX2Fub255bW91c1Nj
cmlwdHNGb2xkZXJUcmVlRWxlbWVudCwgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuY2hpbGRyZW4s
IHRoaXMuX2NvbXBhcmVUcmVlRWxlbWVudHMpOwotICAgICAgICAgICAgdGhpcy5jb250ZW50VHJl
ZU91dGxpbmUuaW5zZXJ0Q2hpbGQodGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVt
ZW50LCBpbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRz
Rm9sZGVyVHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QuYWRkKHJlcHJlc2VudGVkT2JqZWN0
KTsKLQotICAgICAgICB2YXIgc2NyaXB0VHJlZUVsZW1lbnQgPSBuZXcgV0kuU2NyaXB0VHJlZUVs
ZW1lbnQocmVwcmVzZW50ZWRPYmplY3QpOwotICAgICAgICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRz
Rm9sZGVyVHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoc2NyaXB0VHJlZUVsZW1lbnQpOwotCi0gICAg
ICAgIHJldHVybiBzY3JpcHRUcmVlRWxlbWVudDsKLSAgICB9Ci0KLSAgICAvLyBQcm90ZWN0ZWQK
LQotICAgIGluaXRpYWxMYXlvdXQoKQotICAgIHsKLSAgICAgICAgc3VwZXIuaW5pdGlhbExheW91
dCgpOwotCi0gICAgICAgIGlmIChXSS5uZXR3b3JrTWFuYWdlci5tYWluRnJhbWUpCi0gICAgICAg
ICAgICB0aGlzLl9jcmVhdGVNYWluRnJhbWVUcmVlRWxlbWVudChXSS5uZXR3b3JrTWFuYWdlci5t
YWluRnJhbWUpOwotCi0gICAgICAgIGZvciAobGV0IHNjcmlwdCBvZiBXSS5kZWJ1Z2dlck1hbmFn
ZXIua25vd25Ob25SZXNvdXJjZVNjcmlwdHMpIHsKLSAgICAgICAgICAgIHRoaXMuX2FkZFNjcmlw
dChzY3JpcHQpOwotCi0gICAgICAgICAgICBpZiAoc2NyaXB0LnNvdXJjZU1hcHMubGVuZ3RoICYm
IFJlc291cmNlU2lkZWJhclBhbmVsLnNob3VsZFBsYWNlUmVzb3VyY2VzQXRUb3BMZXZlbCgpKQot
ICAgICAgICAgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmRpc2Nsb3N1cmVCdXR0b25z
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc2V0RmlsdGVyKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX3Njb3BlQmFyLnJlc2V0VG9EZWZhdWx0KCk7Ci0KLSAgICAgICAgc3VwZXIu
cmVzZXRGaWx0ZXIoKTsKLSAgICB9Ci0KLSAgICBoYXNDdXN0b21GaWx0ZXJzKCkKLSAgICB7Ci0g
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3Njb3BlQmFyLnNlbGVjdGVkSXRlbXMubGVuZ3Ro
ID09PSAxKTsKLSAgICAgICAgdmFyIHNlbGVjdGVkU2NvcGVCYXJJdGVtID0gdGhpcy5fc2NvcGVC
YXIuc2VsZWN0ZWRJdGVtc1swXTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkU2NvcGVCYXJJdGVt
ICYmICFzZWxlY3RlZFNjb3BlQmFySXRlbS5leGNsdXNpdmU7Ci0gICAgfQotCi0gICAgbWF0Y2hU
cmVlRWxlbWVudEFnYWluc3RDdXN0b21GaWx0ZXJzKHRyZWVFbGVtZW50LCBmbGFncykKLSAgICB7
Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3Njb3BlQmFyLnNlbGVjdGVkSXRlbXMubGVu
Z3RoID09PSAxKTsKLSAgICAgICAgdmFyIHNlbGVjdGVkU2NvcGVCYXJJdGVtID0gdGhpcy5fc2Nv
cGVCYXIuc2VsZWN0ZWRJdGVtc1swXTsKLQotICAgICAgICAvLyBTaG93IGV2ZXJ5dGhpbmcgaWYg
dGhlcmUgaXMgbm8gc2VsZWN0aW9uIG9yICJBbGwgUmVzb3VyY2VzIiBpcyBzZWxlY3RlZCAodGhl
IGV4Y2x1c2l2ZSBpdGVtKS4KLSAgICAgICAgaWYgKCFzZWxlY3RlZFNjb3BlQmFySXRlbSB8fCBz
ZWxlY3RlZFNjb3BlQmFySXRlbS5leGNsdXNpdmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgICAgICAvLyBGb2xkZXJzIGFyZSBoaWRkZW4gb24gdGhlIGZpcnN0IHBhc3MsIGJ1dCB2
aXNpYmxlIGNoaWxkZW4gdW5kZXIgdGhlIGZvbGRlciB3aWxsIGZvcmNlIHRoZSBmb2xkZXIgdmlz
aWJsZSBhZ2Fpbi4KLSAgICAgICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuRm9sZGVy
VHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZnVuY3Rp
b24gbWF0Y2goKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFu
Y2VvZiBXSS5GcmFtZVRyZWVFbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rl
ZFNjb3BlQmFySXRlbVtXSS5SZXNvdXJjZVNpZGViYXJQYW5lbC5SZXNvdXJjZVR5cGVTeW1ib2xd
ID09PSBXSS5SZXNvdXJjZS5UeXBlLkRvY3VtZW50OwotCi0gICAgICAgICAgICBpZiAodHJlZUVs
ZW1lbnQgaW5zdGFuY2VvZiBXSS5TY3JpcHRUcmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc2VsZWN0ZWRTY29wZUJhckl0ZW1bV0kuUmVzb3VyY2VTaWRlYmFyUGFuZWwuUmVzb3Vy
Y2VUeXBlU3ltYm9sXSA9PT0gV0kuUmVzb3VyY2UuVHlwZS5TY3JpcHQ7Ci0KLSAgICAgICAgICAg
IGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLkNTU1N0eWxlU2hlZXRUcmVlRWxlbWVudCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRTY29wZUJhckl0ZW1bV0kuUmVzb3VyY2VT
aWRlYmFyUGFuZWwuUmVzb3VyY2VUeXBlU3ltYm9sXSA9PT0gV0kuUmVzb3VyY2UuVHlwZS5TdHls
ZVNoZWV0OwotCi0gICAgICAgICAgICBjb25zb2xlLmFzc2VydCh0cmVlRWxlbWVudCBpbnN0YW5j
ZW9mIFdJLlJlc291cmNlVHJlZUVsZW1lbnQsICJVbmtub3duIHRyZWVFbGVtZW50IiwgdHJlZUVs
ZW1lbnQpOwotICAgICAgICAgICAgaWYgKCEodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5SZXNv
dXJjZVRyZWVFbGVtZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIHJldHVybiB0cmVlRWxlbWVudC5yZXNvdXJjZS50eXBlID09PSBzZWxlY3RlZFNjb3Bl
QmFySXRlbVtXSS5SZXNvdXJjZVNpZGViYXJQYW5lbC5SZXNvdXJjZVR5cGVTeW1ib2xdOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIG1hdGNoZWQgPSBtYXRjaCgpOwotICAgICAgICBpZiAobWF0
Y2hlZCkKLSAgICAgICAgICAgIGZsYWdzLmV4cGFuZFRyZWVFbGVtZW50ID0gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIG1hdGNoZWQ7Ci0gICAgfQotCi0gICAgLy8gUHJpdmF0ZQotCi0gICAgX21haW5S
ZXNvdXJjZURpZENoYW5nZShldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghZXZlbnQudGFyZ2V0
LmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fbWFp
bkZyYW1lTWFpblJlc291cmNlRGlkQ2hhbmdlKGV2ZW50LnRhcmdldCk7Ci0gICAgfQotCi0gICAg
X21haW5GcmFtZURpZENoYW5nZShldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21haW5GcmFt
ZU1haW5SZXNvdXJjZURpZENoYW5nZShXSS5uZXR3b3JrTWFuYWdlci5tYWluRnJhbWUpOwotICAg
IH0KLQotICAgIF9tYWluRnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UobWFpbkZyYW1lKQotICAg
IHsKLSAgICAgICAgdGhpcy5jb250ZW50QnJvd3Nlci5jb250ZW50Vmlld0NvbnRhaW5lci5jbG9z
ZUFsbENvbnRlbnRWaWV3cygpOwotCi0gICAgICAgIHRoaXMuX2NyZWF0ZU1haW5GcmFtZVRyZWVF
bGVtZW50KG1haW5GcmFtZSk7Ci0gICAgICAgIGlmICghbWFpbkZyYW1lKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGZ1bmN0aW9uIGRlbGF5ZWRXb3JrKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5zZWxlY3RlZFRyZWVFbGVtZW50
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRDb250ZW50VmlldyA9IHRoaXMuY29udGVu
dEJyb3dzZXIuY3VycmVudENvbnRlbnRWaWV3OwotICAgICAgICAgICAgICAgIHZhciB0cmVlRWxl
bWVudCA9IGN1cnJlbnRDb250ZW50VmlldyA/IHRoaXMudHJlZUVsZW1lbnRGb3JSZXByZXNlbnRl
ZE9iamVjdChjdXJyZW50Q29udGVudFZpZXcucmVwcmVzZW50ZWRPYmplY3QpIDogbnVsbDsKLSAg
ICAgICAgICAgICAgICBpZiAoIXRyZWVFbGVtZW50KQotICAgICAgICAgICAgICAgICAgICB0cmVl
RWxlbWVudCA9IHRoaXMuX21haW5GcmFtZVRyZWVFbGVtZW50OwotICAgICAgICAgICAgICAgIHRo
aXMuc2hvd0RlZmF1bHRDb250ZW50Vmlld0ZvclRyZWVFbGVtZW50KHRyZWVFbGVtZW50KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIENvb2tpZSByZXN0b3JhdGlvbiB3
aWxsIGF0dGVtcHQgdG8gcmUtc2VsZWN0IHRoZSByZXNvdXJjZSB3ZSB3ZXJlIHNob3dpbmcuCi0g
ICAgICAgIC8vIEdpdmUgaXQgdGltZSB0byBkbyB0aGF0IGJlZm9yZSBzZWxlY3RpbmcgdGhlIG1h
aW4gZnJhbWUgcmVzb3VyY2UuCi0gICAgICAgIHNldFRpbWVvdXQoZGVsYXllZFdvcmsuYmluZCh0
aGlzKSk7Ci0gICAgfQotCi0gICAgX2NyZWF0ZU1haW5GcmFtZVRyZWVFbGVtZW50KG1haW5GcmFt
ZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9tYWluRnJhbWVUcmVlRWxlbWVudCkgewotICAg
ICAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUucmVtb3ZlQ2hpbGQodGhpcy5fbWFpbkZy
YW1lVHJlZUVsZW1lbnQpOwotICAgICAgICAgICAgdGhpcy5fbWFpbkZyYW1lVHJlZUVsZW1lbnQg
PSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYWluRnJhbWUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fbWFpbkZyYW1lVHJlZUVsZW1lbnQgPSBuZXcgV0ku
RnJhbWVUcmVlRWxlbWVudChtYWluRnJhbWUpOwotICAgICAgICB0aGlzLmNvbnRlbnRUcmVlT3V0
bGluZS5pbnNlcnRDaGlsZCh0aGlzLl9tYWluRnJhbWVUcmVlRWxlbWVudCwgMCk7Ci0gICAgfQot
Ci0gICAgX3NjcmlwdFdhc0FkZGVkKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fYWRkU2Ny
aXB0KGV2ZW50LmRhdGEuc2NyaXB0KTsKLSAgICB9Ci0KLSAgICBfYWRkU2NyaXB0KHNjcmlwdCkK
LSAgICB7Ci0gICAgICAgIC8vIFdlIGRvbid0IGFkZCBzY3JpcHRzIHdpdGhvdXQgVVJMcyBoZXJl
LiBUaG9zZSBzY3JpcHRzIGNhbiBxdWlja2x5IGNsdXR0ZXIgdGhlIGludGVyZmFjZSBhbmQKLSAg
ICAgICAgLy8gYXJlIHVzdWFsbHkgbW9yZSB0cmFuc2llbnQuIFRoZXkgd2lsbCBnZXQgYWRkZWQg
aWYvd2hlbiB0aGV5IG5lZWQgdG8gYmUgc2hvd24gaW4gYSBjb250ZW50IHZpZXcuCi0gICAgICAg
IGlmICghc2NyaXB0LnVybCAmJiAhc2NyaXB0LnNvdXJjZVVSTCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAvLyBUYXJnZXQgbWFpbiByZXNvdXJjZS4KLSAgICAgICAgaWYgKFdJLnNo
YXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSAhPT0gV0kuRGVidWdnYWJsZVR5cGUuSmF2YVNjcmlwdCkg
ewotICAgICAgICAgICAgaWYgKHNjcmlwdC50YXJnZXQgIT09IFdJLnBhZ2VUYXJnZXQpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoc2NyaXB0LmlzTWFpblJlc291cmNlKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuX2FkZFRhcmdldFdpdGhNYWluUmVzb3VyY2Uoc2NyaXB0LnRhcmdldCk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuZGlzY2xvc3VyZUJ1dHRvbnMg
PSB0cnVlOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIC8vIElmIHRoZSBzY3JpcHQgVVJMIG1hdGNoZXMgYSByZXNvdXJjZSB3ZSBj
YW4gYXNzdW1lIGl0IGlzIHBhcnQgb2YgdGhhdCByZXNvdXJjZSBhbmQgZG9lcyBub3QgbmVlZCBh
ZGRlZC4KLSAgICAgICAgaWYgKHNjcmlwdC5yZXNvdXJjZSB8fCBzY3JpcHQuZHluYW1pY2FsbHlB
ZGRlZFNjcmlwdEVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbGV0IGlu
c2VydEludG9Ub3BMZXZlbCA9IGZhbHNlOwotICAgICAgICBsZXQgcGFyZW50Rm9sZGVyVHJlZUVs
ZW1lbnQgPSBudWxsOwotCi0gICAgICAgIGlmIChzY3JpcHQuaW5qZWN0ZWQpIHsKLSAgICAgICAg
ICAgIGlmICghdGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7Ci0gICAg
ICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBuZXcgV0kuU2NyaXB0Q29sbGVjdGlvbjsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9leHRlbnNpb25TY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQgPSBu
ZXcgV0kuRm9sZGVyVHJlZUVsZW1lbnQoV0kuVUlTdHJpbmcoIkV4dGVuc2lvbiBTY3JpcHRzIiks
IGNvbGxlY3Rpb24pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXJlbnRGb2xkZXJU
cmVlRWxlbWVudCA9IHRoaXMuX2V4dGVuc2lvblNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudDsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChSZXNvdXJjZVNpZGViYXJQYW5lbC5zaG91
bGRQbGFjZVJlc291cmNlc0F0VG9wTGV2ZWwoKSkKLSAgICAgICAgICAgICAgICBpbnNlcnRJbnRv
VG9wTGV2ZWwgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCF0aGlzLl9leHRyYVNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgICAg
ICAgICBsZXQgY29sbGVjdGlvbiA9IG5ldyBXSS5TY3JpcHRDb2xsZWN0aW9uOwotICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9leHRyYVNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudCA9IG5ldyBXSS5G
b2xkZXJUcmVlRWxlbWVudChXSS5VSVN0cmluZygiRXh0cmEgU2NyaXB0cyIpLCBjb2xsZWN0aW9u
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXJUcmVl
RWxlbWVudCA9IHRoaXMuX2V4dHJhU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50OwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcmVudEZvbGRlclRyZWVFbGVtZW50KQot
ICAgICAgICAgICAgcGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QuYWRk
KHNjcmlwdCk7Ci0KLSAgICAgICAgdmFyIHNjcmlwdFRyZWVFbGVtZW50ID0gbmV3IFdJLlNjcmlw
dFRyZWVFbGVtZW50KHNjcmlwdCk7Ci0KLSAgICAgICAgaWYgKGluc2VydEludG9Ub3BMZXZlbCkg
ewotICAgICAgICAgICAgdmFyIGluZGV4ID0gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RT
b3J0ZWRCeUZ1bmN0aW9uKHNjcmlwdFRyZWVFbGVtZW50LCB0aGlzLmNvbnRlbnRUcmVlT3V0bGlu
ZS5jaGlsZHJlbiwgdGhpcy5fY29tcGFyZVRyZWVFbGVtZW50cyk7Ci0gICAgICAgICAgICB0aGlz
LmNvbnRlbnRUcmVlT3V0bGluZS5pbnNlcnRDaGlsZChzY3JpcHRUcmVlRWxlbWVudCwgaW5kZXgp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFwYXJlbnRGb2xkZXJUcmVlRWxl
bWVudC5wYXJlbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBpbnNlcnRpb25JbmRl
eEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVuY3Rpb24ocGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQs
IHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmNoaWxkcmVuLCB0aGlzLl9jb21wYXJlVHJlZUVsZW1l
bnRzKTsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5pbnNlcnRDaGls
ZChwYXJlbnRGb2xkZXJUcmVlRWxlbWVudCwgaW5kZXgpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBwYXJlbnRGb2xkZXJUcmVlRWxlbWVudC5hcHBlbmRDaGlsZChzY3JpcHRUcmVlRWxl
bWVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfc2NyaXB0V2FzUmVtb3ZlZChldmVudCkK
LSAgICB7Ci0gICAgICAgIGxldCBzY3JpcHQgPSBldmVudC5kYXRhLnNjcmlwdDsKLSAgICAgICAg
bGV0IHNjcmlwdFRyZWVFbGVtZW50ID0gdGhpcy5jb250ZW50VHJlZU91dGxpbmUuZ2V0Q2FjaGVk
VHJlZUVsZW1lbnQoc2NyaXB0KTsKLSAgICAgICAgaWYgKCFzY3JpcHRUcmVlRWxlbWVudCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBsZXQgcGFyZW50VHJlZUVsZW1lbnQgPSBzY3Jp
cHRUcmVlRWxlbWVudC5wYXJlbnQ7Ci0gICAgICAgIHBhcmVudFRyZWVFbGVtZW50LnJlbW92ZUNo
aWxkKHNjcmlwdFRyZWVFbGVtZW50KTsKLQotICAgICAgICBpZiAocGFyZW50VHJlZUVsZW1lbnQg
aW5zdGFuY2VvZiBXSS5Gb2xkZXJUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgcGFyZW50VHJl
ZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QucmVtb3ZlKHNjcmlwdCk7Ci0KLSAgICAgICAgICAg
IGlmICghcGFyZW50VHJlZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKQotICAgICAgICAgICAgICAg
IHBhcmVudFRyZWVFbGVtZW50LnBhcmVudC5yZW1vdmVDaGlsZChwYXJlbnRUcmVlRWxlbWVudCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfc2NyaXB0c0NsZWFyZWQoZXZlbnQpCi0gICAgewot
ICAgICAgICBjb25zdCBzdXBwcmVzc09uRGVzZWxlY3QgPSB0cnVlOwotICAgICAgICBjb25zdCBz
dXBwcmVzc1NlbGVjdFNpYmxpbmcgPSB0cnVlOwotCi0gICAgICAgIGlmICh0aGlzLl9leHRlbnNp
b25TY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9leHRl
bnNpb25TY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucGFyZW50KQotICAgICAgICAgICAgICAgIHRo
aXMuX2V4dGVuc2lvblNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudC5wYXJlbnQucmVtb3ZlQ2hpbGQo
dGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LCBzdXBwcmVzc09uRGVzZWxl
Y3QsIHN1cHByZXNzU2VsZWN0U2libGluZyk7Ci0KLSAgICAgICAgICAgIHRoaXMuX2V4dGVuc2lv
blNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdC5jbGVhcigpOwotICAg
ICAgICAgICAgdGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50ID0gbnVsbDsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9leHRyYVNjcmlwdHNGb2xkZXJUcmVlRWxl
bWVudCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX2V4dHJhU2NyaXB0c0ZvbGRlclRyZWVFbGVt
ZW50LnBhcmVudCkKLSAgICAgICAgICAgICAgICB0aGlzLl9leHRyYVNjcmlwdHNGb2xkZXJUcmVl
RWxlbWVudC5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fZXh0cmFTY3JpcHRzRm9sZGVyVHJlZUVs
ZW1lbnQsIHN1cHByZXNzT25EZXNlbGVjdCwgc3VwcHJlc3NTZWxlY3RTaWJsaW5nKTsKLQotICAg
ICAgICAgICAgdGhpcy5fZXh0cmFTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucmVwcmVzZW50ZWRP
YmplY3QuY2xlYXIoKTsKLSAgICAgICAgICAgIHRoaXMuX2V4dHJhU2NyaXB0c0ZvbGRlclRyZWVF
bGVtZW50ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9hbm9ueW1vdXNT
Y3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9hbm9ueW1v
dXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucGFyZW50KQotICAgICAgICAgICAgICAgIHRoaXMu
X2Fub255bW91c1NjcmlwdHNGb2xkZXJUcmVlRWxlbWVudC5wYXJlbnQucmVtb3ZlQ2hpbGQodGhp
cy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LCBzdXBwcmVzc09uRGVzZWxlY3Qs
IHN1cHByZXNzU2VsZWN0U2libGluZyk7Ci0KLSAgICAgICAgICAgIHRoaXMuX2Fub255bW91c1Nj
cmlwdHNGb2xkZXJUcmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdC5jbGVhcigpOwotICAgICAg
ICAgICAgdGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50ID0gbnVsbDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl90YXJnZXRUcmVlRWxlbWVudE1hcC5zaXplKSB7
Ci0gICAgICAgICAgICBmb3IgKGxldCB0cmVlRWxlbWVudCBvZiB0aGlzLl90YXJnZXRUcmVlRWxl
bWVudE1hcC52YWx1ZXMoKSkKLSAgICAgICAgICAgICAgICB0cmVlRWxlbWVudC5wYXJlbnQucmVt
b3ZlQ2hpbGQodHJlZUVsZW1lbnQsIHN1cHByZXNzT25EZXNlbGVjdCwgc3VwcHJlc3NTZWxlY3RT
aWJsaW5nKTsKLSAgICAgICAgICAgIHRoaXMuX3RhcmdldFRyZWVFbGVtZW50TWFwLmNsZWFyKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfc3R5bGVTaGVldEFkZGVkKGV2ZW50KQotICAgIHsK
LSAgICAgICAgbGV0IHN0eWxlU2hlZXQgPSBldmVudC5kYXRhLnN0eWxlU2hlZXQ7Ci0gICAgICAg
IGlmICghc3R5bGVTaGVldC5pc0luc3BlY3RvclN0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBsZXQgZnJhbWVUcmVlRWxlbWVudCA9IHRoaXMudHJlZUVsZW1lbnRG
b3JSZXByZXNlbnRlZE9iamVjdChzdHlsZVNoZWV0LnBhcmVudEZyYW1lKTsKLSAgICAgICAgaWYg
KCFmcmFtZVRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZyYW1l
VHJlZUVsZW1lbnQuYWRkUmVwcmVzZW50ZWRPYmplY3RUb05ld0NoaWxkUXVldWUoc3R5bGVTaGVl
dCk7Ci0gICAgfQotCi0gICAgX2FkZFRhcmdldFdpdGhNYWluUmVzb3VyY2UodGFyZ2V0KQotICAg
IHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGFyZ2V0LnR5cGUgPT09IFdJLlRhcmdldC5UeXBl
LldvcmtlciB8fCB0YXJnZXQudHlwZSA9PT0gV0kuVGFyZ2V0LlR5cGUuU2VydmljZVdvcmtlcik7
Ci0KLSAgICAgICAgbGV0IHRhcmdldFRyZWVFbGVtZW50ID0gbmV3IFdJLldvcmtlclRyZWVFbGVt
ZW50KHRhcmdldCk7Ci0gICAgICAgIHRoaXMuX3RhcmdldFRyZWVFbGVtZW50TWFwLnNldCh0YXJn
ZXQsIHRhcmdldFRyZWVFbGVtZW50KTsKLQotICAgICAgICBsZXQgaW5kZXggPSBpbnNlcnRpb25J
bmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVuY3Rpb24odGFyZ2V0VHJlZUVsZW1lbnQsIHRo
aXMuY29udGVudFRyZWVPdXRsaW5lLmNoaWxkcmVuLCB0aGlzLl9jb21wYXJlVHJlZUVsZW1lbnRz
KTsKLSAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuaW5zZXJ0Q2hpbGQodGFyZ2V0VHJl
ZUVsZW1lbnQsIGluZGV4KTsKLSAgICB9Ci0KLSAgICBfdGFyZ2V0UmVtb3ZlZChldmVudCkKLSAg
ICB7Ci0gICAgICAgIGxldCByZW1vdmVkVGFyZ2V0ID0gZXZlbnQuZGF0YS50YXJnZXQ7Ci0KLSAg
ICAgICAgbGV0IHRhcmdldFRyZWVFbGVtZW50ID0gdGhpcy5fdGFyZ2V0VHJlZUVsZW1lbnRNYXAu
dGFrZShyZW1vdmVkVGFyZ2V0KTsKLSAgICAgICAgaWYgKHRhcmdldFRyZWVFbGVtZW50KQotICAg
ICAgICAgICAgdGFyZ2V0VHJlZUVsZW1lbnQucGFyZW50LnJlbW92ZUNoaWxkKHRhcmdldFRyZWVF
bGVtZW50KTsKLSAgICB9Ci0KLSAgICBfdHJlZVNlbGVjdGlvbkRpZENoYW5nZShldmVudCkKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBsZXQgdHJlZUVsZW1lbnQgPSB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5zZWxlY3Rl
ZFRyZWVFbGVtZW50OwotICAgICAgICBpZiAoIXRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLkZvbGRlclRyZWVF
bGVtZW50Ci0gICAgICAgICAgICB8fCB0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLlJlc291cmNl
VHJlZUVsZW1lbnQKLSAgICAgICAgICAgIHx8IHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuU2Ny
aXB0VHJlZUVsZW1lbnQKLSAgICAgICAgICAgIHx8IHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0ku
Q1NTU3R5bGVTaGVldFRyZWVFbGVtZW50KSB7Ci0gICAgICAgICAgICBjb25zdCBjb29raWUgPSBu
dWxsOwotICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsKLSAgICAgICAgICAgICAgICBpZ25v
cmVOZXR3b3JrVGFiOiB0cnVlLAotICAgICAgICAgICAgICAgIGlnbm9yZVNlYXJjaFRhYjogdHJ1
ZSwKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBXSS5zaG93UmVwcmVzZW50ZWRPYmplY3Qo
dHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QsIGNvb2tpZSwgb3B0aW9ucyk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zb2xlLmVycm9yKCJVbmtub3du
IHRyZWUgZWxlbWVudCIsIHRyZWVFbGVtZW50KTsKLSAgICB9Ci0KLSAgICBfY29tcGFyZVRyZWVF
bGVtZW50cyhhLCBiKQotICAgIHsKLSAgICAgICAgLy8gQWx3YXlzIHNvcnQgdGhlIG1haW4gZnJh
bWUgZWxlbWVudCBmaXJzdC4KLSAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBXSS5GcmFtZVRyZWVF
bGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoYiBpbnN0YW5jZW9m
IFdJLkZyYW1lVHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICBj
b25zb2xlLmFzc2VydChhLm1haW5UaXRsZSk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGIubWFp
blRpdGxlKTsKLQotICAgICAgICByZXR1cm4gKGEubWFpblRpdGxlIHx8ICIiKS5leHRlbmRlZExv
Y2FsZUNvbXBhcmUoYi5tYWluVGl0bGUgfHwgIiIpOwotICAgIH0KLQotICAgIF9leHRyYURvbWFp
bnNBY3RpdmF0ZWQoKQotICAgIHsKLSAgICAgICAgaWYgKFJlc291cmNlU2lkZWJhclBhbmVsLnNo
b3VsZFBsYWNlUmVzb3VyY2VzQXRUb3BMZXZlbCgpKQotICAgICAgICAgICAgdGhpcy5jb250ZW50
VHJlZU91dGxpbmUuZGlzY2xvc3VyZUJ1dHRvbnMgPSB0cnVlOwotICAgIH0KLQotICAgIF9zY29w
ZUJhclNlbGVjdGlvbkRpZENoYW5nZShldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMudXBkYXRl
RmlsdGVyKCk7Ci0gICAgfQotfTsKLQotV0kuUmVzb3VyY2VTaWRlYmFyUGFuZWwuUmVzb3VyY2VU
eXBlU3ltYm9sID0gU3ltYm9sKCJyZXNvdXJjZS10eXBlIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9SZXNvdXJjZXNUYWJDb250ZW50Vmll
dy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291cmNl
c1RhYkNvbnRlbnRWaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjhhZmM2
MzVkMC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvUmVzb3VyY2VzVGFiQ29udGVudFZpZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSw3
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV0kuUmVzb3VyY2VzVGFiQ29udGVudFZpZXcgPSBjbGFz
cyBSZXNvdXJjZXNUYWJDb250ZW50VmlldyBleHRlbmRzIFdJLkNvbnRlbnRCcm93c2VyVGFiQ29u
dGVudFZpZXcKLXsKLSAgICBjb25zdHJ1Y3RvcihpZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAg
bGV0IHRhYkJhckl0ZW0gPSBXSS5HZW5lcmFsVGFiQmFySXRlbS5mcm9tVGFiSW5mbyhXSS5SZXNv
dXJjZXNUYWJDb250ZW50Vmlldy50YWJJbmZvKCkpOwotICAgICAgICBjb25zdCBkZXRhaWxzU2lk
ZWJhclBhbmVsQ29uc3RydWN0b3JzID0gW1dJLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbCwg
V0kuUHJvYmVEZXRhaWxzU2lkZWJhclBhbmVsXTsKLSAgICAgICAgc3VwZXIoaWRlbnRpZmllciB8
fCAicmVzb3VyY2VzIiwgInJlc291cmNlcyIsIHRhYkJhckl0ZW0sIFdJLlJlc291cmNlU2lkZWJh
clBhbmVsLCBkZXRhaWxzU2lkZWJhclBhbmVsQ29uc3RydWN0b3JzKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgdGFiSW5mbygpCi0gICAgewotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgaW1h
Z2U6ICJJbWFnZXMvUmVzb3VyY2VzLnN2ZyIsCi0gICAgICAgICAgICB0aXRsZTogV0kuVUlTdHJp
bmcoIlJlc291cmNlcyIpLAotICAgICAgICB9OwotICAgIH0KLQotICAgIHN0YXRpYyBpc1RhYkFs
bG93ZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFXSS5zZXR0aW5ncy5leHBlcmltZW50YWxF
bmFibGVTb3VyY2VzVGFiLnZhbHVlOwotICAgIH0KLQotICAgIC8vIFB1YmxpYwotCi0gICAgZ2V0
IHR5cGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdJLlJlc291cmNlc1RhYkNvbnRlbnRWaWV3
LlR5cGU7Ci0gICAgfQotCi0gICAgZ2V0IHN1cHBvcnRzU3BsaXRDb250ZW50QnJvd3NlcigpCi0g
ICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYW5TaG93UmVwcmVzZW50
ZWRPYmplY3QocmVwcmVzZW50ZWRPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gcmVwcmVz
ZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5GcmFtZQotICAgICAgICAgICAgfHwgcmVwcmVzZW50
ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5GcmFtZUNvbGxlY3Rpb24KLSAgICAgICAgICAgIHx8IHJl
cHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuUmVzb3VyY2UKLSAgICAgICAgICAgIHx8IHJl
cHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VDb2xsZWN0aW9uCi0gICAgICAg
ICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlNjcmlwdAotICAgICAgICAg
ICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5TY3JpcHRDb2xsZWN0aW9uCi0g
ICAgICAgICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkNTU1N0eWxlU2hl
ZXQKLSAgICAgICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuQ1NTU3R5
bGVTaGVldENvbGxlY3Rpb247Ci0gICAgfQotfTsKLQotV0kuUmVzb3VyY2VzVGFiQ29udGVudFZp
ZXcuVHlwZSA9ICJyZXNvdXJjZXMiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvU2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZWFyY2hSZXN1bHRUcmVlRWxlbWVu
dC5qcwppbmRleCA3YTM5Y2RkMDliYi4uYjM0NWI2NTZkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NlYXJjaFJlc3VsdFRyZWVFbGVtZW50
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NlYXJj
aFJlc3VsdFRyZWVFbGVtZW50LmpzCkBAIC05OSwxMiArOTksNyBAQCBXSS5TZWFyY2hSZXN1bHRU
cmVlRWxlbWVudCA9IGNsYXNzIFNlYXJjaFJlc3VsdFRyZWVFbGVtZW50IGV4dGVuZHMgV0kuR2Vu
ZXJhbFRyZQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAodGhpcy5yZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlNvdXJjZUNvZGVT
ZWFyY2hNYXRjaE9iamVjdCkgewotICAgICAgICAgICAgbGV0IGxhYmVsID0gbnVsbDsKLSAgICAg
ICAgICAgIGlmIChXSS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVTb3VyY2VzVGFiLnZhbHVl
KQotICAgICAgICAgICAgICAgIGxhYmVsID0gV0kuVUlTdHJpbmcoIlJldmVhbCBpbiBTb3VyY2Vz
IFRhYiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxhYmVsID0gV0kuVUlT
dHJpbmcoIlJldmVhbCBpbiBSZXNvdXJjZXMgVGFiIik7Ci0gICAgICAgICAgICBjb250ZXh0TWVu
dS5hcHBlbmRJdGVtKGxhYmVsLCAoKSA9PiB7CisgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBl
bmRJdGVtKFdJLlVJU3RyaW5nKCJSZXZlYWwgaW4gU291cmNlcyBUYWIiKSwgKCkgPT4gewogICAg
ICAgICAgICAgICAgIFdJLnNob3dPcmlnaW5hbE9yRm9ybWF0dGVkU291cmNlQ29kZVRleHRSYW5n
ZSh0aGlzLnJlcHJlc2VudGVkT2JqZWN0LnNvdXJjZUNvZGVUZXh0UmFuZ2UsIHsKICAgICAgICAg
ICAgICAgICAgICAgaWdub3JlTmV0d29ya1RhYjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAg
aWdub3JlU2VhcmNoVGFiOiB0cnVlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcu
anMKaW5kZXggZTFkODU4OGQ3NTUuLjlmOTg1MGEwM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3Lmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdz
VGFiQ29udGVudFZpZXcuanMKQEAgLTMyOCw5ICszMjgsNiBAQCBXSS5TZXR0aW5nc1RhYkNvbnRl
bnRWaWV3ID0gY2xhc3MgU2V0dGluZ3NUYWJDb250ZW50VmlldyBleHRlbmRzIFdJLlRhYkNvbnRl
bnRWaQogCiAgICAgICAgIGxldCBpbml0aWFsVmFsdWVzID0gbmV3IE1hcDsKIAotICAgICAgICBl
eHBlcmltZW50YWxTZXR0aW5nc1ZpZXcuYWRkU2V0dGluZyhXSS5VSVN0cmluZygiU291cmNlczoi
KSwgV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1RhYiwgV0kuVUlTdHJpbmco
IkVuYWJsZSBTb3VyY2VzIFRhYiIpKTsKLSAgICAgICAgZXhwZXJpbWVudGFsU2V0dGluZ3NWaWV3
LmFkZFNlcGFyYXRvcigpOwotCiAgICAgICAgIGlmICh3aW5kb3cuTGF5ZXJUcmVlQWdlbnQpIHsK
ICAgICAgICAgICAgIGV4cGVyaW1lbnRhbFNldHRpbmdzVmlldy5hZGRTZXR0aW5nKFdJLlVJU3Ry
aW5nKCJMYXllcnM6IiksIFdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZUxheWVyc1RhYiwg
V0kuVUlTdHJpbmcoIkVuYWJsZSBMYXllcnMgVGFiIikpOwogICAgICAgICAgICAgZXhwZXJpbWVu
dGFsU2V0dGluZ3NWaWV3LmFkZFNlcGFyYXRvcigpOwpAQCAtMzQ5LDIwICszNDYsOCBAQCBXSS5T
ZXR0aW5nc1RhYkNvbnRlbnRWaWV3ID0gY2xhc3MgU2V0dGluZ3NUYWJDb250ZW50VmlldyBleHRl
bmRzIFdJLlRhYkNvbnRlbnRWaQogICAgICAgICBsZXQgcmVsb2FkSW5zcGVjdG9yQnV0dG9uID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICAgICAgIHJlbG9hZEluc3BlY3Rv
ckJ1dHRvbi50ZXh0Q29udGVudCA9IFdJLlVJU3RyaW5nKCJSZWxvYWQgV2ViIEluc3BlY3RvciIp
OwogICAgICAgICByZWxvYWRJbnNwZWN0b3JCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCAoZXZlbnQpID0+IHsKLSAgICAgICAgICAgIC8vIEZvcmNlIGEgY29weSBzbyB0aGF0IFdJLlNl
dHRpbmcgc2VlcyBpdCBhcyBhIG5ldyB2YWx1ZS4KLSAgICAgICAgICAgIGxldCBuZXdUYWJzID0g
V0kuX29wZW5UYWJzU2V0dGluZy52YWx1ZTsKLSAgICAgICAgICAgIGlmICghaW5pdGlhbFZhbHVl
cy5nZXQoV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1RhYikgJiYgV0kuc2V0
dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNlc1RhYi52YWx1ZSkgewotICAgICAgICAgICAg
ICAgIGxldCBleGlzdGluZ0luZGV4ID0gbmV3VGFicy5pbmRleE9mKFdJLlNvdXJjZXNUYWJDb250
ZW50Vmlldy5UeXBlKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJbmRleCA9PT0gLTEp
IHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gbmV3VGFicy5pbmRleE9mKFdJLkRl
YnVnZ2VyVGFiQ29udGVudFZpZXcuVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRl
eCAhPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdUYWJzLmluc2VydEF0SW5kZXgo
V0kuU291cmNlc1RhYkNvbnRlbnRWaWV3LlR5cGUsIGluZGV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFicy5wdXNoKFdJLlNvdXJjZXNU
YWJDb250ZW50Vmlldy5UeXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoIWluaXRpYWxWYWx1ZXMuZ2V0KFdJLnNldHRpbmdzLmV4cGVyaW1lbnRh
bEVuYWJsZUxheWVyc1RhYikgJiYgd2luZG93LkxheWVyVHJlZUFnZW50ICYmIFdJLnNldHRpbmdz
LmV4cGVyaW1lbnRhbEVuYWJsZUxheWVyc1RhYi52YWx1ZSkKLSAgICAgICAgICAgICAgICBuZXdU
YWJzLnB1c2goV0kuTGF5ZXJzVGFiQ29udGVudFZpZXcuVHlwZSk7CisgICAgICAgICAgICAgICAg
V0kuX29wZW5UYWJzU2V0dGluZy52YWx1ZS5wdXNoKFdJLkxheWVyc1RhYkNvbnRlbnRWaWV3LlR5
cGUpOwogICAgICAgICAgICAgV0kuX29wZW5UYWJzU2V0dGluZy5zYXZlKCk7CiAKICAgICAgICAg
ICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5yZW9wZW4oKTsKQEAgLTM3OCw3ICszNjMsNiBAQCBX
SS5TZXR0aW5nc1RhYkNvbnRlbnRWaWV3ID0gY2xhc3MgU2V0dGluZ3NUYWJDb250ZW50VmlldyBl
eHRlbmRzIFdJLlRhYkNvbnRlbnRWaQogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBsaXN0ZW5Gb3JDaGFuZ2UoV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNl
c1RhYik7CiAgICAgICAgIGxpc3RlbkZvckNoYW5nZShXSS5zZXR0aW5ncy5leHBlcmltZW50YWxF
bmFibGVMYXllcnNUYWIpOwogICAgICAgICBsaXN0ZW5Gb3JDaGFuZ2UoV0kuc2V0dGluZ3MuZXhw
ZXJpbWVudGFsRW5hYmxlTmV3VGFiQmFyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5qcwppbmRleCAzZjdhNjQ2MjcxNi4uYTgxOGQyNGMzNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNv
ZGVUZXh0RWRpdG9yLmpzCkBAIC0xMjU3LDIwICsxMjU3LDExIEBAIFdJLlNvdXJjZUNvZGVUZXh0
RWRpdG9yID0gY2xhc3MgU291cmNlQ29kZVRleHRFZGl0b3IgZXh0ZW5kcyBXSS5UZXh0RWRpdG9y
CiAgICAgICAgIGlmIChicmVha3BvaW50cy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgIFdJ
LmJyZWFrcG9pbnRQb3BvdmVyQ29udHJvbGxlci5hcHBlbmRDb250ZXh0TWVudUl0ZW1zKGNvbnRl
eHRNZW51LCBicmVha3BvaW50c1swXSwgZXZlbnQudGFyZ2V0KTsKIAotICAgICAgICAgICAgaWYg
KFdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZVNvdXJjZXNUYWIudmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIVdJLmlzU2hvd2luZ1NvdXJjZXNUYWIoKSkgewotICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXSS5VSVN0cmluZygiUmV2ZWFsIGluIFNvdXJjZXMg
VGFiIiksICgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFdJLnNob3dTb3VyY2VzVGFi
KHticmVha3BvaW50VG9TZWxlY3Q6IGJyZWFrcG9pbnRzWzBdfSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFXSS5pc1Nob3dpbmdEZWJ1Z2dlclRhYigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdJLlVJU3RyaW5nKCJSZXZlYWwgaW4gRGVidWdnZXIg
VGFiIiksICgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFdJLnNob3dEZWJ1Z2dlclRh
Yih7YnJlYWtwb2ludFRvU2VsZWN0OiBicmVha3BvaW50c1swXX0pOwotICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIVdJLmlzU2hvd2lu
Z1NvdXJjZXNUYWIoKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFy
YXRvcigpOworICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV0kuVUlTdHJp
bmcoIlJldmVhbCBpbiBTb3VyY2VzIFRhYiIpLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgICAg
IFdJLnNob3dTb3VyY2VzVGFiKHticmVha3BvaW50VG9TZWxlY3Q6IGJyZWFrcG9pbnRzWzBdfSk7
CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1NvdXJjZXNUYWJDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1NvdXJjZXNUYWJDb250ZW50Vmlldy5qcwppbmRleCBhZGVkMWFlNDY5Ni4u
YzVhZDc3YjRiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1NvdXJjZXNUYWJDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VzVGFiQ29udGVudFZpZXcuanMKQEAgLTQy
LDExICs0Miw2IEBAIFdJLlNvdXJjZXNUYWJDb250ZW50VmlldyA9IGNsYXNzIFNvdXJjZXNUYWJD
b250ZW50VmlldyBleHRlbmRzIFdJLkNvbnRlbnRCcm93c2VyCiAgICAgICAgIH07CiAgICAgfQog
Ci0gICAgc3RhdGljIGlzVGFiQWxsb3dlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gISFXSS5z
ZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVTb3VyY2VzVGFiLnZhbHVlOwotICAgIH0KLQogICAg
IC8vIFB1YmxpYwogCiAgICAgZ2V0IHR5cGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRDU1NTdHlsZURlY2xhcmF0aW9u
U2VjdGlvbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Nw
cmVhZHNoZWV0Q1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uanMKaW5kZXggYjQxN2MzODMyMDku
LmIxYzc2MGMxZmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9TcHJlYWRzaGVldENTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpzCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0Q1NT
U3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uanMKQEAgLTU2MCwxMSArNTYwLDggQEAgV0kuU3ByZWFk
c2hlZXRDU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbiA9IGNsYXNzIFNwcmVhZHNoZWV0Q1NTU3R5
bGVEZWNsYXJhdGlvblMKICAgICAgICAgICAgIGxldCBzb3VyY2VDb2RlID0gdGhpcy5fc3R5bGUu
b3duZXJSdWxlLnNvdXJjZUNvZGVMb2NhdGlvbi5kaXNwbGF5U291cmNlQ29kZTsKICAgICAgICAg
ICAgIGlmIChzb3VyY2VDb2RlIGluc3RhbmNlb2YgV0kuQ1NTU3R5bGVTaGVldCB8fCAoc291cmNl
Q29kZSBpbnN0YW5jZW9mIFdJLlJlc291cmNlICYmIHNvdXJjZUNvZGUudHlwZSA9PT0gV0kuUmVz
b3VyY2UuVHlwZS5TdHlsZVNoZWV0KSkKICAgICAgICAgICAgICAgICBsYWJlbCA9IFdJLlVJU3Ry
aW5nKCJSZXZlYWwgaW4gU3R5bGUgU2hlZXQiKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFdJLnNl
dHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZVNvdXJjZXNUYWIudmFsdWUpCi0gICAgICAgICAgICAg
ICAgbGFiZWwgPSBXSS5VSVN0cmluZygiUmV2ZWFsIGluIFNvdXJjZXMgVGFiIik7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGFiZWwgPSBXSS5VSVN0cmluZygiUmV2ZWFsIGlu
IFJlc291cmNlcyBUYWIiKTsKLQorICAgICAgICAgICAgICAgIGxhYmVsID0gV0kuVUlTdHJpbmco
IlJldmVhbCBpbiBTb3VyY2VzIFRhYiIpOwogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5k
SXRlbShsYWJlbCwgKCkgPT4gewogICAgICAgICAgICAgICAgIFdJLnNob3dTb3VyY2VDb2RlTG9j
YXRpb24odGhpcy5fc3R5bGUub3duZXJSdWxlLnNvdXJjZUNvZGVMb2NhdGlvbiwgewogICAgICAg
ICAgICAgICAgICAgICBpZ25vcmVOZXR3b3JrVGFiOiB0cnVlLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1dlYkluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4
cHJvaiBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYklu
c3BlY3RvclVJLnZjeHByb2oKaW5kZXggMGQyMzBmOWI1NmIuLjY3NWIyMjE5N2EyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvV2ViSW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNw
ZWN0b3JVSS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JV
SS52Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHByb2oKQEAgLTM2NSw4ICszNjUsNiBAQAogICAg
IDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcRGF0YUdyaWQuanMiIC8+CiAgICAgPE5v
bmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxEZWJ1Z2dlck1hbmFnZXIuanMiIC8+CiAgICAg
PE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxEZWJ1Z2dlck9ic2VydmVyLmpzIiAvPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcRGVidWdnZXJTaWRlYmFyUGFuZWwu
Y3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcRGVidWdnZXJTaWRl
YmFyUGFuZWwuanMiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxEZXRh
aWxzU2VjdGlvbi5jc3MiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxE
ZXRhaWxzU2VjdGlvbi5qcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNl
XERldGFpbHNTZWN0aW9uRGF0YUdyaWRSb3cuanMiIC8+CkBAIC03MjUsOCArNzIzLDYgQEAKICAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXFJlc291cmNlQ29udGVudFZpZXcuanMi
IC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxSZXNvdXJjZURldGFpbHNT
aWRlYmFyUGFuZWwuanMiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxS
ZXNvdXJjZUljb25zLmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNl
XFJlc291cmNlU2lkZWJhclBhbmVsLmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2Vy
SW50ZXJmYWNlXFJlc291cmNlU2lkZWJhclBhbmVsLmpzIiAvPgogICAgIDxOb25lIEluY2x1ZGU9
Ii4uXFVzZXJJbnRlcmZhY2VcUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5qcyIgLz4KICAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXFJlc291cmNlVGltZWxpbmVEYXRhR3Jp
ZE5vZGVQYXRoQ29tcG9uZW50LmpzIiAvPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRl
cmZhY2VcUmVzb3VyY2VUaW1lbGluZVJlY29yZC5qcyIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHBy
b2ouZmlsdGVycyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS52Y3hwcm9q
L1dlYkluc3BlY3RvclVJLnZjeHByb2ouZmlsdGVycwppbmRleCA4ZDgzMTE0MDRhYi4uZjhhMDdk
M2FkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS52
Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvV2ViSW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qLmZp
bHRlcnMKQEAgLTM0NSwxMiArMzQ1LDYgQEAKICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50
ZXJmYWNlXERlYnVnZ2VyT2JzZXJ2ZXIuanMiPgogICAgICAgPEZpbHRlcj5Vc2VySW50ZXJmYWNl
PC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZh
Y2VcRGVidWdnZXJTaWRlYmFyUGFuZWwuY3NzIj4KLSAgICAgIDxGaWx0ZXI+VXNlckludGVyZmFj
ZTwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJm
YWNlXERlYnVnZ2VyU2lkZWJhclBhbmVsLmpzIj4KLSAgICAgIDxGaWx0ZXI+VXNlckludGVyZmFj
ZTwvRmlsdGVyPgotICAgIDwvTm9uZT4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJm
YWNlXERldGFpbHNTZWN0aW9uLmNzcyI+CiAgICAgICA8RmlsdGVyPlVzZXJJbnRlcmZhY2U8L0Zp
bHRlcj4KICAgICA8L05vbmU+CkBAIC03ODksMTIgKzc4Myw2IEBACiAgICAgPE5vbmUgSW5jbHVk
ZT0iLi5cVXNlckludGVyZmFjZVxSZXNvdXJjZUljb25zLmNzcyI+CiAgICAgICA8RmlsdGVyPlVz
ZXJJbnRlcmZhY2U8L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
VXNlckludGVyZmFjZVxSZXNvdXJjZVNpZGViYXJQYW5lbC5jc3MiPgotICAgICAgPEZpbHRlcj5V
c2VySW50ZXJmYWNlPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XFVzZXJJbnRlcmZhY2VcUmVzb3VyY2VTaWRlYmFyUGFuZWwuanMiPgotICAgICAgPEZpbHRlcj5V
c2VySW50ZXJmYWNlPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgogICAgIDxOb25lIEluY2x1ZGU9Ii4u
XFVzZXJJbnRlcmZhY2VcUmVzb3VyY2VUaW1lbGluZURhdGFHcmlkTm9kZS5qcyI+CiAgICAgICA8
RmlsdGVyPlVzZXJJbnRlcmZhY2U8L0ZpbHRlcj4KICAgICA8L05vbmU+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>