<?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>196795</bug_id>
          
          <creation_ts>2019-04-10 17:03:46 -0700</creation_ts>
          <short_desc>Web Inspector: replace all uses of `this` with `WI` in Main.js/Test.js</short_desc>
          <delta_ts>2019-04-15 10:25:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="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>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1526222</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-04-10 17:03:46 -0700</bug_when>
    <thetext>It makes it so much harder to search for specific variables/functions when they are used as `this.*` in Main.js/Test.js and `WI.*` everywhere else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526224</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-10 17:06:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/49796618&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527070</commentid>
    <comment_count>2</comment_count>
      <attachid>367393</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-04-13 14:55:03 -0700</bug_when>
    <thetext>Created attachment 367393
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527218</commentid>
    <comment_count>3</comment_count>
      <attachid>367393</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-15 10:25:00 -0700</bug_when>
    <thetext>Comment on attachment 367393
Patch

Clearing flags on attachment: 367393

Committed r244266: &lt;https://trac.webkit.org/changeset/244266&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527219</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-15 10:25:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367393</attachid>
            <date>2019-04-13 14:55:03 -0700</date>
            <delta_ts>2019-04-15 10:25:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196795-20190413145502.patch</filename>
            <type>text/plain</type>
            <size>109982</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDkzODM1NTE2MTc2MDYwMzQxODYzMWUzNDNlZjc5
ODI1M2FmOGQzMjQuLjljNzUzYmM1ODM4MDE0MGJiZWJlYTBiZGM0YjE1NjU2NDNiM2RlZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE5LTA0LTEzICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBy
ZXBsYWNlIGFsbCB1c2VzIG9mIGB0aGlzYCB3aXRoIGBXSWAgaW4gTWFpbi5qcy9UZXN0LmpzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY3OTUKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ5Nzk2NjE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL01haW4uanM6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9UZXN0L1Rlc3QuanM6CisKIDIwMTktMDQtMTEgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJF
R1JFU1NJT04ocjI0NDE5NSk6IFRpbWVsaW5lczogdW5hYmxlIHRvIHRha2UgaGVhcCBzbmFwc2hv
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9N
YWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpz
CmluZGV4IDdiYTQ2N2EwMDdmZjI4N2VlNzkyNDA0NDNkZjk3OTcyMGY4YTY0ZGQuLjExYzc2ZGQw
NzA1M2E5ZmQwOTA2NTY2NTIwZjRiYTY4MzI3ZTkxZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTk0LDcgKzk0LDcgQEAgV0ku
bG9hZGVkID0gZnVuY3Rpb24oKQogCiAgICAgLy8gTGlzdGVuIGZvciB0aGUgUHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCBldmVudCBiZWZvcmUgcmVnaXN0ZXJpbmcgZm9yIGV2ZW50cyBzbyBvdXIgY29k
ZSBnZXRzIGNhbGxlZCBiZWZvcmUgYW55IG1hbmFnZXJzIG9yIHNpZGViYXJzLgogICAgIC8vIFRo
aXMgbGV0cyB1cyBzYXZlIGEgc3RhdGUgY29va2llIGJlZm9yZSBhbnkgbWFuYWdlcnMgb3Igc2lk
ZWJhcnMgZG8gYW55IHJlc2V0cyB0aGF0IHdvdWxkIGFmZmVjdCBzdGF0ZSAobmFtZWx5IFRpbWVs
aW5lTWFuYWdlcikuCi0gICAgV0kuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXSS5GcmFtZS5FdmVu
dC5Qcm92aXNpb25hbExvYWRTdGFydGVkLCB0aGlzLl9wcm92aXNpb25hbExvYWRTdGFydGVkLCB0
aGlzKTsKKyAgICBXSS5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdJLkZyYW1lLkV2ZW50LlByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQsIFdJLl9wcm92aXNpb25hbExvYWRTdGFydGVkLCk7CiAKICAgICAv
LyBQb3B1bGF0ZSBhbnkgVUlTdHJpbmdzIHRoYXQgbXVzdCBiZSBkb25lIGVhcmx5IGFmdGVyIGxv
Y2FsaXplZCBzdHJpbmdzIGhhdmUgbG9hZGVkLgogICAgIFdJLktleWJvYXJkU2hvcnRjdXQuS2V5
LlNwYWNlLl9kaXNwbGF5TmFtZSA9IFdJLlVJU3RyaW5nKCJTcGFjZSIpOwpAQCAtMTI1LDIyICsx
MjUsMjIgQEAgV0kubG9hZGVkID0gZnVuY3Rpb24oKQogICAgIF07CiAKICAgICAvLyBSZWdpc3Rl
ciBmb3IgZXZlbnRzLgotICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJ
LkRlYnVnZ2VyTWFuYWdlci5FdmVudC5QYXVzZWQsIHRoaXMuX2RlYnVnZ2VyRGlkUGF1c2UsIHRo
aXMpOwotICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRlYnVnZ2Vy
TWFuYWdlci5FdmVudC5SZXN1bWVkLCB0aGlzLl9kZWJ1Z2dlckRpZFJlc3VtZSwgdGhpcyk7Ci0g
ICAgV0kuZG9tTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRPTU1hbmFnZXIuRXZlbnQuSW5z
cGVjdE1vZGVTdGF0ZUNoYW5nZWQsIHRoaXMuX2luc3BlY3RNb2RlU3RhdGVDaGFuZ2VkLCB0aGlz
KTsKLSAgICBXSS5kb21NYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuRE9NTWFuYWdlci5FdmVu
dC5ET01Ob2RlV2FzSW5zcGVjdGVkLCB0aGlzLl9kb21Ob2RlV2FzSW5zcGVjdGVkLCB0aGlzKTsK
LSAgICBXSS5kb21TdG9yYWdlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRPTVN0b3JhZ2VN
YW5hZ2VyLkV2ZW50LkRPTVN0b3JhZ2VPYmplY3RXYXNJbnNwZWN0ZWQsIHRoaXMuX2RvbVN0b3Jh
Z2VXYXNJbnNwZWN0ZWQsIHRoaXMpOwotICAgIFdJLmRhdGFiYXNlTWFuYWdlci5hZGRFdmVudExp
c3RlbmVyKFdJLkRhdGFiYXNlTWFuYWdlci5FdmVudC5EYXRhYmFzZVdhc0luc3BlY3RlZCwgdGhp
cy5fZGF0YWJhc2VXYXNJbnNwZWN0ZWQsIHRoaXMpOwotICAgIFdJLm5ldHdvcmtNYW5hZ2VyLmFk
ZEV2ZW50TGlzdGVuZXIoV0kuTmV0d29ya01hbmFnZXIuRXZlbnQuTWFpbkZyYW1lRGlkQ2hhbmdl
LCB0aGlzLl9tYWluRnJhbWVEaWRDaGFuZ2UsIHRoaXMpOwotICAgIFdJLm5ldHdvcmtNYW5hZ2Vy
LmFkZEV2ZW50TGlzdGVuZXIoV0kuTmV0d29ya01hbmFnZXIuRXZlbnQuRnJhbWVXYXNBZGRlZCwg
dGhpcy5fZnJhbWVXYXNBZGRlZCwgdGhpcyk7CisgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2
ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlBhdXNlZCwgV0kuX2RlYnVnZ2Vy
RGlkUGF1c2UpOworICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRl
YnVnZ2VyTWFuYWdlci5FdmVudC5SZXN1bWVkLCBXSS5fZGVidWdnZXJEaWRSZXN1bWUpOworICAg
IFdJLmRvbU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5ET01NYW5hZ2VyLkV2ZW50Lkluc3Bl
Y3RNb2RlU3RhdGVDaGFuZ2VkLCBXSS5faW5zcGVjdE1vZGVTdGF0ZUNoYW5nZWQpOworICAgIFdJ
LmRvbU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5ET01NYW5hZ2VyLkV2ZW50LkRPTU5vZGVX
YXNJbnNwZWN0ZWQsIFdJLl9kb21Ob2RlV2FzSW5zcGVjdGVkKTsKKyAgICBXSS5kb21TdG9yYWdl
TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRPTVN0b3JhZ2VNYW5hZ2VyLkV2ZW50LkRPTVN0
b3JhZ2VPYmplY3RXYXNJbnNwZWN0ZWQsIFdJLl9kb21TdG9yYWdlV2FzSW5zcGVjdGVkKTsKKyAg
ICBXSS5kYXRhYmFzZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5EYXRhYmFzZU1hbmFnZXIu
RXZlbnQuRGF0YWJhc2VXYXNJbnNwZWN0ZWQsIFdJLl9kYXRhYmFzZVdhc0luc3BlY3RlZCk7Cisg
ICAgV0kubmV0d29ya01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5OZXR3b3JrTWFuYWdlci5F
dmVudC5NYWluRnJhbWVEaWRDaGFuZ2UsIFdJLl9tYWluRnJhbWVEaWRDaGFuZ2UpOworICAgIFdJ
Lm5ldHdvcmtNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuTmV0d29ya01hbmFnZXIuRXZlbnQu
RnJhbWVXYXNBZGRlZCwgV0kuX2ZyYW1lV2FzQWRkZWQpOwogCi0gICAgV0kuRnJhbWUuYWRkRXZl
bnRMaXN0ZW5lcihXSS5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21h
aW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7CisgICAgV0kuRnJhbWUuYWRkRXZlbnRMaXN0ZW5l
cihXSS5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIFdJLl9tYWluUmVzb3VyY2VE
aWRDaGFuZ2UpOwogCi0gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExv
YWRlZCIsIHRoaXMuY29udGVudExvYWRlZC5iaW5kKHRoaXMpKTsKKyAgICBkb2N1bWVudC5hZGRF
dmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgV0kuY29udGVudExvYWRlZCk7CiAKICAg
ICAvLyBDcmVhdGUgc2V0dGluZ3MuCi0gICAgdGhpcy5fc2hvd2luZ1NwbGl0Q29uc29sZVNldHRp
bmcgPSBuZXcgV0kuU2V0dGluZygic2hvd2luZy1zcGxpdC1jb25zb2xlIiwgZmFsc2UpOwotICAg
IHRoaXMuX29wZW5UYWJzU2V0dGluZyA9IG5ldyBXSS5TZXR0aW5nKCJvcGVuLXRhYi10eXBlcyIs
IFsKKyAgICBXSS5fc2hvd2luZ1NwbGl0Q29uc29sZVNldHRpbmcgPSBuZXcgV0kuU2V0dGluZygi
c2hvd2luZy1zcGxpdC1jb25zb2xlIiwgZmFsc2UpOworICAgIFdJLl9vcGVuVGFic1NldHRpbmcg
PSBuZXcgV0kuU2V0dGluZygib3Blbi10YWItdHlwZXMiLCBbCiAgICAgICAgIFdJLkVsZW1lbnRz
VGFiQ29udGVudFZpZXcuVHlwZSwKICAgICAgICAgV0kuTmV0d29ya1RhYkNvbnRlbnRWaWV3LlR5
cGUsCiAgICAgICAgIFdJLkRlYnVnZ2VyVGFiQ29udGVudFZpZXcuVHlwZSwKQEAgLTE1MSwxNiAr
MTUxLDE2IEBAIFdJLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgV0kuQXVkaXRUYWJDb250
ZW50Vmlldy5UeXBlLAogICAgICAgICBXSS5Db25zb2xlVGFiQ29udGVudFZpZXcuVHlwZSwKICAg
ICBdKTsKLSAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4U2V0dGluZyA9IG5ldyBXSS5TZXR0aW5n
KCJzZWxlY3RlZC10YWItaW5kZXgiLCAwKTsKKyAgICBXSS5fc2VsZWN0ZWRUYWJJbmRleFNldHRp
bmcgPSBuZXcgV0kuU2V0dGluZygic2VsZWN0ZWQtdGFiLWluZGV4IiwgMCk7CiAKICAgICAvLyBT
dGF0ZS4KLSAgICB0aGlzLnByaW50U3R5bGVzRW5hYmxlZCA9IGZhbHNlOwotICAgIHRoaXMuc2V0
Wm9vbUZhY3RvcihXSS5zZXR0aW5ncy56b29tRmFjdG9yLnZhbHVlKTsKLSAgICB0aGlzLm1vdXNl
Q29vcmRzID0ge3g6IDAsIHk6IDB9OwotICAgIHRoaXMubW9kaWZpZXJLZXlzID0ge2FsdEtleTog
ZmFsc2UsIG1ldGFLZXk6IGZhbHNlLCBzaGlmdEtleTogZmFsc2V9OwotICAgIHRoaXMudmlzaWJs
ZSA9IGZhbHNlOwotICAgIHRoaXMuX3dpbmRvd0tleWRvd25MaXN0ZW5lcnMgPSBbXTsKLSAgICB0
aGlzLl90YXJnZXRzQXZhaWxhYmxlUHJvbWlzZSA9IG5ldyBXSS5XcmFwcGVkUHJvbWlzZTsKKyAg
ICBXSS5wcmludFN0eWxlc0VuYWJsZWQgPSBmYWxzZTsKKyAgICBXSS5zZXRab29tRmFjdG9yKFdJ
LnNldHRpbmdzLnpvb21GYWN0b3IudmFsdWUpOworICAgIFdJLm1vdXNlQ29vcmRzID0ge3g6IDAs
IHk6IDB9OworICAgIFdJLm1vZGlmaWVyS2V5cyA9IHthbHRLZXk6IGZhbHNlLCBtZXRhS2V5OiBm
YWxzZSwgc2hpZnRLZXk6IGZhbHNlfTsKKyAgICBXSS52aXNpYmxlID0gZmFsc2U7CisgICAgV0ku
X3dpbmRvd0tleWRvd25MaXN0ZW5lcnMgPSBbXTsKKyAgICBXSS5fdGFyZ2V0c0F2YWlsYWJsZVBy
b21pc2UgPSBuZXcgV0kuV3JhcHBlZFByb21pc2U7CiAgICAgV0kuX292ZXJyaWRlbkRldmljZVVz
ZXJBZ2VudCA9IG51bGw7CiAgICAgV0kuX292ZXJyaWRlbkRldmljZVNldHRpbmdzID0gbmV3IE1h
cDsKIApAQCAtMTg4LDcgKzE4OCw3IEBAIFdJLmluaXRpYWxpemVCYWNrZW5kVGFyZ2V0ID0gZnVu
Y3Rpb24odGFyZ2V0KQogCiAgICAgV0kucmVzZXRNYWluRXhlY3V0aW9uQ29udGV4dCgpOwogCi0g
ICAgdGhpcy5fdGFyZ2V0c0F2YWlsYWJsZVByb21pc2UucmVzb2x2ZSgpOworICAgIFdJLl90YXJn
ZXRzQXZhaWxhYmxlUHJvbWlzZS5yZXNvbHZlKCk7CiB9OwogCiBXSS5pbml0aWFsaXplUGFnZVRh
cmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKQEAgLTIxNiw3ICsyMTYsNyBAQCBXSS50cmFuc2l0aW9u
UGFnZVRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKICAgICBXSS5yZXNldE1haW5FeGVjdXRpb25D
b250ZXh0KCk7CiAKICAgICAvLyBBY3Rpb25zIHRvIHRyYW5zaXRpb24gdGhlIHBhZ2UgdGFyZ2V0
LgotICAgIHRoaXMubm90aWZpY2F0aW9ucy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuTm90
aWZpY2F0aW9uLlRyYW5zaXRpb25QYWdlVGFyZ2V0KTsKKyAgICBXSS5ub3RpZmljYXRpb25zLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXSS5Ob3RpZmljYXRpb24uVHJhbnNpdGlvblBhZ2VUYXJn
ZXQpOwogICAgIFdJLmRvbU1hbmFnZXIudHJhbnNpdGlvblBhZ2VUYXJnZXQoKTsKICAgICBXSS5u
ZXR3b3JrTWFuYWdlci50cmFuc2l0aW9uUGFnZVRhcmdldCgpOwogICAgIFdJLnRpbWVsaW5lTWFu
YWdlci50cmFuc2l0aW9uUGFnZVRhcmdldCgpOwpAQCAtMjY3LDIyICsyNjcsMjIgQEAgV0kuY29u
dGVudExvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmVnaXN0
ZXIgZm9yIGdsb2JhbCBldmVudHMuCi0gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmVm
b3JlY29weSIsIHRoaXMuX2JlZm9yZWNvcHkuYmluZCh0aGlzKSk7Ci0gICAgZG9jdW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY29weSIsIHRoaXMuX2NvcHkuYmluZCh0aGlzKSk7CisgICAgZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlY29weSIsIFdJLl9iZWZvcmVjb3B5KTsKKyAgICBk
b2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjb3B5IiwgV0kuX2NvcHkpOwogCi0gICAgZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9tb3VzZVdhc0NsaWNrZWQuYmluZCh0
aGlzKSk7Ci0gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCB0aGlzLl9k
cmFnT3Zlci5iaW5kKHRoaXMpKTsKLSAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1
cyIsIFdJLl9mb2N1c0NoYW5nZWQuYmluZCh0aGlzKSwgdHJ1ZSk7CisgICAgZG9jdW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCBXSS5fbW91c2VXYXNDbGlja2VkKTsKKyAgICBkb2N1bWVu
dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIFdJLl9kcmFnT3Zlcik7CisgICAgZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCBXSS5fZm9jdXNDaGFuZ2VkLCB0cnVlKTsKIAot
ICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMuX3dpbmRvd0ZvY3VzZWQu
YmluZCh0aGlzKSk7Ci0gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLl93
aW5kb3dCbHVycmVkLmJpbmQodGhpcykpOwotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJy
ZXNpemUiLCB0aGlzLl93aW5kb3dSZXNpemVkLmJpbmQodGhpcykpOwotICAgIHdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fd2luZG93S2V5RG93bi5iaW5kKHRoaXMpKTsK
LSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCB0aGlzLl93aW5kb3dLZXlVcC5i
aW5kKHRoaXMpKTsKLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhp
cy5fbW91c2VEb3duLmJpbmQodGhpcyksIHRydWUpOwotICAgIHdpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCJtb3VzZW1vdmUiLCB0aGlzLl9tb3VzZU1vdmVkLmJpbmQodGhpcyksIHRydWUpOwotICAg
IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsIHRoaXMuX3BhZ2VIaWRkZW4uYmlu
ZCh0aGlzKSk7Ci0gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhp
cy5fY29udGV4dE1lbnVSZXF1ZXN0ZWQuYmluZCh0aGlzKSk7CisgICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoImZvY3VzIiwgV0kuX3dpbmRvd0ZvY3VzZWQpOworICAgIHdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJibHVyIiwgV0kuX3dpbmRvd0JsdXJyZWQpOworICAgIHdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJyZXNpemUiLCBXSS5fd2luZG93UmVzaXplZCk7CisgICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoImtleWRvd24iLCBXSS5fd2luZG93S2V5RG93bik7CisgICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgV0kuX3dpbmRvd0tleVVwKTsKKyAgICB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgV0kuX21vdXNlRG93biwgdHJ1ZSk7CisgICAgd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIFdJLl9tb3VzZU1vdmVkLCB0cnVlKTsK
KyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLCBXSS5fcGFnZUhpZGRlbik7
CisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgV0kuX2NvbnRleHRN
ZW51UmVxdWVzdGVkKTsKIAogICAgIC8vIEFkZCBwbGF0Zm9ybSBzdHlsZSBjbGFzc2VzIHNvIHRo
ZSBVSSBjYW4gYmUgdHdlYWtlZCBwZXItcGxhdGZvcm0uCiAgICAgZG9jdW1lbnQuYm9keS5jbGFz
c0xpc3QuYWRkKFdJLlBsYXRmb3JtLm5hbWUgKyAiLXBsYXRmb3JtIik7CkBAIC0yOTksMTEgKzI5
OSwxMSBAQCBXSS5jb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQogICAgIH0KIAogICAgIGRvY3Vt
ZW50LmJvZHkuY2xhc3NMaXN0LmFkZChXSS5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUpOwotICAg
IGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJkaXIiLCB0aGlzLnJlc29sdmVkTGF5b3V0RGly
ZWN0aW9uKCkpOworICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJkaXIiLCBXSS5yZXNv
bHZlZExheW91dERpcmVjdGlvbigpKTsKIAotICAgIFdJLnNldHRpbmdzLnNob3dKYXZhU2NyaXB0
VHlwZUluZm9ybWF0aW9uLmFkZEV2ZW50TGlzdGVuZXIoV0kuU2V0dGluZy5FdmVudC5DaGFuZ2Vk
LCB0aGlzLl9zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmdDaGFuZ2VkLCB0aGlz
KTsKLSAgICBXSS5zZXR0aW5ncy5lbmFibGVDb250cm9sRmxvd1Byb2ZpbGVyLmFkZEV2ZW50TGlz
dGVuZXIoV0kuU2V0dGluZy5FdmVudC5DaGFuZ2VkLCB0aGlzLl9lbmFibGVDb250cm9sRmxvd1By
b2ZpbGVyU2V0dGluZ0NoYW5nZWQsIHRoaXMpOwotICAgIFdJLnNldHRpbmdzLnJlc291cmNlQ2Fj
aGluZ0Rpc2FibGVkLmFkZEV2ZW50TGlzdGVuZXIoV0kuU2V0dGluZy5FdmVudC5DaGFuZ2VkLCB0
aGlzLl9yZXNvdXJjZUNhY2hpbmdEaXNhYmxlZFNldHRpbmdDaGFuZ2VkLCB0aGlzKTsKKyAgICBX
SS5zZXR0aW5ncy5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbi5hZGRFdmVudExpc3RlbmVy
KFdJLlNldHRpbmcuRXZlbnQuQ2hhbmdlZCwgV0kuX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0
aW9uU2V0dGluZ0NoYW5nZWQpOworICAgIFdJLnNldHRpbmdzLmVuYWJsZUNvbnRyb2xGbG93UHJv
ZmlsZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5TZXR0aW5nLkV2ZW50LkNoYW5nZWQsIFdJLl9lbmFi
bGVDb250cm9sRmxvd1Byb2ZpbGVyU2V0dGluZ0NoYW5nZWQpOworICAgIFdJLnNldHRpbmdzLnJl
c291cmNlQ2FjaGluZ0Rpc2FibGVkLmFkZEV2ZW50TGlzdGVuZXIoV0kuU2V0dGluZy5FdmVudC5D
aGFuZ2VkLCBXSS5fcmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRTZXR0aW5nQ2hhbmdlZCk7CiAKICAg
ICBmdW5jdGlvbiBzZXRUYWJTaXplKCkgewogICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnRh
YlNpemUgPSBXSS5zZXR0aW5ncy50YWJTaXplLnZhbHVlOwpAQCAtMzIzLDE5MiArMzIzLDE5MiBA
QCBXSS5jb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQogICAgIFdJLnNldHRpbmdzLnNob3dXaGl0
ZXNwYWNlQ2hhcmFjdGVycy5hZGRFdmVudExpc3RlbmVyKFdJLlNldHRpbmcuRXZlbnQuQ2hhbmdl
ZCwgc2V0V2hpdGVzcGFjZUNoYXJhY3RlckNsYXNzTmFtZSk7CiAgICAgc2V0V2hpdGVzcGFjZUNo
YXJhY3RlckNsYXNzTmFtZSgpOwogCi0gICAgdGhpcy5zZXR0aW5nc1RhYkNvbnRlbnRWaWV3ID0g
bmV3IFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXc7CisgICAgV0kuc2V0dGluZ3NUYWJDb250ZW50
VmlldyA9IG5ldyBXSS5TZXR0aW5nc1RhYkNvbnRlbnRWaWV3OwogCi0gICAgdGhpcy5fc2V0dGlu
Z3NLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRT
aG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCBXSS5LZXlib2FyZFNob3J0Y3V0Lktl
eS5Db21tYSwgdGhpcy5fc2hvd1NldHRpbmdzVGFiLmJpbmQodGhpcykpOworICAgIFdJLl9zZXR0
aW5nc0tleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2Fy
ZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wsIFdJLktleWJvYXJkU2hvcnRjdXQu
S2V5LkNvbW1hLCBXSS5fc2hvd1NldHRpbmdzVGFiKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgdXNl
ciBpbnRlcmZhY2UgZWxlbWVudHMuCi0gICAgdGhpcy50b29sYmFyID0gbmV3IFdJLlRvb2xiYXIo
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRvb2xiYXIiKSk7CisgICAgV0kudG9vbGJhciA9IG5l
dyBXSS5Ub29sYmFyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b29sYmFyIikpOwogCiAgICAg
aWYgKFdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZU5ld1RhYkJhci52YWx1ZSkKLSAgICAg
ICAgdGhpcy50YWJCYXIgPSBuZXcgV0kuVGFiQmFyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
YWItYmFyIikpOworICAgICAgICBXSS50YWJCYXIgPSBuZXcgV0kuVGFiQmFyKGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0YWItYmFyIikpOwogICAgIGVsc2UgewotICAgICAgICB0aGlzLnRhYkJh
ciA9IG5ldyBXSS5MZWdhY3lUYWJCYXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhYi1iYXIi
KSk7Ci0gICAgICAgIHRoaXMudGFiQmFyLmFkZEV2ZW50TGlzdGVuZXIoV0kuVGFiQmFyLkV2ZW50
Lk9wZW5EZWZhdWx0VGFiLCB0aGlzLl9vcGVuRGVmYXVsdFRhYiwgdGhpcyk7CisgICAgICAgIFdJ
LnRhYkJhciA9IG5ldyBXSS5MZWdhY3lUYWJCYXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRh
Yi1iYXIiKSk7CisgICAgICAgIFdJLnRhYkJhci5hZGRFdmVudExpc3RlbmVyKFdJLlRhYkJhci5F
dmVudC5PcGVuRGVmYXVsdFRhYiwgV0kuX29wZW5EZWZhdWx0VGFiKTsKICAgICB9CiAKLSAgICB0
aGlzLl9jb250ZW50RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iik7
Ci0gICAgdGhpcy5fY29udGVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCJyb2xlIiwgIm1haW4iKTsK
LSAgICB0aGlzLl9jb250ZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCBXSS5V
SVN0cmluZygiQ29udGVudCIpKTsKKyAgICBXSS5fY29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY29udGVudCIpOworICAgIFdJLl9jb250ZW50RWxlbWVudC5zZXRBdHRy
aWJ1dGUoInJvbGUiLCAibWFpbiIpOworICAgIFdJLl9jb250ZW50RWxlbWVudC5zZXRBdHRyaWJ1
dGUoImFyaWEtbGFiZWwiLCBXSS5VSVN0cmluZygiQ29udGVudCIpKTsKIAotICAgIHRoaXMuY2xl
YXJLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRT
aG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCAiSyIsIHRoaXMuX2NsZWFyLmJpbmQo
dGhpcykpOworICAgIFdJLmNsZWFyS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNo
b3J0Y3V0KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIksi
LCBXSS5fY2xlYXIpOwogCiAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNTEz
MTA+IFdlYiBJbnNwZWN0b3I6IENvbW1hbmQtRSBzaG91bGQgcHJvcGFnYXRlIHRvIG90aGVyIHNl
YXJjaCBmaWVsZHMgKGluY2x1ZGluZyB0aGUgc3lzdGVtKQotICAgIHRoaXMucG9wdWxhdGVGaW5k
S2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0KFdJLktleWJvYXJkU2hv
cnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkUiLCB0aGlzLl9wb3B1bGF0ZUZpbmQu
YmluZCh0aGlzKSk7Ci0gICAgdGhpcy5wb3B1bGF0ZUZpbmRLZXlib2FyZFNob3J0Y3V0LmltcGxp
Y2l0bHlQcmV2ZW50c0RlZmF1bHQgPSBmYWxzZTsKLSAgICB0aGlzLmZpbmROZXh0S2V5Ym9hcmRT
aG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0KFdJLktleWJvYXJkU2hvcnRjdXQuTW9k
aWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkciLCB0aGlzLl9maW5kTmV4dC5iaW5kKHRoaXMpKTsK
LSAgICB0aGlzLmZpbmRQcmV2aW91c0tleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRT
aG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLlNoaWZ0IHwgV0kuS2V5Ym9hcmRT
aG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCAiRyIsIHRoaXMuX2ZpbmRQcmV2aW91
cy5iaW5kKHRoaXMpKTsKKyAgICBXSS5wb3B1bGF0ZUZpbmRLZXlib2FyZFNob3J0Y3V0ID0gbmV3
IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5k
T3JDb250cm9sLCAiRSIsIFdJLl9wb3B1bGF0ZUZpbmQpOworICAgIFdJLnBvcHVsYXRlRmluZEtl
eWJvYXJkU2hvcnRjdXQuaW1wbGljaXRseVByZXZlbnRzRGVmYXVsdCA9IGZhbHNlOworICAgIFdJ
LmZpbmROZXh0S2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0KFdJLktl
eWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkciLCBXSS5fZmluZE5l
eHQpOworICAgIFdJLmZpbmRQcmV2aW91c0tleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9h
cmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLlNoaWZ0IHwgV0kuS2V5Ym9h
cmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCAiRyIsIFdJLl9maW5kUHJldmlv
dXMpOwogCi0gICAgdGhpcy5jb25zb2xlRHJhd2VyID0gbmV3IFdJLkNvbnNvbGVEcmF3ZXIoZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUtZHJhd2VyIikpOwotICAgIHRoaXMuY29uc29s
ZURyYXdlci5hZGRFdmVudExpc3RlbmVyKFdJLkNvbnNvbGVEcmF3ZXIuRXZlbnQuQ29sbGFwc2Vk
U3RhdGVDaGFuZ2VkLCB0aGlzLl9jb25zb2xlRHJhd2VyQ29sbGFwc2VkU3RhdGVEaWRDaGFuZ2Us
IHRoaXMpOwotICAgIHRoaXMuY29uc29sZURyYXdlci5hZGRFdmVudExpc3RlbmVyKFdJLkNvbnNv
bGVEcmF3ZXIuRXZlbnQuUmVzaXplZCwgdGhpcy5fY29uc29sZURyYXdlckRpZFJlc2l6ZSwgdGhp
cyk7CisgICAgV0kuY29uc29sZURyYXdlciA9IG5ldyBXSS5Db25zb2xlRHJhd2VyKGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLWRyYXdlciIpKTsKKyAgICBXSS5jb25zb2xlRHJhd2Vy
LmFkZEV2ZW50TGlzdGVuZXIoV0kuQ29uc29sZURyYXdlci5FdmVudC5Db2xsYXBzZWRTdGF0ZUNo
YW5nZWQsIFdJLl9jb25zb2xlRHJhd2VyQ29sbGFwc2VkU3RhdGVEaWRDaGFuZ2UpOworICAgIFdJ
LmNvbnNvbGVEcmF3ZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5Db25zb2xlRHJhd2VyLkV2ZW50LlJl
c2l6ZWQsIFdJLl9jb25zb2xlRHJhd2VyRGlkUmVzaXplKTsKIAotICAgIHRoaXMucXVpY2tDb25z
b2xlID0gbmV3IFdJLlF1aWNrQ29uc29sZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVpY2st
Y29uc29sZSIpKTsKKyAgICBXSS5xdWlja0NvbnNvbGUgPSBuZXcgV0kuUXVpY2tDb25zb2xlKGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWljay1jb25zb2xlIikpOwogCi0gICAgdGhpcy5fY29u
c29sZVJlcHJlc2VudGVkT2JqZWN0ID0gbmV3IFdJLkxvZ09iamVjdDsKLSAgICB0aGlzLmNvbnNv
bGVDb250ZW50VmlldyA9IHRoaXMuY29uc29sZURyYXdlci5jb250ZW50Vmlld0ZvclJlcHJlc2Vu
dGVkT2JqZWN0KHRoaXMuX2NvbnNvbGVSZXByZXNlbnRlZE9iamVjdCk7Ci0gICAgdGhpcy5jb25z
b2xlTG9nVmlld0NvbnRyb2xsZXIgPSB0aGlzLmNvbnNvbGVDb250ZW50Vmlldy5sb2dWaWV3Q29u
dHJvbGxlcjsKLSAgICB0aGlzLmJyZWFrcG9pbnRQb3BvdmVyQ29udHJvbGxlciA9IG5ldyBXSS5C
cmVha3BvaW50UG9wb3ZlckNvbnRyb2xsZXI7CisgICAgV0kuX2NvbnNvbGVSZXByZXNlbnRlZE9i
amVjdCA9IG5ldyBXSS5Mb2dPYmplY3Q7CisgICAgV0kuY29uc29sZUNvbnRlbnRWaWV3ID0gV0ku
Y29uc29sZURyYXdlci5jb250ZW50Vmlld0ZvclJlcHJlc2VudGVkT2JqZWN0KFdJLl9jb25zb2xl
UmVwcmVzZW50ZWRPYmplY3QpOworICAgIFdJLmNvbnNvbGVMb2dWaWV3Q29udHJvbGxlciA9IFdJ
LmNvbnNvbGVDb250ZW50Vmlldy5sb2dWaWV3Q29udHJvbGxlcjsKKyAgICBXSS5icmVha3BvaW50
UG9wb3ZlckNvbnRyb2xsZXIgPSBuZXcgV0kuQnJlYWtwb2ludFBvcG92ZXJDb250cm9sbGVyOwog
CiAgICAgLy8gRklYTUU6IFRoZSBzaWRlYmFycyBzaG91bGQgYmUgZmxpcHBlZCBpbiBSVEwgbGFu
Z3VhZ2VzLgotICAgIHRoaXMubmF2aWdhdGlvblNpZGViYXIgPSBuZXcgV0kuU2lkZWJhcihkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibmF2aWdhdGlvbi1zaWRlYmFyIiksIFdJLlNpZGViYXIuU2lk
ZXMuTGVmdCk7Ci0gICAgdGhpcy5uYXZpZ2F0aW9uU2lkZWJhci5hZGRFdmVudExpc3RlbmVyKFdJ
LlNpZGViYXIuRXZlbnQuV2lkdGhEaWRDaGFuZ2UsIHRoaXMuX3NpZGViYXJXaWR0aERpZENoYW5n
ZSwgdGhpcyk7CisgICAgV0kubmF2aWdhdGlvblNpZGViYXIgPSBuZXcgV0kuU2lkZWJhcihkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibmF2aWdhdGlvbi1zaWRlYmFyIiksIFdJLlNpZGViYXIuU2lk
ZXMuTGVmdCk7CisgICAgV0kubmF2aWdhdGlvblNpZGViYXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5T
aWRlYmFyLkV2ZW50LldpZHRoRGlkQ2hhbmdlLCBXSS5fc2lkZWJhcldpZHRoRGlkQ2hhbmdlKTsK
IAotICAgIHRoaXMuZGV0YWlsc1NpZGViYXIgPSBuZXcgV0kuU2lkZWJhcihkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiZGV0YWlscy1zaWRlYmFyIiksIFdJLlNpZGViYXIuU2lkZXMuUmlnaHQsIG51
bGwsIG51bGwsIFdJLlVJU3RyaW5nKCJEZXRhaWxzIiksIHRydWUpOwotICAgIHRoaXMuZGV0YWls
c1NpZGViYXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5TaWRlYmFyLkV2ZW50LldpZHRoRGlkQ2hhbmdl
LCB0aGlzLl9zaWRlYmFyV2lkdGhEaWRDaGFuZ2UsIHRoaXMpOworICAgIFdJLmRldGFpbHNTaWRl
YmFyID0gbmV3IFdJLlNpZGViYXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRldGFpbHMtc2lk
ZWJhciIpLCBXSS5TaWRlYmFyLlNpZGVzLlJpZ2h0LCBudWxsLCBudWxsLCBXSS5VSVN0cmluZygi
RGV0YWlscyIpLCB0cnVlKTsKKyAgICBXSS5kZXRhaWxzU2lkZWJhci5hZGRFdmVudExpc3RlbmVy
KFdJLlNpZGViYXIuRXZlbnQuV2lkdGhEaWRDaGFuZ2UsIFdJLl9zaWRlYmFyV2lkdGhEaWRDaGFu
Z2UpOwogCi0gICAgdGhpcy5zZWFyY2hLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJk
U2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sIHwg
V0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5TaGlmdCwgIkYiLCB0aGlzLl9mb2N1c1NlYXJj
aEZpZWxkLmJpbmQodGhpcykpOwotICAgIHRoaXMuX2ZpbmRLZXlib2FyZFNob3J0Y3V0ID0gbmV3
IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5k
T3JDb250cm9sLCAiRiIsIHRoaXMuX2ZpbmQuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5zYXZlS2V5
Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0KFdJLktleWJvYXJkU2hvcnRj
dXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIlMiLCB0aGlzLl9zYXZlLmJpbmQodGhpcykp
OwotICAgIHRoaXMuX3NhdmVBc0tleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9y
dGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLlNoaWZ0IHwgV0kuS2V5Ym9hcmRTaG9y
dGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCAiUyIsIHRoaXMuX3NhdmVBcy5iaW5kKHRo
aXMpKTsKKyAgICBXSS5zZWFyY2hLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hv
cnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sIHwgV0ku
S2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5TaGlmdCwgIkYiLCBXSS5fZm9jdXNTZWFyY2hGaWVs
ZCk7CisgICAgV0kuX2ZpbmRLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hvcnRj
dXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCAiRiIsIFdJ
Ll9maW5kKTsKKyAgICBXSS5zYXZlS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNo
b3J0Y3V0KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIlMi
LCBXSS5fc2F2ZSk7CisgICAgV0kuX3NhdmVBc0tleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5
Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLlNoaWZ0IHwgV0kuS2V5
Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCAiUyIsIFdJLl9zYXZlQXMp
OwogCi0gICAgdGhpcy5vcGVuUmVzb3VyY2VLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJv
YXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9s
IHwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5TaGlmdCwgIk8iLCB0aGlzLl9zaG93T3Bl
blJlc291cmNlRGlhbG9nLmJpbmQodGhpcykpOwotICAgIG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0
KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIlAiLCB0aGlz
Ll9zaG93T3BlblJlc291cmNlRGlhbG9nLmJpbmQodGhpcykpOworICAgIFdJLm9wZW5SZXNvdXJj
ZUtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNo
b3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wgfCBXSS5LZXlib2FyZFNob3J0Y3V0Lk1v
ZGlmaWVyLlNoaWZ0LCAiTyIsIFdJLl9zaG93T3BlblJlc291cmNlRGlhbG9nKTsKKyAgICBuZXcg
V0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRP
ckNvbnRyb2wsICJQIiwgV0kuX3Nob3dPcGVuUmVzb3VyY2VEaWFsb2cpOwogCi0gICAgdGhpcy5u
YXZpZ2F0aW9uU2lkZWJhcktleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1
dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wgfCBXSS5LZXli
b2FyZFNob3J0Y3V0Lk1vZGlmaWVyLlNoaWZ0LCAiMCIsIHRoaXMudG9nZ2xlTmF2aWdhdGlvblNp
ZGViYXIuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5kZXRhaWxzU2lkZWJhcktleWJvYXJkU2hvcnRj
dXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVy
LkNvbW1hbmRPckNvbnRyb2wgfCBXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLk9wdGlvbiwg
IjAiLCB0aGlzLnRvZ2dsZURldGFpbHNTaWRlYmFyLmJpbmQodGhpcykpOworICAgIFdJLm5hdmln
YXRpb25TaWRlYmFyS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0KFdJ
LktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCB8IFdJLktleWJvYXJk
U2hvcnRjdXQuTW9kaWZpZXIuU2hpZnQsICIwIiwgV0kudG9nZ2xlTmF2aWdhdGlvblNpZGViYXIp
OworICAgIFdJLmRldGFpbHNTaWRlYmFyS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2Fy
ZFNob3J0Y3V0KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCB8
IFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuT3B0aW9uLCAiMCIsIFdJLnRvZ2dsZURldGFp
bHNTaWRlYmFyKTsKIAotICAgIGxldCBib3VuZEluY3JlYXNlWm9vbSA9IHRoaXMuX2luY3JlYXNl
Wm9vbS5iaW5kKHRoaXMpOwotICAgIGxldCBib3VuZERlY3JlYXNlWm9vbSA9IHRoaXMuX2RlY3Jl
YXNlWm9vbS5iaW5kKHRoaXMpOwotICAgIHRoaXMuX2luY3JlYXNlWm9vbUtleWJvYXJkU2hvcnRj
dXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVy
LkNvbW1hbmRPckNvbnRyb2wsIFdJLktleWJvYXJkU2hvcnRjdXQuS2V5LlBsdXMsIGJvdW5kSW5j
cmVhc2Vab29tKTsKLSAgICB0aGlzLl9kZWNyZWFzZVpvb21LZXlib2FyZFNob3J0Y3V0ID0gbmV3
IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5k
T3JDb250cm9sLCBXSS5LZXlib2FyZFNob3J0Y3V0LktleS5NaW51cywgYm91bmREZWNyZWFzZVpv
b20pOwotICAgIHRoaXMuX2luY3JlYXNlWm9vbUtleWJvYXJkU2hvcnRjdXQyID0gbmV3IFdJLktl
eWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250
cm9sIHwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5TaGlmdCwgV0kuS2V5Ym9hcmRTaG9y
dGN1dC5LZXkuUGx1cywgYm91bmRJbmNyZWFzZVpvb20pOwotICAgIHRoaXMuX2RlY3JlYXNlWm9v
bUtleWJvYXJkU2hvcnRjdXQyID0gbmV3IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRT
aG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sIHwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5N
b2RpZmllci5TaGlmdCwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5LZXkuTWludXMsIGJvdW5kRGVjcmVh
c2Vab29tKTsKLSAgICB0aGlzLl9yZXNldFpvb21LZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktl
eWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250
cm9sLCAiMCIsIHRoaXMuX3Jlc2V0Wm9vbS5iaW5kKHRoaXMpKTsKKyAgICBsZXQgYm91bmRJbmNy
ZWFzZVpvb20gPSBXSS5faW5jcmVhc2Vab29tOworICAgIGxldCBib3VuZERlY3JlYXNlWm9vbSA9
IFdJLl9kZWNyZWFzZVpvb207CisgICAgV0kuX2luY3JlYXNlWm9vbUtleWJvYXJkU2hvcnRjdXQg
PSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNv
bW1hbmRPckNvbnRyb2wsIFdJLktleWJvYXJkU2hvcnRjdXQuS2V5LlBsdXMsIGJvdW5kSW5jcmVh
c2Vab29tKTsKKyAgICBXSS5fZGVjcmVhc2Vab29tS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5L
ZXlib2FyZFNob3J0Y3V0KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29u
dHJvbCwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5LZXkuTWludXMsIGJvdW5kRGVjcmVhc2Vab29tKTsK
KyAgICBXSS5faW5jcmVhc2Vab29tS2V5Ym9hcmRTaG9ydGN1dDIgPSBuZXcgV0kuS2V5Ym9hcmRT
aG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wgfCBX
SS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLlNoaWZ0LCBXSS5LZXlib2FyZFNob3J0Y3V0Lktl
eS5QbHVzLCBib3VuZEluY3JlYXNlWm9vbSk7CisgICAgV0kuX2RlY3JlYXNlWm9vbUtleWJvYXJk
U2hvcnRjdXQyID0gbmV3IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5N
b2RpZmllci5Db21tYW5kT3JDb250cm9sIHwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5T
aGlmdCwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5LZXkuTWludXMsIGJvdW5kRGVjcmVhc2Vab29tKTsK
KyAgICBXSS5fcmVzZXRab29tS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0
Y3V0KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIjAiLCBX
SS5fcmVzZXRab29tKTsKIAotICAgIHRoaXMuX3Nob3dUYWJBdEluZGV4S2V5Ym9hcmRTaG9ydGN1
dHMgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0ubWFwKChpKSA9PiBuZXcgV0kuS2V5Ym9h
cmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wg
fCBXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLk9wdGlvbiwgYCR7aX1gLCB0aGlzLl9zaG93
VGFiQXRJbmRleC5iaW5kKHRoaXMsIGkpKSk7Ci0gICAgdGhpcy5fb3Blbk5ld1RhYktleWJvYXJk
U2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1v
ZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wgfCBXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLk9w
dGlvbiwgIlQiLCB0aGlzLnNob3dOZXdUYWJUYWIuYmluZCh0aGlzKSk7CisgICAgV0kuX3Nob3dU
YWJBdEluZGV4S2V5Ym9hcmRTaG9ydGN1dHMgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0u
bWFwKChpKSA9PiBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1v
ZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wgfCBXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLk9w
dGlvbiwgYCR7aX1gLCAoZXZlbnQpID0+IHsgV0kuX3Nob3dUYWJBdEluZGV4KGkpOyB9KSk7Cisg
ICAgV0kuX29wZW5OZXdUYWJLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hvcnRj
dXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sIHwgV0kuS2V5
Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5PcHRpb24sICJUIiwgV0kuc2hvd05ld1RhYlRhYik7CiAK
LSAgICB0aGlzLnRhYkJyb3dzZXIgPSBuZXcgV0kuVGFiQnJvd3Nlcihkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgidGFiLWJyb3dzZXIiKSwgdGhpcy50YWJCYXIsIHRoaXMubmF2aWdhdGlvblNpZGVi
YXIsIHRoaXMuZGV0YWlsc1NpZGViYXIpOwotICAgIHRoaXMudGFiQnJvd3Nlci5hZGRFdmVudExp
c3RlbmVyKFdJLlRhYkJyb3dzZXIuRXZlbnQuU2VsZWN0ZWRUYWJDb250ZW50Vmlld0RpZENoYW5n
ZSwgdGhpcy5fdGFiQnJvd3NlclNlbGVjdGVkVGFiQ29udGVudFZpZXdEaWRDaGFuZ2UsIHRoaXMp
OworICAgIFdJLnRhYkJyb3dzZXIgPSBuZXcgV0kuVGFiQnJvd3Nlcihkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgidGFiLWJyb3dzZXIiKSwgV0kudGFiQmFyLCBXSS5uYXZpZ2F0aW9uU2lkZWJhciwg
V0kuZGV0YWlsc1NpZGViYXIpOworICAgIFdJLnRhYkJyb3dzZXIuYWRkRXZlbnRMaXN0ZW5lcihX
SS5UYWJCcm93c2VyLkV2ZW50LlNlbGVjdGVkVGFiQ29udGVudFZpZXdEaWRDaGFuZ2UsIFdJLl90
YWJCcm93c2VyU2VsZWN0ZWRUYWJDb250ZW50Vmlld0RpZENoYW5nZSk7CiAKLSAgICB0aGlzLl9y
ZWxvYWRQYWdlS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0KFdJLktl
eWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIlIiLCB0aGlzLl9yZWxv
YWRQYWdlLmJpbmQodGhpcykpOwotICAgIHRoaXMuX3JlbG9hZFBhZ2VGcm9tT3JpZ2luS2V5Ym9h
cmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0KFdJLktleWJvYXJkU2hvcnRjdXQu
TW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCB8IFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIu
T3B0aW9uLCAiUiIsIHRoaXMuX3JlbG9hZFBhZ2VGcm9tT3JpZ2luLmJpbmQodGhpcykpOwotICAg
IHRoaXMuX3JlbG9hZFBhZ2VLZXlib2FyZFNob3J0Y3V0LmltcGxpY2l0bHlQcmV2ZW50c0RlZmF1
bHQgPSB0aGlzLl9yZWxvYWRQYWdlRnJvbU9yaWdpbktleWJvYXJkU2hvcnRjdXQuaW1wbGljaXRs
eVByZXZlbnRzRGVmYXVsdCA9IGZhbHNlOworICAgIFdJLl9yZWxvYWRQYWdlS2V5Ym9hcmRTaG9y
dGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZp
ZXIuQ29tbWFuZE9yQ29udHJvbCwgIlIiLCBXSS5fcmVsb2FkUGFnZSk7CisgICAgV0kuX3JlbG9h
ZFBhZ2VGcm9tT3JpZ2luS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0
KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCB8IFdJLktleWJv
YXJkU2hvcnRjdXQuTW9kaWZpZXIuT3B0aW9uLCAiUiIsIFdJLl9yZWxvYWRQYWdlRnJvbU9yaWdp
bik7CisgICAgV0kuX3JlbG9hZFBhZ2VLZXlib2FyZFNob3J0Y3V0LmltcGxpY2l0bHlQcmV2ZW50
c0RlZmF1bHQgPSBXSS5fcmVsb2FkUGFnZUZyb21PcmlnaW5LZXlib2FyZFNob3J0Y3V0LmltcGxp
Y2l0bHlQcmV2ZW50c0RlZmF1bHQgPSBmYWxzZTsKIAotICAgIHRoaXMuX2NvbnNvbGVUYWJLZXli
b2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1
dC5Nb2RpZmllci5PcHRpb24gfCBXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRP
ckNvbnRyb2wsICJDIiwgdGhpcy5fc2hvd0NvbnNvbGVUYWIuYmluZCh0aGlzKSk7Ci0gICAgdGhp
cy5fcXVpY2tDb25zb2xlS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0
KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29udHJvbCwgV0kuS2V5Ym9hcmRTaG9ydGN1
dC5LZXkuQXBvc3Ryb3BoZSwgdGhpcy5fZm9jdXNDb25zb2xlUHJvbXB0LmJpbmQodGhpcykpOwor
ICAgIFdJLl9jb25zb2xlVGFiS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0
Y3V0KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuT3B0aW9uIHwgV0kuS2V5Ym9hcmRTaG9y
dGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCAiQyIsIFdJLl9zaG93Q29uc29sZVRhYik7
CisgICAgV0kuX3F1aWNrQ29uc29sZUtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRT
aG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbnRyb2wsIFdJLktleWJvYXJk
U2hvcnRjdXQuS2V5LkFwb3N0cm9waGUsIFdJLl9mb2N1c0NvbnNvbGVQcm9tcHQpOwogCi0gICAg
dGhpcy5faW5zcGVjdE1vZGVLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hvcnRj
dXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sIHwgV0kuS2V5
Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5TaGlmdCwgIkMiLCB0aGlzLl90b2dnbGVJbnNwZWN0TW9k
ZS5iaW5kKHRoaXMpKTsKKyAgICBXSS5faW5zcGVjdE1vZGVLZXlib2FyZFNob3J0Y3V0ID0gbmV3
IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5k
T3JDb250cm9sIHwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5TaGlmdCwgIkMiLCBXSS5f
dG9nZ2xlSW5zcGVjdE1vZGUpOwogCi0gICAgdGhpcy5fdW5kb0tleWJvYXJkU2hvcnRjdXQgPSBu
ZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1h
bmRPckNvbnRyb2wsICJaIiwgdGhpcy5fdW5kb0tleWJvYXJkU2hvcnRjdXQuYmluZCh0aGlzKSk7
Ci0gICAgdGhpcy5fcmVkb0tleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1
dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wgfCBXSS5LZXli
b2FyZFNob3J0Y3V0Lk1vZGlmaWVyLlNoaWZ0LCAiWiIsIHRoaXMuX3JlZG9LZXlib2FyZFNob3J0
Y3V0LmJpbmQodGhpcykpOwotICAgIHRoaXMuX3VuZG9LZXlib2FyZFNob3J0Y3V0LmltcGxpY2l0
bHlQcmV2ZW50c0RlZmF1bHQgPSB0aGlzLl9yZWRvS2V5Ym9hcmRTaG9ydGN1dC5pbXBsaWNpdGx5
UHJldmVudHNEZWZhdWx0ID0gZmFsc2U7CisgICAgV0kuX3VuZG9LZXlib2FyZFNob3J0Y3V0ID0g
bmV3IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21t
YW5kT3JDb250cm9sLCAiWiIsIFdJLl91bmRvS2V5Ym9hcmRTaG9ydGN1dCk7CisgICAgV0kuX3Jl
ZG9LZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRT
aG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sIHwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5N
b2RpZmllci5TaGlmdCwgIloiLCBXSS5fcmVkb0tleWJvYXJkU2hvcnRjdXQpOworICAgIFdJLl91
bmRvS2V5Ym9hcmRTaG9ydGN1dC5pbXBsaWNpdGx5UHJldmVudHNEZWZhdWx0ID0gV0kuX3JlZG9L
ZXlib2FyZFNob3J0Y3V0LmltcGxpY2l0bHlQcmV2ZW50c0RlZmF1bHQgPSBmYWxzZTsKIAotICAg
IHRoaXMudG9nZ2xlQnJlYWtwb2ludHNLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJk
U2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCAi
WSIsIHRoaXMuZGVidWdnZXJUb2dnbGVCcmVha3BvaW50cy5iaW5kKHRoaXMpKTsKLSAgICB0aGlz
LnBhdXNlT3JSZXN1bWVLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hvcnRjdXQo
V0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db250cm9sIHwgV0kuS2V5Ym9hcmRTaG9ydGN1
dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCAiWSIsIHRoaXMuZGVidWdnZXJQYXVzZVJlc3Vt
ZVRvZ2dsZS5iaW5kKHRoaXMpKTsKLSAgICB0aGlzLnN0ZXBPdmVyS2V5Ym9hcmRTaG9ydGN1dCA9
IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0KG51bGwsIFdJLktleWJvYXJkU2hvcnRjdXQuS2V5LkY2
LCB0aGlzLmRlYnVnZ2VyU3RlcE92ZXIuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5zdGVwSW50b0tl
eWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChudWxsLCBXSS5LZXlib2Fy
ZFNob3J0Y3V0LktleS5GNywgdGhpcy5kZWJ1Z2dlclN0ZXBJbnRvLmJpbmQodGhpcykpOwotICAg
IHRoaXMuc3RlcE91dEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChu
dWxsLCBXSS5LZXlib2FyZFNob3J0Y3V0LktleS5GOCwgdGhpcy5kZWJ1Z2dlclN0ZXBPdXQuYmlu
ZCh0aGlzKSk7CisgICAgV0kudG9nZ2xlQnJlYWtwb2ludHNLZXlib2FyZFNob3J0Y3V0ID0gbmV3
IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5k
T3JDb250cm9sLCAiWSIsIFdJLmRlYnVnZ2VyVG9nZ2xlQnJlYWtwb2ludHMpOworICAgIFdJLnBh
dXNlT3JSZXN1bWVLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hvcnRjdXQoV0ku
S2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db250cm9sIHwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5N
b2RpZmllci5Db21tYW5kT3JDb250cm9sLCAiWSIsIFdJLmRlYnVnZ2VyUGF1c2VSZXN1bWVUb2dn
bGUpOworICAgIFdJLnN0ZXBPdmVyS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXSS5LZXlib2FyZFNo
b3J0Y3V0KG51bGwsIFdJLktleWJvYXJkU2hvcnRjdXQuS2V5LkY2LCBXSS5kZWJ1Z2dlclN0ZXBP
dmVyKTsKKyAgICBXSS5zdGVwSW50b0tleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRT
aG9ydGN1dChudWxsLCBXSS5LZXlib2FyZFNob3J0Y3V0LktleS5GNywgV0kuZGVidWdnZXJTdGVw
SW50byk7CisgICAgV0kuc3RlcE91dEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRT
aG9ydGN1dChudWxsLCBXSS5LZXlib2FyZFNob3J0Y3V0LktleS5GOCwgV0kuZGVidWdnZXJTdGVw
T3V0KTsKIAotICAgIHRoaXMucGF1c2VPclJlc3VtZUFsdGVybmF0ZUtleWJvYXJkU2hvcnRjdXQg
PSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNv
bW1hbmRPckNvbnRyb2wsIFdJLktleWJvYXJkU2hvcnRjdXQuS2V5LkJhY2tzbGFzaCwgdGhpcy5k
ZWJ1Z2dlclBhdXNlUmVzdW1lVG9nZ2xlLmJpbmQodGhpcykpOwotICAgIHRoaXMuc3RlcE92ZXJB
bHRlcm5hdGVLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5
Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCBXSS5LZXlib2FyZFNob3J0
Y3V0LktleS5TaW5nbGVRdW90ZSwgdGhpcy5kZWJ1Z2dlclN0ZXBPdmVyLmJpbmQodGhpcykpOwot
ICAgIHRoaXMuc3RlcEludG9BbHRlcm5hdGVLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdJLktleWJv
YXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9s
LCBXSS5LZXlib2FyZFNob3J0Y3V0LktleS5TZW1pY29sb24sIHRoaXMuZGVidWdnZXJTdGVwSW50
by5iaW5kKHRoaXMpKTsKLSAgICB0aGlzLnN0ZXBPdXRBbHRlcm5hdGVLZXlib2FyZFNob3J0Y3V0
ID0gbmV3IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5T
aGlmdCB8IFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgV0ku
S2V5Ym9hcmRTaG9ydGN1dC5LZXkuU2VtaWNvbG9uLCB0aGlzLmRlYnVnZ2VyU3RlcE91dC5iaW5k
KHRoaXMpKTsKKyAgICBXSS5wYXVzZU9yUmVzdW1lQWx0ZXJuYXRlS2V5Ym9hcmRTaG9ydGN1dCA9
IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29t
bWFuZE9yQ29udHJvbCwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5LZXkuQmFja3NsYXNoLCBXSS5kZWJ1
Z2dlclBhdXNlUmVzdW1lVG9nZ2xlKTsKKyAgICBXSS5zdGVwT3ZlckFsdGVybmF0ZUtleWJvYXJk
U2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0Lk1v
ZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wsIFdJLktleWJvYXJkU2hvcnRjdXQuS2V5LlNpbmdsZVF1
b3RlLCBXSS5kZWJ1Z2dlclN0ZXBPdmVyKTsKKyAgICBXSS5zdGVwSW50b0FsdGVybmF0ZUtleWJv
YXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0
Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wsIFdJLktleWJvYXJkU2hvcnRjdXQuS2V5LlNlbWlj
b2xvbiwgV0kuZGVidWdnZXJTdGVwSW50byk7CisgICAgV0kuc3RlcE91dEFsdGVybmF0ZUtleWJv
YXJkU2hvcnRjdXQgPSBuZXcgV0kuS2V5Ym9hcmRTaG9ydGN1dChXSS5LZXlib2FyZFNob3J0Y3V0
Lk1vZGlmaWVyLlNoaWZ0IHwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JD
b250cm9sLCBXSS5LZXlib2FyZFNob3J0Y3V0LktleS5TZW1pY29sb24sIFdJLmRlYnVnZ2VyU3Rl
cE91dCk7CiAKLSAgICB0aGlzLl9jbG9zZVRvb2xiYXJCdXR0b24gPSBuZXcgV0kuQ29udHJvbFRv
b2xiYXJJdGVtKCJkb2NrLWNsb3NlIiwgV0kuVUlTdHJpbmcoIkNsb3NlIiksICJJbWFnZXMvQ2xv
c2Uuc3ZnIiwgMTYsIDE0KTsKLSAgICB0aGlzLl9jbG9zZVRvb2xiYXJCdXR0b24uYWRkRXZlbnRM
aXN0ZW5lcihXSS5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0aGlzLmNsb3Nl
LCB0aGlzKTsKKyAgICBXSS5fY2xvc2VUb29sYmFyQnV0dG9uID0gbmV3IFdJLkNvbnRyb2xUb29s
YmFySXRlbSgiZG9jay1jbG9zZSIsIFdJLlVJU3RyaW5nKCJDbG9zZSIpLCAiSW1hZ2VzL0Nsb3Nl
LnN2ZyIsIDE2LCAxNCk7CisgICAgV0kuX2Nsb3NlVG9vbGJhckJ1dHRvbi5hZGRFdmVudExpc3Rl
bmVyKFdJLkJ1dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIFdJLmNsb3NlKTsKIAot
ICAgIHRoaXMuX3VuZG9ja1Rvb2xiYXJCdXR0b24gPSBuZXcgV0kuQnV0dG9uVG9vbGJhckl0ZW0o
InVuZG9jayIsIFdJLlVJU3RyaW5nKCJEZXRhY2ggaW50byBzZXBhcmF0ZSB3aW5kb3ciKSwgIklt
YWdlcy9VbmRvY2suc3ZnIik7Ci0gICAgdGhpcy5fdW5kb2NrVG9vbGJhckJ1dHRvbi5lbGVtZW50
LmNsYXNzTGlzdC5hZGQoV0kuUG9wb3Zlci5JZ25vcmVBdXRvRGlzbWlzc0NsYXNzTmFtZSk7Ci0g
ICAgdGhpcy5fdW5kb2NrVG9vbGJhckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFdJLkJ1dHRvbk5h
dmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMuX3VuZG9jaywgdGhpcyk7CisgICAgV0ku
X3VuZG9ja1Rvb2xiYXJCdXR0b24gPSBuZXcgV0kuQnV0dG9uVG9vbGJhckl0ZW0oInVuZG9jayIs
IFdJLlVJU3RyaW5nKCJEZXRhY2ggaW50byBzZXBhcmF0ZSB3aW5kb3ciKSwgIkltYWdlcy9VbmRv
Y2suc3ZnIik7CisgICAgV0kuX3VuZG9ja1Rvb2xiYXJCdXR0b24uZWxlbWVudC5jbGFzc0xpc3Qu
YWRkKFdJLlBvcG92ZXIuSWdub3JlQXV0b0Rpc21pc3NDbGFzc05hbWUpOworICAgIFdJLl91bmRv
Y2tUb29sYmFyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoV0kuQnV0dG9uTmF2aWdhdGlvbkl0ZW0u
RXZlbnQuQ2xpY2tlZCwgV0kuX3VuZG9jayk7CiAKICAgICBsZXQgZG9ja0ltYWdlID0gV0kucmVz
b2x2ZWRMYXlvdXREaXJlY3Rpb24oKSA9PT0gV0kuTGF5b3V0RGlyZWN0aW9uLlJUTCA/ICJJbWFn
ZXMvRG9ja0xlZnQuc3ZnIiA6ICJJbWFnZXMvRG9ja1JpZ2h0LnN2ZyI7Ci0gICAgdGhpcy5fZG9j
a1RvU2lkZVRvb2xiYXJCdXR0b24gPSBuZXcgV0kuQnV0dG9uVG9vbGJhckl0ZW0oImRvY2stcmln
aHQiLCBXSS5VSVN0cmluZygiRG9jayB0byBzaWRlIG9mIHdpbmRvdyIpLCBkb2NrSW1hZ2UpOwot
ICAgIHRoaXMuX2RvY2tUb1NpZGVUb29sYmFyQnV0dG9uLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChX
SS5Qb3BvdmVyLklnbm9yZUF1dG9EaXNtaXNzQ2xhc3NOYW1lKTsKKyAgICBXSS5fZG9ja1RvU2lk
ZVRvb2xiYXJCdXR0b24gPSBuZXcgV0kuQnV0dG9uVG9vbGJhckl0ZW0oImRvY2stcmlnaHQiLCBX
SS5VSVN0cmluZygiRG9jayB0byBzaWRlIG9mIHdpbmRvdyIpLCBkb2NrSW1hZ2UpOworICAgIFdJ
Ll9kb2NrVG9TaWRlVG9vbGJhckJ1dHRvbi5lbGVtZW50LmNsYXNzTGlzdC5hZGQoV0kuUG9wb3Zl
ci5JZ25vcmVBdXRvRGlzbWlzc0NsYXNzTmFtZSk7CiAKLSAgICBsZXQgZG9ja1RvU2lkZUNhbGxi
YWNrID0gV0kucmVzb2x2ZWRMYXlvdXREaXJlY3Rpb24oKSA9PT0gV0kuTGF5b3V0RGlyZWN0aW9u
LlJUTCA/IHRoaXMuX2RvY2tMZWZ0IDogdGhpcy5fZG9ja1JpZ2h0OwotICAgIHRoaXMuX2RvY2tU
b1NpZGVUb29sYmFyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoV0kuQnV0dG9uTmF2aWdhdGlvbkl0
ZW0uRXZlbnQuQ2xpY2tlZCwgZG9ja1RvU2lkZUNhbGxiYWNrLCB0aGlzKTsKKyAgICBsZXQgZG9j
a1RvU2lkZUNhbGxiYWNrID0gV0kucmVzb2x2ZWRMYXlvdXREaXJlY3Rpb24oKSA9PT0gV0kuTGF5
b3V0RGlyZWN0aW9uLlJUTCA/IFdJLl9kb2NrTGVmdCA6IFdJLl9kb2NrUmlnaHQ7CisgICAgV0ku
X2RvY2tUb1NpZGVUb29sYmFyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoV0kuQnV0dG9uTmF2aWdh
dGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgZG9ja1RvU2lkZUNhbGxiYWNrKTsKIAotICAgIHRoaXMu
X2RvY2tCb3R0b21Ub29sYmFyQnV0dG9uID0gbmV3IFdJLkJ1dHRvblRvb2xiYXJJdGVtKCJkb2Nr
LWJvdHRvbSIsIFdJLlVJU3RyaW5nKCJEb2NrIHRvIGJvdHRvbSBvZiB3aW5kb3ciKSwgIkltYWdl
cy9Eb2NrQm90dG9tLnN2ZyIpOwotICAgIHRoaXMuX2RvY2tCb3R0b21Ub29sYmFyQnV0dG9uLmVs
ZW1lbnQuY2xhc3NMaXN0LmFkZChXSS5Qb3BvdmVyLklnbm9yZUF1dG9EaXNtaXNzQ2xhc3NOYW1l
KTsKLSAgICB0aGlzLl9kb2NrQm90dG9tVG9vbGJhckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFdJ
LkJ1dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMuX2RvY2tCb3R0b20sIHRo
aXMpOworICAgIFdJLl9kb2NrQm90dG9tVG9vbGJhckJ1dHRvbiA9IG5ldyBXSS5CdXR0b25Ub29s
YmFySXRlbSgiZG9jay1ib3R0b20iLCBXSS5VSVN0cmluZygiRG9jayB0byBib3R0b20gb2Ygd2lu
ZG93IiksICJJbWFnZXMvRG9ja0JvdHRvbS5zdmciKTsKKyAgICBXSS5fZG9ja0JvdHRvbVRvb2xi
YXJCdXR0b24uZWxlbWVudC5jbGFzc0xpc3QuYWRkKFdJLlBvcG92ZXIuSWdub3JlQXV0b0Rpc21p
c3NDbGFzc05hbWUpOworICAgIFdJLl9kb2NrQm90dG9tVG9vbGJhckJ1dHRvbi5hZGRFdmVudExp
c3RlbmVyKFdJLkJ1dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIFdJLl9kb2NrQm90
dG9tKTsKIAotICAgIHRoaXMuX3RvZ2dsZVByZXZpb3VzRG9ja0NvbmZpZ3VyYXRpb25LZXlib2Fy
ZFNob3J0Y3V0ID0gbmV3IFdJLktleWJvYXJkU2hvcnRjdXQoV0kuS2V5Ym9hcmRTaG9ydGN1dC5N
b2RpZmllci5Db21tYW5kT3JDb250cm9sIHwgV0kuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5T
aGlmdCwgIkQiLCB0aGlzLl90b2dnbGVQcmV2aW91c0RvY2tDb25maWd1cmF0aW9uLmJpbmQodGhp
cykpOworICAgIFdJLl90b2dnbGVQcmV2aW91c0RvY2tDb25maWd1cmF0aW9uS2V5Ym9hcmRTaG9y
dGN1dCA9IG5ldyBXSS5LZXlib2FyZFNob3J0Y3V0KFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZp
ZXIuQ29tbWFuZE9yQ29udHJvbCB8IFdJLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuU2hpZnQs
ICJEIiwgV0kuX3RvZ2dsZVByZXZpb3VzRG9ja0NvbmZpZ3VyYXRpb24pOwogCiAgICAgbGV0IHJl
bG9hZFRvb2xUaXA7CiAgICAgaWYgKFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0ku
RGVidWdnYWJsZVR5cGUuSmF2YVNjcmlwdCkKLSAgICAgICAgcmVsb2FkVG9vbFRpcCA9IFdJLlVJ
U3RyaW5nKCJSZXN0YXJ0ICglcykiKS5mb3JtYXQodGhpcy5fcmVsb2FkUGFnZUtleWJvYXJkU2hv
cnRjdXQuZGlzcGxheU5hbWUpOworICAgICAgICByZWxvYWRUb29sVGlwID0gV0kuVUlTdHJpbmco
IlJlc3RhcnQgKCVzKSIpLmZvcm1hdChXSS5fcmVsb2FkUGFnZUtleWJvYXJkU2hvcnRjdXQuZGlz
cGxheU5hbWUpOwogICAgIGVsc2UKLSAgICAgICAgcmVsb2FkVG9vbFRpcCA9IFdJLlVJU3RyaW5n
KCJSZWxvYWQgcGFnZSAoJXMpXG5SZWxvYWQgcGFnZSBpZ25vcmluZyBjYWNoZSAoJXMpIikuZm9y
bWF0KHRoaXMuX3JlbG9hZFBhZ2VLZXlib2FyZFNob3J0Y3V0LmRpc3BsYXlOYW1lLCB0aGlzLl9y
ZWxvYWRQYWdlRnJvbU9yaWdpbktleWJvYXJkU2hvcnRjdXQuZGlzcGxheU5hbWUpOwotICAgIHRo
aXMuX3JlbG9hZFRvb2xiYXJCdXR0b24gPSBuZXcgV0kuQnV0dG9uVG9vbGJhckl0ZW0oInJlbG9h
ZCIsIHJlbG9hZFRvb2xUaXAsICJJbWFnZXMvUmVsb2FkVG9vbGJhci5zdmciKTsKLSAgICB0aGlz
Ll9yZWxvYWRUb29sYmFyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoV0kuQnV0dG9uTmF2aWdhdGlv
bkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhpcy5fcmVsb2FkVG9vbGJhckJ1dHRvbkNsaWNrZWQsIHRo
aXMpOworICAgICAgICByZWxvYWRUb29sVGlwID0gV0kuVUlTdHJpbmcoIlJlbG9hZCBwYWdlICgl
cylcblJlbG9hZCBwYWdlIGlnbm9yaW5nIGNhY2hlICglcykiKS5mb3JtYXQoV0kuX3JlbG9hZFBh
Z2VLZXlib2FyZFNob3J0Y3V0LmRpc3BsYXlOYW1lLCBXSS5fcmVsb2FkUGFnZUZyb21PcmlnaW5L
ZXlib2FyZFNob3J0Y3V0LmRpc3BsYXlOYW1lKTsKKyAgICBXSS5fcmVsb2FkVG9vbGJhckJ1dHRv
biA9IG5ldyBXSS5CdXR0b25Ub29sYmFySXRlbSgicmVsb2FkIiwgcmVsb2FkVG9vbFRpcCwgIklt
YWdlcy9SZWxvYWRUb29sYmFyLnN2ZyIpOworICAgIFdJLl9yZWxvYWRUb29sYmFyQnV0dG9uLmFk
ZEV2ZW50TGlzdGVuZXIoV0kuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgV0ku
X3JlbG9hZFRvb2xiYXJCdXR0b25DbGlja2VkKTsKIAotICAgIHRoaXMuX2Rvd25sb2FkVG9vbGJh
ckJ1dHRvbiA9IG5ldyBXSS5CdXR0b25Ub29sYmFySXRlbSgiZG93bmxvYWQiLCBXSS5VSVN0cmlu
ZygiRG93bmxvYWQgV2ViIEFyY2hpdmUiKSwgIkltYWdlcy9Eb3dubG9hZEFycm93LnN2ZyIpOwot
ICAgIHRoaXMuX2Rvd25sb2FkVG9vbGJhckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFdJLkJ1dHRv
bk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMuX2Rvd25sb2FkV2ViQXJjaGl2ZSwg
dGhpcyk7CisgICAgV0kuX2Rvd25sb2FkVG9vbGJhckJ1dHRvbiA9IG5ldyBXSS5CdXR0b25Ub29s
YmFySXRlbSgiZG93bmxvYWQiLCBXSS5VSVN0cmluZygiRG93bmxvYWQgV2ViIEFyY2hpdmUiKSwg
IkltYWdlcy9Eb3dubG9hZEFycm93LnN2ZyIpOworICAgIFdJLl9kb3dubG9hZFRvb2xiYXJCdXR0
b24uYWRkRXZlbnRMaXN0ZW5lcihXSS5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2Vk
LCBXSS5fZG93bmxvYWRXZWJBcmNoaXZlKTsKIAogICAgIGxldCBlbGVtZW50U2VsZWN0aW9uVG9v
bFRpcCA9IFdJLlVJU3RyaW5nKCJTdGFydCBlbGVtZW50IHNlbGVjdGlvbiAoJXMpIikuZm9ybWF0
KFdJLl9pbnNwZWN0TW9kZUtleWJvYXJkU2hvcnRjdXQuZGlzcGxheU5hbWUpOwogICAgIGxldCBh
Y3RpdmF0ZWRFbGVtZW50U2VsZWN0aW9uVG9vbFRpcCA9IFdJLlVJU3RyaW5nKCJTdG9wIGVsZW1l
bnQgc2VsZWN0aW9uICglcykiKS5mb3JtYXQoV0kuX2luc3BlY3RNb2RlS2V5Ym9hcmRTaG9ydGN1
dC5kaXNwbGF5TmFtZSk7Ci0gICAgdGhpcy5faW5zcGVjdE1vZGVUb29sYmFyQnV0dG9uID0gbmV3
IFdJLkFjdGl2YXRlQnV0dG9uVG9vbGJhckl0ZW0oImluc3BlY3QiLCBlbGVtZW50U2VsZWN0aW9u
VG9vbFRpcCwgYWN0aXZhdGVkRWxlbWVudFNlbGVjdGlvblRvb2xUaXAsICJJbWFnZXMvQ3Jvc3No
YWlyLnN2ZyIpOwotICAgIHRoaXMuX2luc3BlY3RNb2RlVG9vbGJhckJ1dHRvbi5hZGRFdmVudExp
c3RlbmVyKFdJLkJ1dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMuX3RvZ2ds
ZUluc3BlY3RNb2RlLCB0aGlzKTsKKyAgICBXSS5faW5zcGVjdE1vZGVUb29sYmFyQnV0dG9uID0g
bmV3IFdJLkFjdGl2YXRlQnV0dG9uVG9vbGJhckl0ZW0oImluc3BlY3QiLCBlbGVtZW50U2VsZWN0
aW9uVG9vbFRpcCwgYWN0aXZhdGVkRWxlbWVudFNlbGVjdGlvblRvb2xUaXAsICJJbWFnZXMvQ3Jv
c3NoYWlyLnN2ZyIpOworICAgIFdJLl9pbnNwZWN0TW9kZVRvb2xiYXJCdXR0b24uYWRkRXZlbnRM
aXN0ZW5lcihXSS5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCBXSS5fdG9nZ2xl
SW5zcGVjdE1vZGUpOwogCiAgICAgLy8gQ09NUEFUSUJJTElUWSAoaU9TIDEyLjIpOiBQYWdlLm92
ZXJyaWRlU2V0dGluZyBkaWQgbm90IGV4aXN0LgogICAgIGlmIChJbnNwZWN0b3JGcm9udGVuZEhv
c3QuaXNSZW1vdGUgJiYgV0kuc2hhcmVkQXBwLmRlYnVnZ2FibGVUeXBlID09PSBXSS5EZWJ1Z2dh
YmxlVHlwZS5XZWIgJiYgSW5zcGVjdG9yQmFja2VuZC5kb21haW5zLlBhZ2UgJiYgSW5zcGVjdG9y
QmFja2VuZC5kb21haW5zLlBhZ2Uub3ZlcnJpZGVVc2VyQWdlbnQgJiYgSW5zcGVjdG9yQmFja2Vu
ZC5kb21haW5zLlBhZ2Uub3ZlcnJpZGVTZXR0aW5nKSB7CiAgICAgICAgIGNvbnN0IGRldmljZVNl
dHRpbmdzVG9vbHRpcCA9IFdJLlVJU3RyaW5nKCJEZXZpY2UgU2V0dGluZ3MiKTsKICAgICAgICAg
V0kuX2RldmljZVNldHRpbmdzVG9vbGJhckJ1dHRvbiA9IG5ldyBXSS5BY3RpdmF0ZUJ1dHRvblRv
b2xiYXJJdGVtKCJkZXZpY2Utc2V0dGluZ3MiLCBkZXZpY2VTZXR0aW5nc1Rvb2x0aXAsIGRldmlj
ZVNldHRpbmdzVG9vbHRpcCwgIkltYWdlcy9EZXZpY2Uuc3ZnIik7Ci0gICAgICAgIFdJLl9kZXZp
Y2VTZXR0aW5nc1Rvb2xiYXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihXSS5CdXR0b25OYXZpZ2F0
aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0aGlzLl9oYW5kbGVEZXZpY2VTZXR0aW5nc1Rvb2xiYXJC
dXR0b25DbGlja2VkLCB0aGlzKTsKKyAgICAgICAgV0kuX2RldmljZVNldHRpbmdzVG9vbGJhckJ1
dHRvbi5hZGRFdmVudExpc3RlbmVyKFdJLkJ1dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNr
ZWQsIFdJLl9oYW5kbGVEZXZpY2VTZXR0aW5nc1Rvb2xiYXJCdXR0b25DbGlja2VkKTsKIAogICAg
ICAgICBXSS5fZGV2aWNlU2V0dGluZ3NQb3BvdmVyID0gbnVsbDsKICAgICB9CiAKLSAgICB0aGlz
Ll91cGRhdGVSZWxvYWRUb29sYmFyQnV0dG9uKCk7Ci0gICAgdGhpcy5fdXBkYXRlRG93bmxvYWRU
b29sYmFyQnV0dG9uKCk7Ci0gICAgdGhpcy5fdXBkYXRlSW5zcGVjdE1vZGVUb29sYmFyQnV0dG9u
KCk7CisgICAgV0kuX3VwZGF0ZVJlbG9hZFRvb2xiYXJCdXR0b24oKTsKKyAgICBXSS5fdXBkYXRl
RG93bmxvYWRUb29sYmFyQnV0dG9uKCk7CisgICAgV0kuX3VwZGF0ZUluc3BlY3RNb2RlVG9vbGJh
ckJ1dHRvbigpOwogCi0gICAgdGhpcy5fZGFzaGJvYXJkcyA9IHsKKyAgICBXSS5fZGFzaGJvYXJk
cyA9IHsKICAgICAgICAgZGVmYXVsdDogbmV3IFdJLkRlZmF1bHREYXNoYm9hcmQsCiAgICAgICAg
IGRlYnVnZ2VyOiBuZXcgV0kuRGVidWdnZXJEYXNoYm9hcmQsCiAgICAgfTsKIAotICAgIHRoaXMu
X2Rhc2hib2FyZENvbnRhaW5lciA9IG5ldyBXSS5EYXNoYm9hcmRDb250YWluZXJWaWV3OwotICAg
IHRoaXMuX2Rhc2hib2FyZENvbnRhaW5lci5zaG93RGFzaGJvYXJkVmlld0ZvclJlcHJlc2VudGVk
T2JqZWN0KHRoaXMuX2Rhc2hib2FyZHMuZGVmYXVsdCk7CisgICAgV0kuX2Rhc2hib2FyZENvbnRh
aW5lciA9IG5ldyBXSS5EYXNoYm9hcmRDb250YWluZXJWaWV3OworICAgIFdJLl9kYXNoYm9hcmRD
b250YWluZXIuc2hvd0Rhc2hib2FyZFZpZXdGb3JSZXByZXNlbnRlZE9iamVjdChXSS5fZGFzaGJv
YXJkcy5kZWZhdWx0KTsKIAotICAgIHRoaXMudG9vbGJhci5hZGRUb29sYmFySXRlbSh0aGlzLl9j
bG9zZVRvb2xiYXJCdXR0b24sIFdJLlRvb2xiYXIuU2VjdGlvbi5Db250cm9sKTsKKyAgICBXSS50
b29sYmFyLmFkZFRvb2xiYXJJdGVtKFdJLl9jbG9zZVRvb2xiYXJCdXR0b24sIFdJLlRvb2xiYXIu
U2VjdGlvbi5Db250cm9sKTsKIAotICAgIHRoaXMudG9vbGJhci5hZGRUb29sYmFySXRlbSh0aGlz
Ll91bmRvY2tUb29sYmFyQnV0dG9uLCBXSS5Ub29sYmFyLlNlY3Rpb24uTGVmdCk7Ci0gICAgdGhp
cy50b29sYmFyLmFkZFRvb2xiYXJJdGVtKHRoaXMuX2RvY2tUb1NpZGVUb29sYmFyQnV0dG9uLCBX
SS5Ub29sYmFyLlNlY3Rpb24uTGVmdCk7Ci0gICAgdGhpcy50b29sYmFyLmFkZFRvb2xiYXJJdGVt
KHRoaXMuX2RvY2tCb3R0b21Ub29sYmFyQnV0dG9uLCBXSS5Ub29sYmFyLlNlY3Rpb24uTGVmdCk7
CisgICAgV0kudG9vbGJhci5hZGRUb29sYmFySXRlbShXSS5fdW5kb2NrVG9vbGJhckJ1dHRvbiwg
V0kuVG9vbGJhci5TZWN0aW9uLkxlZnQpOworICAgIFdJLnRvb2xiYXIuYWRkVG9vbGJhckl0ZW0o
V0kuX2RvY2tUb1NpZGVUb29sYmFyQnV0dG9uLCBXSS5Ub29sYmFyLlNlY3Rpb24uTGVmdCk7Cisg
ICAgV0kudG9vbGJhci5hZGRUb29sYmFySXRlbShXSS5fZG9ja0JvdHRvbVRvb2xiYXJCdXR0b24s
IFdJLlRvb2xiYXIuU2VjdGlvbi5MZWZ0KTsKIAotICAgIHRoaXMudG9vbGJhci5hZGRUb29sYmFy
SXRlbSh0aGlzLl9yZWxvYWRUb29sYmFyQnV0dG9uLCBXSS5Ub29sYmFyLlNlY3Rpb24uQ2VudGVy
TGVmdCk7Ci0gICAgdGhpcy50b29sYmFyLmFkZFRvb2xiYXJJdGVtKHRoaXMuX2Rvd25sb2FkVG9v
bGJhckJ1dHRvbiwgV0kuVG9vbGJhci5TZWN0aW9uLkNlbnRlckxlZnQpOworICAgIFdJLnRvb2xi
YXIuYWRkVG9vbGJhckl0ZW0oV0kuX3JlbG9hZFRvb2xiYXJCdXR0b24sIFdJLlRvb2xiYXIuU2Vj
dGlvbi5DZW50ZXJMZWZ0KTsKKyAgICBXSS50b29sYmFyLmFkZFRvb2xiYXJJdGVtKFdJLl9kb3du
bG9hZFRvb2xiYXJCdXR0b24sIFdJLlRvb2xiYXIuU2VjdGlvbi5DZW50ZXJMZWZ0KTsKIAotICAg
IHRoaXMudG9vbGJhci5hZGRUb29sYmFySXRlbSh0aGlzLl9kYXNoYm9hcmRDb250YWluZXIudG9v
bGJhckl0ZW0sIFdJLlRvb2xiYXIuU2VjdGlvbi5DZW50ZXIpOworICAgIFdJLnRvb2xiYXIuYWRk
VG9vbGJhckl0ZW0oV0kuX2Rhc2hib2FyZENvbnRhaW5lci50b29sYmFySXRlbSwgV0kuVG9vbGJh
ci5TZWN0aW9uLkNlbnRlcik7CiAKLSAgICB0aGlzLnRvb2xiYXIuYWRkVG9vbGJhckl0ZW0odGhp
cy5faW5zcGVjdE1vZGVUb29sYmFyQnV0dG9uLCBXSS5Ub29sYmFyLlNlY3Rpb24uQ2VudGVyUmln
aHQpOworICAgIFdJLnRvb2xiYXIuYWRkVG9vbGJhckl0ZW0oV0kuX2luc3BlY3RNb2RlVG9vbGJh
ckJ1dHRvbiwgV0kuVG9vbGJhci5TZWN0aW9uLkNlbnRlclJpZ2h0KTsKIAogICAgIGlmIChXSS5f
ZGV2aWNlU2V0dGluZ3NUb29sYmFyQnV0dG9uKQotICAgICAgICB0aGlzLnRvb2xiYXIuYWRkVG9v
bGJhckl0ZW0oV0kuX2RldmljZVNldHRpbmdzVG9vbGJhckJ1dHRvbiwgV0kuVG9vbGJhci5TZWN0
aW9uLkNlbnRlclJpZ2h0KTsKKyAgICAgICAgV0kudG9vbGJhci5hZGRUb29sYmFySXRlbShXSS5f
ZGV2aWNlU2V0dGluZ3NUb29sYmFyQnV0dG9uLCBXSS5Ub29sYmFyLlNlY3Rpb24uQ2VudGVyUmln
aHQpOwogCi0gICAgdGhpcy5fc2VhcmNoVGFiQ29udGVudFZpZXcgPSBuZXcgV0kuU2VhcmNoVGFi
Q29udGVudFZpZXc7CisgICAgV0kuX3NlYXJjaFRhYkNvbnRlbnRWaWV3ID0gbmV3IFdJLlNlYXJj
aFRhYkNvbnRlbnRWaWV3OwogCiAgICAgaWYgKFdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJs
ZU5ld1RhYkJhci52YWx1ZSkgewotICAgICAgICB0aGlzLnRhYkJyb3dzZXIuYWRkVGFiRm9yQ29u
dGVudFZpZXcodGhpcy5fc2VhcmNoVGFiQ29udGVudFZpZXcsIHtzdXBwcmVzc0FuaW1hdGlvbnM6
IHRydWV9KTsKLSAgICAgICAgdGhpcy50YWJCYXIuYWRkVGFiQmFySXRlbSh0aGlzLnNldHRpbmdz
VGFiQ29udGVudFZpZXcudGFiQmFySXRlbSwge3N1cHByZXNzQW5pbWF0aW9uczogdHJ1ZX0pOwor
ICAgICAgICBXSS50YWJCcm93c2VyLmFkZFRhYkZvckNvbnRlbnRWaWV3KFdJLl9zZWFyY2hUYWJD
b250ZW50Vmlldywge3N1cHByZXNzQW5pbWF0aW9uczogdHJ1ZX0pOworICAgICAgICBXSS50YWJC
YXIuYWRkVGFiQmFySXRlbShXSS5zZXR0aW5nc1RhYkNvbnRlbnRWaWV3LnRhYkJhckl0ZW0sIHtz
dXBwcmVzc0FuaW1hdGlvbnM6IHRydWV9KTsKICAgICB9IGVsc2UgewogICAgICAgICBjb25zdCBp
bmNyZW1lbnRhbCA9IGZhbHNlOwotICAgICAgICB0aGlzLl9zZWFyY2hUb29sYmFySXRlbSA9IG5l
dyBXSS5TZWFyY2hCYXIoImluc3BlY3Rvci1zZWFyY2giLCBXSS5VSVN0cmluZygiU2VhcmNoIiks
IGluY3JlbWVudGFsKTsKLSAgICAgICAgdGhpcy5fc2VhcmNoVG9vbGJhckl0ZW0uYWRkRXZlbnRM
aXN0ZW5lcihXSS5TZWFyY2hCYXIuRXZlbnQuVGV4dENoYW5nZWQsIHRoaXMuX3NlYXJjaFRleHRE
aWRDaGFuZ2UsIHRoaXMpOwotICAgICAgICB0aGlzLnRvb2xiYXIuYWRkVG9vbGJhckl0ZW0odGhp
cy5fc2VhcmNoVG9vbGJhckl0ZW0sIFdJLlRvb2xiYXIuU2VjdGlvbi5SaWdodCk7CisgICAgICAg
IFdJLl9zZWFyY2hUb29sYmFySXRlbSA9IG5ldyBXSS5TZWFyY2hCYXIoImluc3BlY3Rvci1zZWFy
Y2giLCBXSS5VSVN0cmluZygiU2VhcmNoIiksIGluY3JlbWVudGFsKTsKKyAgICAgICAgV0kuX3Nl
YXJjaFRvb2xiYXJJdGVtLmFkZEV2ZW50TGlzdGVuZXIoV0kuU2VhcmNoQmFyLkV2ZW50LlRleHRD
aGFuZ2VkLCBXSS5fc2VhcmNoVGV4dERpZENoYW5nZSk7CisgICAgICAgIFdJLnRvb2xiYXIuYWRk
VG9vbGJhckl0ZW0oV0kuX3NlYXJjaFRvb2xiYXJJdGVtLCBXSS5Ub29sYmFyLlNlY3Rpb24uUmln
aHQpOwogICAgIH0KIAogICAgIGxldCBkb2NrZWRSZXNpemVyRWxlbWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJkb2NrZWQtcmVzaXplciIpOwogICAgIGRvY2tlZFJlc2l6ZXJFbGVtZW50
LmNsYXNzTGlzdC5hZGQoV0kuUG9wb3Zlci5JZ25vcmVBdXRvRGlzbWlzc0NsYXNzTmFtZSk7Ci0g
ICAgZG9ja2VkUmVzaXplckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhp
cy5fZG9ja2VkUmVzaXplck1vdXNlRG93bi5iaW5kKHRoaXMpKTsKKyAgICBkb2NrZWRSZXNpemVy
RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBXSS5fZG9ja2VkUmVzaXplck1v
dXNlRG93bik7CiAKLSAgICB0aGlzLl9kb2NraW5nQXZhaWxhYmxlID0gZmFsc2U7CisgICAgV0ku
X2RvY2tpbmdBdmFpbGFibGUgPSBmYWxzZTsKIAotICAgIHRoaXMuX3VwZGF0ZURvY2tOYXZpZ2F0
aW9uSXRlbXMoKTsKLSAgICB0aGlzLl9zZXR1cFZpZXdIaWVyYXJjaHkoKTsKKyAgICBXSS5fdXBk
YXRlRG9ja05hdmlnYXRpb25JdGVtcygpOworICAgIFdJLl9zZXR1cFZpZXdIaWVyYXJjaHkoKTsK
IAogICAgIC8vIFRoZXNlIHRhYnMgYXJlIGFsd2F5cyBhdmFpbGFibGUgZm9yIHNlbGVjdGluZywg
bW9kdWxvIGlzVGFiQWxsb3dlZCgpLgogICAgIC8vIE90aGVyIHRhYnMgbWF5IGJlIGVuZ2luZWVy
aW5nLW9ubHkgb3IgdG9nZ2xlZCBhdCBydW50aW1lIGlmIGluY29tcGxldGUuCkBAIC01MjksMTYg
KzUyOSwxNiBAQCBXSS5jb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQogICAgICAgICBXSS5TZXR0
aW5nc1RhYkNvbnRlbnRWaWV3LAogICAgIF07CiAKLSAgICB0aGlzLl9rbm93blRhYkNsYXNzZXNC
eVR5cGUgPSBuZXcgTWFwOworICAgIFdJLl9rbm93blRhYkNsYXNzZXNCeVR5cGUgPSBuZXcgTWFw
OwogICAgIC8vIFNldCB0YWIgY2xhc3NlcyBkaXJlY3RseS4gVGhlIHB1YmxpYyBBUEkgdHJpZ2dl
cnMgb3RoZXIgdXBkYXRlcyBhbmQKLSAgICAvLyBub3RpZmljYXRpb25zIHRoYXQgd29uJ3Qgd29y
ayBvciBoYXZlIG5vIGxpc3RlbmVycyBhdCB0aGlzIHBvaW50LgorICAgIC8vIG5vdGlmaWNhdGlv
bnMgdGhhdCB3b24ndCB3b3JrIG9yIGhhdmUgbm8gbGlzdGVuZXJzIGF0IFdJIHBvaW50LgogICAg
IGZvciAobGV0IHRhYkNsYXNzIG9mIHByb2R1Y3Rpb25UYWJDbGFzc2VzKQotICAgICAgICB0aGlz
Ll9rbm93blRhYkNsYXNzZXNCeVR5cGUuc2V0KHRhYkNsYXNzLlR5cGUsIHRhYkNsYXNzKTsKKyAg
ICAgICAgV0kuX2tub3duVGFiQ2xhc3Nlc0J5VHlwZS5zZXQodGFiQ2xhc3MuVHlwZSwgdGFiQ2xh
c3MpOwogCi0gICAgdGhpcy5fcGVuZGluZ09wZW5UYWJzID0gW107CisgICAgV0kuX3BlbmRpbmdP
cGVuVGFicyA9IFtdOwogCi0gICAgLy8gUHJldmlvdXNseSB3ZSBtYXkgaGF2ZSBzdG9yZWQgZHVw
bGljYXRlcyBpbiB0aGlzIHNldHRpbmcuIEF2b2lkIGNyZWF0aW5nIGR1cGxpY2F0ZSB0YWJzLgot
ICAgIGxldCBvcGVuVGFiVHlwZXMgPSB0aGlzLl9vcGVuVGFic1NldHRpbmcudmFsdWU7CisgICAg
Ly8gUHJldmlvdXNseSB3ZSBtYXkgaGF2ZSBzdG9yZWQgZHVwbGljYXRlcyBpbiBXSSBzZXR0aW5n
LiBBdm9pZCBjcmVhdGluZyBkdXBsaWNhdGUgdGFicy4KKyAgICBsZXQgb3BlblRhYlR5cGVzID0g
V0kuX29wZW5UYWJzU2V0dGluZy52YWx1ZTsKICAgICBsZXQgc2VlblRhYlR5cGVzID0gbmV3IFNl
dDsKIAogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BlblRhYlR5cGVzLmxlbmd0aDsgKytpKSB7
CkBAIC01NDgsMzQgKzU0OCwzNCBAQCBXSS5jb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIHNlZW5UYWJUeXBlcy5hZGQodGFiVHlwZSk7CiAK
LSAgICAgICAgaWYgKCF0aGlzLmlzVGFiVHlwZUFsbG93ZWQodGFiVHlwZSkpIHsKLSAgICAgICAg
ICAgIHRoaXMuX3BlbmRpbmdPcGVuVGFicy5wdXNoKHt0YWJUeXBlLCBpbmRleDogaX0pOworICAg
ICAgICBpZiAoIVdJLmlzVGFiVHlwZUFsbG93ZWQodGFiVHlwZSkpIHsKKyAgICAgICAgICAgIFdJ
Ll9wZW5kaW5nT3BlblRhYnMucHVzaCh7dGFiVHlwZSwgaW5kZXg6IGl9KTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF0aGlzLmlzTmV3VGFiV2l0aFR5
cGVBbGxvd2VkKHRhYlR5cGUpKQorICAgICAgICBpZiAoIVdJLmlzTmV3VGFiV2l0aFR5cGVBbGxv
d2VkKHRhYlR5cGUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgbGV0IHRhYkNv
bnRlbnRWaWV3ID0gdGhpcy5fY3JlYXRlVGFiQ29udGVudFZpZXdGb3JUeXBlKHRhYlR5cGUpOwor
ICAgICAgICBsZXQgdGFiQ29udGVudFZpZXcgPSBXSS5fY3JlYXRlVGFiQ29udGVudFZpZXdGb3JU
eXBlKHRhYlR5cGUpOwogICAgICAgICBpZiAoIXRhYkNvbnRlbnRWaWV3KQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHRoaXMudGFiQnJvd3Nlci5hZGRUYWJGb3JDb250ZW50Vmlldyh0
YWJDb250ZW50Vmlldywge3N1cHByZXNzQW5pbWF0aW9uczogdHJ1ZX0pOworICAgICAgICBXSS50
YWJCcm93c2VyLmFkZFRhYkZvckNvbnRlbnRWaWV3KHRhYkNvbnRlbnRWaWV3LCB7c3VwcHJlc3NB
bmltYXRpb25zOiB0cnVlfSk7CiAgICAgfQogCi0gICAgdGhpcy5fcmVzdG9yZUNvb2tpZUZvck9w
ZW5UYWJzKFdJLlN0YXRlUmVzdG9yYXRpb25UeXBlLkxvYWQpOworICAgIFdJLl9yZXN0b3JlQ29v
a2llRm9yT3BlblRhYnMoV0kuU3RhdGVSZXN0b3JhdGlvblR5cGUuTG9hZCk7CiAKLSAgICB0aGlz
LnRhYkJhci5zZWxlY3RlZFRhYkJhckl0ZW0gPSB0aGlzLl9zZWxlY3RlZFRhYkluZGV4U2V0dGlu
Zy52YWx1ZTsKKyAgICBXSS50YWJCYXIuc2VsZWN0ZWRUYWJCYXJJdGVtID0gV0kuX3NlbGVjdGVk
VGFiSW5kZXhTZXR0aW5nLnZhbHVlOwogCi0gICAgaWYgKCF0aGlzLnRhYkJhci5zZWxlY3RlZFRh
YkJhckl0ZW0pCi0gICAgICAgIHRoaXMudGFiQmFyLnNlbGVjdGVkVGFiQmFySXRlbSA9IDA7Cisg
ICAgaWYgKCFXSS50YWJCYXIuc2VsZWN0ZWRUYWJCYXJJdGVtKQorICAgICAgICBXSS50YWJCYXIu
c2VsZWN0ZWRUYWJCYXJJdGVtID0gMDsKIAotICAgIGlmICghdGhpcy50YWJCYXIubm9ybWFsVGFi
Q291bnQpCi0gICAgICAgIHRoaXMuc2hvd05ld1RhYlRhYih7c3VwcHJlc3NBbmltYXRpb25zOiB0
cnVlfSk7CisgICAgaWYgKCFXSS50YWJCYXIubm9ybWFsVGFiQ291bnQpCisgICAgICAgIFdJLnNo
b3dOZXdUYWJUYWIoe3N1cHByZXNzQW5pbWF0aW9uczogdHJ1ZX0pOwogCiAgICAgLy8gTGlzdGVu
IHRvIHRoZSBldmVudHMgYWZ0ZXIgcmVzdG9yaW5nIHRoZSBzYXZlZCB0YWJzIHRvIGF2b2lkIHJl
Y3Vyc2lvbi4KLSAgICB0aGlzLnRhYkJhci5hZGRFdmVudExpc3RlbmVyKFdJLlRhYkJhci5FdmVu
dC5UYWJCYXJJdGVtQWRkZWQsIHRoaXMuX3JlbWVtYmVyT3BlblRhYnMsIHRoaXMpOwotICAgIHRo
aXMudGFiQmFyLmFkZEV2ZW50TGlzdGVuZXIoV0kuVGFiQmFyLkV2ZW50LlRhYkJhckl0ZW1SZW1v
dmVkLCB0aGlzLl9yZW1lbWJlck9wZW5UYWJzLCB0aGlzKTsKLSAgICB0aGlzLnRhYkJhci5hZGRF
dmVudExpc3RlbmVyKFdJLlRhYkJhci5FdmVudC5UYWJCYXJJdGVtc1Jlb3JkZXJlZCwgdGhpcy5f
cmVtZW1iZXJPcGVuVGFicywgdGhpcyk7CisgICAgV0kudGFiQmFyLmFkZEV2ZW50TGlzdGVuZXIo
V0kuVGFiQmFyLkV2ZW50LlRhYkJhckl0ZW1BZGRlZCwgV0kuX3JlbWVtYmVyT3BlblRhYnMpOwor
ICAgIFdJLnRhYkJhci5hZGRFdmVudExpc3RlbmVyKFdJLlRhYkJhci5FdmVudC5UYWJCYXJJdGVt
UmVtb3ZlZCwgV0kuX3JlbWVtYmVyT3BlblRhYnMpOworICAgIFdJLnRhYkJhci5hZGRFdmVudExp
c3RlbmVyKFdJLlRhYkJhci5FdmVudC5UYWJCYXJJdGVtc1Jlb3JkZXJlZCwgV0kuX3JlbWVtYmVy
T3BlblRhYnMpOwogCiAgICAgLy8gU2lnbmFsIHRoYXQgdGhlIGZyb250ZW5kIGlzIG5vdyByZWFk
eSB0byByZWNlaXZlIG1lc3NhZ2VzLgogICAgIFdJLndoZW5UYXJnZXRzQXZhaWxhYmxlKCkudGhl
bigoKSA9PiB7CkBAIC01ODksMTAgKzU4OSwxMCBAQCBXSS5jb250ZW50TG9hZGVkID0gZnVuY3Rp
b24oKQogICAgIC8vIGFuZCBwZW5kaW5nIEluc3BlY3RvckZyb250ZW5kQVBJIGNvbW1hbmRzIHRv
IGJlIHNlbnQuCiAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRlZCgpOwogCi0gICAgaWYg
KHRoaXMuX3Nob3dpbmdTcGxpdENvbnNvbGVTZXR0aW5nLnZhbHVlKQotICAgICAgICB0aGlzLnNo
b3dTcGxpdENvbnNvbGUoKTsKKyAgICBpZiAoV0kuX3Nob3dpbmdTcGxpdENvbnNvbGVTZXR0aW5n
LnZhbHVlKQorICAgICAgICBXSS5zaG93U3BsaXRDb25zb2xlKCk7CiAKLSAgICAvLyBTdG9yZSB0
aGlzIG9uIHRoZSB3aW5kb3cgaW4gY2FzZSB0aGUgV2ViSW5zcGVjdG9yIGdsb2JhbCBnZXRzIGNv
cnJ1cHRlZC4KKyAgICAvLyBTdG9yZSBXSSBvbiB0aGUgd2luZG93IGluIGNhc2UgdGhlIFdlYklu
c3BlY3RvciBnbG9iYWwgZ2V0cyBjb3JydXB0ZWQuCiAgICAgd2luZG93Ll9fZnJvbnRlbmRDb21w
bGV0ZWRMb2FkID0gdHJ1ZTsKIAogICAgIGlmIChXSS5ydW5Cb290c3RyYXBPcGVyYXRpb25zKQpA
QCAtNjM3LDE3ICs2MzcsMTcgQEAgV0kuaW5pdGlhbGl6ZVRhcmdldCA9IGZ1bmN0aW9uKHRhcmdl
dCkKIAogV0kudGFyZ2V0c0F2YWlsYWJsZSA9IGZ1bmN0aW9uKCkKIHsKLSAgICByZXR1cm4gdGhp
cy5fdGFyZ2V0c0F2YWlsYWJsZVByb21pc2Uuc2V0dGxlZDsKKyAgICByZXR1cm4gV0kuX3Rhcmdl
dHNBdmFpbGFibGVQcm9taXNlLnNldHRsZWQ7CiB9OwogCiBXSS53aGVuVGFyZ2V0c0F2YWlsYWJs
ZSA9IGZ1bmN0aW9uKCkKIHsKLSAgICByZXR1cm4gdGhpcy5fdGFyZ2V0c0F2YWlsYWJsZVByb21p
c2UucHJvbWlzZTsKKyAgICByZXR1cm4gV0kuX3RhcmdldHNBdmFpbGFibGVQcm9taXNlLnByb21p
c2U7CiB9OwogCiBXSS5pc1RhYlR5cGVBbGxvd2VkID0gZnVuY3Rpb24odGFiVHlwZSkKIHsKLSAg
ICBsZXQgdGFiQ2xhc3MgPSB0aGlzLl9rbm93blRhYkNsYXNzZXNCeVR5cGUuZ2V0KHRhYlR5cGUp
OworICAgIGxldCB0YWJDbGFzcyA9IFdJLl9rbm93blRhYkNsYXNzZXNCeVR5cGUuZ2V0KHRhYlR5
cGUpOwogICAgIGlmICghdGFiQ2xhc3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNjU2
LDIzICs2NTYsMjMgQEAgV0kuaXNUYWJUeXBlQWxsb3dlZCA9IGZ1bmN0aW9uKHRhYlR5cGUpCiAK
IFdJLmtub3duVGFiQ2xhc3NlcyA9IGZ1bmN0aW9uKCkKIHsKLSAgICByZXR1cm4gbmV3IFNldCh0
aGlzLl9rbm93blRhYkNsYXNzZXNCeVR5cGUudmFsdWVzKCkpOworICAgIHJldHVybiBuZXcgU2V0
KFdJLl9rbm93blRhYkNsYXNzZXNCeVR5cGUudmFsdWVzKCkpOwogfTsKIAogV0kuX3Nob3dPcGVu
UmVzb3VyY2VEaWFsb2cgPSBmdW5jdGlvbigpCiB7Ci0gICAgaWYgKCF0aGlzLl9vcGVuUmVzb3Vy
Y2VEaWFsb2cpCi0gICAgICAgIHRoaXMuX29wZW5SZXNvdXJjZURpYWxvZyA9IG5ldyBXSS5PcGVu
UmVzb3VyY2VEaWFsb2codGhpcyk7CisgICAgaWYgKCFXSS5fb3BlblJlc291cmNlRGlhbG9nKQor
ICAgICAgICBXSS5fb3BlblJlc291cmNlRGlhbG9nID0gbmV3IFdJLk9wZW5SZXNvdXJjZURpYWxv
ZyhXSSk7CiAKLSAgICBpZiAodGhpcy5fb3BlblJlc291cmNlRGlhbG9nLnZpc2libGUpCisgICAg
aWYgKFdJLl9vcGVuUmVzb3VyY2VEaWFsb2cudmlzaWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgdGhpcy5fb3BlblJlc291cmNlRGlhbG9nLnByZXNlbnQodGhpcy5fY29udGVudEVsZW1lbnQp
OworICAgIFdJLl9vcGVuUmVzb3VyY2VEaWFsb2cucHJlc2VudChXSS5fY29udGVudEVsZW1lbnQp
OwogfTsKIAogV0kuX2NyZWF0ZVRhYkNvbnRlbnRWaWV3Rm9yVHlwZSA9IGZ1bmN0aW9uKHRhYlR5
cGUpCiB7Ci0gICAgbGV0IHRhYkNsYXNzID0gdGhpcy5fa25vd25UYWJDbGFzc2VzQnlUeXBlLmdl
dCh0YWJUeXBlKTsKKyAgICBsZXQgdGFiQ2xhc3MgPSBXSS5fa25vd25UYWJDbGFzc2VzQnlUeXBl
LmdldCh0YWJUeXBlKTsKICAgICBpZiAoIXRhYkNsYXNzKSB7CiAgICAgICAgIGNvbnNvbGUuZXJy
b3IoIlVua25vd24gdGFiIHR5cGUiLCB0YWJUeXBlKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBA
IC02ODcsNyArNjg3LDcgQEAgV0kuX3JlbWVtYmVyT3BlblRhYnMgPSBmdW5jdGlvbigpCiAgICAg
bGV0IHNlZW5UYWJUeXBlcyA9IG5ldyBTZXQ7CiAgICAgbGV0IG9wZW5UYWJzID0gW107CiAKLSAg
ICBmb3IgKGxldCB0YWJCYXJJdGVtIG9mIHRoaXMudGFiQmFyLnRhYkJhckl0ZW1zKSB7CisgICAg
Zm9yIChsZXQgdGFiQmFySXRlbSBvZiBXSS50YWJCYXIudGFiQmFySXRlbXMpIHsKICAgICAgICAg
bGV0IHRhYkNvbnRlbnRWaWV3ID0gdGFiQmFySXRlbS5yZXByZXNlbnRlZE9iamVjdDsKICAgICAg
ICAgaWYgKCEodGFiQ29udGVudFZpZXcgaW5zdGFuY2VvZiBXSS5UYWJDb250ZW50VmlldykpCiAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTY5OSw0MSArNjk5LDQxIEBAIFdJLl9yZW1lbWJlck9w
ZW5UYWJzID0gZnVuY3Rpb24oKQogICAgIH0KIAogICAgIC8vIEtlZXAgY3VycmVudGx5IHVuc3Vw
cG9ydGVkIHRhYnMgaW4gdGhlIHNldHRpbmcgYXQgdGhlaXIgcHJldmlvdXMgaW5kZXguCi0gICAg
Zm9yIChsZXQge3RhYlR5cGUsIGluZGV4fSBvZiB0aGlzLl9wZW5kaW5nT3BlblRhYnMpIHsKKyAg
ICBmb3IgKGxldCB7dGFiVHlwZSwgaW5kZXh9IG9mIFdJLl9wZW5kaW5nT3BlblRhYnMpIHsKICAg
ICAgICAgaWYgKHNlZW5UYWJUeXBlcy5oYXModGFiVHlwZSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgb3BlblRhYnMuaW5zZXJ0QXRJbmRleCh0YWJUeXBlLCBpbmRleCk7CiAgICAg
ICAgIHNlZW5UYWJUeXBlcy5hZGQodGFiVHlwZSk7CiAgICAgfQogCi0gICAgdGhpcy5fb3BlblRh
YnNTZXR0aW5nLnZhbHVlID0gb3BlblRhYnM7CisgICAgV0kuX29wZW5UYWJzU2V0dGluZy52YWx1
ZSA9IG9wZW5UYWJzOwogfTsKIAogV0kuX29wZW5EZWZhdWx0VGFiID0gZnVuY3Rpb24oZXZlbnQp
CiB7Ci0gICAgdGhpcy5zaG93TmV3VGFiVGFiKHtzdXBwcmVzc0FuaW1hdGlvbnM6IHRydWV9KTsK
KyAgICBXSS5zaG93TmV3VGFiVGFiKHtzdXBwcmVzc0FuaW1hdGlvbnM6IHRydWV9KTsKIH07CiAK
IFdJLl9zaG93U2V0dGluZ3NUYWIgPSBmdW5jdGlvbihldmVudCkKIHsKICAgICBpZiAoZXZlbnQu
a2V5SWRlbnRpZmllciA9PT0gIlUrMDAyQyIpIC8vICIsIgotICAgICAgICB0aGlzLnRhYkJyb3dz
ZXIuc2hvd1RhYkZvckNvbnRlbnRWaWV3KHRoaXMuc2V0dGluZ3NUYWJDb250ZW50Vmlldyk7Cisg
ICAgICAgIFdJLnRhYkJyb3dzZXIuc2hvd1RhYkZvckNvbnRlbnRWaWV3KFdJLnNldHRpbmdzVGFi
Q29udGVudFZpZXcpOwogfTsKIAogV0kuX3RyeVRvUmVzdG9yZVBlbmRpbmdUYWJzID0gZnVuY3Rp
b24oKQogewogICAgIGxldCBzdGlsbFBlbmRpbmdPcGVuVGFicyA9IFtdOwotICAgIGZvciAobGV0
IHt0YWJUeXBlLCBpbmRleH0gb2YgdGhpcy5fcGVuZGluZ09wZW5UYWJzKSB7Ci0gICAgICAgIGlm
ICghdGhpcy5pc1RhYlR5cGVBbGxvd2VkKHRhYlR5cGUpKSB7CisgICAgZm9yIChsZXQge3RhYlR5
cGUsIGluZGV4fSBvZiBXSS5fcGVuZGluZ09wZW5UYWJzKSB7CisgICAgICAgIGlmICghV0kuaXNU
YWJUeXBlQWxsb3dlZCh0YWJUeXBlKSkgewogICAgICAgICAgICAgc3RpbGxQZW5kaW5nT3BlblRh
YnMucHVzaCh7dGFiVHlwZSwgaW5kZXh9KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgbGV0IHRhYkNvbnRlbnRWaWV3ID0gdGhpcy5fY3JlYXRlVGFiQ29udGVu
dFZpZXdGb3JUeXBlKHRhYlR5cGUpOworICAgICAgICBsZXQgdGFiQ29udGVudFZpZXcgPSBXSS5f
Y3JlYXRlVGFiQ29udGVudFZpZXdGb3JUeXBlKHRhYlR5cGUpOwogICAgICAgICBpZiAoIXRhYkNv
bnRlbnRWaWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgdGhpcy50YWJCcm93
c2VyLmFkZFRhYkZvckNvbnRlbnRWaWV3KHRhYkNvbnRlbnRWaWV3LCB7CisgICAgICAgIFdJLnRh
YkJyb3dzZXIuYWRkVGFiRm9yQ29udGVudFZpZXcodGFiQ29udGVudFZpZXcsIHsKICAgICAgICAg
ICAgIHN1cHByZXNzQW5pbWF0aW9uczogdHJ1ZSwKICAgICAgICAgICAgIGluc2VydGlvbkluZGV4
OiBpbmRleCwKICAgICAgICAgfSk7CkBAIC03NDEsMzEgKzc0MSwzMSBAQCBXSS5fdHJ5VG9SZXN0
b3JlUGVuZGluZ1RhYnMgPSBmdW5jdGlvbigpCiAgICAgICAgIHRhYkNvbnRlbnRWaWV3LnJlc3Rv
cmVTdGF0ZUZyb21Db29raWUoV0kuU3RhdGVSZXN0b3JhdGlvblR5cGUuTG9hZCk7CiAgICAgfQog
Ci0gICAgdGhpcy5fcGVuZGluZ09wZW5UYWJzID0gc3RpbGxQZW5kaW5nT3BlblRhYnM7CisgICAg
V0kuX3BlbmRpbmdPcGVuVGFicyA9IHN0aWxsUGVuZGluZ09wZW5UYWJzOwogCiAgICAgaWYgKCFX
SS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVOZXdUYWJCYXIudmFsdWUpCi0gICAgICAgIHRo
aXMudGFiQmFyLnVwZGF0ZU5ld1RhYlRhYkJhckl0ZW1TdGF0ZSgpOworICAgICAgICBXSS50YWJC
YXIudXBkYXRlTmV3VGFiVGFiQmFySXRlbVN0YXRlKCk7CiB9OwogCiBXSS5zaG93TmV3VGFiVGFi
ID0gZnVuY3Rpb24ob3B0aW9ucykKIHsKLSAgICBpZiAoIXRoaXMuaXNOZXdUYWJXaXRoVHlwZUFs
bG93ZWQoV0kuTmV3VGFiQ29udGVudFZpZXcuVHlwZSkpCisgICAgaWYgKCFXSS5pc05ld1RhYldp
dGhUeXBlQWxsb3dlZChXSS5OZXdUYWJDb250ZW50Vmlldy5UeXBlKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbGV0IHRhYkNvbnRlbnRWaWV3ID0gdGhpcy50YWJCcm93c2VyLmJlc3RUYWJDb250
ZW50Vmlld0ZvckNsYXNzKFdJLk5ld1RhYkNvbnRlbnRWaWV3KTsKKyAgICBsZXQgdGFiQ29udGVu
dFZpZXcgPSBXSS50YWJCcm93c2VyLmJlc3RUYWJDb250ZW50Vmlld0ZvckNsYXNzKFdJLk5ld1Rh
YkNvbnRlbnRWaWV3KTsKICAgICBpZiAoIXRhYkNvbnRlbnRWaWV3KQogICAgICAgICB0YWJDb250
ZW50VmlldyA9IG5ldyBXSS5OZXdUYWJDb250ZW50VmlldzsKLSAgICB0aGlzLnRhYkJyb3dzZXIu
c2hvd1RhYkZvckNvbnRlbnRWaWV3KHRhYkNvbnRlbnRWaWV3LCBvcHRpb25zKTsKKyAgICBXSS50
YWJCcm93c2VyLnNob3dUYWJGb3JDb250ZW50Vmlldyh0YWJDb250ZW50Vmlldywgb3B0aW9ucyk7
CiB9OwogCiBXSS5pc05ld1RhYldpdGhUeXBlQWxsb3dlZCA9IGZ1bmN0aW9uKHRhYlR5cGUpCiB7
Ci0gICAgbGV0IHRhYkNsYXNzID0gdGhpcy5fa25vd25UYWJDbGFzc2VzQnlUeXBlLmdldCh0YWJU
eXBlKTsKKyAgICBsZXQgdGFiQ2xhc3MgPSBXSS5fa25vd25UYWJDbGFzc2VzQnlUeXBlLmdldCh0
YWJUeXBlKTsKICAgICBpZiAoIXRhYkNsYXNzIHx8ICF0YWJDbGFzcy5pc1RhYkFsbG93ZWQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gT25seSBhbGxvdyBvbmUgdGFiIHBlciBj
bGFzcyBmb3Igbm93LgotICAgIGZvciAobGV0IHRhYkJhckl0ZW0gb2YgdGhpcy50YWJCYXIudGFi
QmFySXRlbXMpIHsKKyAgICBmb3IgKGxldCB0YWJCYXJJdGVtIG9mIFdJLnRhYkJhci50YWJCYXJJ
dGVtcykgewogICAgICAgICBsZXQgdGFiQ29udGVudFZpZXcgPSB0YWJCYXJJdGVtLnJlcHJlc2Vu
dGVkT2JqZWN0OwogICAgICAgICBpZiAoISh0YWJDb250ZW50VmlldyBpbnN0YW5jZW9mIFdJLlRh
YkNvbnRlbnRWaWV3KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNzc0LDcgKzc3NCw3IEBA
IFdJLmlzTmV3VGFiV2l0aFR5cGVBbGxvd2VkID0gZnVuY3Rpb24odGFiVHlwZSkKICAgICB9CiAK
ICAgICBpZiAodGFiQ2xhc3MgPT09IFdJLk5ld1RhYkNvbnRlbnRWaWV3KSB7Ci0gICAgICAgIGxl
dCBhbGxUYWJzID0gQXJyYXkuZnJvbSh0aGlzLmtub3duVGFiQ2xhc3NlcygpKTsKKyAgICAgICAg
bGV0IGFsbFRhYnMgPSBBcnJheS5mcm9tKFdJLmtub3duVGFiQ2xhc3NlcygpKTsKICAgICAgICAg
bGV0IGFkZGFibGVUYWJzID0gYWxsVGFicy5maWx0ZXIoKHRhYkNsYXNzKSA9PiAhdGFiQ2xhc3Mu
dGFiSW5mbygpLmlzRXBoZW1lcmFsKTsKICAgICAgICAgbGV0IGNhbk1ha2VOZXdUYWIgPSBhZGRh
YmxlVGFicy5zb21lKCh0YWJDbGFzcykgPT4gV0kuaXNOZXdUYWJXaXRoVHlwZUFsbG93ZWQodGFi
Q2xhc3MuVHlwZSkpOwogICAgICAgICByZXR1cm4gY2FuTWFrZU5ld1RhYjsKQEAgLTc4NSwyOSAr
Nzg1LDI5IEBAIFdJLmlzTmV3VGFiV2l0aFR5cGVBbGxvd2VkID0gZnVuY3Rpb24odGFiVHlwZSkK
IAogV0kuY3JlYXRlTmV3VGFiV2l0aFR5cGUgPSBmdW5jdGlvbih0YWJUeXBlLCBvcHRpb25zID0g
e30pCiB7Ci0gICAgY29uc29sZS5hc3NlcnQodGhpcy5pc05ld1RhYldpdGhUeXBlQWxsb3dlZCh0
YWJUeXBlKSk7CisgICAgY29uc29sZS5hc3NlcnQoV0kuaXNOZXdUYWJXaXRoVHlwZUFsbG93ZWQo
dGFiVHlwZSkpOwogCiAgICAgbGV0IHtyZWZlcmVuY2VkVmlldywgc2hvdWxkUmVwbGFjZVRhYiwg
c2hvdWxkU2hvd05ld1RhYn0gPSBvcHRpb25zOwogICAgIGNvbnNvbGUuYXNzZXJ0KCFyZWZlcmVu
Y2VkVmlldyB8fCByZWZlcmVuY2VkVmlldyBpbnN0YW5jZW9mIFdJLlRhYkNvbnRlbnRWaWV3LCBy
ZWZlcmVuY2VkVmlldyk7CiAgICAgY29uc29sZS5hc3NlcnQoIXNob3VsZFJlcGxhY2VUYWIgfHwg
cmVmZXJlbmNlZFZpZXcsICJNdXN0IHByb3ZpZGUgYSByZWZlcmVuY2UgdmlldyB0byByZXBsYWNl
IGEgdGFiLiIpOwogCi0gICAgbGV0IHRhYkNvbnRlbnRWaWV3ID0gdGhpcy5fY3JlYXRlVGFiQ29u
dGVudFZpZXdGb3JUeXBlKHRhYlR5cGUpOworICAgIGxldCB0YWJDb250ZW50VmlldyA9IFdJLl9j
cmVhdGVUYWJDb250ZW50Vmlld0ZvclR5cGUodGFiVHlwZSk7CiAgICAgY29uc3Qgc3VwcHJlc3NB
bmltYXRpb25zID0gdHJ1ZTsKLSAgICB0aGlzLnRhYkJyb3dzZXIuYWRkVGFiRm9yQ29udGVudFZp
ZXcodGFiQ29udGVudFZpZXcsIHsKKyAgICBXSS50YWJCcm93c2VyLmFkZFRhYkZvckNvbnRlbnRW
aWV3KHRhYkNvbnRlbnRWaWV3LCB7CiAgICAgICAgIHN1cHByZXNzQW5pbWF0aW9ucywKLSAgICAg
ICAgaW5zZXJ0aW9uSW5kZXg6IHJlZmVyZW5jZWRWaWV3ID8gdGhpcy50YWJCYXIudGFiQmFySXRl
bXMuaW5kZXhPZihyZWZlcmVuY2VkVmlldy50YWJCYXJJdGVtKSA6IHVuZGVmaW5lZCwKKyAgICAg
ICAgaW5zZXJ0aW9uSW5kZXg6IHJlZmVyZW5jZWRWaWV3ID8gV0kudGFiQmFyLnRhYkJhckl0ZW1z
LmluZGV4T2YocmVmZXJlbmNlZFZpZXcudGFiQmFySXRlbSkgOiB1bmRlZmluZWQsCiAgICAgfSk7
CiAKICAgICBpZiAoc2hvdWxkUmVwbGFjZVRhYikKLSAgICAgICAgdGhpcy50YWJCcm93c2VyLmNs
b3NlVGFiRm9yQ29udGVudFZpZXcocmVmZXJlbmNlZFZpZXcsIHtzdXBwcmVzc0FuaW1hdGlvbnN9
KTsKKyAgICAgICAgV0kudGFiQnJvd3Nlci5jbG9zZVRhYkZvckNvbnRlbnRWaWV3KHJlZmVyZW5j
ZWRWaWV3LCB7c3VwcHJlc3NBbmltYXRpb25zfSk7CiAKICAgICBpZiAoc2hvdWxkU2hvd05ld1Rh
YikKLSAgICAgICAgdGhpcy50YWJCcm93c2VyLnNob3dUYWJGb3JDb250ZW50Vmlldyh0YWJDb250
ZW50Vmlldyk7CisgICAgICAgIFdJLnRhYkJyb3dzZXIuc2hvd1RhYkZvckNvbnRlbnRWaWV3KHRh
YkNvbnRlbnRWaWV3KTsKIH07CiAKIFdJLmFjdGl2YXRlRXh0cmFEb21haW5zID0gZnVuY3Rpb24o
ZG9tYWlucykKIHsKLSAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdJLk5vdGlmaWNhdGlvbi5FeHRyYURvbWFpbnNBY3RpdmF0ZWQsIHtkb21haW5zfSk7Cisg
ICAgV0kubm90aWZpY2F0aW9ucy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuTm90aWZpY2F0
aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRlZCwge2RvbWFpbnN9KTsKIAogICAgIGlmIChXSS5tYWlu
VGFyZ2V0KSB7CiAgICAgICAgIGlmICghV0kucGFnZVRhcmdldCAmJiBXSS5tYWluVGFyZ2V0LkRP
TUFnZW50KQpAQCAtODIzLDE2ICs4MjMsMTYgQEAgV0kuYWN0aXZhdGVFeHRyYURvbWFpbnMgPSBm
dW5jdGlvbihkb21haW5zKQogICAgICAgICAgICAgV0kubmV0d29ya01hbmFnZXIuaW5pdGlhbGl6
ZVRhcmdldChXSS5tYWluVGFyZ2V0KTsKICAgICB9CiAKLSAgICB0aGlzLl91cGRhdGVSZWxvYWRU
b29sYmFyQnV0dG9uKCk7Ci0gICAgdGhpcy5fdXBkYXRlRG93bmxvYWRUb29sYmFyQnV0dG9uKCk7
Ci0gICAgdGhpcy5fdXBkYXRlSW5zcGVjdE1vZGVUb29sYmFyQnV0dG9uKCk7CisgICAgV0kuX3Vw
ZGF0ZVJlbG9hZFRvb2xiYXJCdXR0b24oKTsKKyAgICBXSS5fdXBkYXRlRG93bmxvYWRUb29sYmFy
QnV0dG9uKCk7CisgICAgV0kuX3VwZGF0ZUluc3BlY3RNb2RlVG9vbGJhckJ1dHRvbigpOwogCi0g
ICAgdGhpcy5fdHJ5VG9SZXN0b3JlUGVuZGluZ1RhYnMoKTsKKyAgICBXSS5fdHJ5VG9SZXN0b3Jl
UGVuZGluZ1RhYnMoKTsKIH07CiAKIFdJLnVwZGF0ZVdpbmRvd1RpdGxlID0gZnVuY3Rpb24oKQog
ewotICAgIHZhciBtYWluRnJhbWUgPSB0aGlzLm5ldHdvcmtNYW5hZ2VyLm1haW5GcmFtZTsKKyAg
ICB2YXIgbWFpbkZyYW1lID0gV0kubmV0d29ya01hbmFnZXIubWFpbkZyYW1lOwogICAgIGlmICgh
bWFpbkZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTg0Nyw0NSArODQ3LDQ1IEBAIFdJLnVw
ZGF0ZVdpbmRvd1RpdGxlID0gZnVuY3Rpb24oKQogCiAgICAgLy8gQnVpbGQgYSB0aXRsZSBiYXNl
ZCBvbiB0aGUgVVJMIGNvbXBvbmVudHMuCiAgICAgaWYgKHVybENvbXBvbmVudHMuaG9zdCAmJiBs
YXN0UGF0aENvbXBvbmVudCkKLSAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5kaXNwbGF5TmFtZUZv
ckhvc3QodXJsQ29tcG9uZW50cy5ob3N0KSArICIgXHUyMDE0ICIgKyBsYXN0UGF0aENvbXBvbmVu
dDsKKyAgICAgICAgdmFyIHRpdGxlID0gV0kuZGlzcGxheU5hbWVGb3JIb3N0KHVybENvbXBvbmVu
dHMuaG9zdCkgKyAiIFx1MjAxNCAiICsgbGFzdFBhdGhDb21wb25lbnQ7CiAgICAgZWxzZSBpZiAo
dXJsQ29tcG9uZW50cy5ob3N0KQotICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLmRpc3BsYXlOYW1l
Rm9ySG9zdCh1cmxDb21wb25lbnRzLmhvc3QpOworICAgICAgICB2YXIgdGl0bGUgPSBXSS5kaXNw
bGF5TmFtZUZvckhvc3QodXJsQ29tcG9uZW50cy5ob3N0KTsKICAgICBlbHNlIGlmIChsYXN0UGF0
aENvbXBvbmVudCkKICAgICAgICAgdmFyIHRpdGxlID0gbGFzdFBhdGhDb21wb25lbnQ7CiAgICAg
ZWxzZQogICAgICAgICB2YXIgdGl0bGUgPSBtYWluRnJhbWUudXJsOwogCi0gICAgLy8gVGhlIG5h
bWUgImluc3BlY3RlZFVSTENoYW5nZWQiIHNvdW5kcyBsaWtlIHRoZSB3aG9sZSBVUkwgaXMgcmVx
dWlyZWQsIGhvd2V2ZXIgdGhpcyBpcyBvbmx5CisgICAgLy8gVGhlIG5hbWUgImluc3BlY3RlZFVS
TENoYW5nZWQiIHNvdW5kcyBsaWtlIHRoZSB3aG9sZSBVUkwgaXMgcmVxdWlyZWQsIGhvd2V2ZXIg
V0kgaXMgb25seQogICAgIC8vIHVzZWQgZm9yIHVwZGF0aW5nIHRoZSB3aW5kb3cgdGl0bGUgYW5k
IGl0IGNhbiBiZSBhbnkgc3RyaW5nLgogICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5pbnNwZWN0
ZWRVUkxDaGFuZ2VkKHRpdGxlKTsKIH07CiAKIFdJLnVwZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHkg
PSBmdW5jdGlvbihhdmFpbGFibGUpCiB7Ci0gICAgdGhpcy5fZG9ja2luZ0F2YWlsYWJsZSA9IGF2
YWlsYWJsZTsKKyAgICBXSS5fZG9ja2luZ0F2YWlsYWJsZSA9IGF2YWlsYWJsZTsKIAotICAgIHRo
aXMuX3VwZGF0ZURvY2tOYXZpZ2F0aW9uSXRlbXMoKTsKKyAgICBXSS5fdXBkYXRlRG9ja05hdmln
YXRpb25JdGVtcygpOwogfTsKIAogV0kudXBkYXRlRG9ja2VkU3RhdGUgPSBmdW5jdGlvbihzaWRl
KQogewotICAgIGlmICh0aGlzLl9kb2NrQ29uZmlndXJhdGlvbiA9PT0gc2lkZSkKKyAgICBpZiAo
V0kuX2RvY2tDb25maWd1cmF0aW9uID09PSBzaWRlKQogICAgICAgICByZXR1cm47CiAKLSAgICB0
aGlzLl9wcmV2aW91c0RvY2tDb25maWd1cmF0aW9uID0gdGhpcy5fZG9ja0NvbmZpZ3VyYXRpb247
CisgICAgV0kuX3ByZXZpb3VzRG9ja0NvbmZpZ3VyYXRpb24gPSBXSS5fZG9ja0NvbmZpZ3VyYXRp
b247CiAKLSAgICBpZiAoIXRoaXMuX3ByZXZpb3VzRG9ja0NvbmZpZ3VyYXRpb24pIHsKKyAgICBp
ZiAoIVdJLl9wcmV2aW91c0RvY2tDb25maWd1cmF0aW9uKSB7CiAgICAgICAgIGlmIChzaWRlID09
PSBXSS5Eb2NrQ29uZmlndXJhdGlvbi5SaWdodCB8fCBzaWRlID09PSBXSS5Eb2NrQ29uZmlndXJh
dGlvbi5MZWZ0KQotICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNEb2NrQ29uZmlndXJhdGlvbiA9
IFdJLkRvY2tDb25maWd1cmF0aW9uLkJvdHRvbTsKKyAgICAgICAgICAgIFdJLl9wcmV2aW91c0Rv
Y2tDb25maWd1cmF0aW9uID0gV0kuRG9ja0NvbmZpZ3VyYXRpb24uQm90dG9tOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICB0aGlzLl9wcmV2aW91c0RvY2tDb25maWd1cmF0aW9uID0gV0kucmVz
b2x2ZWRMYXlvdXREaXJlY3Rpb24oKSA9PT0gV0kuTGF5b3V0RGlyZWN0aW9uLlJUTCA/IFdJLkRv
Y2tDb25maWd1cmF0aW9uLkxlZnQgOiBXSS5Eb2NrQ29uZmlndXJhdGlvbi5SaWdodDsKKyAgICAg
ICAgICAgIFdJLl9wcmV2aW91c0RvY2tDb25maWd1cmF0aW9uID0gV0kucmVzb2x2ZWRMYXlvdXRE
aXJlY3Rpb24oKSA9PT0gV0kuTGF5b3V0RGlyZWN0aW9uLlJUTCA/IFdJLkRvY2tDb25maWd1cmF0
aW9uLkxlZnQgOiBXSS5Eb2NrQ29uZmlndXJhdGlvbi5SaWdodDsKICAgICB9CiAKLSAgICB0aGlz
Ll9kb2NrQ29uZmlndXJhdGlvbiA9IHNpZGU7CisgICAgV0kuX2RvY2tDb25maWd1cmF0aW9uID0g
c2lkZTsKIAotICAgIHRoaXMuZG9ja2VkID0gc2lkZSAhPT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24u
VW5kb2NrZWQ7CisgICAgV0kuZG9ja2VkID0gc2lkZSAhPT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24u
VW5kb2NrZWQ7CiAKLSAgICB0aGlzLl9pZ25vcmVUb29sYmFyTW9kZURpZENoYW5nZUV2ZW50cyA9
IHRydWU7CisgICAgV0kuX2lnbm9yZVRvb2xiYXJNb2RlRGlkQ2hhbmdlRXZlbnRzID0gdHJ1ZTsK
IAogICAgIGlmIChzaWRlID09PSBXSS5Eb2NrQ29uZmlndXJhdGlvbi5Cb3R0b20pIHsKICAgICAg
ICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJkb2NrZWQiLCBXSS5Eb2NrQ29uZmlndXJh
dGlvbi5Cb3R0b20pOwpAQCAtODk5LDE4ICs4OTksMTggQEAgV0kudXBkYXRlRG9ja2VkU3RhdGUg
PSBmdW5jdGlvbihzaWRlKQogICAgIH0gZWxzZQogICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNz
TGlzdC5yZW1vdmUoImRvY2tlZCIsIFdJLkRvY2tDb25maWd1cmF0aW9uLlJpZ2h0LCBXSS5Eb2Nr
Q29uZmlndXJhdGlvbi5MZWZ0LCBXSS5Eb2NrQ29uZmlndXJhdGlvbi5Cb3R0b20pOwogCi0gICAg
dGhpcy5faWdub3JlVG9vbGJhck1vZGVEaWRDaGFuZ2VFdmVudHMgPSBmYWxzZTsKKyAgICBXSS5f
aWdub3JlVG9vbGJhck1vZGVEaWRDaGFuZ2VFdmVudHMgPSBmYWxzZTsKIAotICAgIHRoaXMuX3Vw
ZGF0ZURvY2tOYXZpZ2F0aW9uSXRlbXMoKTsKKyAgICBXSS5fdXBkYXRlRG9ja05hdmlnYXRpb25J
dGVtcygpOwogCi0gICAgaWYgKCF0aGlzLmRvY2tlZENvbmZpZ3VyYXRpb25TdXBwb3J0c1NwbGl0
Q29udGVudEJyb3dzZXIoKSAmJiAhdGhpcy5kb2VzQ3VycmVudFRhYlN1cHBvcnRTcGxpdENvbnRl
bnRCcm93c2VyKCkpCi0gICAgICAgIHRoaXMuaGlkZVNwbGl0Q29uc29sZSgpOworICAgIGlmICgh
V0kuZG9ja2VkQ29uZmlndXJhdGlvblN1cHBvcnRzU3BsaXRDb250ZW50QnJvd3NlcigpICYmICFX
SS5kb2VzQ3VycmVudFRhYlN1cHBvcnRTcGxpdENvbnRlbnRCcm93c2VyKCkpCisgICAgICAgIFdJ
LmhpZGVTcGxpdENvbnNvbGUoKTsKIH07CiAKIFdJLnVwZGF0ZVZpc2liaWxpdHlTdGF0ZSA9IGZ1
bmN0aW9uKHZpc2libGUpCiB7Ci0gICAgdGhpcy52aXNpYmxlID0gdmlzaWJsZTsKLSAgICB0aGlz
Lm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLk5vdGlmaWNhdGlvbi5W
aXNpYmlsaXR5U3RhdGVEaWRDaGFuZ2UpOworICAgIFdJLnZpc2libGUgPSB2aXNpYmxlOworICAg
IFdJLm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLk5vdGlmaWNhdGlv
bi5WaXNpYmlsaXR5U3RhdGVEaWRDaGFuZ2UpOwogfTsKIAogV0kuaGFuZGxlUG9zc2libGVMaW5r
Q2xpY2sgPSBmdW5jdGlvbihldmVudCwgZnJhbWUsIG9wdGlvbnMgPSB7fSkKQEAgLTkyOCw3ICs5
MjgsNyBAQCBXSS5oYW5kbGVQb3NzaWJsZUxpbmtDbGljayA9IGZ1bmN0aW9uKGV2ZW50LCBmcmFt
ZSwgb3B0aW9ucyA9IHt9KQogICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgZXZlbnQu
c3RvcFByb3BhZ2F0aW9uKCk7CiAKLSAgICB0aGlzLm9wZW5VUkwoYW5jaG9yRWxlbWVudC5ocmVm
LCBmcmFtZSwgeworICAgIFdJLm9wZW5VUkwoYW5jaG9yRWxlbWVudC5ocmVmLCBmcmFtZSwgewog
ICAgICAgICAuLi5vcHRpb25zLAogICAgICAgICBsaW5lTnVtYmVyOiBhbmNob3JFbGVtZW50Lmxp
bmVOdW1iZXIsCiAgICAgICAgIGlnbm9yZVNlYXJjaFRhYjogIVdJLmlzU2hvd2luZ1NlYXJjaFRh
YigpLApAQCAtOTU2LDcgKzk1Niw3IEBAIFdJLm9wZW5VUkwgPSBmdW5jdGlvbih1cmwsIGZyYW1l
LCBvcHRpb25zID0ge30pCiAKICAgICBsZXQgc2VhcmNoQ2hpbGRGcmFtZXMgPSBmYWxzZTsKICAg
ICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgIGZyYW1lID0gdGhpcy5uZXR3b3JrTWFuYWdlci5tYWlu
RnJhbWU7CisgICAgICAgIGZyYW1lID0gV0kubmV0d29ya01hbmFnZXIubWFpbkZyYW1lOwogICAg
ICAgICBzZWFyY2hDaGlsZEZyYW1lcyA9IHRydWU7CiAgICAgfQogCkBAIC05NzAsNyArOTcwLDcg
QEAgV0kub3BlblVSTCA9IGZ1bmN0aW9uKHVybCwgZnJhbWUsIG9wdGlvbnMgPSB7fSkKIAogICAg
IGlmIChyZXNvdXJjZSkgewogICAgICAgICBsZXQgcG9zaXRpb25Ub1JldmVhbCA9IG5ldyBXSS5T
b3VyY2VDb2RlUG9zaXRpb24ob3B0aW9ucy5saW5lTnVtYmVyLCAwKTsKLSAgICAgICAgdGhpcy5z
aG93U291cmNlQ29kZShyZXNvdXJjZSwgey4uLm9wdGlvbnMsIHBvc2l0aW9uVG9SZXZlYWx9KTsK
KyAgICAgICAgV0kuc2hvd1NvdXJjZUNvZGUocmVzb3VyY2UsIHsuLi5vcHRpb25zLCBwb3NpdGlv
blRvUmV2ZWFsfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk3OSwxMDUgKzk3OSwx
MDUgQEAgV0kub3BlblVSTCA9IGZ1bmN0aW9uKHVybCwgZnJhbWUsIG9wdGlvbnMgPSB7fSkKIAog
V0kuY2xvc2UgPSBmdW5jdGlvbigpCiB7Ci0gICAgaWYgKHRoaXMuX2lzQ2xvc2luZykKKyAgICBp
ZiAoV0kuX2lzQ2xvc2luZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgdGhpcy5faXNDbG9zaW5n
ID0gdHJ1ZTsKKyAgICBXSS5faXNDbG9zaW5nID0gdHJ1ZTsKIAogICAgIEluc3BlY3RvckZyb250
ZW5kSG9zdC5jbG9zZVdpbmRvdygpOwogfTsKIAogV0kuaXNDb25zb2xlRm9jdXNlZCA9IGZ1bmN0
aW9uKCkKIHsKLSAgICByZXR1cm4gdGhpcy5xdWlja0NvbnNvbGUucHJvbXB0LmZvY3VzZWQ7Cisg
ICAgcmV0dXJuIFdJLnF1aWNrQ29uc29sZS5wcm9tcHQuZm9jdXNlZDsKIH07CiAKIFdJLmlzU2hv
d2luZ1NwbGl0Q29uc29sZSA9IGZ1bmN0aW9uKCkKIHsKLSAgICByZXR1cm4gIXRoaXMuY29uc29s
ZURyYXdlci5jb2xsYXBzZWQ7CisgICAgcmV0dXJuICFXSS5jb25zb2xlRHJhd2VyLmNvbGxhcHNl
ZDsKIH07CiAKIFdJLmRvY2tlZENvbmZpZ3VyYXRpb25TdXBwb3J0c1NwbGl0Q29udGVudEJyb3dz
ZXIgPSBmdW5jdGlvbigpCiB7Ci0gICAgcmV0dXJuIHRoaXMuX2RvY2tDb25maWd1cmF0aW9uICE9
PSBXSS5Eb2NrQ29uZmlndXJhdGlvbi5Cb3R0b207CisgICAgcmV0dXJuIFdJLl9kb2NrQ29uZmln
dXJhdGlvbiAhPT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24uQm90dG9tOwogfTsKIAogV0kuZG9lc0N1
cnJlbnRUYWJTdXBwb3J0U3BsaXRDb250ZW50QnJvd3NlciA9IGZ1bmN0aW9uKCkKIHsKLSAgICB2
YXIgY3VycmVudENvbnRlbnRWaWV3ID0gdGhpcy50YWJCcm93c2VyLnNlbGVjdGVkVGFiQ29udGVu
dFZpZXc7CisgICAgdmFyIGN1cnJlbnRDb250ZW50VmlldyA9IFdJLnRhYkJyb3dzZXIuc2VsZWN0
ZWRUYWJDb250ZW50VmlldzsKICAgICByZXR1cm4gIWN1cnJlbnRDb250ZW50VmlldyB8fCBjdXJy
ZW50Q29udGVudFZpZXcuc3VwcG9ydHNTcGxpdENvbnRlbnRCcm93c2VyOwogfTsKIAogV0kudG9n
Z2xlU3BsaXRDb25zb2xlID0gZnVuY3Rpb24oKQogewotICAgIGlmICghdGhpcy5kb2VzQ3VycmVu
dFRhYlN1cHBvcnRTcGxpdENvbnRlbnRCcm93c2VyKCkpIHsKLSAgICAgICAgdGhpcy5zaG93Q29u
c29sZVRhYigpOworICAgIGlmICghV0kuZG9lc0N1cnJlbnRUYWJTdXBwb3J0U3BsaXRDb250ZW50
QnJvd3NlcigpKSB7CisgICAgICAgIFdJLnNob3dDb25zb2xlVGFiKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAodGhpcy5pc1Nob3dpbmdTcGxpdENvbnNvbGUoKSkKLSAgICAg
ICAgdGhpcy5oaWRlU3BsaXRDb25zb2xlKCk7CisgICAgaWYgKFdJLmlzU2hvd2luZ1NwbGl0Q29u
c29sZSgpKQorICAgICAgICBXSS5oaWRlU3BsaXRDb25zb2xlKCk7CiAgICAgZWxzZQotICAgICAg
ICB0aGlzLnNob3dTcGxpdENvbnNvbGUoKTsKKyAgICAgICAgV0kuc2hvd1NwbGl0Q29uc29sZSgp
OwogfTsKIAogV0kuc2hvd1NwbGl0Q29uc29sZSA9IGZ1bmN0aW9uKCkKIHsKLSAgICBpZiAoIXRo
aXMuZG9lc0N1cnJlbnRUYWJTdXBwb3J0U3BsaXRDb250ZW50QnJvd3NlcigpKSB7Ci0gICAgICAg
IHRoaXMuc2hvd0NvbnNvbGVUYWIoKTsKKyAgICBpZiAoIVdJLmRvZXNDdXJyZW50VGFiU3VwcG9y
dFNwbGl0Q29udGVudEJyb3dzZXIoKSkgeworICAgICAgICBXSS5zaG93Q29uc29sZVRhYigpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdGhpcy5jb25zb2xlRHJhd2VyLmNvbGxhcHNl
ZCA9IGZhbHNlOworICAgIFdJLmNvbnNvbGVEcmF3ZXIuY29sbGFwc2VkID0gZmFsc2U7CiAKLSAg
ICBpZiAodGhpcy5jb25zb2xlRHJhd2VyLmN1cnJlbnRDb250ZW50VmlldyA9PT0gdGhpcy5jb25z
b2xlQ29udGVudFZpZXcpCisgICAgaWYgKFdJLmNvbnNvbGVEcmF3ZXIuY3VycmVudENvbnRlbnRW
aWV3ID09PSBXSS5jb25zb2xlQ29udGVudFZpZXcpCiAgICAgICAgIHJldHVybjsKIAotICAgIHRo
aXMuY29uc29sZURyYXdlci5zaG93Q29udGVudFZpZXcodGhpcy5jb25zb2xlQ29udGVudFZpZXcp
OworICAgIFdJLmNvbnNvbGVEcmF3ZXIuc2hvd0NvbnRlbnRWaWV3KFdJLmNvbnNvbGVDb250ZW50
Vmlldyk7CiB9OwogCiBXSS5oaWRlU3BsaXRDb25zb2xlID0gZnVuY3Rpb24oKQogewotICAgIGlm
ICghdGhpcy5pc1Nob3dpbmdTcGxpdENvbnNvbGUoKSkKKyAgICBpZiAoIVdJLmlzU2hvd2luZ1Nw
bGl0Q29uc29sZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0aGlzLmNvbnNvbGVEcmF3ZXIu
Y29sbGFwc2VkID0gdHJ1ZTsKKyAgICBXSS5jb25zb2xlRHJhd2VyLmNvbGxhcHNlZCA9IHRydWU7
CiB9OwogCiBXSS5zaG93Q29uc29sZVRhYiA9IGZ1bmN0aW9uKHJlcXVlc3RlZFNjb3BlKQogewog
ICAgIHJlcXVlc3RlZFNjb3BlID0gcmVxdWVzdGVkU2NvcGUgfHwgV0kuTG9nQ29udGVudFZpZXcu
U2NvcGVzLkFsbDsKIAotICAgIHRoaXMuaGlkZVNwbGl0Q29uc29sZSgpOworICAgIFdJLmhpZGVT
cGxpdENvbnNvbGUoKTsKIAotICAgIHRoaXMuY29uc29sZUNvbnRlbnRWaWV3LnNjb3BlQmFyLml0
ZW0ocmVxdWVzdGVkU2NvcGUpLnNlbGVjdGVkID0gdHJ1ZTsKKyAgICBXSS5jb25zb2xlQ29udGVu
dFZpZXcuc2NvcGVCYXIuaXRlbShyZXF1ZXN0ZWRTY29wZSkuc2VsZWN0ZWQgPSB0cnVlOwogCi0g
ICAgdGhpcy5zaG93UmVwcmVzZW50ZWRPYmplY3QodGhpcy5fY29uc29sZVJlcHJlc2VudGVkT2Jq
ZWN0KTsKKyAgICBXSS5zaG93UmVwcmVzZW50ZWRPYmplY3QoV0kuX2NvbnNvbGVSZXByZXNlbnRl
ZE9iamVjdCk7CiAKLSAgICBjb25zb2xlLmFzc2VydCh0aGlzLmlzU2hvd2luZ0NvbnNvbGVUYWIo
KSk7CisgICAgY29uc29sZS5hc3NlcnQoV0kuaXNTaG93aW5nQ29uc29sZVRhYigpKTsKIH07CiAK
IFdJLmlzU2hvd2luZ0NvbnNvbGVUYWIgPSBmdW5jdGlvbigpCiB7Ci0gICAgcmV0dXJuIHRoaXMu
dGFiQnJvd3Nlci5zZWxlY3RlZFRhYkNvbnRlbnRWaWV3IGluc3RhbmNlb2YgV0kuQ29uc29sZVRh
YkNvbnRlbnRWaWV3OworICAgIHJldHVybiBXSS50YWJCcm93c2VyLnNlbGVjdGVkVGFiQ29udGVu
dFZpZXcgaW5zdGFuY2VvZiBXSS5Db25zb2xlVGFiQ29udGVudFZpZXc7CiB9OwogCiBXSS5zaG93
RWxlbWVudHNUYWIgPSBmdW5jdGlvbigpCiB7Ci0gICAgdmFyIHRhYkNvbnRlbnRWaWV3ID0gdGhp
cy50YWJCcm93c2VyLmJlc3RUYWJDb250ZW50Vmlld0ZvckNsYXNzKFdJLkVsZW1lbnRzVGFiQ29u
dGVudFZpZXcpOworICAgIHZhciB0YWJDb250ZW50VmlldyA9IFdJLnRhYkJyb3dzZXIuYmVzdFRh
YkNvbnRlbnRWaWV3Rm9yQ2xhc3MoV0kuRWxlbWVudHNUYWJDb250ZW50Vmlldyk7CiAgICAgaWYg
KCF0YWJDb250ZW50VmlldykKICAgICAgICAgdGFiQ29udGVudFZpZXcgPSBuZXcgV0kuRWxlbWVu
dHNUYWJDb250ZW50VmlldzsKLSAgICB0aGlzLnRhYkJyb3dzZXIuc2hvd1RhYkZvckNvbnRlbnRW
aWV3KHRhYkNvbnRlbnRWaWV3KTsKKyAgICBXSS50YWJCcm93c2VyLnNob3dUYWJGb3JDb250ZW50
Vmlldyh0YWJDb250ZW50Vmlldyk7CiB9OwogCiBXSS5pc1Nob3dpbmdFbGVtZW50c1RhYiA9IGZ1
bmN0aW9uKCkKIHsKLSAgICByZXR1cm4gdGhpcy50YWJCcm93c2VyLnNlbGVjdGVkVGFiQ29udGVu
dFZpZXcgaW5zdGFuY2VvZiBXSS5FbGVtZW50c1RhYkNvbnRlbnRWaWV3OworICAgIHJldHVybiBX
SS50YWJCcm93c2VyLnNlbGVjdGVkVGFiQ29udGVudFZpZXcgaW5zdGFuY2VvZiBXSS5FbGVtZW50
c1RhYkNvbnRlbnRWaWV3OwogfTsKIAogV0kuc2hvd1NvdXJjZXNUYWIgPSBmdW5jdGlvbihvcHRp
b25zID0ge30pCiB7Ci0gICAgbGV0IHRhYkNvbnRlbnRWaWV3ID0gdGhpcy50YWJCcm93c2VyLmJl
c3RUYWJDb250ZW50Vmlld0ZvckNsYXNzKFdJLlNvdXJjZXNUYWJDb250ZW50Vmlldyk7CisgICAg
bGV0IHRhYkNvbnRlbnRWaWV3ID0gV0kudGFiQnJvd3Nlci5iZXN0VGFiQ29udGVudFZpZXdGb3JD
bGFzcyhXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcpOwogICAgIGlmICghdGFiQ29udGVudFZpZXcp
CiAgICAgICAgIHRhYkNvbnRlbnRWaWV3ID0gbmV3IFdJLlNvdXJjZXNUYWJDb250ZW50VmlldzsK
IApAQCAtMTA4NywxNyArMTA4NywxNyBAQCBXSS5zaG93U291cmNlc1RhYiA9IGZ1bmN0aW9uKG9w
dGlvbnMgPSB7fSkKICAgICBpZiAob3B0aW9ucy5zaG93U2NvcGVDaGFpblNpZGViYXIpCiAgICAg
ICAgIHRhYkNvbnRlbnRWaWV3LnNob3dTY29wZUNoYWluRGV0YWlsc1NpZGViYXJQYW5lbCgpOwog
Ci0gICAgdGhpcy50YWJCcm93c2VyLnNob3dUYWJGb3JDb250ZW50Vmlldyh0YWJDb250ZW50Vmll
dyk7CisgICAgV0kudGFiQnJvd3Nlci5zaG93VGFiRm9yQ29udGVudFZpZXcodGFiQ29udGVudFZp
ZXcpOwogfTsKIAogV0kuaXNTaG93aW5nU291cmNlc1RhYiA9IGZ1bmN0aW9uKCkKIHsKLSAgICBy
ZXR1cm4gdGhpcy50YWJCcm93c2VyLnNlbGVjdGVkVGFiQ29udGVudFZpZXcgaW5zdGFuY2VvZiBX
SS5Tb3VyY2VzVGFiQ29udGVudFZpZXc7CisgICAgcmV0dXJuIFdJLnRhYkJyb3dzZXIuc2VsZWN0
ZWRUYWJDb250ZW50VmlldyBpbnN0YW5jZW9mIFdJLlNvdXJjZXNUYWJDb250ZW50VmlldzsKIH07
CiAKIFdJLnNob3dEZWJ1Z2dlclRhYiA9IGZ1bmN0aW9uKG9wdGlvbnMpCiB7Ci0gICAgdmFyIHRh
YkNvbnRlbnRWaWV3ID0gdGhpcy50YWJCcm93c2VyLmJlc3RUYWJDb250ZW50Vmlld0ZvckNsYXNz
KFdJLkRlYnVnZ2VyVGFiQ29udGVudFZpZXcpOworICAgIHZhciB0YWJDb250ZW50VmlldyA9IFdJ
LnRhYkJyb3dzZXIuYmVzdFRhYkNvbnRlbnRWaWV3Rm9yQ2xhc3MoV0kuRGVidWdnZXJUYWJDb250
ZW50Vmlldyk7CiAgICAgaWYgKCF0YWJDb250ZW50VmlldykKICAgICAgICAgdGFiQ29udGVudFZp
ZXcgPSBuZXcgV0kuRGVidWdnZXJUYWJDb250ZW50VmlldzsKIApAQCAtMTEwNyw3NSArMTEwNyw3
NSBAQCBXSS5zaG93RGVidWdnZXJUYWIgPSBmdW5jdGlvbihvcHRpb25zKQogICAgIGlmIChvcHRp
b25zLnNob3dTY29wZUNoYWluU2lkZWJhcikKICAgICAgICAgdGFiQ29udGVudFZpZXcuc2hvd1Nj
b3BlQ2hhaW5EZXRhaWxzU2lkZWJhclBhbmVsKCk7CiAKLSAgICB0aGlzLnRhYkJyb3dzZXIuc2hv
d1RhYkZvckNvbnRlbnRWaWV3KHRhYkNvbnRlbnRWaWV3KTsKKyAgICBXSS50YWJCcm93c2VyLnNo
b3dUYWJGb3JDb250ZW50Vmlldyh0YWJDb250ZW50Vmlldyk7CiB9OwogCiBXSS5pc1Nob3dpbmdE
ZWJ1Z2dlclRhYiA9IGZ1bmN0aW9uKCkKIHsKLSAgICByZXR1cm4gdGhpcy50YWJCcm93c2VyLnNl
bGVjdGVkVGFiQ29udGVudFZpZXcgaW5zdGFuY2VvZiBXSS5EZWJ1Z2dlclRhYkNvbnRlbnRWaWV3
OworICAgIHJldHVybiBXSS50YWJCcm93c2VyLnNlbGVjdGVkVGFiQ29udGVudFZpZXcgaW5zdGFu
Y2VvZiBXSS5EZWJ1Z2dlclRhYkNvbnRlbnRWaWV3OwogfTsKIAogV0kuc2hvd1Jlc291cmNlc1Rh
YiA9IGZ1bmN0aW9uKCkKIHsKLSAgICB2YXIgdGFiQ29udGVudFZpZXcgPSB0aGlzLnRhYkJyb3dz
ZXIuYmVzdFRhYkNvbnRlbnRWaWV3Rm9yQ2xhc3MoV0kuUmVzb3VyY2VzVGFiQ29udGVudFZpZXcp
OworICAgIHZhciB0YWJDb250ZW50VmlldyA9IFdJLnRhYkJyb3dzZXIuYmVzdFRhYkNvbnRlbnRW
aWV3Rm9yQ2xhc3MoV0kuUmVzb3VyY2VzVGFiQ29udGVudFZpZXcpOwogICAgIGlmICghdGFiQ29u
dGVudFZpZXcpCiAgICAgICAgIHRhYkNvbnRlbnRWaWV3ID0gbmV3IFdJLlJlc291cmNlc1RhYkNv
bnRlbnRWaWV3OwotICAgIHRoaXMudGFiQnJvd3Nlci5zaG93VGFiRm9yQ29udGVudFZpZXcodGFi
Q29udGVudFZpZXcpOworICAgIFdJLnRhYkJyb3dzZXIuc2hvd1RhYkZvckNvbnRlbnRWaWV3KHRh
YkNvbnRlbnRWaWV3KTsKIH07CiAKIFdJLmlzU2hvd2luZ1Jlc291cmNlc1RhYiA9IGZ1bmN0aW9u
KCkKIHsKLSAgICByZXR1cm4gdGhpcy50YWJCcm93c2VyLnNlbGVjdGVkVGFiQ29udGVudFZpZXcg
aW5zdGFuY2VvZiBXSS5SZXNvdXJjZXNUYWJDb250ZW50VmlldzsKKyAgICByZXR1cm4gV0kudGFi
QnJvd3Nlci5zZWxlY3RlZFRhYkNvbnRlbnRWaWV3IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VzVGFi
Q29udGVudFZpZXc7CiB9OwogCiBXSS5zaG93U3RvcmFnZVRhYiA9IGZ1bmN0aW9uKCkKIHsKLSAg
ICB2YXIgdGFiQ29udGVudFZpZXcgPSB0aGlzLnRhYkJyb3dzZXIuYmVzdFRhYkNvbnRlbnRWaWV3
Rm9yQ2xhc3MoV0kuU3RvcmFnZVRhYkNvbnRlbnRWaWV3KTsKKyAgICB2YXIgdGFiQ29udGVudFZp
ZXcgPSBXSS50YWJCcm93c2VyLmJlc3RUYWJDb250ZW50Vmlld0ZvckNsYXNzKFdJLlN0b3JhZ2VU
YWJDb250ZW50Vmlldyk7CiAgICAgaWYgKCF0YWJDb250ZW50VmlldykKICAgICAgICAgdGFiQ29u
dGVudFZpZXcgPSBuZXcgV0kuU3RvcmFnZVRhYkNvbnRlbnRWaWV3OwotICAgIHRoaXMudGFiQnJv
d3Nlci5zaG93VGFiRm9yQ29udGVudFZpZXcodGFiQ29udGVudFZpZXcpOworICAgIFdJLnRhYkJy
b3dzZXIuc2hvd1RhYkZvckNvbnRlbnRWaWV3KHRhYkNvbnRlbnRWaWV3KTsKIH07CiAKIFdJLnNo
b3dOZXR3b3JrVGFiID0gZnVuY3Rpb24oKQogewotICAgIGxldCB0YWJDb250ZW50VmlldyA9IHRo
aXMudGFiQnJvd3Nlci5iZXN0VGFiQ29udGVudFZpZXdGb3JDbGFzcyhXSS5OZXR3b3JrVGFiQ29u
dGVudFZpZXcpOworICAgIGxldCB0YWJDb250ZW50VmlldyA9IFdJLnRhYkJyb3dzZXIuYmVzdFRh
YkNvbnRlbnRWaWV3Rm9yQ2xhc3MoV0kuTmV0d29ya1RhYkNvbnRlbnRWaWV3KTsKICAgICBpZiAo
IXRhYkNvbnRlbnRWaWV3KQogICAgICAgICB0YWJDb250ZW50VmlldyA9IG5ldyBXSS5OZXR3b3Jr
VGFiQ29udGVudFZpZXc7CiAKLSAgICB0aGlzLnRhYkJyb3dzZXIuc2hvd1RhYkZvckNvbnRlbnRW
aWV3KHRhYkNvbnRlbnRWaWV3KTsKKyAgICBXSS50YWJCcm93c2VyLnNob3dUYWJGb3JDb250ZW50
Vmlldyh0YWJDb250ZW50Vmlldyk7CiB9OwogCiBXSS5pc1Nob3dpbmdOZXR3b3JrVGFiID0gZnVu
Y3Rpb24oKQogewotICAgIHJldHVybiB0aGlzLnRhYkJyb3dzZXIuc2VsZWN0ZWRUYWJDb250ZW50
VmlldyBpbnN0YW5jZW9mIFdJLk5ldHdvcmtUYWJDb250ZW50VmlldzsKKyAgICByZXR1cm4gV0ku
dGFiQnJvd3Nlci5zZWxlY3RlZFRhYkNvbnRlbnRWaWV3IGluc3RhbmNlb2YgV0kuTmV0d29ya1Rh
YkNvbnRlbnRWaWV3OwogfTsKIAogV0kuaXNTaG93aW5nU2VhcmNoVGFiID0gZnVuY3Rpb24oKQog
ewotICAgIHJldHVybiB0aGlzLnRhYkJyb3dzZXIuc2VsZWN0ZWRUYWJDb250ZW50VmlldyBpbnN0
YW5jZW9mIFdJLlNlYXJjaFRhYkNvbnRlbnRWaWV3OworICAgIHJldHVybiBXSS50YWJCcm93c2Vy
LnNlbGVjdGVkVGFiQ29udGVudFZpZXcgaW5zdGFuY2VvZiBXSS5TZWFyY2hUYWJDb250ZW50Vmll
dzsKIH07CiAKIFdJLnNob3dUaW1lbGluZVRhYiA9IGZ1bmN0aW9uKCkKIHsKLSAgICB2YXIgdGFi
Q29udGVudFZpZXcgPSB0aGlzLnRhYkJyb3dzZXIuYmVzdFRhYkNvbnRlbnRWaWV3Rm9yQ2xhc3Mo
V0kuVGltZWxpbmVUYWJDb250ZW50Vmlldyk7CisgICAgdmFyIHRhYkNvbnRlbnRWaWV3ID0gV0ku
dGFiQnJvd3Nlci5iZXN0VGFiQ29udGVudFZpZXdGb3JDbGFzcyhXSS5UaW1lbGluZVRhYkNvbnRl
bnRWaWV3KTsKICAgICBpZiAoIXRhYkNvbnRlbnRWaWV3KQogICAgICAgICB0YWJDb250ZW50Vmll
dyA9IG5ldyBXSS5UaW1lbGluZVRhYkNvbnRlbnRWaWV3OwotICAgIHRoaXMudGFiQnJvd3Nlci5z
aG93VGFiRm9yQ29udGVudFZpZXcodGFiQ29udGVudFZpZXcpOworICAgIFdJLnRhYkJyb3dzZXIu
c2hvd1RhYkZvckNvbnRlbnRWaWV3KHRhYkNvbnRlbnRWaWV3KTsKIH07CiAKIFdJLnNob3dMYXll
cnNUYWIgPSBmdW5jdGlvbihvcHRpb25zID0ge30pCiB7Ci0gICAgbGV0IHRhYkNvbnRlbnRWaWV3
ID0gdGhpcy50YWJCcm93c2VyLmJlc3RUYWJDb250ZW50Vmlld0ZvckNsYXNzKFdJLkxheWVyc1Rh
YkNvbnRlbnRWaWV3KTsKKyAgICBsZXQgdGFiQ29udGVudFZpZXcgPSBXSS50YWJCcm93c2VyLmJl
c3RUYWJDb250ZW50Vmlld0ZvckNsYXNzKFdJLkxheWVyc1RhYkNvbnRlbnRWaWV3KTsKICAgICBp
ZiAoIXRhYkNvbnRlbnRWaWV3KQogICAgICAgICB0YWJDb250ZW50VmlldyA9IG5ldyBXSS5MYXll
cnNUYWJDb250ZW50VmlldzsKICAgICBpZiAob3B0aW9ucy5ub2RlVG9TZWxlY3QpCiAgICAgICAg
IHRhYkNvbnRlbnRWaWV3LnNlbGVjdExheWVyRm9yTm9kZShvcHRpb25zLm5vZGVUb1NlbGVjdCk7
Ci0gICAgdGhpcy50YWJCcm93c2VyLnNob3dUYWJGb3JDb250ZW50Vmlldyh0YWJDb250ZW50Vmll
dyk7CisgICAgV0kudGFiQnJvd3Nlci5zaG93VGFiRm9yQ29udGVudFZpZXcodGFiQ29udGVudFZp
ZXcpOwogfTsKIAogV0kuaXNTaG93aW5nTGF5ZXJzVGFiID0gZnVuY3Rpb24oKQogewotICAgIHJl
dHVybiB0aGlzLnRhYkJyb3dzZXIuc2VsZWN0ZWRUYWJDb250ZW50VmlldyBpbnN0YW5jZW9mIFdJ
LkxheWVyc1RhYkNvbnRlbnRWaWV3OworICAgIHJldHVybiBXSS50YWJCcm93c2VyLnNlbGVjdGVk
VGFiQ29udGVudFZpZXcgaW5zdGFuY2VvZiBXSS5MYXllcnNUYWJDb250ZW50VmlldzsKIH07CiAK
IFdJLmluZGVudFN0cmluZyA9IGZ1bmN0aW9uKCkKQEAgLTExODcsMzIgKzExODcsMzIgQEAgV0ku
aW5kZW50U3RyaW5nID0gZnVuY3Rpb24oKQogCiBXSS5yZXN0b3JlRm9jdXNGcm9tRWxlbWVudCA9
IGZ1bmN0aW9uKGVsZW1lbnQpCiB7Ci0gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb250YWlu
cyh0aGlzLmN1cnJlbnRGb2N1c0VsZW1lbnQpKQotICAgICAgICB0aGlzLnByZXZpb3VzRm9jdXNF
bGVtZW50LmZvY3VzKCk7CisgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb250YWlucyhXSS5j
dXJyZW50Rm9jdXNFbGVtZW50KSkKKyAgICAgICAgV0kucHJldmlvdXNGb2N1c0VsZW1lbnQuZm9j
dXMoKTsKIH07CiAKIFdJLnRvZ2dsZU5hdmlnYXRpb25TaWRlYmFyID0gZnVuY3Rpb24oZXZlbnQp
CiB7Ci0gICAgaWYgKCF0aGlzLm5hdmlnYXRpb25TaWRlYmFyLmNvbGxhcHNlZCB8fCAhdGhpcy5u
YXZpZ2F0aW9uU2lkZWJhci5zaWRlYmFyUGFuZWxzLmxlbmd0aCkgewotICAgICAgICB0aGlzLm5h
dmlnYXRpb25TaWRlYmFyLmNvbGxhcHNlZCA9IHRydWU7CisgICAgaWYgKCFXSS5uYXZpZ2F0aW9u
U2lkZWJhci5jb2xsYXBzZWQgfHwgIVdJLm5hdmlnYXRpb25TaWRlYmFyLnNpZGViYXJQYW5lbHMu
bGVuZ3RoKSB7CisgICAgICAgIFdJLm5hdmlnYXRpb25TaWRlYmFyLmNvbGxhcHNlZCA9IHRydWU7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRoaXMubmF2aWdhdGlvblNpZGVi
YXIuc2VsZWN0ZWRTaWRlYmFyUGFuZWwpCi0gICAgICAgIHRoaXMubmF2aWdhdGlvblNpZGViYXIu
c2VsZWN0ZWRTaWRlYmFyUGFuZWwgPSB0aGlzLm5hdmlnYXRpb25TaWRlYmFyLnNpZGViYXJQYW5l
bHNbMF07Ci0gICAgdGhpcy5uYXZpZ2F0aW9uU2lkZWJhci5jb2xsYXBzZWQgPSBmYWxzZTsKKyAg
ICBpZiAoIVdJLm5hdmlnYXRpb25TaWRlYmFyLnNlbGVjdGVkU2lkZWJhclBhbmVsKQorICAgICAg
ICBXSS5uYXZpZ2F0aW9uU2lkZWJhci5zZWxlY3RlZFNpZGViYXJQYW5lbCA9IFdJLm5hdmlnYXRp
b25TaWRlYmFyLnNpZGViYXJQYW5lbHNbMF07CisgICAgV0kubmF2aWdhdGlvblNpZGViYXIuY29s
bGFwc2VkID0gZmFsc2U7CiB9OwogCiBXSS50b2dnbGVEZXRhaWxzU2lkZWJhciA9IGZ1bmN0aW9u
KGV2ZW50KQogewotICAgIGlmICghdGhpcy5kZXRhaWxzU2lkZWJhci5jb2xsYXBzZWQgfHwgIXRo
aXMuZGV0YWlsc1NpZGViYXIuc2lkZWJhclBhbmVscy5sZW5ndGgpIHsKLSAgICAgICAgdGhpcy5k
ZXRhaWxzU2lkZWJhci5jb2xsYXBzZWQgPSB0cnVlOworICAgIGlmICghV0kuZGV0YWlsc1NpZGVi
YXIuY29sbGFwc2VkIHx8ICFXSS5kZXRhaWxzU2lkZWJhci5zaWRlYmFyUGFuZWxzLmxlbmd0aCkg
eworICAgICAgICBXSS5kZXRhaWxzU2lkZWJhci5jb2xsYXBzZWQgPSB0cnVlOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0aGlzLmRldGFpbHNTaWRlYmFyLnNlbGVjdGVkU2lk
ZWJhclBhbmVsKQotICAgICAgICB0aGlzLmRldGFpbHNTaWRlYmFyLnNlbGVjdGVkU2lkZWJhclBh
bmVsID0gdGhpcy5kZXRhaWxzU2lkZWJhci5zaWRlYmFyUGFuZWxzWzBdOwotICAgIHRoaXMuZGV0
YWlsc1NpZGViYXIuY29sbGFwc2VkID0gZmFsc2U7CisgICAgaWYgKCFXSS5kZXRhaWxzU2lkZWJh
ci5zZWxlY3RlZFNpZGViYXJQYW5lbCkKKyAgICAgICAgV0kuZGV0YWlsc1NpZGViYXIuc2VsZWN0
ZWRTaWRlYmFyUGFuZWwgPSBXSS5kZXRhaWxzU2lkZWJhci5zaWRlYmFyUGFuZWxzWzBdOworICAg
IFdJLmRldGFpbHNTaWRlYmFyLmNvbGxhcHNlZCA9IGZhbHNlOwogfTsKIAogV0kuZ2V0TWF4aW11
bVNpZGViYXJXaWR0aCA9IGZ1bmN0aW9uKHNpZGViYXIpCkBAIC0xMjIyLDE2ICsxMjIyLDE2IEBA
IFdJLmdldE1heGltdW1TaWRlYmFyV2lkdGggPSBmdW5jdGlvbihzaWRlYmFyKQogICAgIGNvbnN0
IG1pbmltdW1Db250ZW50QnJvd3NlcldpZHRoID0gMTAwOwogCiAgICAgbGV0IG1pbmltdW1XaWR0
aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gbWluaW11bUNvbnRlbnRCcm93c2VyV2lkdGg7Ci0gICAg
bGV0IHRhYkNvbnRlbnRWaWV3ID0gdGhpcy50YWJCcm93c2VyLnNlbGVjdGVkVGFiQ29udGVudFZp
ZXc7CisgICAgbGV0IHRhYkNvbnRlbnRWaWV3ID0gV0kudGFiQnJvd3Nlci5zZWxlY3RlZFRhYkNv
bnRlbnRWaWV3OwogICAgIGNvbnNvbGUuYXNzZXJ0KHRhYkNvbnRlbnRWaWV3KTsKICAgICBpZiAo
IXRhYkNvbnRlbnRWaWV3KQogICAgICAgICByZXR1cm4gbWluaW11bVdpZHRoOwogCiAgICAgbGV0
IG90aGVyU2lkZWJhciA9IG51bGw7Ci0gICAgaWYgKHNpZGViYXIgPT09IHRoaXMubmF2aWdhdGlv
blNpZGViYXIpCi0gICAgICAgIG90aGVyU2lkZWJhciA9IHRhYkNvbnRlbnRWaWV3LmRldGFpbHNT
aWRlYmFyUGFuZWxzLmxlbmd0aCA/IHRoaXMuZGV0YWlsc1NpZGViYXIgOiBudWxsOworICAgIGlm
IChzaWRlYmFyID09PSBXSS5uYXZpZ2F0aW9uU2lkZWJhcikKKyAgICAgICAgb3RoZXJTaWRlYmFy
ID0gdGFiQ29udGVudFZpZXcuZGV0YWlsc1NpZGViYXJQYW5lbHMubGVuZ3RoID8gV0kuZGV0YWls
c1NpZGViYXIgOiBudWxsOwogICAgIGVsc2UKLSAgICAgICAgb3RoZXJTaWRlYmFyID0gdGFiQ29u
dGVudFZpZXcubmF2aWdhdGlvblNpZGViYXJQYW5lbCA/IHRoaXMubmF2aWdhdGlvblNpZGViYXIg
OiBudWxsOworICAgICAgICBvdGhlclNpZGViYXIgPSB0YWJDb250ZW50Vmlldy5uYXZpZ2F0aW9u
U2lkZWJhclBhbmVsID8gV0kubmF2aWdhdGlvblNpZGViYXIgOiBudWxsOwogCiAgICAgaWYgKG90
aGVyU2lkZWJhcikKICAgICAgICAgbWluaW11bVdpZHRoIC09IG90aGVyU2lkZWJhci53aWR0aDsK
QEAgLTEyNDcsOCArMTI0Nyw4IEBAIFdJLnRhYkNvbnRlbnRWaWV3Q2xhc3NGb3JSZXByZXNlbnRl
ZE9iamVjdCA9IGZ1bmN0aW9uKHJlcHJlc2VudGVkT2JqZWN0KQogICAgIGlmIChyZXByZXNlbnRl
ZE9iamVjdCBpbnN0YW5jZW9mIFdJLlRpbWVsaW5lUmVjb3JkaW5nKQogICAgICAgICByZXR1cm4g
V0kuVGltZWxpbmVUYWJDb250ZW50VmlldzsKIAotICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBvbmUg
Y29uc29sZSB0YWIgcmlnaHQgbm93LiBTbyB0aGlzIGlzbid0IGFuIGluc3RhbmNlb2YgY2hlY2su
Ci0gICAgaWYgKHJlcHJlc2VudGVkT2JqZWN0ID09PSB0aGlzLl9jb25zb2xlUmVwcmVzZW50ZWRP
YmplY3QpCisgICAgLy8gV2Ugb25seSBzdXBwb3J0IG9uZSBjb25zb2xlIHRhYiByaWdodCBub3cu
IFNvIFdJIGlzbid0IGFuIGluc3RhbmNlb2YgY2hlY2suCisgICAgaWYgKHJlcHJlc2VudGVkT2Jq
ZWN0ID09PSBXSS5fY29uc29sZVJlcHJlc2VudGVkT2JqZWN0KQogICAgICAgICByZXR1cm4gV0ku
Q29uc29sZVRhYkNvbnRlbnRWaWV3OwogCiAgICAgaWYgKFdJLnNldHRpbmdzLmV4cGVyaW1lbnRh
bEVuYWJsZVNvdXJjZXNUYWIudmFsdWUpIHsKQEAgLTEzMDIsMTEgKzEzMDIsMTEgQEAgV0kudGFi
Q29udGVudFZpZXdDbGFzc0ZvclJlcHJlc2VudGVkT2JqZWN0ID0gZnVuY3Rpb24ocmVwcmVzZW50
ZWRPYmplY3QpCiAKIFdJLnRhYkNvbnRlbnRWaWV3Rm9yUmVwcmVzZW50ZWRPYmplY3QgPSBmdW5j
dGlvbihyZXByZXNlbnRlZE9iamVjdCwgb3B0aW9ucyA9IHt9KQogewotICAgIGxldCB0YWJDb250
ZW50VmlldyA9IHRoaXMudGFiQnJvd3Nlci5iZXN0VGFiQ29udGVudFZpZXdGb3JSZXByZXNlbnRl
ZE9iamVjdChyZXByZXNlbnRlZE9iamVjdCwgb3B0aW9ucyk7CisgICAgbGV0IHRhYkNvbnRlbnRW
aWV3ID0gV0kudGFiQnJvd3Nlci5iZXN0VGFiQ29udGVudFZpZXdGb3JSZXByZXNlbnRlZE9iamVj
dChyZXByZXNlbnRlZE9iamVjdCwgb3B0aW9ucyk7CiAgICAgaWYgKHRhYkNvbnRlbnRWaWV3KQog
ICAgICAgICByZXR1cm4gdGFiQ29udGVudFZpZXc7CiAKLSAgICB2YXIgdGFiQ29udGVudFZpZXdD
bGFzcyA9IHRoaXMudGFiQ29udGVudFZpZXdDbGFzc0ZvclJlcHJlc2VudGVkT2JqZWN0KHJlcHJl
c2VudGVkT2JqZWN0KTsKKyAgICB2YXIgdGFiQ29udGVudFZpZXdDbGFzcyA9IFdJLnRhYkNvbnRl
bnRWaWV3Q2xhc3NGb3JSZXByZXNlbnRlZE9iamVjdChyZXByZXNlbnRlZE9iamVjdCk7CiAgICAg
aWYgKCF0YWJDb250ZW50Vmlld0NsYXNzKSB7CiAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlVua25v
d24gcmVwcmVzZW50ZWRPYmplY3QsIGNvdWxkbid0IGNyZWF0ZSBUYWJDb250ZW50Vmlldy4iLCBy
ZXByZXNlbnRlZE9iamVjdCk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMTMxNCwxOSArMTMx
NCwxOSBAQCBXSS50YWJDb250ZW50Vmlld0ZvclJlcHJlc2VudGVkT2JqZWN0ID0gZnVuY3Rpb24o
cmVwcmVzZW50ZWRPYmplY3QsIG9wdGlvbnMgPSB7fQogCiAgICAgdGFiQ29udGVudFZpZXcgPSBu
ZXcgdGFiQ29udGVudFZpZXdDbGFzczsKIAotICAgIHRoaXMudGFiQnJvd3Nlci5hZGRUYWJGb3JD
b250ZW50Vmlldyh0YWJDb250ZW50Vmlldyk7CisgICAgV0kudGFiQnJvd3Nlci5hZGRUYWJGb3JD
b250ZW50Vmlldyh0YWJDb250ZW50Vmlldyk7CiAKICAgICByZXR1cm4gdGFiQ29udGVudFZpZXc7
CiB9OwogCiBXSS5zaG93UmVwcmVzZW50ZWRPYmplY3QgPSBmdW5jdGlvbihyZXByZXNlbnRlZE9i
amVjdCwgY29va2llLCBvcHRpb25zID0ge30pCiB7Ci0gICAgbGV0IHRhYkNvbnRlbnRWaWV3ID0g
dGhpcy50YWJDb250ZW50Vmlld0ZvclJlcHJlc2VudGVkT2JqZWN0KHJlcHJlc2VudGVkT2JqZWN0
LCBvcHRpb25zKTsKKyAgICBsZXQgdGFiQ29udGVudFZpZXcgPSBXSS50YWJDb250ZW50Vmlld0Zv
clJlcHJlc2VudGVkT2JqZWN0KHJlcHJlc2VudGVkT2JqZWN0LCBvcHRpb25zKTsKICAgICBjb25z
b2xlLmFzc2VydCh0YWJDb250ZW50Vmlldyk7CiAgICAgaWYgKCF0YWJDb250ZW50VmlldykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgdGhpcy50YWJCcm93c2VyLnNob3dUYWJGb3JDb250ZW50Vmll
dyh0YWJDb250ZW50Vmlldywgb3B0aW9ucyk7CisgICAgV0kudGFiQnJvd3Nlci5zaG93VGFiRm9y
Q29udGVudFZpZXcodGFiQ29udGVudFZpZXcsIG9wdGlvbnMpOwogICAgIHRhYkNvbnRlbnRWaWV3
LnNob3dSZXByZXNlbnRlZE9iamVjdChyZXByZXNlbnRlZE9iamVjdCwgY29va2llKTsKIH07CiAK
QEAgLTEzMzUsMjAgKzEzMzUsMjAgQEAgV0kuc2hvd01haW5GcmFtZURPTVRyZWUgPSBmdW5jdGlv
bihub2RlVG9TZWxlY3QsIG9wdGlvbnMgPSB7fSkKICAgICBjb25zb2xlLmFzc2VydChXSS5uZXR3
b3JrTWFuYWdlci5tYWluRnJhbWUpOwogICAgIGlmICghV0kubmV0d29ya01hbmFnZXIubWFpbkZy
YW1lKQogICAgICAgICByZXR1cm47Ci0gICAgdGhpcy5zaG93UmVwcmVzZW50ZWRPYmplY3QoV0ku
bmV0d29ya01hbmFnZXIubWFpbkZyYW1lLmRvbVRyZWUsIHtub2RlVG9TZWxlY3R9LCBvcHRpb25z
KTsKKyAgICBXSS5zaG93UmVwcmVzZW50ZWRPYmplY3QoV0kubmV0d29ya01hbmFnZXIubWFpbkZy
YW1lLmRvbVRyZWUsIHtub2RlVG9TZWxlY3R9LCBvcHRpb25zKTsKIH07CiAKIFdJLnNob3dTb3Vy
Y2VDb2RlRm9yRnJhbWUgPSBmdW5jdGlvbihmcmFtZUlkZW50aWZpZXIsIG9wdGlvbnMgPSB7fSkK
IHsKICAgICB2YXIgZnJhbWUgPSBXSS5uZXR3b3JrTWFuYWdlci5mcmFtZUZvcklkZW50aWZpZXIo
ZnJhbWVJZGVudGlmaWVyKTsKICAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgIHRoaXMuX2ZyYW1l
SWRlbnRpZmllclRvU2hvd1NvdXJjZUNvZGVXaGVuQXZhaWxhYmxlID0gZnJhbWVJZGVudGlmaWVy
OworICAgICAgICBXSS5fZnJhbWVJZGVudGlmaWVyVG9TaG93U291cmNlQ29kZVdoZW5BdmFpbGFi
bGUgPSBmcmFtZUlkZW50aWZpZXI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB0aGlz
Ll9mcmFtZUlkZW50aWZpZXJUb1Nob3dTb3VyY2VDb2RlV2hlbkF2YWlsYWJsZSA9IHVuZGVmaW5l
ZDsKKyAgICBXSS5fZnJhbWVJZGVudGlmaWVyVG9TaG93U291cmNlQ29kZVdoZW5BdmFpbGFibGUg
PSB1bmRlZmluZWQ7CiAKLSAgICB0aGlzLnNob3dSZXByZXNlbnRlZE9iamVjdChmcmFtZSwgbnVs
bCwgb3B0aW9ucyk7CisgICAgV0kuc2hvd1JlcHJlc2VudGVkT2JqZWN0KGZyYW1lLCBudWxsLCBv
cHRpb25zKTsKIH07CiAKIFdJLnNob3dTb3VyY2VDb2RlID0gZnVuY3Rpb24oc291cmNlQ29kZSwg
b3B0aW9ucyA9IHt9KQpAQCAtMTM2NCwxMiArMTM2NCwxMiBAQCBXSS5zaG93U291cmNlQ29kZSA9
IGZ1bmN0aW9uKHNvdXJjZUNvZGUsIG9wdGlvbnMgPSB7fSkKICAgICB9CiAKICAgICB2YXIgY29v
a2llID0gcG9zaXRpb25Ub1JldmVhbCA/IHtsaW5lTnVtYmVyOiBwb3NpdGlvblRvUmV2ZWFsLmxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlcjogcG9zaXRpb25Ub1JldmVhbC5jb2x1bW5OdW1iZXJ9IDog
e307Ci0gICAgdGhpcy5zaG93UmVwcmVzZW50ZWRPYmplY3QocmVwcmVzZW50ZWRPYmplY3QsIGNv
b2tpZSwgb3B0aW9ucyk7CisgICAgV0kuc2hvd1JlcHJlc2VudGVkT2JqZWN0KHJlcHJlc2VudGVk
T2JqZWN0LCBjb29raWUsIG9wdGlvbnMpOwogfTsKIAogV0kuc2hvd1NvdXJjZUNvZGVMb2NhdGlv
biA9IGZ1bmN0aW9uKHNvdXJjZUNvZGVMb2NhdGlvbiwgb3B0aW9ucyA9IHt9KQogewotICAgIHRo
aXMuc2hvd1NvdXJjZUNvZGUoc291cmNlQ29kZUxvY2F0aW9uLmRpc3BsYXlTb3VyY2VDb2RlLCB7
CisgICAgV0kuc2hvd1NvdXJjZUNvZGUoc291cmNlQ29kZUxvY2F0aW9uLmRpc3BsYXlTb3VyY2VD
b2RlLCB7CiAgICAgICAgIC4uLm9wdGlvbnMsCiAgICAgICAgIHBvc2l0aW9uVG9SZXZlYWw6IHNv
dXJjZUNvZGVMb2NhdGlvbi5kaXNwbGF5UG9zaXRpb24oKSwKICAgICB9KTsKQEAgLTEzNzcsNyAr
MTM3Nyw3IEBAIFdJLnNob3dTb3VyY2VDb2RlTG9jYXRpb24gPSBmdW5jdGlvbihzb3VyY2VDb2Rl
TG9jYXRpb24sIG9wdGlvbnMgPSB7fSkKIAogV0kuc2hvd09yaWdpbmFsVW5mb3JtYXR0ZWRTb3Vy
Y2VDb2RlTG9jYXRpb24gPSBmdW5jdGlvbihzb3VyY2VDb2RlTG9jYXRpb24sIG9wdGlvbnMgPSB7
fSkKIHsKLSAgICB0aGlzLnNob3dTb3VyY2VDb2RlKHNvdXJjZUNvZGVMb2NhdGlvbi5zb3VyY2VD
b2RlLCB7CisgICAgV0kuc2hvd1NvdXJjZUNvZGUoc291cmNlQ29kZUxvY2F0aW9uLnNvdXJjZUNv
ZGUsIHsKICAgICAgICAgLi4ub3B0aW9ucywKICAgICAgICAgcG9zaXRpb25Ub1JldmVhbDogc291
cmNlQ29kZUxvY2F0aW9uLnBvc2l0aW9uKCksCiAgICAgICAgIGZvcmNlVW5mb3JtYXR0ZWQ6IHRy
dWUsCkBAIC0xMzg2LDcgKzEzODYsNyBAQCBXSS5zaG93T3JpZ2luYWxVbmZvcm1hdHRlZFNvdXJj
ZUNvZGVMb2NhdGlvbiA9IGZ1bmN0aW9uKHNvdXJjZUNvZGVMb2NhdGlvbiwgb3B0aQogCiBXSS5z
aG93T3JpZ2luYWxPckZvcm1hdHRlZFNvdXJjZUNvZGVMb2NhdGlvbiA9IGZ1bmN0aW9uKHNvdXJj
ZUNvZGVMb2NhdGlvbiwgb3B0aW9ucyA9IHt9KQogewotICAgIHRoaXMuc2hvd1NvdXJjZUNvZGUo
c291cmNlQ29kZUxvY2F0aW9uLnNvdXJjZUNvZGUsIHsKKyAgICBXSS5zaG93U291cmNlQ29kZShz
b3VyY2VDb2RlTG9jYXRpb24uc291cmNlQ29kZSwgewogICAgICAgICAuLi5vcHRpb25zLAogICAg
ICAgICBwb3NpdGlvblRvUmV2ZWFsOiBzb3VyY2VDb2RlTG9jYXRpb24uZm9ybWF0dGVkUG9zaXRp
b24oKSwKICAgICB9KTsKQEAgLTEzOTUsNyArMTM5NSw3IEBAIFdJLnNob3dPcmlnaW5hbE9yRm9y
bWF0dGVkU291cmNlQ29kZUxvY2F0aW9uID0gZnVuY3Rpb24oc291cmNlQ29kZUxvY2F0aW9uLCBv
cHRpCiBXSS5zaG93T3JpZ2luYWxPckZvcm1hdHRlZFNvdXJjZUNvZGVUZXh0UmFuZ2UgPSBmdW5j
dGlvbihzb3VyY2VDb2RlVGV4dFJhbmdlLCBvcHRpb25zID0ge30pCiB7CiAgICAgdmFyIHRleHRS
YW5nZVRvU2VsZWN0ID0gc291cmNlQ29kZVRleHRSYW5nZS5mb3JtYXR0ZWRUZXh0UmFuZ2U7Ci0g
ICAgdGhpcy5zaG93U291cmNlQ29kZShzb3VyY2VDb2RlVGV4dFJhbmdlLnNvdXJjZUNvZGUsIHsK
KyAgICBXSS5zaG93U291cmNlQ29kZShzb3VyY2VDb2RlVGV4dFJhbmdlLnNvdXJjZUNvZGUsIHsK
ICAgICAgICAgLi4ub3B0aW9ucywKICAgICAgICAgcG9zaXRpb25Ub1JldmVhbDogdGV4dFJhbmdl
VG9TZWxlY3Quc3RhcnRQb3NpdGlvbigpLAogICAgICAgICB0ZXh0UmFuZ2VUb1NlbGVjdCwKQEAg
LTE0MDQsNyArMTQwNCw3IEBAIFdJLnNob3dPcmlnaW5hbE9yRm9ybWF0dGVkU291cmNlQ29kZVRl
eHRSYW5nZSA9IGZ1bmN0aW9uKHNvdXJjZUNvZGVUZXh0UmFuZ2UsIG9wCiAKIFdJLnNob3dSZXNv
dXJjZVJlcXVlc3QgPSBmdW5jdGlvbihyZXNvdXJjZSwgb3B0aW9ucyA9IHt9KQogewotICAgIHRo
aXMuc2hvd1JlcHJlc2VudGVkT2JqZWN0KHJlc291cmNlLCB7W1dJLlJlc291cmNlQ2x1c3RlckNv
bnRlbnRWaWV3LkNvbnRlbnRWaWV3SWRlbnRpZmllckNvb2tpZUtleV06IFdJLlJlc291cmNlQ2x1
c3RlckNvbnRlbnRWaWV3LlJlcXVlc3RJZGVudGlmaWVyfSwgb3B0aW9ucyk7CisgICAgV0kuc2hv
d1JlcHJlc2VudGVkT2JqZWN0KHJlc291cmNlLCB7W1dJLlJlc291cmNlQ2x1c3RlckNvbnRlbnRW
aWV3LkNvbnRlbnRWaWV3SWRlbnRpZmllckNvb2tpZUtleV06IFdJLlJlc291cmNlQ2x1c3RlckNv
bnRlbnRWaWV3LlJlcXVlc3RJZGVudGlmaWVyfSwgb3B0aW9ucyk7CiB9OwogCiBXSS5kZWJ1Z2dl
clRvZ2dsZUJyZWFrcG9pbnRzID0gZnVuY3Rpb24oZXZlbnQpCkBAIC0xNDM3LDE0ICsxNDM3LDE0
IEBAIFdJLmRlYnVnZ2VyU3RlcE91dCA9IGZ1bmN0aW9uKGV2ZW50KQogCiBXSS5fc2VhcmNoVGV4
dERpZENoYW5nZSA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAgIHZhciB0YWJDb250ZW50VmlldyA9
IHRoaXMudGFiQnJvd3Nlci5iZXN0VGFiQ29udGVudFZpZXdGb3JDbGFzcyhXSS5TZWFyY2hUYWJD
b250ZW50Vmlldyk7CisgICAgdmFyIHRhYkNvbnRlbnRWaWV3ID0gV0kudGFiQnJvd3Nlci5iZXN0
VGFiQ29udGVudFZpZXdGb3JDbGFzcyhXSS5TZWFyY2hUYWJDb250ZW50Vmlldyk7CiAgICAgaWYg
KCF0YWJDb250ZW50VmlldykKICAgICAgICAgdGFiQ29udGVudFZpZXcgPSBuZXcgV0kuU2VhcmNo
VGFiQ29udGVudFZpZXc7CiAKLSAgICB2YXIgc2VhcmNoUXVlcnkgPSB0aGlzLl9zZWFyY2hUb29s
YmFySXRlbS50ZXh0OwotICAgIHRoaXMuX3NlYXJjaFRvb2xiYXJJdGVtLnRleHQgPSAiIjsKKyAg
ICB2YXIgc2VhcmNoUXVlcnkgPSBXSS5fc2VhcmNoVG9vbGJhckl0ZW0udGV4dDsKKyAgICBXSS5f
c2VhcmNoVG9vbGJhckl0ZW0udGV4dCA9ICIiOwogCi0gICAgdGhpcy50YWJCcm93c2VyLnNob3dU
YWJGb3JDb250ZW50Vmlldyh0YWJDb250ZW50Vmlldyk7CisgICAgV0kudGFiQnJvd3Nlci5zaG93
VGFiRm9yQ29udGVudFZpZXcodGFiQ29udGVudFZpZXcpOwogCiAgICAgdGFiQ29udGVudFZpZXcu
cGVyZm9ybVNlYXJjaChzZWFyY2hRdWVyeSk7CiB9OwpAQCAtMTQ1MiwxNSArMTQ1MiwxNSBAQCBX
SS5fc2VhcmNoVGV4dERpZENoYW5nZSA9IGZ1bmN0aW9uKGV2ZW50KQogV0kuX2ZvY3VzU2VhcmNo
RmllbGQgPSBmdW5jdGlvbihldmVudCkKIHsKICAgICBpZiAoV0kuc2V0dGluZ3MuZXhwZXJpbWVu
dGFsRW5hYmxlTmV3VGFiQmFyLnZhbHVlKQotICAgICAgICB0aGlzLnRhYkJyb3dzZXIuc2hvd1Rh
YkZvckNvbnRlbnRWaWV3KHRoaXMuX3NlYXJjaFRhYkNvbnRlbnRWaWV3KTsKKyAgICAgICAgV0ku
dGFiQnJvd3Nlci5zaG93VGFiRm9yQ29udGVudFZpZXcoV0kuX3NlYXJjaFRhYkNvbnRlbnRWaWV3
KTsKIAotICAgIGlmICh0aGlzLnRhYkJyb3dzZXIuc2VsZWN0ZWRUYWJDb250ZW50VmlldyBpbnN0
YW5jZW9mIFdJLlNlYXJjaFRhYkNvbnRlbnRWaWV3KSB7Ci0gICAgICAgIHRoaXMudGFiQnJvd3Nl
ci5zZWxlY3RlZFRhYkNvbnRlbnRWaWV3LmZvY3VzU2VhcmNoRmllbGQoKTsKKyAgICBpZiAoV0ku
dGFiQnJvd3Nlci5zZWxlY3RlZFRhYkNvbnRlbnRWaWV3IGluc3RhbmNlb2YgV0kuU2VhcmNoVGFi
Q29udGVudFZpZXcpIHsKKyAgICAgICAgV0kudGFiQnJvd3Nlci5zZWxlY3RlZFRhYkNvbnRlbnRW
aWV3LmZvY3VzU2VhcmNoRmllbGQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
ICh0aGlzLl9zZWFyY2hUb29sYmFySXRlbSkKLSAgICAgICAgdGhpcy5fc2VhcmNoVG9vbGJhckl0
ZW0uZm9jdXMoKTsKKyAgICBpZiAoV0kuX3NlYXJjaFRvb2xiYXJJdGVtKQorICAgICAgICBXSS5f
c2VhcmNoVG9vbGJhckl0ZW0uZm9jdXMoKTsKIH07CiAKIFdJLl9mb2N1c0NoYW5nZWQgPSBmdW5j
dGlvbihldmVudCkKQEAgLTE0NzgsMTkgKzE0NzgsMTkgQEAgV0kuX2ZvY3VzQ2hhbmdlZCA9IGZ1
bmN0aW9uKGV2ZW50KQogICAgICAgICAgICAgbGV0IGNvZGVNaXJyb3IgPSBXSS5lbmNsb3NpbmdD
b2RlTWlycm9yKGV2ZW50LnRhcmdldCk7CiAgICAgICAgICAgICBpZiAoY29kZU1pcnJvcikgewog
ICAgICAgICAgICAgICAgIGxldCBjb2RlTWlycm9yRWxlbWVudCA9IGNvZGVNaXJyb3IuZ2V0V3Jh
cHBlckVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoY29kZU1pcnJvckVsZW1lbnQgJiYg
Y29kZU1pcnJvckVsZW1lbnQgIT09IHRoaXMuY3VycmVudEZvY3VzRWxlbWVudCkKKyAgICAgICAg
ICAgICAgICBpZiAoY29kZU1pcnJvckVsZW1lbnQgJiYgY29kZU1pcnJvckVsZW1lbnQgIT09IFdJ
LmN1cnJlbnRGb2N1c0VsZW1lbnQpCiAgICAgICAgICAgICAgICAgICAgIG5ld0ZvY3VzRWxlbWVu
dCA9IGNvZGVNaXJyb3JFbGVtZW50OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKG5ld0ZvY3VzRWxlbWVudCkgewotICAgICAgICAgICAgdGhpcy5wcmV2aW91c0ZvY3Vz
RWxlbWVudCA9IHRoaXMuY3VycmVudEZvY3VzRWxlbWVudDsKLSAgICAgICAgICAgIHRoaXMuY3Vy
cmVudEZvY3VzRWxlbWVudCA9IG5ld0ZvY3VzRWxlbWVudDsKKyAgICAgICAgICAgIFdJLnByZXZp
b3VzRm9jdXNFbGVtZW50ID0gV0kuY3VycmVudEZvY3VzRWxlbWVudDsKKyAgICAgICAgICAgIFdJ
LmN1cnJlbnRGb2N1c0VsZW1lbnQgPSBuZXdGb2N1c0VsZW1lbnQ7CiAgICAgICAgIH0KIAotICAg
ICAgICAvLyBEdWUgdG8gdGhlIGNoYW5nZSBpbiBXSS5pc0V2ZW50VGFyZ2V0QW5FZGl0YWJsZUZp
ZWxkIChyMTk2MjcxKSwgdGhpcyByZXR1cm4KKyAgICAgICAgLy8gRHVlIHRvIHRoZSBjaGFuZ2Ug
aW4gV0kuaXNFdmVudFRhcmdldEFuRWRpdGFibGVGaWVsZCAocjE5NjI3MSksIFdJIHJldHVybgog
ICAgICAgICAvLyB3aWxsIGFsc28gZ2V0IHJ1biB3aGVuIFdJLnN0YXJ0RWRpdGluZyBpcyBjYWxs
ZWQgb24gYW4gZWxlbWVudC4gV2UgZG8gbm90IHdhbnQKLSAgICAgICAgLy8gdG8gcmV0dXJuIGVh
cmx5IGluIHRoaXMgY2FzZSwgYXMgV0kuRWRpdGluZ0NvbmZpZyBoYW5kbGVzIGl0cyBvd24gZWRp
dGluZworICAgICAgICAvLyB0byByZXR1cm4gZWFybHkgaW4gV0kgY2FzZSwgYXMgV0kuRWRpdGlu
Z0NvbmZpZyBoYW5kbGVzIGl0cyBvd24gZWRpdGluZwogICAgICAgICAvLyBjb21wbGV0aW9uLCBz
byBvbmx5IHJldHVybiBlYXJseSBpZiB0aGUgZm9jdXMgY2hhbmdlIHRhcmdldCBpcyBub3QgZnJv
bSBXSS5zdGFydEVkaXRpbmcuCiAgICAgICAgIGlmICghV0kuaXNCZWluZ0VkaXRlZChldmVudC50
YXJnZXQpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUwMiw5ICsxNTAyLDkgQEAgV0kuX2Zv
Y3VzQ2hhbmdlZCA9IGZ1bmN0aW9uKGV2ZW50KQogCiAgICAgdmFyIGVsZW1lbnQgPSBldmVudC50
YXJnZXQ7CiAKLSAgICBpZiAoZWxlbWVudCAhPT0gdGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50KSB7
Ci0gICAgICAgIHRoaXMucHJldmlvdXNGb2N1c0VsZW1lbnQgPSB0aGlzLmN1cnJlbnRGb2N1c0Vs
ZW1lbnQ7Ci0gICAgICAgIHRoaXMuY3VycmVudEZvY3VzRWxlbWVudCA9IGVsZW1lbnQ7CisgICAg
aWYgKGVsZW1lbnQgIT09IFdJLmN1cnJlbnRGb2N1c0VsZW1lbnQpIHsKKyAgICAgICAgV0kucHJl
dmlvdXNGb2N1c0VsZW1lbnQgPSBXSS5jdXJyZW50Rm9jdXNFbGVtZW50OworICAgICAgICBXSS5j
dXJyZW50Rm9jdXNFbGVtZW50ID0gZWxlbWVudDsKICAgICB9CiAKICAgICBpZiAoZWxlbWVudC5p
c0luc2VydGlvbkNhcmV0SW5zaWRlKCkpCkBAIC0xNTIwLDcgKzE1MjAsNyBAQCBXSS5fZm9jdXND
aGFuZ2VkID0gZnVuY3Rpb24oZXZlbnQpCiAKIFdJLl9tb3VzZVdhc0NsaWNrZWQgPSBmdW5jdGlv
bihldmVudCkKIHsKLSAgICB0aGlzLmhhbmRsZVBvc3NpYmxlTGlua0NsaWNrKGV2ZW50KTsKKyAg
ICBXSS5oYW5kbGVQb3NzaWJsZUxpbmtDbGljayhldmVudCk7CiB9OwogCiBXSS5fZHJhZ092ZXIg
PSBmdW5jdGlvbihldmVudCkKQEAgLTE1NDUsMjMgKzE1NDUsMjMgQEAgV0kuX2RlYnVnZ2VyRGlk
UGF1c2UgPSBmdW5jdGlvbihldmVudCkKICAgICBlbHNlCiAgICAgICAgIFdJLnNob3dEZWJ1Z2dl
clRhYih7c2hvd1Njb3BlQ2hhaW5TaWRlYmFyOiBXSS5zZXR0aW5ncy5zaG93U2NvcGVDaGFpbk9u
UGF1c2UudmFsdWV9KTsKIAotICAgIHRoaXMuX2Rhc2hib2FyZENvbnRhaW5lci5zaG93RGFzaGJv
YXJkVmlld0ZvclJlcHJlc2VudGVkT2JqZWN0KHRoaXMuX2Rhc2hib2FyZHMuZGVidWdnZXIpOwor
ICAgIFdJLl9kYXNoYm9hcmRDb250YWluZXIuc2hvd0Rhc2hib2FyZFZpZXdGb3JSZXByZXNlbnRl
ZE9iamVjdChXSS5fZGFzaGJvYXJkcy5kZWJ1Z2dlcik7CiAKICAgICBJbnNwZWN0b3JGcm9udGVu
ZEhvc3QuYnJpbmdUb0Zyb250KCk7CiB9OwogCiBXSS5fZGVidWdnZXJEaWRSZXN1bWUgPSBmdW5j
dGlvbihldmVudCkKIHsKLSAgICB0aGlzLl9kYXNoYm9hcmRDb250YWluZXIuY2xvc2VEYXNoYm9h
cmRWaWV3Rm9yUmVwcmVzZW50ZWRPYmplY3QodGhpcy5fZGFzaGJvYXJkcy5kZWJ1Z2dlcik7Cisg
ICAgV0kuX2Rhc2hib2FyZENvbnRhaW5lci5jbG9zZURhc2hib2FyZFZpZXdGb3JSZXByZXNlbnRl
ZE9iamVjdChXSS5fZGFzaGJvYXJkcy5kZWJ1Z2dlcik7CiB9OwogCiBXSS5fZnJhbWVXYXNBZGRl
ZCA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAgIGlmICghdGhpcy5fZnJhbWVJZGVudGlmaWVyVG9T
aG93U291cmNlQ29kZVdoZW5BdmFpbGFibGUpCisgICAgaWYgKCFXSS5fZnJhbWVJZGVudGlmaWVy
VG9TaG93U291cmNlQ29kZVdoZW5BdmFpbGFibGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIHZh
ciBmcmFtZSA9IGV2ZW50LmRhdGEuZnJhbWU7Ci0gICAgaWYgKGZyYW1lLmlkICE9PSB0aGlzLl9m
cmFtZUlkZW50aWZpZXJUb1Nob3dTb3VyY2VDb2RlV2hlbkF2YWlsYWJsZSkKKyAgICBpZiAoZnJh
bWUuaWQgIT09IFdJLl9mcmFtZUlkZW50aWZpZXJUb1Nob3dTb3VyY2VDb2RlV2hlbkF2YWlsYWJs
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZnVuY3Rpb24gZGVsYXllZFdvcmsoKQpAQCAtMTU3
MCwxOSArMTU3MCwxOSBAQCBXSS5fZnJhbWVXYXNBZGRlZCA9IGZ1bmN0aW9uKGV2ZW50KQogICAg
ICAgICAgICAgaWdub3JlTmV0d29ya1RhYjogdHJ1ZSwKICAgICAgICAgICAgIGlnbm9yZVNlYXJj
aFRhYjogdHJ1ZSwKICAgICAgICAgfTsKLSAgICAgICAgdGhpcy5zaG93U291cmNlQ29kZUZvckZy
YW1lKGZyYW1lLmlkLCBvcHRpb25zKTsKKyAgICAgICAgV0kuc2hvd1NvdXJjZUNvZGVGb3JGcmFt
ZShmcmFtZS5pZCwgb3B0aW9ucyk7CiAgICAgfQogCiAgICAgLy8gRGVsYXkgc2hvd2luZyB0aGUg
ZnJhbWUgc2luY2UgRnJhbWVXYXNBZGRlZCBpcyBjYWxsZWQgYmVmb3JlIE1haW5GcmFtZUNoYW5n
ZWQuCiAgICAgLy8gQ2FsbGluZyBzaG93U291cmNlQ29kZUZvckZyYW1lIGJlZm9yZSBNYWluRnJh
bWVDaGFuZ2VkIHdpbGwgc2hvdyB0aGUgZnJhbWUgdGhlbiBjbG9zZSBpdC4KLSAgICBzZXRUaW1l
b3V0KGRlbGF5ZWRXb3JrLmJpbmQodGhpcykpOworICAgIHNldFRpbWVvdXQoZGVsYXllZFdvcmsp
OwogfTsKIAogV0kuX21haW5GcmFtZURpZENoYW5nZSA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAg
IHRoaXMuX3VwZGF0ZURvd25sb2FkVG9vbGJhckJ1dHRvbigpOworICAgIFdJLl91cGRhdGVEb3du
bG9hZFRvb2xiYXJCdXR0b24oKTsKIAotICAgIHRoaXMudXBkYXRlV2luZG93VGl0bGUoKTsKKyAg
ICBXSS51cGRhdGVXaW5kb3dUaXRsZSgpOwogfTsKIAogV0kuX21haW5SZXNvdXJjZURpZENoYW5n
ZSA9IGZ1bmN0aW9uKGV2ZW50KQpAQCAtMTU5MiwxMSArMTU5MiwxMyBAQCBXSS5fbWFpblJlc291
cmNlRGlkQ2hhbmdlID0gZnVuY3Rpb24oZXZlbnQpCiAKICAgICAvLyBSdW4gY29va2llIHJlc3Rv
cmF0aW9uIGFmdGVyIHdlIGFyZSBzdXJlIGFsbCBvZiB0aGUgVGFicyBhbmQgTmF2aWdhdGlvblNp
ZGViYXJQYW5lbHMKICAgICAvLyBoYXZlIHVwZGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBtYWlu
IHJlc291cmNlIGNoYW5nZS4KLSAgICBzZXRUaW1lb3V0KHRoaXMuX3Jlc3RvcmVDb29raWVGb3JP
cGVuVGFicy5iaW5kKHRoaXMsIFdJLlN0YXRlUmVzdG9yYXRpb25UeXBlLk5hdmlnYXRpb24pKTsK
KyAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgV0kuX3Jlc3RvcmVDb29raWVGb3JPcGVu
VGFicyhXSS5TdGF0ZVJlc3RvcmF0aW9uVHlwZS5OYXZpZ2F0aW9uKTsKKyAgICB9KTsKIAotICAg
IHRoaXMuX3VwZGF0ZURvd25sb2FkVG9vbGJhckJ1dHRvbigpOworICAgIFdJLl91cGRhdGVEb3du
bG9hZFRvb2xiYXJCdXR0b24oKTsKIAotICAgIHRoaXMudXBkYXRlV2luZG93VGl0bGUoKTsKKyAg
ICBXSS51cGRhdGVXaW5kb3dUaXRsZSgpOwogfTsKIAogV0kuX3Byb3Zpc2lvbmFsTG9hZFN0YXJ0
ZWQgPSBmdW5jdGlvbihldmVudCkKQEAgLTE2MDQsMTIgKzE2MDYsMTIgQEAgV0kuX3Byb3Zpc2lv
bmFsTG9hZFN0YXJ0ZWQgPSBmdW5jdGlvbihldmVudCkKICAgICBpZiAoIWV2ZW50LnRhcmdldC5p
c01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0aGlzLl9zYXZlQ29va2llRm9y
T3BlblRhYnMoKTsKKyAgICBXSS5fc2F2ZUNvb2tpZUZvck9wZW5UYWJzKCk7CiB9OwogCiBXSS5f
cmVzdG9yZUNvb2tpZUZvck9wZW5UYWJzID0gZnVuY3Rpb24ocmVzdG9yYXRpb25UeXBlKQogewot
ICAgIGZvciAodmFyIHRhYkJhckl0ZW0gb2YgdGhpcy50YWJCYXIudGFiQmFySXRlbXMpIHsKKyAg
ICBmb3IgKHZhciB0YWJCYXJJdGVtIG9mIFdJLnRhYkJhci50YWJCYXJJdGVtcykgewogICAgICAg
ICB2YXIgdGFiQ29udGVudFZpZXcgPSB0YWJCYXJJdGVtLnJlcHJlc2VudGVkT2JqZWN0OwogICAg
ICAgICBpZiAoISh0YWJDb250ZW50VmlldyBpbnN0YW5jZW9mIFdJLlRhYkNvbnRlbnRWaWV3KSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTYxOSw3ICsxNjIxLDcgQEAgV0kuX3Jlc3RvcmVD
b29raWVGb3JPcGVuVGFicyA9IGZ1bmN0aW9uKHJlc3RvcmF0aW9uVHlwZSkKIAogV0kuX3NhdmVD
b29raWVGb3JPcGVuVGFicyA9IGZ1bmN0aW9uKCkKIHsKLSAgICBmb3IgKHZhciB0YWJCYXJJdGVt
IG9mIHRoaXMudGFiQmFyLnRhYkJhckl0ZW1zKSB7CisgICAgZm9yICh2YXIgdGFiQmFySXRlbSBv
ZiBXSS50YWJCYXIudGFiQmFySXRlbXMpIHsKICAgICAgICAgdmFyIHRhYkNvbnRlbnRWaWV3ID0g
dGFiQmFySXRlbS5yZXByZXNlbnRlZE9iamVjdDsKICAgICAgICAgaWYgKCEodGFiQ29udGVudFZp
ZXcgaW5zdGFuY2VvZiBXSS5UYWJDb250ZW50VmlldykpCiAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTE2MzMsNyArMTYzNSw3IEBAIFdJLl93aW5kb3dGb2N1c2VkID0gZnVuY3Rpb24oZXZlbnQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIHRoZSA6d2lu
ZG93LWluYWN0aXZlIHBzZXVkbyBjbGFzcyBvbmNlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzM4OTI3
IGlzIGZpeGVkLgotICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmRvY2tl
ZCA/ICJ3aW5kb3ctZG9ja2VkLWluYWN0aXZlIiA6ICJ3aW5kb3ctaW5hY3RpdmUiKTsKKyAgICBk
b2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoV0kuZG9ja2VkID8gIndpbmRvdy1kb2NrZWQt
aW5hY3RpdmUiIDogIndpbmRvdy1pbmFjdGl2ZSIpOwogfTsKIAogV0kuX3dpbmRvd0JsdXJyZWQg
PSBmdW5jdGlvbihldmVudCkKQEAgLTE2NDIsMTQgKzE2NDQsMTQgQEAgV0kuX3dpbmRvd0JsdXJy
ZWQgPSBmdW5jdGlvbihldmVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCB1c2UgdGhlIDp3aW5kb3ctaW5hY3RpdmUgcHNldWRvIGNsYXNzIG9uY2UgaHR0cHM6
Ly93ZWJraXQub3JnL2IvMzg5MjcgaXMgZml4ZWQuCi0gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xp
c3QuYWRkKHRoaXMuZG9ja2VkID8gIndpbmRvdy1kb2NrZWQtaW5hY3RpdmUiIDogIndpbmRvdy1p
bmFjdGl2ZSIpOworICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChXSS5kb2NrZWQgPyAi
d2luZG93LWRvY2tlZC1pbmFjdGl2ZSIgOiAid2luZG93LWluYWN0aXZlIik7CiB9OwogCiBXSS5f
d2luZG93UmVzaXplZCA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAgIHRoaXMudG9vbGJhci51cGRh
dGVMYXlvdXQoV0kuVmlldy5MYXlvdXRSZWFzb24uUmVzaXplKTsKLSAgICB0aGlzLnRhYkJhci51
cGRhdGVMYXlvdXQoV0kuVmlldy5MYXlvdXRSZWFzb24uUmVzaXplKTsKLSAgICB0aGlzLl90YWJC
cm93c2VyU2l6ZURpZENoYW5nZSgpOworICAgIFdJLnRvb2xiYXIudXBkYXRlTGF5b3V0KFdJLlZp
ZXcuTGF5b3V0UmVhc29uLlJlc2l6ZSk7CisgICAgV0kudGFiQmFyLnVwZGF0ZUxheW91dChXSS5W
aWV3LkxheW91dFJlYXNvbi5SZXNpemUpOworICAgIFdJLl90YWJCcm93c2VyU2l6ZURpZENoYW5n
ZSgpOwogfTsKIAogV0kuX3VwZGF0ZU1vZGlmaWVyS2V5cyA9IGZ1bmN0aW9uKGV2ZW50KQpAQCAt
MTY2MSwzOSArMTY2MywzOSBAQCBXSS5fdXBkYXRlTW9kaWZpZXJLZXlzID0gZnVuY3Rpb24oZXZl
bnQpCiAgICAgICAgIHNoaWZ0S2V5OiBldmVudC5zaGlmdEtleSwKICAgICB9OwogCi0gICAgbGV0
IGNoYW5nZWQgPSAhT2JqZWN0LnNoYWxsb3dFcXVhbCh0aGlzLm1vZGlmaWVyS2V5cywga2V5cyk7
CisgICAgbGV0IGNoYW5nZWQgPSAhT2JqZWN0LnNoYWxsb3dFcXVhbChXSS5tb2RpZmllcktleXMs
IGtleXMpOwogCi0gICAgdGhpcy5tb2RpZmllcktleXMgPSBrZXlzOworICAgIFdJLm1vZGlmaWVy
S2V5cyA9IGtleXM7CiAKLSAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoImFsdC1r
ZXktcHJlc3NlZCIsIHRoaXMubW9kaWZpZXJLZXlzLmFsdEtleSk7Ci0gICAgZG9jdW1lbnQuYm9k
eS5jbGFzc0xpc3QudG9nZ2xlKCJjdHJsLWtleS1wcmVzc2VkIiwgdGhpcy5tb2RpZmllcktleXMu
Y3RybEtleSk7Ci0gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCJtZXRhLWtleS1w
cmVzc2VkIiwgdGhpcy5tb2RpZmllcktleXMubWV0YUtleSk7Ci0gICAgZG9jdW1lbnQuYm9keS5j
bGFzc0xpc3QudG9nZ2xlKCJzaGlmdC1rZXktcHJlc3NlZCIsIHRoaXMubW9kaWZpZXJLZXlzLnNo
aWZ0S2V5KTsKKyAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoImFsdC1rZXktcHJl
c3NlZCIsIFdJLm1vZGlmaWVyS2V5cy5hbHRLZXkpOworICAgIGRvY3VtZW50LmJvZHkuY2xhc3NM
aXN0LnRvZ2dsZSgiY3RybC1rZXktcHJlc3NlZCIsIFdJLm1vZGlmaWVyS2V5cy5jdHJsS2V5KTsK
KyAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoIm1ldGEta2V5LXByZXNzZWQiLCBX
SS5tb2RpZmllcktleXMubWV0YUtleSk7CisgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9n
Z2xlKCJzaGlmdC1rZXktcHJlc3NlZCIsIFdJLm1vZGlmaWVyS2V5cy5zaGlmdEtleSk7CiAKICAg
ICBpZiAoY2hhbmdlZCkKLSAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXSS5Ob3RpZmljYXRpb24uR2xvYmFsTW9kaWZpZXJLZXlzRGlkQ2hhbmdlLCBl
dmVudCk7CisgICAgICAgIFdJLm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdJLk5vdGlmaWNhdGlvbi5HbG9iYWxNb2RpZmllcktleXNEaWRDaGFuZ2UsIGV2ZW50KTsKIH07
CiAKIFdJLl93aW5kb3dLZXlEb3duID0gZnVuY3Rpb24oZXZlbnQpCiB7Ci0gICAgdGhpcy5fdXBk
YXRlTW9kaWZpZXJLZXlzKGV2ZW50KTsKKyAgICBXSS5fdXBkYXRlTW9kaWZpZXJLZXlzKGV2ZW50
KTsKIH07CiAKIFdJLl93aW5kb3dLZXlVcCA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAgIHRoaXMu
X3VwZGF0ZU1vZGlmaWVyS2V5cyhldmVudCk7CisgICAgV0kuX3VwZGF0ZU1vZGlmaWVyS2V5cyhl
dmVudCk7CiB9OwogCiBXSS5fbW91c2VEb3duID0gZnVuY3Rpb24oZXZlbnQpCiB7Ci0gICAgaWYg
KHRoaXMudG9vbGJhci5lbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpCi0gICAgICAgIHRo
aXMuX3Rvb2xiYXJNb3VzZURvd24oZXZlbnQpOworICAgIGlmIChXSS50b29sYmFyLmVsZW1lbnQu
Y29udGFpbnMoZXZlbnQudGFyZ2V0KSkKKyAgICAgICAgV0kuX3Rvb2xiYXJNb3VzZURvd24oZXZl
bnQpOwogfTsKIAogV0kuX21vdXNlTW92ZWQgPSBmdW5jdGlvbihldmVudCkKIHsKLSAgICB0aGlz
Ll91cGRhdGVNb2RpZmllcktleXMoZXZlbnQpOwotICAgIHRoaXMubW91c2VDb29yZHMgPSB7Cisg
ICAgV0kuX3VwZGF0ZU1vZGlmaWVyS2V5cyhldmVudCk7CisgICAgV0kubW91c2VDb29yZHMgPSB7
CiAgICAgICAgIHg6IGV2ZW50LnBhZ2VYLAogICAgICAgICB5OiBldmVudC5wYWdlWQogICAgIH07
CkBAIC0xNzAxLDcgKzE3MDMsNyBAQCBXSS5fbW91c2VNb3ZlZCA9IGZ1bmN0aW9uKGV2ZW50KQog
CiBXSS5fcGFnZUhpZGRlbiA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAgIHRoaXMuX3NhdmVDb29r
aWVGb3JPcGVuVGFicygpOworICAgIFdJLl9zYXZlQ29va2llRm9yT3BlblRhYnMoKTsKIH07CiAK
IFdJLl9jb250ZXh0TWVudVJlcXVlc3RlZCA9IGZ1bmN0aW9uKGV2ZW50KQpAQCAtMTc2OCw3NSAr
MTc3MCw3NSBAQCBXSS5fZG9ja0xlZnQgPSBmdW5jdGlvbihldmVudCkKIAogV0kuX3RvZ2dsZVBy
ZXZpb3VzRG9ja0NvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbihldmVudCkKIHsKLSAgICBJbnNwZWN0
b3JGcm9udGVuZEhvc3QucmVxdWVzdFNldERvY2tTaWRlKHRoaXMuX3ByZXZpb3VzRG9ja0NvbmZp
Z3VyYXRpb24pOworICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5yZXF1ZXN0U2V0RG9ja1NpZGUo
V0kuX3ByZXZpb3VzRG9ja0NvbmZpZ3VyYXRpb24pOwogfTsKIAogV0kuX3VwZGF0ZURvY2tOYXZp
Z2F0aW9uSXRlbXMgPSBmdW5jdGlvbigpCiB7Ci0gICAgaWYgKHRoaXMuX2RvY2tpbmdBdmFpbGFi
bGUgfHwgdGhpcy5kb2NrZWQpIHsKLSAgICAgICAgdGhpcy5fY2xvc2VUb29sYmFyQnV0dG9uLmhp
ZGRlbiA9ICF0aGlzLmRvY2tlZDsKLSAgICAgICAgdGhpcy5fdW5kb2NrVG9vbGJhckJ1dHRvbi5o
aWRkZW4gPSB0aGlzLl9kb2NrQ29uZmlndXJhdGlvbiA9PT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24u
VW5kb2NrZWQ7Ci0gICAgICAgIHRoaXMuX2RvY2tCb3R0b21Ub29sYmFyQnV0dG9uLmhpZGRlbiA9
IHRoaXMuX2RvY2tDb25maWd1cmF0aW9uID09PSBXSS5Eb2NrQ29uZmlndXJhdGlvbi5Cb3R0b207
Ci0gICAgICAgIHRoaXMuX2RvY2tUb1NpZGVUb29sYmFyQnV0dG9uLmhpZGRlbiA9IHRoaXMuX2Rv
Y2tDb25maWd1cmF0aW9uID09PSBXSS5Eb2NrQ29uZmlndXJhdGlvbi5SaWdodCB8fCB0aGlzLl9k
b2NrQ29uZmlndXJhdGlvbiA9PT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24uTGVmdDsKKyAgICBpZiAo
V0kuX2RvY2tpbmdBdmFpbGFibGUgfHwgV0kuZG9ja2VkKSB7CisgICAgICAgIFdJLl9jbG9zZVRv
b2xiYXJCdXR0b24uaGlkZGVuID0gIVdJLmRvY2tlZDsKKyAgICAgICAgV0kuX3VuZG9ja1Rvb2xi
YXJCdXR0b24uaGlkZGVuID0gV0kuX2RvY2tDb25maWd1cmF0aW9uID09PSBXSS5Eb2NrQ29uZmln
dXJhdGlvbi5VbmRvY2tlZDsKKyAgICAgICAgV0kuX2RvY2tCb3R0b21Ub29sYmFyQnV0dG9uLmhp
ZGRlbiA9IFdJLl9kb2NrQ29uZmlndXJhdGlvbiA9PT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24uQm90
dG9tOworICAgICAgICBXSS5fZG9ja1RvU2lkZVRvb2xiYXJCdXR0b24uaGlkZGVuID0gV0kuX2Rv
Y2tDb25maWd1cmF0aW9uID09PSBXSS5Eb2NrQ29uZmlndXJhdGlvbi5SaWdodCB8fCBXSS5fZG9j
a0NvbmZpZ3VyYXRpb24gPT09IFdJLkRvY2tDb25maWd1cmF0aW9uLkxlZnQ7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgdGhpcy5fY2xvc2VUb29sYmFyQnV0dG9uLmhpZGRlbiA9IHRydWU7Ci0gICAg
ICAgIHRoaXMuX3VuZG9ja1Rvb2xiYXJCdXR0b24uaGlkZGVuID0gdHJ1ZTsKLSAgICAgICAgdGhp
cy5fZG9ja0JvdHRvbVRvb2xiYXJCdXR0b24uaGlkZGVuID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5f
ZG9ja1RvU2lkZVRvb2xiYXJCdXR0b24uaGlkZGVuID0gdHJ1ZTsKKyAgICAgICAgV0kuX2Nsb3Nl
VG9vbGJhckJ1dHRvbi5oaWRkZW4gPSB0cnVlOworICAgICAgICBXSS5fdW5kb2NrVG9vbGJhckJ1
dHRvbi5oaWRkZW4gPSB0cnVlOworICAgICAgICBXSS5fZG9ja0JvdHRvbVRvb2xiYXJCdXR0b24u
aGlkZGVuID0gdHJ1ZTsKKyAgICAgICAgV0kuX2RvY2tUb1NpZGVUb29sYmFyQnV0dG9uLmhpZGRl
biA9IHRydWU7CiAgICAgfQogfTsKIAogV0kuX3RhYkJyb3dzZXJTaXplRGlkQ2hhbmdlID0gZnVu
Y3Rpb24oKQogewotICAgIHRoaXMudGFiQnJvd3Nlci51cGRhdGVMYXlvdXQoV0kuVmlldy5MYXlv
dXRSZWFzb24uUmVzaXplKTsKLSAgICB0aGlzLmNvbnNvbGVEcmF3ZXIudXBkYXRlTGF5b3V0KFdJ
LlZpZXcuTGF5b3V0UmVhc29uLlJlc2l6ZSk7Ci0gICAgdGhpcy5xdWlja0NvbnNvbGUudXBkYXRl
TGF5b3V0KFdJLlZpZXcuTGF5b3V0UmVhc29uLlJlc2l6ZSk7CisgICAgV0kudGFiQnJvd3Nlci51
cGRhdGVMYXlvdXQoV0kuVmlldy5MYXlvdXRSZWFzb24uUmVzaXplKTsKKyAgICBXSS5jb25zb2xl
RHJhd2VyLnVwZGF0ZUxheW91dChXSS5WaWV3LkxheW91dFJlYXNvbi5SZXNpemUpOworICAgIFdJ
LnF1aWNrQ29uc29sZS51cGRhdGVMYXlvdXQoV0kuVmlldy5MYXlvdXRSZWFzb24uUmVzaXplKTsK
IH07CiAKIFdJLl9jb25zb2xlRHJhd2VyQ29sbGFwc2VkU3RhdGVEaWRDaGFuZ2UgPSBmdW5jdGlv
bihldmVudCkKIHsKLSAgICB0aGlzLl9zaG93aW5nU3BsaXRDb25zb2xlU2V0dGluZy52YWx1ZSA9
IFdJLmlzU2hvd2luZ1NwbGl0Q29uc29sZSgpOworICAgIFdJLl9zaG93aW5nU3BsaXRDb25zb2xl
U2V0dGluZy52YWx1ZSA9IFdJLmlzU2hvd2luZ1NwbGl0Q29uc29sZSgpOwogCiAgICAgV0kuX2Nv
bnNvbGVEcmF3ZXJEaWRSZXNpemUoKTsKIH07CiAKIFdJLl9jb25zb2xlRHJhd2VyRGlkUmVzaXpl
ID0gZnVuY3Rpb24oZXZlbnQpCiB7Ci0gICAgdGhpcy50YWJCcm93c2VyLnVwZGF0ZUxheW91dChX
SS5WaWV3LkxheW91dFJlYXNvbi5SZXNpemUpOworICAgIFdJLnRhYkJyb3dzZXIudXBkYXRlTGF5
b3V0KFdJLlZpZXcuTGF5b3V0UmVhc29uLlJlc2l6ZSk7CiB9OwogCiBXSS5fc2lkZWJhcldpZHRo
RGlkQ2hhbmdlID0gZnVuY3Rpb24oZXZlbnQpCiB7Ci0gICAgdGhpcy5fdGFiQnJvd3NlclNpemVE
aWRDaGFuZ2UoKTsKKyAgICBXSS5fdGFiQnJvd3NlclNpemVEaWRDaGFuZ2UoKTsKIH07CiAKIFdJ
Ll9zZXR1cFZpZXdIaWVyYXJjaHkgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHJvb3RWaWV3ID0g
V0kuVmlldy5yb290VmlldygpOwotICAgIHJvb3RWaWV3LmFkZFN1YnZpZXcodGhpcy50b29sYmFy
KTsKLSAgICByb290Vmlldy5hZGRTdWJ2aWV3KHRoaXMudGFiQmFyKTsKLSAgICByb290Vmlldy5h
ZGRTdWJ2aWV3KHRoaXMubmF2aWdhdGlvblNpZGViYXIpOwotICAgIHJvb3RWaWV3LmFkZFN1YnZp
ZXcodGhpcy50YWJCcm93c2VyKTsKLSAgICByb290Vmlldy5hZGRTdWJ2aWV3KHRoaXMuY29uc29s
ZURyYXdlcik7Ci0gICAgcm9vdFZpZXcuYWRkU3Vidmlldyh0aGlzLnF1aWNrQ29uc29sZSk7Ci0g
ICAgcm9vdFZpZXcuYWRkU3Vidmlldyh0aGlzLmRldGFpbHNTaWRlYmFyKTsKKyAgICByb290Vmll
dy5hZGRTdWJ2aWV3KFdJLnRvb2xiYXIpOworICAgIHJvb3RWaWV3LmFkZFN1YnZpZXcoV0kudGFi
QmFyKTsKKyAgICByb290Vmlldy5hZGRTdWJ2aWV3KFdJLm5hdmlnYXRpb25TaWRlYmFyKTsKKyAg
ICByb290Vmlldy5hZGRTdWJ2aWV3KFdJLnRhYkJyb3dzZXIpOworICAgIHJvb3RWaWV3LmFkZFN1
YnZpZXcoV0kuY29uc29sZURyYXdlcik7CisgICAgcm9vdFZpZXcuYWRkU3VidmlldyhXSS5xdWlj
a0NvbnNvbGUpOworICAgIHJvb3RWaWV3LmFkZFN1YnZpZXcoV0kuZGV0YWlsc1NpZGViYXIpOwog
fTsKIAogV0kuX3RhYkJyb3dzZXJTZWxlY3RlZFRhYkNvbnRlbnRWaWV3RGlkQ2hhbmdlID0gZnVu
Y3Rpb24oZXZlbnQpCiB7Ci0gICAgaWYgKHRoaXMudGFiQmFyLnNlbGVjdGVkVGFiQmFySXRlbSAm
JiB0aGlzLnRhYkJhci5zZWxlY3RlZFRhYkJhckl0ZW0ucmVwcmVzZW50ZWRPYmplY3QuY29uc3Ry
dWN0b3Iuc2hvdWxkU2F2ZVRhYigpKQotICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4U2V0
dGluZy52YWx1ZSA9IHRoaXMudGFiQmFyLnRhYkJhckl0ZW1zLmluZGV4T2YodGhpcy50YWJCYXIu
c2VsZWN0ZWRUYWJCYXJJdGVtKTsKKyAgICBpZiAoV0kudGFiQmFyLnNlbGVjdGVkVGFiQmFySXRl
bSAmJiBXSS50YWJCYXIuc2VsZWN0ZWRUYWJCYXJJdGVtLnJlcHJlc2VudGVkT2JqZWN0LmNvbnN0
cnVjdG9yLnNob3VsZFNhdmVUYWIoKSkKKyAgICAgICAgV0kuX3NlbGVjdGVkVGFiSW5kZXhTZXR0
aW5nLnZhbHVlID0gV0kudGFiQmFyLnRhYkJhckl0ZW1zLmluZGV4T2YoV0kudGFiQmFyLnNlbGVj
dGVkVGFiQmFySXRlbSk7CiAKLSAgICBpZiAodGhpcy5kb2VzQ3VycmVudFRhYlN1cHBvcnRTcGxp
dENvbnRlbnRCcm93c2VyKCkpIHsKLSAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFJldmVhbFNwaXRD
b25zb2xlSWZTdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX3Nob3VsZFJldmVhbFNwaXRD
b25zb2xlSWZTdXBwb3J0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuc2hvd1NwbGl0Q29u
c29sZSgpOworICAgIGlmIChXSS5kb2VzQ3VycmVudFRhYlN1cHBvcnRTcGxpdENvbnRlbnRCcm93
c2VyKCkpIHsKKyAgICAgICAgaWYgKFdJLl9zaG91bGRSZXZlYWxTcGl0Q29uc29sZUlmU3VwcG9y
dGVkKSB7CisgICAgICAgICAgICBXSS5fc2hvdWxkUmV2ZWFsU3BpdENvbnNvbGVJZlN1cHBvcnRl
ZCA9IGZhbHNlOworICAgICAgICAgICAgV0kuc2hvd1NwbGl0Q29uc29sZSgpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB0aGlzLl9zaG91bGRSZXZlYWxTcGl0Q29u
c29sZUlmU3VwcG9ydGVkID0gdGhpcy5pc1Nob3dpbmdTcGxpdENvbnNvbGUoKTsKLSAgICB0aGlz
LmhpZGVTcGxpdENvbnNvbGUoKTsKKyAgICBXSS5fc2hvdWxkUmV2ZWFsU3BpdENvbnNvbGVJZlN1
cHBvcnRlZCA9IFdJLmlzU2hvd2luZ1NwbGl0Q29uc29sZSgpOworICAgIFdJLmhpZGVTcGxpdENv
bnNvbGUoKTsKIH07CiAKIFdJLl90b29sYmFyTW91c2VEb3duID0gZnVuY3Rpb24oZXZlbnQpCkBA
IC0xODQ0LDEzICsxODQ2LDEzIEBAIFdJLl90b29sYmFyTW91c2VEb3duID0gZnVuY3Rpb24oZXZl
bnQpCiAgICAgaWYgKGV2ZW50LmN0cmxLZXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0
aGlzLl9kb2NrQ29uZmlndXJhdGlvbiA9PT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24uUmlnaHQgfHwg
dGhpcy5fZG9ja0NvbmZpZ3VyYXRpb24gPT09IFdJLkRvY2tDb25maWd1cmF0aW9uLkxlZnQpCisg
ICAgaWYgKFdJLl9kb2NrQ29uZmlndXJhdGlvbiA9PT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24uUmln
aHQgfHwgV0kuX2RvY2tDb25maWd1cmF0aW9uID09PSBXSS5Eb2NrQ29uZmlndXJhdGlvbi5MZWZ0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodGhpcy5kb2NrZWQpCi0gICAgICAgIHRoaXMu
X2RvY2tlZFJlc2l6ZXJNb3VzZURvd24oZXZlbnQpOworICAgIGlmIChXSS5kb2NrZWQpCisgICAg
ICAgIFdJLl9kb2NrZWRSZXNpemVyTW91c2VEb3duKGV2ZW50KTsKICAgICBlbHNlCi0gICAgICAg
IHRoaXMuX21vdmVXaW5kb3dNb3VzZURvd24oZXZlbnQpOworICAgICAgICBXSS5fbW92ZVdpbmRv
d01vdXNlRG93bihldmVudCk7CiB9OwogCiBXSS5fZG9ja2VkUmVzaXplck1vdXNlRG93biA9IGZ1
bmN0aW9uKGV2ZW50KQpAQCAtMTg1OCw3ICsxODYwLDcgQEAgV0kuX2RvY2tlZFJlc2l6ZXJNb3Vz
ZURvd24gPSBmdW5jdGlvbihldmVudCkKICAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwIHx8IGV2
ZW50LmN0cmxLZXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghdGhpcy5kb2NrZWQpCisg
ICAgaWYgKCFXSS5kb2NrZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE9ubHkgc3RhcnQg
ZHJhZ2dpbmcgaWYgdGhlIHRhcmdldCBpcyBvbmUgb2YgdGhlIGVsZW1lbnRzIHRoYXQgd2UgZXhw
ZWN0LgpAQCAtMTg2OCw5ICsxODcwLDkgQEAgV0kuX2RvY2tlZFJlc2l6ZXJNb3VzZURvd24gPSBm
dW5jdGlvbihldmVudCkKIAogICAgIGV2ZW50W1dJLlBvcG92ZXIuRXZlbnRQcmV2ZW50RGlzbWlz
c1N5bWJvbF0gPSB0cnVlOwogCi0gICAgbGV0IHdpbmRvd1Byb3BlcnR5ID0gdGhpcy5fZG9ja0Nv
bmZpZ3VyYXRpb24gPT09IFdJLkRvY2tDb25maWd1cmF0aW9uLkJvdHRvbSA/ICJpbm5lckhlaWdo
dCIgOiAiaW5uZXJXaWR0aCI7Ci0gICAgbGV0IGV2ZW50U2NyZWVuUHJvcGVydHkgPSB0aGlzLl9k
b2NrQ29uZmlndXJhdGlvbiA9PT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24uQm90dG9tID8gInNjcmVl
blkiIDogInNjcmVlblgiOwotICAgIGxldCBldmVudENsaWVudFByb3BlcnR5ID0gdGhpcy5fZG9j
a0NvbmZpZ3VyYXRpb24gPT09IFdJLkRvY2tDb25maWd1cmF0aW9uLkJvdHRvbSA/ICJjbGllbnRZ
IiA6ICJjbGllbnRYIjsKKyAgICBsZXQgd2luZG93UHJvcGVydHkgPSBXSS5fZG9ja0NvbmZpZ3Vy
YXRpb24gPT09IFdJLkRvY2tDb25maWd1cmF0aW9uLkJvdHRvbSA/ICJpbm5lckhlaWdodCIgOiAi
aW5uZXJXaWR0aCI7CisgICAgbGV0IGV2ZW50U2NyZWVuUHJvcGVydHkgPSBXSS5fZG9ja0NvbmZp
Z3VyYXRpb24gPT09IFdJLkRvY2tDb25maWd1cmF0aW9uLkJvdHRvbSA/ICJzY3JlZW5ZIiA6ICJz
Y3JlZW5YIjsKKyAgICBsZXQgZXZlbnRDbGllbnRQcm9wZXJ0eSA9IFdJLl9kb2NrQ29uZmlndXJh
dGlvbiA9PT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24uQm90dG9tID8gImNsaWVudFkiIDogImNsaWVu
dFgiOwogCiAgICAgdmFyIHJlc2l6ZXJFbGVtZW50ID0gZXZlbnQudGFyZ2V0OwogICAgIHZhciBm
aXJzdENsaWVudFBvc2l0aW9uID0gZXZlbnRbZXZlbnRDbGllbnRQcm9wZXJ0eV07CkBAIC0xODg3
LDcgKzE4ODksNyBAQCBXSS5fZG9ja2VkUmVzaXplck1vdXNlRG93biA9IGZ1bmN0aW9uKGV2ZW50
KQogCiAgICAgICAgIGxhc3RTY3JlZW5Qb3NpdGlvbiA9IHBvc2l0aW9uOwogCi0gICAgICAgIGlm
ICh0aGlzLl9kb2NrQ29uZmlndXJhdGlvbiA9PT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24uTGVmdCkg
eworICAgICAgICBpZiAoV0kuX2RvY2tDb25maWd1cmF0aW9uID09PSBXSS5Eb2NrQ29uZmlndXJh
dGlvbi5MZWZ0KSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgbW91c2UgaXMgdHJhdmVsbGluZyBy
aWdodHdhcmQgYnV0IGlzIHBvc2l0aW9uZWQgbGVmdCBvZiB0aGUgcmVzaXplciwgaWdub3JlIHRo
ZSBldmVudC4KICAgICAgICAgICAgIGlmIChkZWx0YSA+IDAgJiYgY2xpZW50UG9zaXRpb24gPCBm
aXJzdENsaWVudFBvc2l0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MTIsOSAr
MTkxNCw5IEBAIFdJLl9kb2NrZWRSZXNpemVyTW91c2VEb3duID0gZnVuY3Rpb24oZXZlbnQpCiAg
ICAgICAgIGxldCBkaW1lbnNpb24gPSBNYXRoLm1heCgwLCB3aW5kb3dbd2luZG93UHJvcGVydHld
IC0gZGVsdGEpOwogICAgICAgICAvLyBJZiB6b29tZWQgaW4vb3V0LCB0aGVyZSBiZSBncmVhdGVy
L2Zld2VyIGRvY3VtZW50IHBpeGVscyBzaG93biwgYnV0IHRoZSBpbnNwZWN0b3IncwogICAgICAg
ICAvLyB3aWR0aCBvciBoZWlnaHQgc2hvdWxkIGJlIHRoZSBzYW1lIGluIGRldmljZSBwaXhlbHMg
cmVnYXJkbGVzcyBvZiB0aGUgZG9jdW1lbnQgem9vbS4KLSAgICAgICAgZGltZW5zaW9uICo9IHRo
aXMuZ2V0Wm9vbUZhY3RvcigpOworICAgICAgICBkaW1lbnNpb24gKj0gV0kuZ2V0Wm9vbUZhY3Rv
cigpOwogCi0gICAgICAgIGlmICh0aGlzLl9kb2NrQ29uZmlndXJhdGlvbiA9PT0gV0kuRG9ja0Nv
bmZpZ3VyYXRpb24uQm90dG9tKQorICAgICAgICBpZiAoV0kuX2RvY2tDb25maWd1cmF0aW9uID09
PSBXSS5Eb2NrQ29uZmlndXJhdGlvbi5Cb3R0b20pCiAgICAgICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZEhvc3Quc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoZGltZW5zaW9uKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNldEF0dGFjaGVkV2luZG93V2lk
dGgoZGltZW5zaW9uKTsKQEAgLTE5MjgsMTIgKzE5MzAsMTIgQEAgV0kuX2RvY2tlZFJlc2l6ZXJN
b3VzZURvd24gPSBmdW5jdGlvbihldmVudCkKICAgICAgICAgV0kuZWxlbWVudERyYWdFbmQoZXZl
bnQpOwogICAgIH0KIAotICAgIFdJLmVsZW1lbnREcmFnU3RhcnQocmVzaXplckVsZW1lbnQsIGRv
Y2tlZFJlc2l6ZXJEcmFnLmJpbmQodGhpcyksIGRvY2tlZFJlc2l6ZXJEcmFnRW5kLmJpbmQodGhp
cyksIGV2ZW50LCB0aGlzLl9kb2NrQ29uZmlndXJhdGlvbiA9PT0gV0kuRG9ja0NvbmZpZ3VyYXRp
b24uQm90dG9tID8gInJvdy1yZXNpemUiIDogImNvbC1yZXNpemUiKTsKKyAgICBXSS5lbGVtZW50
RHJhZ1N0YXJ0KHJlc2l6ZXJFbGVtZW50LCBkb2NrZWRSZXNpemVyRHJhZywgZG9ja2VkUmVzaXpl
ckRyYWdFbmQsIGV2ZW50LCBXSS5fZG9ja0NvbmZpZ3VyYXRpb24gPT09IFdJLkRvY2tDb25maWd1
cmF0aW9uLkJvdHRvbSA/ICJyb3ctcmVzaXplIiA6ICJjb2wtcmVzaXplIik7CiB9OwogCiBXSS5f
bW92ZVdpbmRvd01vdXNlRG93biA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAgIGNvbnNvbGUuYXNz
ZXJ0KCF0aGlzLmRvY2tlZCk7CisgICAgY29uc29sZS5hc3NlcnQoIVdJLmRvY2tlZCk7CiAKICAg
ICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwIHx8IGV2ZW50LmN0cmxLZXkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE5ODEsMzQgKzE5ODMsMzQgQEAgV0kuX21vdmVXaW5kb3dNb3VzZURvd24gPSBmdW5j
dGlvbihldmVudCkKIAogV0kuX2RvbVN0b3JhZ2VXYXNJbnNwZWN0ZWQgPSBmdW5jdGlvbihldmVu
dCkKIHsKLSAgICB0aGlzLnNob3dTdG9yYWdlVGFiKCk7Ci0gICAgdGhpcy5zaG93UmVwcmVzZW50
ZWRPYmplY3QoZXZlbnQuZGF0YS5kb21TdG9yYWdlLCBudWxsLCB7aWdub3JlU2VhcmNoVGFiOiB0
cnVlfSk7CisgICAgV0kuc2hvd1N0b3JhZ2VUYWIoKTsKKyAgICBXSS5zaG93UmVwcmVzZW50ZWRP
YmplY3QoZXZlbnQuZGF0YS5kb21TdG9yYWdlLCBudWxsLCB7aWdub3JlU2VhcmNoVGFiOiB0cnVl
fSk7CiB9OwogCiBXSS5fZGF0YWJhc2VXYXNJbnNwZWN0ZWQgPSBmdW5jdGlvbihldmVudCkKIHsK
LSAgICB0aGlzLnNob3dTdG9yYWdlVGFiKCk7Ci0gICAgdGhpcy5zaG93UmVwcmVzZW50ZWRPYmpl
Y3QoZXZlbnQuZGF0YS5kYXRhYmFzZSwgbnVsbCwge2lnbm9yZVNlYXJjaFRhYjogdHJ1ZX0pOwor
ICAgIFdJLnNob3dTdG9yYWdlVGFiKCk7CisgICAgV0kuc2hvd1JlcHJlc2VudGVkT2JqZWN0KGV2
ZW50LmRhdGEuZGF0YWJhc2UsIG51bGwsIHtpZ25vcmVTZWFyY2hUYWI6IHRydWV9KTsKIH07CiAK
IFdJLl9kb21Ob2RlV2FzSW5zcGVjdGVkID0gZnVuY3Rpb24oZXZlbnQpCiB7Ci0gICAgdGhpcy5k
b21NYW5hZ2VyLmhpZ2hsaWdodERPTU5vZGVGb3JUd29TZWNvbmRzKGV2ZW50LmRhdGEubm9kZS5p
ZCk7CisgICAgV0kuZG9tTWFuYWdlci5oaWdobGlnaHRET01Ob2RlRm9yVHdvU2Vjb25kcyhldmVu
dC5kYXRhLm5vZGUuaWQpOwogCiAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmJyaW5nVG9Gcm9u
dCgpOwogCi0gICAgdGhpcy5zaG93RWxlbWVudHNUYWIoKTsKLSAgICB0aGlzLnNob3dNYWluRnJh
bWVET01UcmVlKGV2ZW50LmRhdGEubm9kZSwge2lnbm9yZVNlYXJjaFRhYjogdHJ1ZX0pOworICAg
IFdJLnNob3dFbGVtZW50c1RhYigpOworICAgIFdJLnNob3dNYWluRnJhbWVET01UcmVlKGV2ZW50
LmRhdGEubm9kZSwge2lnbm9yZVNlYXJjaFRhYjogdHJ1ZX0pOwogfTsKIAogV0kuX2luc3BlY3RN
b2RlU3RhdGVDaGFuZ2VkID0gZnVuY3Rpb24oZXZlbnQpCiB7Ci0gICAgdGhpcy5faW5zcGVjdE1v
ZGVUb29sYmFyQnV0dG9uLmFjdGl2YXRlZCA9IHRoaXMuZG9tTWFuYWdlci5pbnNwZWN0TW9kZUVu
YWJsZWQ7CisgICAgV0kuX2luc3BlY3RNb2RlVG9vbGJhckJ1dHRvbi5hY3RpdmF0ZWQgPSBXSS5k
b21NYW5hZ2VyLmluc3BlY3RNb2RlRW5hYmxlZDsKIH07CiAKIFdJLl90b2dnbGVJbnNwZWN0TW9k
ZSA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAgIHRoaXMuZG9tTWFuYWdlci5pbnNwZWN0TW9kZUVu
YWJsZWQgPSAhdGhpcy5kb21NYW5hZ2VyLmluc3BlY3RNb2RlRW5hYmxlZDsKKyAgICBXSS5kb21N
YW5hZ2VyLmluc3BlY3RNb2RlRW5hYmxlZCA9ICFXSS5kb21NYW5hZ2VyLmluc3BlY3RNb2RlRW5h
YmxlZDsKIH07CiAKIFdJLl9oYW5kbGVEZXZpY2VTZXR0aW5nc1Rvb2xiYXJCdXR0b25DbGlja2Vk
ID0gZnVuY3Rpb24oZXZlbnQpCkBAIC0yMTAzLDcgKzIxMDUsNyBAQCBXSS5faGFuZGxlRGV2aWNl
U2V0dGluZ3NUb29sYmFyQnV0dG9uQ2xpY2tlZCA9IGZ1bmN0aW9uKGV2ZW50KQogCiAgICAgY29u
c3QgcHJlZmVycmVkRWRnZXMgPSBbV0kuUmVjdEVkZ2UuTUFYX1ksIFdJLlJlY3RFZGdlLk1JTl9Y
LCBXSS5SZWN0RWRnZS5NQVhfWF07CiAKLSAgICBXSS5fZGV2aWNlU2V0dGluZ3NQb3BvdmVyID0g
bmV3IFdJLlBvcG92ZXIodGhpcyk7CisgICAgV0kuX2RldmljZVNldHRpbmdzUG9wb3ZlciA9IG5l
dyBXSS5Qb3BvdmVyKFdJKTsKICAgICBXSS5fZGV2aWNlU2V0dGluZ3NQb3BvdmVyLndpbmRvd1Jl
c2l6ZUhhbmRsZXIgPSBmdW5jdGlvbihldmVudCkgewogICAgICAgICBXSS5fZGV2aWNlU2V0dGlu
Z3NQb3BvdmVyLnByZXNlbnQoY2FsY3VsYXRlVGFyZ2V0RnJhbWUoKSwgcHJlZmVycmVkRWRnZXMp
OwogICAgIH07CkBAIC0yMjY5LDcgKzIyNzEsNyBAQCBXSS5faGFuZGxlRGV2aWNlU2V0dGluZ3NU
b29sYmFyQnV0dG9uQ2xpY2tlZCA9IGZ1bmN0aW9uKGV2ZW50KQogCiBXSS5fZG93bmxvYWRXZWJB
cmNoaXZlID0gZnVuY3Rpb24oZXZlbnQpCiB7Ci0gICAgdGhpcy5hcmNoaXZlTWFpbkZyYW1lKCk7
CisgICAgV0kuYXJjaGl2ZU1haW5GcmFtZSgpOwogfTsKIAogV0kuX3JlbG9hZEluc3BlY3RlZElu
c3BlY3RvciA9IGZ1bmN0aW9uKCkKQEAgLTIzMTYsMTA0ICsyMzE4LDEwNCBAQCBXSS5fcmVsb2Fk
VG9vbGJhckJ1dHRvbkNsaWNrZWQgPSBmdW5jdGlvbihldmVudCkKICAgICB9CiAKICAgICAvLyBS
ZWxvYWQgcGFnZSBmcm9tIG9yaWdpbiBpZiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgd2hpbGUgdGhl
IHNoaWZ0IGtleSBpcyBwcmVzc2VkIGRvd24uCi0gICAgUGFnZUFnZW50LnJlbG9hZC5pbnZva2Uo
e2lnbm9yZUNhY2hlOiB0aGlzLm1vZGlmaWVyS2V5cy5zaGlmdEtleX0pOworICAgIFBhZ2VBZ2Vu
dC5yZWxvYWQuaW52b2tlKHtpZ25vcmVDYWNoZTogV0kubW9kaWZpZXJLZXlzLnNoaWZ0S2V5fSk7
CiB9OwogCiBXSS5fdXBkYXRlUmVsb2FkVG9vbGJhckJ1dHRvbiA9IGZ1bmN0aW9uKCkKIHsKICAg
ICBpZiAoIXdpbmRvdy5QYWdlQWdlbnQpIHsKLSAgICAgICAgdGhpcy5fcmVsb2FkVG9vbGJhckJ1
dHRvbi5oaWRkZW4gPSB0cnVlOworICAgICAgICBXSS5fcmVsb2FkVG9vbGJhckJ1dHRvbi5oaWRk
ZW4gPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdGhpcy5fcmVsb2FkVG9v
bGJhckJ1dHRvbi5oaWRkZW4gPSBmYWxzZTsKKyAgICBXSS5fcmVsb2FkVG9vbGJhckJ1dHRvbi5o
aWRkZW4gPSBmYWxzZTsKIH07CiAKIFdJLl91cGRhdGVEb3dubG9hZFRvb2xiYXJCdXR0b24gPSBm
dW5jdGlvbigpCiB7Ci0gICAgaWYgKCF3aW5kb3cuUGFnZUFnZW50IHx8IHRoaXMuc2hhcmVkQXBw
LmRlYnVnZ2FibGVUeXBlICE9PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWIpIHsKLSAgICAgICAgdGhp
cy5fZG93bmxvYWRUb29sYmFyQnV0dG9uLmhpZGRlbiA9IHRydWU7CisgICAgaWYgKCF3aW5kb3cu
UGFnZUFnZW50IHx8IFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSAhPT0gV0kuRGVidWdnYWJs
ZVR5cGUuV2ViKSB7CisgICAgICAgIFdJLl9kb3dubG9hZFRvb2xiYXJCdXR0b24uaGlkZGVuID0g
dHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICh0aGlzLl9kb3dubG9hZGlu
Z1BhZ2UpIHsKLSAgICAgICAgdGhpcy5fZG93bmxvYWRUb29sYmFyQnV0dG9uLmVuYWJsZWQgPSBm
YWxzZTsKKyAgICBpZiAoV0kuX2Rvd25sb2FkaW5nUGFnZSkgeworICAgICAgICBXSS5fZG93bmxv
YWRUb29sYmFyQnV0dG9uLmVuYWJsZWQgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHRoaXMuX2Rvd25sb2FkVG9vbGJhckJ1dHRvbi5lbmFibGVkID0gdGhpcy5jYW5BcmNo
aXZlTWFpbkZyYW1lKCk7CisgICAgV0kuX2Rvd25sb2FkVG9vbGJhckJ1dHRvbi5lbmFibGVkID0g
V0kuY2FuQXJjaGl2ZU1haW5GcmFtZSgpOwogfTsKIAogV0kuX3VwZGF0ZUluc3BlY3RNb2RlVG9v
bGJhckJ1dHRvbiA9IGZ1bmN0aW9uKCkKIHsKICAgICBpZiAoIXdpbmRvdy5ET01BZ2VudCB8fCAh
RE9NQWdlbnQuc2V0SW5zcGVjdE1vZGVFbmFibGVkKSB7Ci0gICAgICAgIHRoaXMuX2luc3BlY3RN
b2RlVG9vbGJhckJ1dHRvbi5oaWRkZW4gPSB0cnVlOworICAgICAgICBXSS5faW5zcGVjdE1vZGVU
b29sYmFyQnV0dG9uLmhpZGRlbiA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICB0aGlzLl9pbnNwZWN0TW9kZVRvb2xiYXJCdXR0b24uaGlkZGVuID0gZmFsc2U7CisgICAgV0ku
X2luc3BlY3RNb2RlVG9vbGJhckJ1dHRvbi5oaWRkZW4gPSBmYWxzZTsKIH07CiAKIFdJLl90b2dn
bGVJbnNwZWN0TW9kZSA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAgIHRoaXMuZG9tTWFuYWdlci5p
bnNwZWN0TW9kZUVuYWJsZWQgPSAhdGhpcy5kb21NYW5hZ2VyLmluc3BlY3RNb2RlRW5hYmxlZDsK
KyAgICBXSS5kb21NYW5hZ2VyLmluc3BlY3RNb2RlRW5hYmxlZCA9ICFXSS5kb21NYW5hZ2VyLmlu
c3BlY3RNb2RlRW5hYmxlZDsKIH07CiAKIFdJLl9zaG93Q29uc29sZVRhYiA9IGZ1bmN0aW9uKGV2
ZW50KQogewotICAgIHRoaXMuc2hvd0NvbnNvbGVUYWIoKTsKKyAgICBXSS5zaG93Q29uc29sZVRh
YigpOwogfTsKIAogV0kuX2ZvY3VzQ29uc29sZVByb21wdCA9IGZ1bmN0aW9uKGV2ZW50KQogewot
ICAgIHRoaXMucXVpY2tDb25zb2xlLnByb21wdC5mb2N1cygpOworICAgIFdJLnF1aWNrQ29uc29s
ZS5wcm9tcHQuZm9jdXMoKTsKIH07CiAKIFdJLl9mb2N1c2VkQ29udGVudEJyb3dzZXIgPSBmdW5j
dGlvbigpCiB7Ci0gICAgaWYgKHRoaXMuY3VycmVudEZvY3VzRWxlbWVudCkgewotICAgICAgICBs
ZXQgY29udGVudEJyb3dzZXJFbGVtZW50ID0gdGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50LmNsb3Nl
c3QoIi5jb250ZW50LWJyb3dzZXIiKTsKKyAgICBpZiAoV0kuY3VycmVudEZvY3VzRWxlbWVudCkg
eworICAgICAgICBsZXQgY29udGVudEJyb3dzZXJFbGVtZW50ID0gV0kuY3VycmVudEZvY3VzRWxl
bWVudC5jbG9zZXN0KCIuY29udGVudC1icm93c2VyIik7CiAgICAgICAgIGlmIChjb250ZW50QnJv
d3NlckVsZW1lbnQgJiYgY29udGVudEJyb3dzZXJFbGVtZW50Ll9fdmlldyAmJiBjb250ZW50QnJv
d3NlckVsZW1lbnQuX192aWV3IGluc3RhbmNlb2YgV0kuQ29udGVudEJyb3dzZXIpCiAgICAgICAg
ICAgICByZXR1cm4gY29udGVudEJyb3dzZXJFbGVtZW50Ll9fdmlldzsKICAgICB9CiAKLSAgICBp
ZiAodGhpcy50YWJCcm93c2VyLmVsZW1lbnQuY29udGFpbnModGhpcy5jdXJyZW50Rm9jdXNFbGVt
ZW50KSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7Ci0gICAg
ICAgIGxldCB0YWJDb250ZW50VmlldyA9IHRoaXMudGFiQnJvd3Nlci5zZWxlY3RlZFRhYkNvbnRl
bnRWaWV3OworICAgIGlmIChXSS50YWJCcm93c2VyLmVsZW1lbnQuY29udGFpbnMoV0kuY3VycmVu
dEZvY3VzRWxlbWVudCkgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9k
eSkgeworICAgICAgICBsZXQgdGFiQ29udGVudFZpZXcgPSBXSS50YWJCcm93c2VyLnNlbGVjdGVk
VGFiQ29udGVudFZpZXc7CiAgICAgICAgIGlmICh0YWJDb250ZW50Vmlldy5jb250ZW50QnJvd3Nl
cikKICAgICAgICAgICAgIHJldHVybiB0YWJDb250ZW50Vmlldy5jb250ZW50QnJvd3NlcjsKICAg
ICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCi0gICAgaWYgKHRoaXMuY29uc29sZURyYXdlci5l
bGVtZW50LmNvbnRhaW5zKHRoaXMuY3VycmVudEZvY3VzRWxlbWVudCkKLSAgICAgICAgfHwgKFdJ
LmlzU2hvd2luZ1NwbGl0Q29uc29sZSgpICYmIHRoaXMucXVpY2tDb25zb2xlLmVsZW1lbnQuY29u
dGFpbnModGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50KSkpCi0gICAgICAgIHJldHVybiB0aGlzLmNv
bnNvbGVEcmF3ZXI7CisgICAgaWYgKFdJLmNvbnNvbGVEcmF3ZXIuZWxlbWVudC5jb250YWlucyhX
SS5jdXJyZW50Rm9jdXNFbGVtZW50KQorICAgICAgICB8fCAoV0kuaXNTaG93aW5nU3BsaXRDb25z
b2xlKCkgJiYgV0kucXVpY2tDb25zb2xlLmVsZW1lbnQuY29udGFpbnMoV0kuY3VycmVudEZvY3Vz
RWxlbWVudCkpKQorICAgICAgICByZXR1cm4gV0kuY29uc29sZURyYXdlcjsKIAogICAgIHJldHVy
biBudWxsOwogfTsKIAogV0kuX2ZvY3VzZWRDb250ZW50VmlldyA9IGZ1bmN0aW9uKCkKIHsKLSAg
ICBpZiAodGhpcy50YWJCcm93c2VyLmVsZW1lbnQuY29udGFpbnModGhpcy5jdXJyZW50Rm9jdXNF
bGVtZW50KSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7Ci0g
ICAgICAgIHZhciB0YWJDb250ZW50VmlldyA9IHRoaXMudGFiQnJvd3Nlci5zZWxlY3RlZFRhYkNv
bnRlbnRWaWV3OworICAgIGlmIChXSS50YWJCcm93c2VyLmVsZW1lbnQuY29udGFpbnMoV0kuY3Vy
cmVudEZvY3VzRWxlbWVudCkgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQu
Ym9keSkgeworICAgICAgICB2YXIgdGFiQ29udGVudFZpZXcgPSBXSS50YWJCcm93c2VyLnNlbGVj
dGVkVGFiQ29udGVudFZpZXc7CiAgICAgICAgIGlmICh0YWJDb250ZW50Vmlldy5jb250ZW50QnJv
d3NlcikKICAgICAgICAgICAgIHJldHVybiB0YWJDb250ZW50Vmlldy5jb250ZW50QnJvd3Nlci5j
dXJyZW50Q29udGVudFZpZXc7CiAgICAgICAgIHJldHVybiB0YWJDb250ZW50VmlldzsKICAgICB9
CiAKLSAgICBpZiAodGhpcy5jb25zb2xlRHJhd2VyLmVsZW1lbnQuY29udGFpbnModGhpcy5jdXJy
ZW50Rm9jdXNFbGVtZW50KQotICAgICAgICB8fCAoV0kuaXNTaG93aW5nU3BsaXRDb25zb2xlKCkg
JiYgdGhpcy5xdWlja0NvbnNvbGUuZWxlbWVudC5jb250YWlucyh0aGlzLmN1cnJlbnRGb2N1c0Vs
ZW1lbnQpKSkKLSAgICAgICAgcmV0dXJuIHRoaXMuY29uc29sZURyYXdlci5jdXJyZW50Q29udGVu
dFZpZXc7CisgICAgaWYgKFdJLmNvbnNvbGVEcmF3ZXIuZWxlbWVudC5jb250YWlucyhXSS5jdXJy
ZW50Rm9jdXNFbGVtZW50KQorICAgICAgICB8fCAoV0kuaXNTaG93aW5nU3BsaXRDb25zb2xlKCkg
JiYgV0kucXVpY2tDb25zb2xlLmVsZW1lbnQuY29udGFpbnMoV0kuY3VycmVudEZvY3VzRWxlbWVu
dCkpKQorICAgICAgICByZXR1cm4gV0kuY29uc29sZURyYXdlci5jdXJyZW50Q29udGVudFZpZXc7
CiAKICAgICByZXR1cm4gbnVsbDsKIH07CiAKIFdJLl9mb2N1c2VkT3JWaXNpYmxlQ29udGVudEJy
b3dzZXIgPSBmdW5jdGlvbigpCiB7Ci0gICAgbGV0IGZvY3VzZWRDb250ZW50QnJvd3NlciA9IHRo
aXMuX2ZvY3VzZWRDb250ZW50QnJvd3NlcigpOworICAgIGxldCBmb2N1c2VkQ29udGVudEJyb3dz
ZXIgPSBXSS5fZm9jdXNlZENvbnRlbnRCcm93c2VyKCk7CiAgICAgaWYgKGZvY3VzZWRDb250ZW50
QnJvd3NlcikKICAgICAgICAgcmV0dXJuIGZvY3VzZWRDb250ZW50QnJvd3NlcjsKIAotICAgIHZh
ciB0YWJDb250ZW50VmlldyA9IHRoaXMudGFiQnJvd3Nlci5zZWxlY3RlZFRhYkNvbnRlbnRWaWV3
OworICAgIHZhciB0YWJDb250ZW50VmlldyA9IFdJLnRhYkJyb3dzZXIuc2VsZWN0ZWRUYWJDb250
ZW50VmlldzsKICAgICBpZiAodGFiQ29udGVudFZpZXcuY29udGVudEJyb3dzZXIpCiAgICAgICAg
IHJldHVybiB0YWJDb250ZW50Vmlldy5jb250ZW50QnJvd3NlcjsKIApAQCAtMjQyMiwxMSArMjQy
NCwxMSBAQCBXSS5fZm9jdXNlZE9yVmlzaWJsZUNvbnRlbnRCcm93c2VyID0gZnVuY3Rpb24oKQog
CiBXSS5mb2N1c2VkT3JWaXNpYmxlQ29udGVudFZpZXcgPSBmdW5jdGlvbigpCiB7Ci0gICAgbGV0
IGZvY3VzZWRDb250ZW50VmlldyA9IHRoaXMuX2ZvY3VzZWRDb250ZW50VmlldygpOworICAgIGxl
dCBmb2N1c2VkQ29udGVudFZpZXcgPSBXSS5fZm9jdXNlZENvbnRlbnRWaWV3KCk7CiAgICAgaWYg
KGZvY3VzZWRDb250ZW50VmlldykKICAgICAgICAgcmV0dXJuIGZvY3VzZWRDb250ZW50VmlldzsK
IAotICAgIHZhciB0YWJDb250ZW50VmlldyA9IHRoaXMudGFiQnJvd3Nlci5zZWxlY3RlZFRhYkNv
bnRlbnRWaWV3OworICAgIHZhciB0YWJDb250ZW50VmlldyA9IFdJLnRhYkJyb3dzZXIuc2VsZWN0
ZWRUYWJDb250ZW50VmlldzsKICAgICBpZiAodGFiQ29udGVudFZpZXcuY29udGVudEJyb3dzZXIp
CiAgICAgICAgIHJldHVybiB0YWJDb250ZW50Vmlldy5jb250ZW50QnJvd3Nlci5jdXJyZW50Q29u
dGVudFZpZXc7CiAgICAgcmV0dXJuIHRhYkNvbnRlbnRWaWV3OwpAQCAtMjQzOCwxNCArMjQ0MCwx
NCBAQCBXSS5fYmVmb3JlY29weSA9IGZ1bmN0aW9uKGV2ZW50KQogCiAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gc2VsZWN0aW9uLCBzZWUgaWYgdGhlIGZvY3VzZWQgZWxlbWVudCBvciBmb2N1c2VkIENv
bnRlbnRWaWV3IGNhbiBoYW5kbGUgdGhlIGNvcHkgZXZlbnQuCiAgICAgaWYgKHNlbGVjdGlvbi5p
c0NvbGxhcHNlZCAmJiAhV0kuaXNFdmVudFRhcmdldEFuRWRpdGFibGVGaWVsZChldmVudCkpIHsK
LSAgICAgICAgdmFyIGZvY3VzZWRDb3B5SGFuZGxlciA9IHRoaXMuY3VycmVudEZvY3VzRWxlbWVu
dCAmJiB0aGlzLmN1cnJlbnRGb2N1c0VsZW1lbnQuY29weUhhbmRsZXI7CisgICAgICAgIHZhciBm
b2N1c2VkQ29weUhhbmRsZXIgPSBXSS5jdXJyZW50Rm9jdXNFbGVtZW50ICYmIFdJLmN1cnJlbnRG
b2N1c0VsZW1lbnQuY29weUhhbmRsZXI7CiAgICAgICAgIGlmIChmb2N1c2VkQ29weUhhbmRsZXIg
JiYgdHlwZW9mIGZvY3VzZWRDb3B5SGFuZGxlci5oYW5kbGVCZWZvcmVDb3B5RXZlbnQgPT09ICJm
dW5jdGlvbiIpIHsKICAgICAgICAgICAgIGZvY3VzZWRDb3B5SGFuZGxlci5oYW5kbGVCZWZvcmVD
b3B5RXZlbnQoZXZlbnQpOwogICAgICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgdmFyIGZvY3Vz
ZWRDb250ZW50VmlldyA9IHRoaXMuX2ZvY3VzZWRDb250ZW50VmlldygpOworICAgICAgICB2YXIg
Zm9jdXNlZENvbnRlbnRWaWV3ID0gV0kuX2ZvY3VzZWRDb250ZW50VmlldygpOwogICAgICAgICBp
ZiAoZm9jdXNlZENvbnRlbnRWaWV3ICYmIHR5cGVvZiBmb2N1c2VkQ29udGVudFZpZXcuaGFuZGxl
Q29weUV2ZW50ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ2Myw3ICsyNDY1LDcgQEAgV0kuX2Jl
Zm9yZWNvcHkgPSBmdW5jdGlvbihldmVudCkKIAogV0kuX2ZpbmQgPSBmdW5jdGlvbihldmVudCkK
IHsKLSAgICBsZXQgY29udGVudEJyb3dzZXIgPSB0aGlzLl9mb2N1c2VkT3JWaXNpYmxlQ29udGVu
dEJyb3dzZXIoKTsKKyAgICBsZXQgY29udGVudEJyb3dzZXIgPSBXSS5fZm9jdXNlZE9yVmlzaWJs
ZUNvbnRlbnRCcm93c2VyKCk7CiAgICAgaWYgKCFjb250ZW50QnJvd3NlcikKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yNDcyLDcgKzI0NzQsNyBAQCBXSS5fZmluZCA9IGZ1bmN0aW9uKGV2ZW50KQog
CiBXSS5fc2F2ZSA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAgIHZhciBjb250ZW50VmlldyA9IHRo
aXMuZm9jdXNlZE9yVmlzaWJsZUNvbnRlbnRWaWV3KCk7CisgICAgdmFyIGNvbnRlbnRWaWV3ID0g
V0kuZm9jdXNlZE9yVmlzaWJsZUNvbnRlbnRWaWV3KCk7CiAgICAgaWYgKCFjb250ZW50VmlldyB8
fCAhY29udGVudFZpZXcuc3VwcG9ydHNTYXZlKQogICAgICAgICByZXR1cm47CiAKQEAgLTI0ODEs
NyArMjQ4Myw3IEBAIFdJLl9zYXZlID0gZnVuY3Rpb24oZXZlbnQpCiAKIFdJLl9zYXZlQXMgPSBm
dW5jdGlvbihldmVudCkKIHsKLSAgICB2YXIgY29udGVudFZpZXcgPSB0aGlzLmZvY3VzZWRPclZp
c2libGVDb250ZW50VmlldygpOworICAgIHZhciBjb250ZW50VmlldyA9IFdJLmZvY3VzZWRPclZp
c2libGVDb250ZW50VmlldygpOwogICAgIGlmICghY29udGVudFZpZXcgfHwgIWNvbnRlbnRWaWV3
LnN1cHBvcnRzU2F2ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDkwLDExICsyNDkyLDExIEBA
IFdJLl9zYXZlQXMgPSBmdW5jdGlvbihldmVudCkKIAogV0kuX2NsZWFyID0gZnVuY3Rpb24oZXZl
bnQpCiB7Ci0gICAgbGV0IGNvbnRlbnRWaWV3ID0gdGhpcy5mb2N1c2VkT3JWaXNpYmxlQ29udGVu
dFZpZXcoKTsKKyAgICBsZXQgY29udGVudFZpZXcgPSBXSS5mb2N1c2VkT3JWaXNpYmxlQ29udGVu
dFZpZXcoKTsKICAgICBpZiAoIWNvbnRlbnRWaWV3IHx8IHR5cGVvZiBjb250ZW50Vmlldy5oYW5k
bGVDbGVhclNob3J0Y3V0ICE9PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgIC8vIElmIHRoZSBjdXJy
ZW50IGNvbnRlbnQgdmlldyBpcyB1bmFibGUgdG8gaGFuZGxlIHRoaXMgZXZlbnQsIGNsZWFyIHRo
ZSBjb25zb2xlIHRvIHJlc2V0CisgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNvbnRlbnQgdmll
dyBpcyB1bmFibGUgdG8gaGFuZGxlIFdJIGV2ZW50LCBjbGVhciB0aGUgY29uc29sZSB0byByZXNl
dAogICAgICAgICAvLyB0aGUgZGFzaGJvYXJkIGNvdW50ZXJzLgotICAgICAgICB0aGlzLmNvbnNv
bGVNYW5hZ2VyLnJlcXVlc3RDbGVhck1lc3NhZ2VzKCk7CisgICAgICAgIFdJLmNvbnNvbGVNYW5h
Z2VyLnJlcXVlc3RDbGVhck1lc3NhZ2VzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTI1MDMsNyArMjUwNSw3IEBAIFdJLl9jbGVhciA9IGZ1bmN0aW9uKGV2ZW50KQogCiBXSS5fcG9w
dWxhdGVGaW5kID0gZnVuY3Rpb24oZXZlbnQpCiB7Ci0gICAgbGV0IGZvY3VzZWRDb250ZW50Vmll
dyA9IHRoaXMuX2ZvY3VzZWRDb250ZW50VmlldygpOworICAgIGxldCBmb2N1c2VkQ29udGVudFZp
ZXcgPSBXSS5fZm9jdXNlZENvbnRlbnRWaWV3KCk7CiAgICAgaWYgKCFmb2N1c2VkQ29udGVudFZp
ZXcpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjUxMiw3ICsyNTE0LDcgQEAgV0kuX3BvcHVsYXRl
RmluZCA9IGZ1bmN0aW9uKGV2ZW50KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGV0
IGNvbnRlbnRCcm93c2VyID0gdGhpcy5fZm9jdXNlZE9yVmlzaWJsZUNvbnRlbnRCcm93c2VyKCk7
CisgICAgbGV0IGNvbnRlbnRCcm93c2VyID0gV0kuX2ZvY3VzZWRPclZpc2libGVDb250ZW50QnJv
d3NlcigpOwogICAgIGlmICghY29udGVudEJyb3dzZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MjUyMSw3ICsyNTIzLDcgQEAgV0kuX3BvcHVsYXRlRmluZCA9IGZ1bmN0aW9uKGV2ZW50KQogCiBX
SS5fZmluZE5leHQgPSBmdW5jdGlvbihldmVudCkKIHsKLSAgICBsZXQgZm9jdXNlZENvbnRlbnRW
aWV3ID0gdGhpcy5fZm9jdXNlZENvbnRlbnRWaWV3KCk7CisgICAgbGV0IGZvY3VzZWRDb250ZW50
VmlldyA9IFdJLl9mb2N1c2VkQ29udGVudFZpZXcoKTsKICAgICBpZiAoIWZvY3VzZWRDb250ZW50
VmlldykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTMwLDcgKzI1MzIsNyBAQCBXSS5fZmluZE5l
eHQgPSBmdW5jdGlvbihldmVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxldCBj
b250ZW50QnJvd3NlciA9IHRoaXMuX2ZvY3VzZWRPclZpc2libGVDb250ZW50QnJvd3NlcigpOwor
ICAgIGxldCBjb250ZW50QnJvd3NlciA9IFdJLl9mb2N1c2VkT3JWaXNpYmxlQ29udGVudEJyb3dz
ZXIoKTsKICAgICBpZiAoIWNvbnRlbnRCcm93c2VyKQogICAgICAgICByZXR1cm47CiAKQEAgLTI1
MzksNyArMjU0MSw3IEBAIFdJLl9maW5kTmV4dCA9IGZ1bmN0aW9uKGV2ZW50KQogCiBXSS5fZmlu
ZFByZXZpb3VzID0gZnVuY3Rpb24oZXZlbnQpCiB7Ci0gICAgbGV0IGZvY3VzZWRDb250ZW50Vmll
dyA9IHRoaXMuX2ZvY3VzZWRDb250ZW50VmlldygpOworICAgIGxldCBmb2N1c2VkQ29udGVudFZp
ZXcgPSBXSS5fZm9jdXNlZENvbnRlbnRWaWV3KCk7CiAgICAgaWYgKCFmb2N1c2VkQ29udGVudFZp
ZXcpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjU0OCw3ICsyNTUwLDcgQEAgV0kuX2ZpbmRQcmV2
aW91cyA9IGZ1bmN0aW9uKGV2ZW50KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGV0
IGNvbnRlbnRCcm93c2VyID0gdGhpcy5fZm9jdXNlZE9yVmlzaWJsZUNvbnRlbnRCcm93c2VyKCk7
CisgICAgbGV0IGNvbnRlbnRCcm93c2VyID0gV0kuX2ZvY3VzZWRPclZpc2libGVDb250ZW50QnJv
d3NlcigpOwogICAgIGlmICghY29udGVudEJyb3dzZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MjU2MSwyMCArMjU2MywyMCBAQCBXSS5fY29weSA9IGZ1bmN0aW9uKGV2ZW50KQogCiAgICAgLy8g
SWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLCBwYXNzIHRoZSBjb3B5IGV2ZW50IG9uIHRvIHRoZSBm
b2N1c2VkIGVsZW1lbnQgb3IgZm9jdXNlZCBDb250ZW50Vmlldy4KICAgICBpZiAoc2VsZWN0aW9u
LmlzQ29sbGFwc2VkICYmICFXSS5pc0V2ZW50VGFyZ2V0QW5FZGl0YWJsZUZpZWxkKGV2ZW50KSkg
ewotICAgICAgICB2YXIgZm9jdXNlZENvcHlIYW5kbGVyID0gdGhpcy5jdXJyZW50Rm9jdXNFbGVt
ZW50ICYmIHRoaXMuY3VycmVudEZvY3VzRWxlbWVudC5jb3B5SGFuZGxlcjsKKyAgICAgICAgdmFy
IGZvY3VzZWRDb3B5SGFuZGxlciA9IFdJLmN1cnJlbnRGb2N1c0VsZW1lbnQgJiYgV0kuY3VycmVu
dEZvY3VzRWxlbWVudC5jb3B5SGFuZGxlcjsKICAgICAgICAgaWYgKGZvY3VzZWRDb3B5SGFuZGxl
ciAmJiB0eXBlb2YgZm9jdXNlZENvcHlIYW5kbGVyLmhhbmRsZUNvcHlFdmVudCA9PT0gImZ1bmN0
aW9uIikgewogICAgICAgICAgICAgZm9jdXNlZENvcHlIYW5kbGVyLmhhbmRsZUNvcHlFdmVudChl
dmVudCk7CiAgICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICB2YXIgZm9jdXNlZENvbnRlbnRW
aWV3ID0gdGhpcy5fZm9jdXNlZENvbnRlbnRWaWV3KCk7CisgICAgICAgIHZhciBmb2N1c2VkQ29u
dGVudFZpZXcgPSBXSS5fZm9jdXNlZENvbnRlbnRWaWV3KCk7CiAgICAgICAgIGlmIChmb2N1c2Vk
Q29udGVudFZpZXcgJiYgdHlwZW9mIGZvY3VzZWRDb250ZW50Vmlldy5oYW5kbGVDb3B5RXZlbnQg
PT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgIGZvY3VzZWRDb250ZW50Vmlldy5oYW5kbGVD
b3B5RXZlbnQoZXZlbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgbGV0IHRhYkNvbnRlbnRWaWV3ID0gdGhpcy50YWJCcm93c2VyLnNlbGVjdGVkVGFiQ29udGVu
dFZpZXc7CisgICAgICAgIGxldCB0YWJDb250ZW50VmlldyA9IFdJLnRhYkJyb3dzZXIuc2VsZWN0
ZWRUYWJDb250ZW50VmlldzsKICAgICAgICAgaWYgKHRhYkNvbnRlbnRWaWV3ICYmIHR5cGVvZiB0
YWJDb250ZW50Vmlldy5oYW5kbGVDb3B5RXZlbnQgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAg
ICAgIHRhYkNvbnRlbnRWaWV3LmhhbmRsZUNvcHlFdmVudChldmVudCk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yNTk2LDMxICsyNTk4LDMxIEBAIFdJLl9pbmNyZWFzZVpvb20gPSBmdW5jdGlv
bihldmVudCkKIHsKICAgICBjb25zdCBlcHNpbG9uID0gMC4wMDAxOwogICAgIGNvbnN0IG1heGlt
dW1ab29tID0gMi40OwotICAgIGxldCBjdXJyZW50Wm9vbSA9IHRoaXMuZ2V0Wm9vbUZhY3Rvcigp
OworICAgIGxldCBjdXJyZW50Wm9vbSA9IFdJLmdldFpvb21GYWN0b3IoKTsKICAgICBpZiAoY3Vy
cmVudFpvb20gKyBlcHNpbG9uID49IG1heGltdW1ab29tKSB7CiAgICAgICAgIEluc3BlY3RvckZy
b250ZW5kSG9zdC5iZWVwKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB0aGlzLnNl
dFpvb21GYWN0b3IoTWF0aC5taW4obWF4aW11bVpvb20sIGN1cnJlbnRab29tICsgMC4yKSk7Cisg
ICAgV0kuc2V0Wm9vbUZhY3RvcihNYXRoLm1pbihtYXhpbXVtWm9vbSwgY3VycmVudFpvb20gKyAw
LjIpKTsKIH07CiAKIFdJLl9kZWNyZWFzZVpvb20gPSBmdW5jdGlvbihldmVudCkKIHsKICAgICBj
b25zdCBlcHNpbG9uID0gMC4wMDAxOwogICAgIGNvbnN0IG1pbmltdW1ab29tID0gMC42OwotICAg
IGxldCBjdXJyZW50Wm9vbSA9IHRoaXMuZ2V0Wm9vbUZhY3RvcigpOworICAgIGxldCBjdXJyZW50
Wm9vbSA9IFdJLmdldFpvb21GYWN0b3IoKTsKICAgICBpZiAoY3VycmVudFpvb20gLSBlcHNpbG9u
IDw9IG1pbmltdW1ab29tKSB7CiAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5iZWVwKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB0aGlzLnNldFpvb21GYWN0b3IoTWF0aC5t
YXgobWluaW11bVpvb20sIGN1cnJlbnRab29tIC0gMC4yKSk7CisgICAgV0kuc2V0Wm9vbUZhY3Rv
cihNYXRoLm1heChtaW5pbXVtWm9vbSwgY3VycmVudFpvb20gLSAwLjIpKTsKIH07CiAKIFdJLl9y
ZXNldFpvb20gPSBmdW5jdGlvbihldmVudCkKIHsKLSAgICB0aGlzLnNldFpvb21GYWN0b3IoMSk7
CisgICAgV0kuc2V0Wm9vbUZhY3RvcigxKTsKIH07CiAKIFdJLmdldFpvb21GYWN0b3IgPSBmdW5j
dGlvbigpCkBAIC0yNjU0LDE2ICsyNjU2LDE2IEBAIFdJLnNldExheW91dERpcmVjdGlvbiA9IGZ1
bmN0aW9uKHZhbHVlKQogCiAgICAgV0kuc2V0dGluZ3MubGF5b3V0RGlyZWN0aW9uLnZhbHVlID0g
dmFsdWU7CiAKLSAgICBpZiAoV0kucmVzb2x2ZWRMYXlvdXREaXJlY3Rpb24oKSA9PT0gV0kuTGF5
b3V0RGlyZWN0aW9uLlJUTCAmJiB0aGlzLl9kb2NrQ29uZmlndXJhdGlvbiA9PT0gV0kuRG9ja0Nv
bmZpZ3VyYXRpb24uUmlnaHQpCi0gICAgICAgIHRoaXMuX2RvY2tMZWZ0KCk7CisgICAgaWYgKFdJ
LnJlc29sdmVkTGF5b3V0RGlyZWN0aW9uKCkgPT09IFdJLkxheW91dERpcmVjdGlvbi5SVEwgJiYg
V0kuX2RvY2tDb25maWd1cmF0aW9uID09PSBXSS5Eb2NrQ29uZmlndXJhdGlvbi5SaWdodCkKKyAg
ICAgICAgV0kuX2RvY2tMZWZ0KCk7CiAKLSAgICBpZiAoV0kucmVzb2x2ZWRMYXlvdXREaXJlY3Rp
b24oKSA9PT0gV0kuTGF5b3V0RGlyZWN0aW9uLkxUUiAmJiB0aGlzLl9kb2NrQ29uZmlndXJhdGlv
biA9PT0gV0kuRG9ja0NvbmZpZ3VyYXRpb24uTGVmdCkKLSAgICAgICAgdGhpcy5fZG9ja1JpZ2h0
KCk7CisgICAgaWYgKFdJLnJlc29sdmVkTGF5b3V0RGlyZWN0aW9uKCkgPT09IFdJLkxheW91dERp
cmVjdGlvbi5MVFIgJiYgV0kuX2RvY2tDb25maWd1cmF0aW9uID09PSBXSS5Eb2NrQ29uZmlndXJh
dGlvbi5MZWZ0KQorICAgICAgICBXSS5fZG9ja1JpZ2h0KCk7CiAKICAgICBJbnNwZWN0b3JGcm9u
dGVuZEhvc3QucmVvcGVuKCk7CiB9OwogCi1XSS5fc2hvd1RhYkF0SW5kZXggPSBmdW5jdGlvbihp
LCBldmVudCkKK1dJLl9zaG93VGFiQXRJbmRleCA9IGZ1bmN0aW9uKGkpCiB7CiAgICAgaWYgKGkg
PD0gV0kudGFiQmFyLnRhYkJhckl0ZW1zLmxlbmd0aCkKICAgICAgICAgV0kudGFiQmFyLnNlbGVj
dGVkVGFiQmFySXRlbSA9IGkgLSAxOwpAQCAtMjg0NywxMiArMjg0OSwxMiBAQCBXSS5saW5raWZ5
RWxlbWVudCA9IGZ1bmN0aW9uKGxpbmtFbGVtZW50LCBzb3VyY2VDb2RlTG9jYXRpb24sIG9wdGlv
bnMgPSB7fSkgewogICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogCiAgICAgICAgIGlm
IChldmVudC5tZXRhS2V5KQotICAgICAgICAgICAgdGhpcy5zaG93T3JpZ2luYWxVbmZvcm1hdHRl
ZFNvdXJjZUNvZGVMb2NhdGlvbihzb3VyY2VDb2RlTG9jYXRpb24sIG9wdGlvbnMpOworICAgICAg
ICAgICAgV0kuc2hvd09yaWdpbmFsVW5mb3JtYXR0ZWRTb3VyY2VDb2RlTG9jYXRpb24oc291cmNl
Q29kZUxvY2F0aW9uLCBvcHRpb25zKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5z
aG93U291cmNlQ29kZUxvY2F0aW9uKHNvdXJjZUNvZGVMb2NhdGlvbiwgb3B0aW9ucyk7CisgICAg
ICAgICAgICBXSS5zaG93U291cmNlQ29kZUxvY2F0aW9uKHNvdXJjZUNvZGVMb2NhdGlvbiwgb3B0
aW9ucyk7CiAgICAgfQogCi0gICAgbGlua0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCBzaG93U291cmNlQ29kZUxvY2F0aW9uLmJpbmQodGhpcykpOworICAgIGxpbmtFbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgc2hvd1NvdXJjZUNvZGVMb2NhdGlvbik7CiAgICAgbGlu
a0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCAoZXZlbnQpID0+IHsKICAg
ICAgICAgbGV0IGNvbnRleHRNZW51ID0gV0kuQ29udGV4dE1lbnUuY3JlYXRlRnJvbUV2ZW50KGV2
ZW50KTsKICAgICAgICAgV0kuYXBwZW5kQ29udGV4dE1lbnVJdGVtc0ZvclNvdXJjZUNvZGUoY29u
dGV4dE1lbnUsIHNvdXJjZUNvZGVMb2NhdGlvbik7CkBAIC0yOTUxLDIyICsyOTUzLDIyIEBAIFdJ
LmNyZWF0ZVJlc291cmNlTGluayA9IGZ1bmN0aW9uKHJlc291cmNlLCBjbGFzc05hbWUpCiAgICAg
bGlua05vZGUuY2xhc3NMaXN0LmFkZCgicmVzb3VyY2UtbGluayIsIGNsYXNzTmFtZSk7CiAgICAg
bGlua05vZGUudGl0bGUgPSByZXNvdXJjZS51cmw7CiAgICAgbGlua05vZGUudGV4dENvbnRlbnQg
PSAocmVzb3VyY2UudXJsQ29tcG9uZW50cy5sYXN0UGF0aENvbXBvbmVudCB8fCByZXNvdXJjZS51
cmwpLmluc2VydFdvcmRCcmVha0NoYXJhY3RlcnMoKTsKLSAgICBsaW5rTm9kZS5hZGRFdmVudExp
c3RlbmVyKCJjbGljayIsIGhhbmRsZUNsaWNrLmJpbmQodGhpcykpOworICAgIGxpbmtOb2RlLmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgaGFuZGxlQ2xpY2spOwogICAgIHJldHVybiBsaW5rTm9k
ZTsKIH07CiAKIFdJLl91bmRvS2V5Ym9hcmRTaG9ydGN1dCA9IGZ1bmN0aW9uKGV2ZW50KQogewot
ICAgIGlmICghdGhpcy5pc0VkaXRpbmdBbnlGaWVsZCgpICYmICF0aGlzLmlzRXZlbnRUYXJnZXRB
bkVkaXRhYmxlRmllbGQoZXZlbnQpKSB7Ci0gICAgICAgIHRoaXMudW5kbygpOworICAgIGlmICgh
V0kuaXNFZGl0aW5nQW55RmllbGQoKSAmJiAhV0kuaXNFdmVudFRhcmdldEFuRWRpdGFibGVGaWVs
ZChldmVudCkpIHsKKyAgICAgICAgV0kudW5kbygpOwogICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOwogICAgIH0KIH07CiAKIFdJLl9yZWRvS2V5Ym9hcmRTaG9ydGN1dCA9IGZ1bmN0aW9u
KGV2ZW50KQogewotICAgIGlmICghdGhpcy5pc0VkaXRpbmdBbnlGaWVsZCgpICYmICF0aGlzLmlz
RXZlbnRUYXJnZXRBbkVkaXRhYmxlRmllbGQoZXZlbnQpKSB7Ci0gICAgICAgIHRoaXMucmVkbygp
OworICAgIGlmICghV0kuaXNFZGl0aW5nQW55RmllbGQoKSAmJiAhV0kuaXNFdmVudFRhcmdldEFu
RWRpdGFibGVGaWVsZChldmVudCkpIHsKKyAgICAgICAgV0kucmVkbygpOwogICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOwogICAgIH0KIH07CkBAIC0zMDc3LDEyICszMDc5LDEyIEBAIFdJ
LnJldmVydERPTUNoYW5nZXMgPSBmdW5jdGlvbihkb21DaGFuZ2VzKQogCiBXSS5hcmNoaXZlTWFp
bkZyYW1lID0gZnVuY3Rpb24oKQogewotICAgIHRoaXMuX2Rvd25sb2FkaW5nUGFnZSA9IHRydWU7
Ci0gICAgdGhpcy5fdXBkYXRlRG93bmxvYWRUb29sYmFyQnV0dG9uKCk7CisgICAgV0kuX2Rvd25s
b2FkaW5nUGFnZSA9IHRydWU7CisgICAgV0kuX3VwZGF0ZURvd25sb2FkVG9vbGJhckJ1dHRvbigp
OwogCiAgICAgUGFnZUFnZW50LmFyY2hpdmUoKGVycm9yLCBkYXRhKSA9PiB7Ci0gICAgICAgIHRo
aXMuX2Rvd25sb2FkaW5nUGFnZSA9IGZhbHNlOwotICAgICAgICB0aGlzLl91cGRhdGVEb3dubG9h
ZFRvb2xiYXJCdXR0b24oKTsKKyAgICAgICAgV0kuX2Rvd25sb2FkaW5nUGFnZSA9IGZhbHNlOwor
ICAgICAgICBXSS5fdXBkYXRlRG93bmxvYWRUb29sYmFyQnV0dG9uKCk7CiAKICAgICAgICAgaWYg
KGVycm9yKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzA5Nyw3ICszMDk5LDcgQEAgV0kuYXJj
aGl2ZU1haW5GcmFtZSA9IGZ1bmN0aW9uKCkKIAogV0kuY2FuQXJjaGl2ZU1haW5GcmFtZSA9IGZ1
bmN0aW9uKCkKIHsKLSAgICBpZiAodGhpcy5zaGFyZWRBcHAuZGVidWdnYWJsZVR5cGUgIT09IFdJ
LkRlYnVnZ2FibGVUeXBlLldlYikKKyAgICBpZiAoV0kuc2hhcmVkQXBwLmRlYnVnZ2FibGVUeXBl
ICE9PSBXSS5EZWJ1Z2dhYmxlVHlwZS5XZWIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICghV0kubmV0d29ya01hbmFnZXIubWFpbkZyYW1lIHx8ICFXSS5uZXR3b3JrTWFuYWdlci5t
YWluRnJhbWUubWFpblJlc291cmNlKQpAQCAtMzExMSwyMyArMzExMywyMyBAQCBXSS5hZGRXaW5k
b3dLZXlkb3duTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikKICAgICBpZiAodHlwZW9mIGxp
c3RlbmVyLmhhbmRsZUtleWRvd25FdmVudCAhPT0gImZ1bmN0aW9uIikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgdGhpcy5fd2luZG93S2V5ZG93bkxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTsKKyAg
ICBXSS5fd2luZG93S2V5ZG93bkxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTsKIAotICAgIHRoaXMu
X3VwZGF0ZVdpbmRvd0tleWRvd25MaXN0ZW5lcigpOworICAgIFdJLl91cGRhdGVXaW5kb3dLZXlk
b3duTGlzdGVuZXIoKTsKIH07CiAKIFdJLnJlbW92ZVdpbmRvd0tleWRvd25MaXN0ZW5lciA9IGZ1
bmN0aW9uKGxpc3RlbmVyKQogewotICAgIHRoaXMuX3dpbmRvd0tleWRvd25MaXN0ZW5lcnMucmVt
b3ZlKGxpc3RlbmVyKTsKKyAgICBXSS5fd2luZG93S2V5ZG93bkxpc3RlbmVycy5yZW1vdmUobGlz
dGVuZXIpOwogCi0gICAgdGhpcy5fdXBkYXRlV2luZG93S2V5ZG93bkxpc3RlbmVyKCk7CisgICAg
V0kuX3VwZGF0ZVdpbmRvd0tleWRvd25MaXN0ZW5lcigpOwogfTsKIAogV0kuX3VwZGF0ZVdpbmRv
d0tleWRvd25MaXN0ZW5lciA9IGZ1bmN0aW9uKCkKIHsKLSAgICBpZiAodGhpcy5fd2luZG93S2V5
ZG93bkxpc3RlbmVycy5sZW5ndGggPT09IDEpCisgICAgaWYgKFdJLl93aW5kb3dLZXlkb3duTGlz
dGVuZXJzLmxlbmd0aCA9PT0gMSkKICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtl
eWRvd24iLCBXSS5fc2hhcmVkV2luZG93S2V5ZG93bkxpc3RlbmVyLCB0cnVlKTsKLSAgICBlbHNl
IGlmICghdGhpcy5fd2luZG93S2V5ZG93bkxpc3RlbmVycy5sZW5ndGgpCisgICAgZWxzZSBpZiAo
IVdJLl93aW5kb3dLZXlkb3duTGlzdGVuZXJzLmxlbmd0aCkKICAgICAgICAgd2luZG93LnJlbW92
ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBXSS5fc2hhcmVkV2luZG93S2V5ZG93bkxpc3RlbmVy
LCB0cnVlKTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1Rlc3QvVGVzdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1Rlc3QvVGVzdC5qcwppbmRleCA5ODY0OWYwOWJjOTgxYTEwNjdmYTU0ZjBjNzdmMGY4Yjg0NDgx
ODg5Li43M2FjM2QzMTdjOGY0NWViNTFlNDg4MzkyNTg4YzBjZWQyMGMzOTdjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0L1Rlc3QuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0LmpzCkBAIC02Nyw3
ICs2Nyw3IEBAIFdJLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICBdOwogCiAgICAgLy8gUmVnaXN0
ZXIgZm9yIGV2ZW50cy4KLSAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50
TG9hZGVkIiwgdGhpcy5jb250ZW50TG9hZGVkKTsKKyAgICBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCJET01Db250ZW50TG9hZGVkIiwgV0kuY29udGVudExvYWRlZCk7CiAKICAgICAvLyBOb24t
ZGVmYXVsdCBnbG9iYWwgc2V0dGluZyB2YWx1ZXMgZm9yIHRlc3RzLgogICAgIFdJLnNldHRpbmdz
LnNob3dTaGFkb3dET00udmFsdWUgPSB0cnVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>