<?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>166709</bug_id>
          
          <creation_ts>2017-01-04 18:37:22 -0800</creation_ts>
          <short_desc>Move editing history scripts to WebCore PrivateHeaders</short_desc>
          <delta_ts>2017-01-04 22:03:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>ap</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1263960</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-01-04 18:37:22 -0800</bug_when>
    <thetext>Move editing history scripts to the SDK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263961</commentid>
    <comment_count>1</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-01-04 18:37:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/29876612&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263962</commentid>
    <comment_count>2</comment_count>
      <attachid>298056</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-01-04 18:43:03 -0800</bug_when>
    <thetext>Created attachment 298056
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263975</commentid>
    <comment_count>3</comment_count>
      <attachid>298056</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-01-04 19:31:36 -0800</bug_when>
    <thetext>Comment on attachment 298056
Patch

Thanks Dan!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264002</commentid>
    <comment_count>4</comment_count>
      <attachid>298056</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-04 21:10:01 -0800</bug_when>
    <thetext>Comment on attachment 298056
Patch

Clearing flags on attachment: 298056

Committed r210318: &lt;http://trac.webkit.org/changeset/210318&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264003</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-04 21:10:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264011</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-01-04 22:00:05 -0800</bug_when>
    <thetext>But... this is not a header?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264012</commentid>
    <comment_count>7</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-01-04 22:03:55 -0800</bug_when>
    <thetext>We already have a Scripts subdirectory in the WebCore framework&apos;s PrivateHeaders directory that contains some scripts. This patch adds two more into that subdirectory.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298056</attachid>
            <date>2017-01-04 18:43:03 -0800</date>
            <delta_ts>2017-01-04 21:10:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166709-20170104184135.patch</filename>
            <type>text/plain</type>
            <size>77426</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM2ODBkNzQyNzE2ZDg3
ZjU1ZjYxOTQ3MDk2NjM1ZmRjOTUyNDU2ZC4uODI3NTA5MzVhZDg0ZTkzY2FmYzQ4N2U4OTBkZTA3
YzFjNThlZjdjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE3LTAxLTA0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgZWRpdGlu
ZyBoaXN0b3J5IHNjcmlwdHMgdG8gV2ViQ29yZSBQcml2YXRlSGVhZGVycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NzA5CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yOTg3NjYxMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlIGVkaXRpbmcgaGlzdG9yeSBzY3JpcHRzIG91dCBvZiBJbnRlcm5h
bFNjcmlwdHMgYW5kIGludG8gU2NyaXB0cywgYW5kIHVwZGF0ZSB0aGUgV2ViQ29yZSBDb3B5IFNj
cmlwdCBidWlsZAorICAgICAgICBwaGFzZSB0byBjb3B5IHRoZSBlZGl0aW5nIHNjcmlwdHMgaW50
byBQcml2YXRlSGVhZGVycy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2UgdGhlcmUg
c2hvdWxkIGJlIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFNjcmlwdHMvRHVtcEVk
aXRpbmdIaXN0b3J5LmpzOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvSW50ZXJuYWxTY3Jp
cHRzL0R1bXBFZGl0aW5nSGlzdG9yeS5qcy4KKyAgICAgICAgKiBTY3JpcHRzL0VkaXRpbmdIaXN0
b3J5VXRpbC5qczogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL0ludGVybmFsU2NyaXB0cy9F
ZGl0aW5nSGlzdG9yeVV0aWwuanMuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorCiAyMDE2LTEyLTIyICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBw
bGUuY29tPgogCiAgICAgICAgIENTUyBTY3JvbGwgU25hcCBkb2VzIG5vdCB3b3JrIGlmIHNjcm9s
bGJhciBpcyBoaWRkZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ludGVybmFsU2NyaXB0
cy9EdW1wRWRpdGluZ0hpc3RvcnkuanMgYi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMv
RHVtcEVkaXRpbmdIaXN0b3J5LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWRj
NWVjMTM2NDhjYjRlMmU3MmU5YjliNTM5NTliNTVkMDFkZTgwLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL0ludGVybmFsU2NyaXB0
cy9EdW1wRWRpdGluZ0hpc3RvcnkuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0o
KCkgPT4gewotICAgIGxldCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIGxldCBnbG9iYWxOb2Rl
TWFwID0gbmV3IEVkaXRpbmdIaXN0b3J5Lkdsb2JhbE5vZGVNYXAoKTsKLSAgICBsZXQgdG9wTGV2
ZWxVcGRhdGVzID0gW107Ci0gICAgbGV0IGN1cnJlbnRDaGlsZFVwZGF0ZXMgPSBbXTsKLSAgICBs
ZXQgaXNQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUgPSBmYWxzZTsKLSAgICBsZXQgbGFzdEtub3du
U2VsZWN0aW9uU3RhdGUgPSBudWxsOwotICAgIGxldCBtdXRhdGlvbk9ic2VydmVyID0gbmV3IE11
dGF0aW9uT2JzZXJ2ZXIocmVjb3JkcyA9PiBhcHBlbmRET01VcGRhdGVzRnJvbVJlY29yZHMocmVj
b3JkcykpOwotCi0gICAgZnVuY3Rpb24gYmVnaW5Qcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUoKSB7
Ci0gICAgICAgIGlzUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBlbmRQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUodG9wTGV2ZWxVcGRhdGUpIHsK
LSAgICAgICAgdG9wTGV2ZWxVcGRhdGVzLnB1c2godG9wTGV2ZWxVcGRhdGUpOwotICAgICAgICBj
dXJyZW50Q2hpbGRVcGRhdGVzID0gW107Ci0gICAgICAgIGlzUHJvY2Vzc2luZ1RvcExldmVsVXBk
YXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYXBwZW5kRE9NVXBkYXRlc0Zyb21S
ZWNvcmRzKHJlY29yZHMpIHsKLSAgICAgICAgaWYgKCFyZWNvcmRzLmxlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBsZXQgbmV3VXBkYXRlcyA9IEVkaXRpbmdIaXN0b3J5LkRP
TVVwZGF0ZS5mcm9tUmVjb3JkcyhyZWNvcmRzLCBnbG9iYWxOb2RlTWFwKTsKLSAgICAgICAgaWYg
KGlzUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKQotICAgICAgICAgICAgY3VycmVudENoaWxkVXBk
YXRlcyA9IGN1cnJlbnRDaGlsZFVwZGF0ZXMuY29uY2F0KG5ld1VwZGF0ZXMpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICB0b3BMZXZlbFVwZGF0ZXMgPSB0b3BMZXZlbFVwZGF0ZXMuY29uY2F0
KG5ld1VwZGF0ZXMpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGFwcGVuZFNlbGVjdGlvblVwZGF0
ZUlmTmVjZXNzYXJ5KCkgewotICAgICAgICBsZXQgbmV3U2VsZWN0aW9uU3RhdGUgPSBFZGl0aW5n
SGlzdG9yeS5TZWxlY3Rpb25TdGF0ZS5mcm9tU2VsZWN0aW9uKGdldFNlbGVjdGlvbigpLCBnbG9i
YWxOb2RlTWFwKTsKLSAgICAgICAgaWYgKG5ld1NlbGVjdGlvblN0YXRlLmlzRXF1YWwobGFzdEtu
b3duU2VsZWN0aW9uU3RhdGUpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGxldCB1
cGRhdGUgPSBuZXcgRWRpdGluZ0hpc3RvcnkuU2VsZWN0aW9uVXBkYXRlKGdsb2JhbE5vZGVNYXAs
IG5ld1NlbGVjdGlvblN0YXRlKTsKLSAgICAgICAgaWYgKGlzUHJvY2Vzc2luZ1RvcExldmVsVXBk
YXRlKQotICAgICAgICAgICAgY3VycmVudENoaWxkVXBkYXRlcy5wdXNoKHVwZGF0ZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHRvcExldmVsVXBkYXRlcy5wdXNoKHVwZGF0ZSk7Ci0gICAg
ICAgIGxhc3RLbm93blNlbGVjdGlvblN0YXRlID0gbmV3U2VsZWN0aW9uU3RhdGU7Ci0gICAgfQot
Ci0gICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsIHRydWUp
OwotICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiB7Ci0g
ICAgICAgIGlmIChpbml0aWFsaXplZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBp
bml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICAgICAgRWRpdGluZ0hpc3RvcnkuZ2V0RWRpdGluZ0hp
c3RvcnlBc0pTT05TdHJpbmcgPSAoZm9ybWF0dGVkKSA9PiB7Ci0gICAgICAgICAgICBsZXQgcmVj
b3JkID0ge307Ci0gICAgICAgICAgICByZWNvcmQudXBkYXRlcyA9IHRvcExldmVsVXBkYXRlcy5t
YXAodXBkYXRlID0+IHVwZGF0ZS50b09iamVjdCgpKTsKLSAgICAgICAgICAgIHJlY29yZC5nbG9i
YWxOb2RlTWFwID0gZ2xvYmFsTm9kZU1hcC50b09iamVjdCgpOwotICAgICAgICAgICAgcmV0dXJu
IGZvcm1hdHRlZCA/IEpTT04uc3RyaW5naWZ5KHJlY29yZCwgbnVsbCwgNCkgOiBKU09OLnN0cmlu
Z2lmeShyZWNvcmQpOwotICAgICAgICB9OwotCi0gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlz
dGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsICgpID0+IHsKLSAgICAgICAgICAgIGFwcGVuZFNlbGVj
dGlvblVwZGF0ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIH0pOwotICAgICAgICBkb2N1bWVudC5h
ZGRFdmVudExpc3RlbmVyKCJiZWZvcmVpbnB1dCIsIGV2ZW50ID0+IHsKLSAgICAgICAgICAgIGFw
cGVuZERPTVVwZGF0ZXNGcm9tUmVjb3JkcyhtdXRhdGlvbk9ic2VydmVyLnRha2VSZWNvcmRzKCkp
OwotICAgICAgICAgICAgYmVnaW5Qcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUoKTsKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBldmVudCA9
PiB7Ci0gICAgICAgICAgICBhcHBlbmRET01VcGRhdGVzRnJvbVJlY29yZHMobXV0YXRpb25PYnNl
cnZlci50YWtlUmVjb3JkcygpKTsKLSAgICAgICAgICAgIGxldCBldmVudERhdGEgPSBldmVudC5k
YXRhVHJhbnNmZXIgPyBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgidGV4dC9odG1sIikgOiBl
dmVudC5kYXRhOwotICAgICAgICAgICAgbGFzdEtub3duU2VsZWN0aW9uU3RhdGUgPSBudWxsOwot
ICAgICAgICAgICAgZW5kUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKG5ldyBFZGl0aW5nSGlzdG9y
eS5JbnB1dEV2ZW50VXBkYXRlKGdsb2JhbE5vZGVNYXAsIGN1cnJlbnRDaGlsZFVwZGF0ZXMsIGV2
ZW50LmlucHV0VHlwZSwgZXZlbnREYXRhLCBldmVudC50aW1lU3RhbXApKTsKLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGV2ZW50ID0+
IHsKLSAgICAgICAgICAgIGlmIChldmVudC5rZXkgIT09ICJzIiB8fCAhZXZlbnQubWV0YUtleSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGxldCBmYWtlTGluayA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICAgICAgICAgIGZha2VMaW5rLnNldEF0dHJp
YnV0ZSgiaHJlZiIsICJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwiICsgZW5jb2RlVVJJ
Q29tcG9uZW50KEVkaXRpbmdIaXN0b3J5LmdldEVkaXRpbmdIaXN0b3J5QXNKU09OU3RyaW5nKCkp
KTsKLSAgICAgICAgICAgIGZha2VMaW5rLnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLCAicmVjb3Jk
Lmpzb24iKTsKLSAgICAgICAgICAgIGZha2VMaW5rLmNsaWNrKCk7Ci0gICAgICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtdXRhdGlvbk9ic2Vy
dmVyLm9ic2VydmUoZG9jdW1lbnQsIHsKLSAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSwKLSAg
ICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsCi0gICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0
cnVlLAotICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSwKLSAgICAgICAgICAgIGF0dHJpYnV0ZU9s
ZFZhbHVlOiB0cnVlLAotICAgICAgICAgICAgY2hhcmFjdGVyRGF0YU9sZFZhbHVlOiB0cnVlLAot
ICAgICAgICB9KTsKLSAgICB9KTsKLX0pKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9J
bnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGlsLmpzIGIvU291cmNlL1dlYkNvcmUvSW50
ZXJuYWxTY3JpcHRzL0VkaXRpbmdIaXN0b3J5VXRpbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjQ1ODcwYjNkMGE5YjIwNjViZGFlZGE5YWM5MmM5NDZmNzNmNTk2MC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9J
bnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGlsLmpzCisrKyAvZGV2L251bGwKQEAgLTEs
NjkzICswLDAgQEAKLSgoKSA9PiB7Ci0gICAgY2xhc3MgT2JmdXNjYXRvciB7Ci0gICAgICAgIGNv
bnN0cnVjdG9yKCkgewotICAgICAgICAgICAgdGhpcy5fc2NyYW1ibGVkTG93ZXJjYXNlTGV0dGVy
cyA9IHRoaXMuX3NjcmFtYmxlKEFycmF5KDI2KS5maWxsKCkubWFwKChfLCBpKSA9PiA5NyArIGkp
KTsKLSAgICAgICAgICAgIHRoaXMuX3NjcmFtYmxlZFVwcGVyY2FzZUxldHRlcnMgPSB0aGlzLl9z
Y3JhbWJsZShBcnJheSgyNikuZmlsbCgpLm1hcCgoXywgaSkgPT4gNjUgKyBpKSk7Ci0gICAgICAg
ICAgICB0aGlzLl9zY3JhbWJsZWROdW1iZXJzID0gdGhpcy5fc2NyYW1ibGUoQXJyYXkoMTApLmZp
bGwoKS5tYXAoKF8sIGkpID0+IDQ4ICsgaSkpOwotICAgICAgICAgICAgdGhpcy5lbmFibGVkID0g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBfc2NyYW1ibGUoYXJyYXkpIHsKLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7Ci0gICAgICAg
ICAgICAgICAgbGV0IGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTsKLSAg
ICAgICAgICAgICAgICBsZXQgdGVtcCA9IGFycmF5W2ldOwotICAgICAgICAgICAgICAgIGFycmF5
W2ldID0gYXJyYXlbal07Ci0gICAgICAgICAgICAgICAgYXJyYXlbal0gPSB0ZW1wOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9Ci0KLSAgICAgICAg
YXBwbHlUb1RleHQodGV4dCkgewotICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRl
eHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7Ci0KLSAgICAgICAgICAgIGxldCByZXN1
bHQgPSAiIjsKLSAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0ZXh0Lmxl
bmd0aDsgaW5kZXgrKykgewotICAgICAgICAgICAgICAgIGxldCBjb2RlID0gdGV4dC5jaGFyQ29k
ZUF0KGluZGV4KTsKLSAgICAgICAgICAgICAgICBsZXQgbnVtYmVySW5kZXggPSB0aGlzLl9zY3Jh
bWJlZE51bWJlckluZGV4Rm9yQ29kZShjb2RlKTsKLSAgICAgICAgICAgICAgICBsZXQgbG93ZXJj
YXNlSW5kZXggPSB0aGlzLl9zY3JhbWJlZExvd2VyY2FzZUluZGV4Rm9yQ29kZShjb2RlKTsKLSAg
ICAgICAgICAgICAgICBsZXQgdXBwZXJjYXNlSW5kZXggPSB0aGlzLl9zY3JhbWJlZFVwcGVyY2Fz
ZUluZGV4Rm9yQ29kZShjb2RlKTsKLQotICAgICAgICAgICAgICAgIGlmIChudW1iZXJJbmRleCAh
PSBudWxsKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29k
ZSh0aGlzLl9zY3JhbWJsZWROdW1iZXJzW251bWJlckluZGV4XSk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAobG93ZXJjYXNlSW5kZXggIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fc2NyYW1ibGVkTG93ZXJjYXNlTGV0dGVy
c1tsb3dlcmNhc2VJbmRleF0pOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVwcGVyY2FzZUlu
ZGV4ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNo
YXJDb2RlKHRoaXMuX3NjcmFtYmxlZFVwcGVyY2FzZUxldHRlcnNbdXBwZXJjYXNlSW5kZXhdKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB0ZXh0
LmNoYXJBdChpbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0KLSAgICAgICAgYXBwbHlUb0ZpbGVuYW1lKGZpbGVuYW1lKSB7Ci0gICAg
ICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZpbGVuYW1lOwotCi0gICAgICAgICAgICBsZXQgY29tcG9uZW50cyA9IGZpbGVuYW1l
LnNwbGl0KCIuIik7Ci0gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cy5tYXAoKGNvbXBvbmVu
dCwgaW5kZXgpID0+IHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY29tcG9uZW50cy5s
ZW5ndGggLSAxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50OwotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlUb1RleHQoY29tcG9uZW50KTsKLSAgICAgICAg
ICAgIH0pLmpvaW4oIi4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9zY3JhbWJlZE51bWJlcklu
ZGV4Rm9yQ29kZShjb2RlKSB7Ci0gICAgICAgICAgICByZXR1cm4gNDggPD0gY29kZSAmJiBjb2Rl
IDw9IDU3ID8gY29kZSAtIDQ4IDogbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIF9zY3JhbWJl
ZExvd2VyY2FzZUluZGV4Rm9yQ29kZShjb2RlKSB7Ci0gICAgICAgICAgICByZXR1cm4gOTcgPD0g
Y29kZSAmJiBjb2RlIDw9IDEyMiA/IGNvZGUgLSA5NyA6IG51bGw7Ci0gICAgICAgIH0KLQotICAg
ICAgICBfc2NyYW1iZWRVcHBlcmNhc2VJbmRleEZvckNvZGUoY29kZSkgewotICAgICAgICAgICAg
cmV0dXJuIDY1IDw9IGNvZGUgJiYgY29kZSA8PSA5MCA/IGNvZGUgLSA2NSA6IG51bGw7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzdGF0aWMgc2hhcmVkKCkgewotICAgICAgICAgICAgaWYgKCFPYmZ1
c2NhdG9yLl9zaGFyZWRJbnN0YW5jZSkKLSAgICAgICAgICAgICAgICBPYmZ1c2NhdG9yLl9zaGFy
ZWRJbnN0YW5jZSA9IG5ldyBPYmZ1c2NhdG9yKCk7Ci0gICAgICAgICAgICByZXR1cm4gT2JmdXNj
YXRvci5fc2hhcmVkSW5zdGFuY2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBl
bGVtZW50RnJvbU1hcmtkb3duKGh0bWwpIHsKLSAgICAgICAgbGV0IHRlbXBvcmFyeURpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICB0ZW1wb3JhcnlEaXYuaW5uZXJI
VE1MID0gaHRtbDsKLSAgICAgICAgcmV0dXJuIHRlbXBvcmFyeURpdi5jaGlsZHJlblswXTsKLSAg
ICB9Ci0KLSAgICBjbGFzcyBHbG9iYWxOb2RlTWFwIHsKLSAgICAgICAgY29uc3RydWN0b3Iobm9k
ZXNCeUdVSUQpIHsKLSAgICAgICAgICAgIHRoaXMuX25vZGVzQnlHVUlEID0gbm9kZXNCeUdVSUQg
PyBub2Rlc0J5R1VJRCA6IG5ldyBNYXAoKTsKLSAgICAgICAgICAgIHRoaXMuX2d1aWRzQnlOb2Rl
ID0gbmV3IE1hcCgpOwotICAgICAgICAgICAgdGhpcy5fY3VycmVudEdVSUQgPSAwOwotICAgICAg
ICAgICAgZm9yIChsZXQgW2d1aWQsIG5vZGVdIG9mIHRoaXMuX25vZGVzQnlHVUlEKSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fZ3VpZHNCeU5vZGUuc2V0KG5vZGUsIGd1aWQpOwotICAgICAgICAg
ICAgICAgIHRoaXMuX2N1cnJlbnRHVUlEID0gTWF0aC5tYXgodGhpcy5fY3VycmVudEdVSUQsIGd1
aWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5fY3VycmVudEdVSUQrKzsKLSAg
ICAgICAgfQotCi0gICAgICAgIG5vZGVzRm9yR1VJRHMoZ3VpZHMpIHsKLSAgICAgICAgICAgIGlm
ICghZ3VpZHMubWFwKQotICAgICAgICAgICAgICAgIGd1aWRzID0gQXJyYXkuZnJvbShndWlkcyk7
Ci0gICAgICAgICAgICByZXR1cm4gZ3VpZHMubWFwKGd1aWQgPT4gdGhpcy5ub2RlRm9yR1VJRChn
dWlkKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBndWlkc0Zvck5vZGVzKG5vZGVzKSB7Ci0gICAg
ICAgICAgICBpZiAoIW5vZGVzLm1hcCkKLSAgICAgICAgICAgICAgICBub2RlcyA9IEFycmF5LmZy
b20obm9kZXMpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVzLm1hcChub2RlID0+IHRoaXMuZ3Vp
ZEZvck5vZGUobm9kZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbm9kZUZvckdVSUQoZ3VpZCkg
ewotICAgICAgICAgICAgaWYgKCFndWlkKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwot
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNCeUdVSUQuZ2V0KGd1aWQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZ3VpZEZvck5vZGUobm9kZSkgewotICAgICAgICAgICAgaWYgKCFub2Rl
KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICBpZiAodGhpcy5oYXNH
VUlERm9yTm9kZShub2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ3VpZHNCeU5v
ZGUuZ2V0KG5vZGUpOwotCi0gICAgICAgICAgICBjb25zdCBndWlkID0gdGhpcy5fY3VycmVudEdV
SUQ7Ci0gICAgICAgICAgICB0aGlzLl9ndWlkc0J5Tm9kZS5zZXQobm9kZSwgZ3VpZCk7Ci0gICAg
ICAgICAgICB0aGlzLl9ub2Rlc0J5R1VJRC5zZXQoZ3VpZCwgbm9kZSk7Ci0gICAgICAgICAgICB0
aGlzLl9jdXJyZW50R1VJRCsrOwotICAgICAgICAgICAgcmV0dXJuIGd1aWQ7Ci0gICAgICAgIH0K
LQotICAgICAgICBoYXNHVUlERm9yTm9kZShub2RlKSB7Ci0gICAgICAgICAgICByZXR1cm4gISF0
aGlzLl9ndWlkc0J5Tm9kZS5nZXQobm9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBub2Rlcygp
IHsKLSAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX25vZGVzQnlHVUlELnZhbHVl
cygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRvT2JqZWN0KCkgewotICAgICAgICAgICAgbGV0
IG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3MgPSBbXSwgZ3VpZHNUb1Byb2Nlc3MgPSBuZXcgU2V0KCk7
Ci0gICAgICAgICAgICBsZXQgZ3VpZHNCeU5vZGVJdGVyYXRvciA9IHRoaXMuX2d1aWRzQnlOb2Rl
LmVudHJpZXMoKTsKLSAgICAgICAgICAgIGZvciAobGV0IGVudHJ5ID0gZ3VpZHNCeU5vZGVJdGVy
YXRvci5uZXh0KCk7ICFlbnRyeS5kb25lOyBlbnRyeSA9IGd1aWRzQnlOb2RlSXRlcmF0b3IubmV4
dCgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZXNBbmRHVUlEc1RvUHJvY2Vzcy5wdXNoKGVudHJ5
LnZhbHVlKTsKLSAgICAgICAgICAgICAgICBndWlkc1RvUHJvY2Vzcy5hZGQoZW50cnkudmFsdWVb
MV0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsZXQgaXRlcmF0b3IgPSBkb2N1bWVu
dC5jcmVhdGVOb2RlSXRlcmF0b3IoZG9jdW1lbnQuYm9keSwgTm9kZUZpbHRlci5TSE9XX0FMTCk7
Ci0gICAgICAgICAgICBmb3IgKGxldCBub2RlID0gaXRlcmF0b3IubmV4dE5vZGUoKTsgbm9kZTsg
bm9kZSA9IGl0ZXJhdG9yLm5leHROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5o
YXNHVUlERm9yTm9kZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgICAgICBsZXQgbmV3R1VJRCA9IHRoaXMuZ3VpZEZvck5vZGUobm9kZSk7Ci0gICAg
ICAgICAgICAgICAgbm9kZXNBbmRHVUlEc1RvUHJvY2Vzcy5wdXNoKFtub2RlLCBuZXdHVUlEXSk7
Ci0gICAgICAgICAgICAgICAgZ3VpZHNUb1Byb2Nlc3MuYWRkKG5ld0dVSUQpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBsZXQgbm9kZUluZm9BcnJheSA9IFtdOwotICAgICAgICAgICAg
d2hpbGUgKG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3MubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAg
bGV0IFtub2RlLCBndWlkXSA9IG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3MucG9wKCk7Ci0gICAgICAg
ICAgICAgICAgbGV0IGluZm8gPSB7fTsKLSAgICAgICAgICAgICAgICBpbmZvLmd1aWQgPSBndWlk
OwotICAgICAgICAgICAgICAgIGluZm8udGFnTmFtZSA9IG5vZGUudGFnTmFtZTsKLSAgICAgICAg
ICAgICAgICBpbmZvLmF0dHJpYnV0ZXMgPSBHbG9iYWxOb2RlTWFwLm5vZGVBdHRyaWJ1dGVzVG9P
YmplY3Qobm9kZSk7Ci0gICAgICAgICAgICAgICAgaW5mby50eXBlID0gbm9kZS5ub2RlVHlwZTsK
LSAgICAgICAgICAgICAgICBpbmZvLmRhdGEgPSBHbG9iYWxOb2RlTWFwLmRhdGFGb3JOb2RlKG5v
ZGUpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSkgewotICAgICAg
ICAgICAgICAgICAgICBpbmZvLmNoaWxkR1VJRHMgPSB0aGlzLmd1aWRzRm9yTm9kZXMobm9kZS5j
aGlsZE5vZGVzKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGRHVUlEIG9mIGlu
Zm8uY2hpbGRHVUlEcykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFndWlkc1RvUHJv
Y2Vzcy5oYXMoY2hpbGRHVUlEKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc0Fu
ZEdVSURzVG9Qcm9jZXNzLnB1c2goW3RoaXMubm9kZUZvckdVSUQoY2hpbGRHVUlEKSwgY2hpbGRH
VUlEXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgbm9kZUluZm9BcnJheS5wdXNoKGluZm8pOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICByZXR1cm4gbm9kZUluZm9BcnJheTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRp
YyBmcm9tT2JqZWN0KG5vZGVJbmZvQXJyYXkpIHsKLSAgICAgICAgICAgIGxldCBub2Rlc0J5R1VJ
RCA9IG5ldyBNYXAoKTsKLSAgICAgICAgICAgIGZvciAobGV0IGluZm8gb2Ygbm9kZUluZm9BcnJh
eSkgewotICAgICAgICAgICAgICAgIGxldCBub2RlID0gbnVsbDsKLSAgICAgICAgICAgICAgICBp
ZiAoaW5mby50eXBlID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICAgICAgICBu
b2RlID0gR2xvYmFsTm9kZU1hcC5lbGVtZW50RnJvbVRhZ05hbWUoaW5mby50YWdOYW1lLCBpbmZv
LmF0dHJpYnV0ZXMsIGluZm8uZGF0YSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaW5mby50eXBl
ID09IE5vZGUuVEVYVF9OT0RFKQotICAgICAgICAgICAgICAgICAgICBub2RlID0gZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoaW5mby5kYXRhKTsKLQotICAgICAgICAgICAgICAgIGlmIChpbmZvLnR5
cGUgPT0gTm9kZS5ET0NVTUVOVF9OT0RFKQotICAgICAgICAgICAgICAgICAgICBub2RlID0gZG9j
dW1lbnQ7Ci0KLSAgICAgICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlKTsKLSAgICAgICAg
ICAgICAgICBub2Rlc0J5R1VJRC5zZXQoaW5mby5ndWlkLCBub2RlKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gVGhlbiwgc2V0IGNoaWxkIG5vZGVzIGZvciBhbGwgbm9kZXMgdGhh
dCBkbyBub3QgYXBwZWFyIGluIHRoZSBET00uCi0gICAgICAgICAgICBmb3IgKGxldCBpbmZvIG9m
IG5vZGVJbmZvQXJyYXkuZmlsdGVyKGluZm8gPT4gISFpbmZvLmNoaWxkR1VJRHMpKSB7Ci0gICAg
ICAgICAgICAgICAgbGV0IG5vZGUgPSBub2Rlc0J5R1VJRC5nZXQoaW5mby5ndWlkKTsKLSAgICAg
ICAgICAgICAgICBmb3IgKGxldCBjaGlsZEdVSUQgb2YgaW5mby5jaGlsZEdVSURzKQotICAgICAg
ICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChub2Rlc0J5R1VJRC5nZXQoY2hpbGRHVUlE
KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgR2xvYmFsTm9kZU1h
cChub2Rlc0J5R1VJRCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgZGF0YUZvck5vZGUo
bm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RF
KQotICAgICAgICAgICAgICAgIHJldHVybiBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9UZXh0
KG5vZGUuZGF0YSk7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdO
YW1lLnRvTG93ZXJDYXNlKCkgPT09ICJhdHRhY2htZW50IikgewotICAgICAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6IG5vZGUuZmlsZS50eXBlLAotICAgICAg
ICAgICAgICAgICAgICBuYW1lOiBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9GaWxlbmFtZShu
b2RlLmZpbGUubmFtZSksCi0gICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogbmV3IERh
dGUoKS5nZXRUaW1lKCkKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBlbGVtZW50
RnJvbVRhZ05hbWUodGFnTmFtZSwgYXR0cmlidXRlcywgZGF0YSkgewotICAgICAgICAgICAgbGV0
IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgICAgICAgICAgZm9y
IChsZXQgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKQotICAgICAgICAgICAgICAgIG5vZGUu
c2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pOwot
Ci0gICAgICAgICAgICBpZiAodGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJhdHRhY2htZW50Iikg
ewotICAgICAgICAgICAgICAgIG5vZGUuZmlsZSA9IG5ldyBGaWxlKFtgRmlsZSBuYW1lZCAnJHtk
YXRhLm5hbWV9J2BdLCBkYXRhLm5hbWUsIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogZGF0
YS50eXBlLAotICAgICAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGRhdGEubGFzdE1vZGlm
aWVkCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
dHVybiBub2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0dXJucyBhbiBPYmplY3QgY29u
dGFpbmluZyBhdHRyaWJ1dGUgbmFtZSA9PiBhdHRyaWJ1dGUgdmFsdWUKLSAgICAgICAgc3RhdGlj
IG5vZGVBdHRyaWJ1dGVzVG9PYmplY3Qobm9kZSwgYXR0cmlidXRlc1RvRXhjbHVkZT1bXSkgewot
ICAgICAgICAgICAgY29uc3QgZXhjbHVkZUF0dHJpYnV0ZXNTZXQgPSBuZXcgU2V0KGF0dHJpYnV0
ZXNUb0V4Y2x1ZGUpOwotICAgICAgICAgICAgaWYgKCFub2RlLmF0dHJpYnV0ZXMpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVNYXAgPSB7
fTsKLSAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub2RlLmF0dHJpYnV0
ZXMubGVuZ3RoOyBpbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0g
bm9kZS5hdHRyaWJ1dGVzLml0ZW0oaW5kZXgpOwotICAgICAgICAgICAgICAgIGNvbnN0IFtsb2Nh
bE5hbWUsIHZhbHVlXSA9IFthdHRyaWJ1dGUubG9jYWxOYW1lLCBhdHRyaWJ1dGUudmFsdWVdOwot
ICAgICAgICAgICAgICAgIGlmIChleGNsdWRlQXR0cmlidXRlc1NldC5oYXMobG9jYWxOYW1lKSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVNYXBbbG9jYWxOYW1lXSA9IHZhbHVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBy
ZXR1cm4gYXR0cmlidXRlTWFwOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVzY3JpcHRpb25IVE1M
Rm9yR1VJRChndWlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gYDxzcGFuIGVoLWd1aWQ9JHtndWlk
fSBjbGFzcz0iZWgtbm9kZSI+JHt0aGlzLm5vZGVGb3JHVUlEKGd1aWQpLm5vZGVOYW1lfTwvc3Bh
bj5gOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVzY3JpcHRpb25IVE1MRm9yTm9kZShub2RlKSB7
Ci0gICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuICIobnVsbCki
OwotICAgICAgICAgICAgcmV0dXJuIGA8c3BhbiBlaC1ndWlkPSR7dGhpcy5ndWlkRm9yTm9kZShu
b2RlKX0gY2xhc3M9ImVoLW5vZGUiPiR7bm9kZS5ub2RlTmFtZX08L3NwYW4+YDsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGNsYXNzIFNlbGVjdGlvblN0YXRlIHsKLSAgICAgICAgY29uc3RydWN0
b3Iobm9kZU1hcCwgc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0LCBh
bmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHsKLSAgICAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5vZGVNYXApOwotICAgICAgICAgICAgdGhpcy5ub2RlTWFw
ID0gbm9kZU1hcDsKLSAgICAgICAgICAgIHRoaXMuc3RhcnRHVUlEID0gbm9kZU1hcC5ndWlkRm9y
Tm9kZShzdGFydE5vZGUpOwotICAgICAgICAgICAgdGhpcy5zdGFydE9mZnNldCA9IHN0YXJ0T2Zm
c2V0OwotICAgICAgICAgICAgdGhpcy5lbmRHVUlEID0gbm9kZU1hcC5ndWlkRm9yTm9kZShlbmRO
b2RlKTsKLSAgICAgICAgICAgIHRoaXMuZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwotICAgICAgICAg
ICAgdGhpcy5hbmNob3JHVUlEID0gbm9kZU1hcC5ndWlkRm9yTm9kZShhbmNob3JOb2RlKTsKLSAg
ICAgICAgICAgIHRoaXMuYW5jaG9yT2Zmc2V0ID0gYW5jaG9yT2Zmc2V0OwotICAgICAgICAgICAg
dGhpcy5mb2N1c0dVSUQgPSBub2RlTWFwLmd1aWRGb3JOb2RlKGZvY3VzTm9kZSk7Ci0gICAgICAg
ICAgICB0aGlzLmZvY3VzT2Zmc2V0ID0gZm9jdXNPZmZzZXQ7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpc0VxdWFsKG90aGVyU2VsZWN0aW9uU3RhdGUpIHsKLSAgICAgICAgICAgIHJldHVybiBvdGhl
clNlbGVjdGlvblN0YXRlCi0gICAgICAgICAgICAgICAgJiYgdGhpcy5zdGFydEdVSUQgPT09IG90
aGVyU2VsZWN0aW9uU3RhdGUuc3RhcnRHVUlEICYmIHRoaXMuc3RhcnRPZmZzZXQgPT09IG90aGVy
U2VsZWN0aW9uU3RhdGUuc3RhcnRPZmZzZXQKLSAgICAgICAgICAgICAgICAmJiB0aGlzLmVuZEdV
SUQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuZW5kR1VJRCAmJiB0aGlzLmVuZE9mZnNldCA9PT0g
b3RoZXJTZWxlY3Rpb25TdGF0ZS5lbmRPZmZzZXQKLSAgICAgICAgICAgICAgICAmJiB0aGlzLmFu
Y2hvckdVSUQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuYW5jaG9yR1VJRCAmJiB0aGlzLmFuY2hv
ck9mZnNldCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5hbmNob3JPZmZzZXQKLSAgICAgICAgICAg
ICAgICAmJiB0aGlzLmZvY3VzR1VJRCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5mb2N1c0dVSUQg
JiYgdGhpcy5mb2N1c09mZnNldCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5mb2N1c09mZnNldDsK
LSAgICAgICAgfQotCi0gICAgICAgIGFwcGx5VG9TZWxlY3Rpb24oc2VsZWN0aW9uKSB7Ci0gICAg
ICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7Ci0gICAgICAgICAgICBsZXQgcmFu
Z2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQo
dGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMuc3RhcnRHVUlEKSwgdGhpcy5zdGFydE9mZnNl
dCk7Ci0gICAgICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRo
aXMuZW5kR1VJRCksIHRoaXMuZW5kT2Zmc2V0KTsKLSAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRS
YW5nZShyYW5nZSk7Ci0gICAgICAgICAgICBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVudCh0aGlz
Lm5vZGVNYXAubm9kZUZvckdVSUQodGhpcy5hbmNob3JHVUlEKSwgdGhpcy5hbmNob3JPZmZzZXQs
IHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLmZvY3VzR1VJRCksIHRoaXMuZm9jdXNPZmZz
ZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIGZyb21TZWxlY3Rpb24oc2VsZWN0aW9u
LCBub2RlTWFwKSB7Ci0gICAgICAgICAgICBsZXQgW3N0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVu
ZE5vZGUsIGVuZE9mZnNldF0gPSBbbnVsbCwgMCwgbnVsbCwgMF07Ci0gICAgICAgICAgICBpZiAo
c2VsZWN0aW9uLnJhbmdlQ291bnQpIHsKLSAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRSYW5n
ZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwotICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9
IHNlbGVjdGVkUmFuZ2Uuc3RhcnRDb250YWluZXI7Ci0gICAgICAgICAgICAgICAgc3RhcnRPZmZz
ZXQgPSBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgICAgIGVuZE5vZGUg
PSBzZWxlY3RlZFJhbmdlLmVuZENvbnRhaW5lcjsKLSAgICAgICAgICAgICAgICBlbmRPZmZzZXQg
PSBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBuZXcgU2VsZWN0aW9uU3RhdGUoCi0gICAgICAgICAgICAgICAgbm9kZU1hcCwgc3RhcnRO
b2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0LAotICAgICAgICAgICAgICAgIHNl
bGVjdGlvbi5hbmNob3JOb2RlLCBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LCBzZWxlY3Rpb24uZm9j
dXNOb2RlLCBzZWxlY3Rpb24uZm9jdXNPZmZzZXQKLSAgICAgICAgICAgICk7Ci0gICAgICAgIH0K
LQotICAgICAgICB0b09iamVjdCgpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgc3RhcnRHVUlEOiB0aGlzLnN0YXJ0R1VJRCwgc3RhcnRPZmZzZXQ6IHRoaXMuc3RhcnRP
ZmZzZXQsIGVuZEdVSUQ6IHRoaXMuZW5kR1VJRCwgZW5kT2Zmc2V0OiB0aGlzLmVuZE9mZnNldCwK
LSAgICAgICAgICAgICAgICBhbmNob3JHVUlEOiB0aGlzLmFuY2hvckdVSUQsIGFuY2hvck9mZnNl
dDogdGhpcy5hbmNob3JPZmZzZXQsIGZvY3VzR1VJRDogdGhpcy5mb2N1c0dVSUQsIGZvY3VzT2Zm
c2V0OiB0aGlzLmZvY3VzT2Zmc2V0Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAg
ICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1hcCkgewotICAgICAgICAgICAgaWYgKCFq
c29uKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICByZXR1cm4g
bmV3IFNlbGVjdGlvblN0YXRlKAotICAgICAgICAgICAgICAgIG5vZGVNYXAsIG5vZGVNYXAubm9k
ZUZvckdVSUQoanNvbi5zdGFydEdVSUQpLCBqc29uLnN0YXJ0T2Zmc2V0LCBub2RlTWFwLm5vZGVG
b3JHVUlEKGpzb24uZW5kR1VJRCksIGpzb24uZW5kT2Zmc2V0LAotICAgICAgICAgICAgICAgIG5v
ZGVNYXAubm9kZUZvckdVSUQoanNvbi5hbmNob3JHVUlEKSwganNvbi5hbmNob3JPZmZzZXQsIG5v
ZGVNYXAubm9kZUZvckdVSUQoanNvbi5mb2N1c0dVSUQpLCBqc29uLmZvY3VzT2Zmc2V0Ci0gICAg
ICAgICAgICApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgRE9NVXBkYXRlIHsKLSAg
ICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCkgewotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQo
bm9kZU1hcCk7Ci0gICAgICAgICAgICB0aGlzLm5vZGVNYXAgPSBub2RlTWFwOwotICAgICAgICB9
Ci0KLSAgICAgICAgYXBwbHkoKSB7Ci0gICAgICAgICAgICB0aHJvdyAiRXhwZWN0ZWQgc3ViY2xh
c3MgaW1wbGVtZW50YXRpb24uIjsKLSAgICAgICAgfQotCi0gICAgICAgIHVuYXBwbHkoKSB7Ci0g
ICAgICAgICAgICB0aHJvdyAiRXhwZWN0ZWQgc3ViY2xhc3MgaW1wbGVtZW50YXRpb24uIjsKLSAg
ICAgICAgfQotCi0gICAgICAgIHRhcmdldE5vZGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhp
cy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMudGFyZ2V0R1VJRCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBkZXRhaWxzRWxlbWVudCgpIHsKLSAgICAgICAgICAgIHRocm93ICJFeHBlY3RlZCBzdWJj
bGFzcyBpbXBsZW1lbnRhdGlvbi4iOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIG9mVHlw
ZSh0eXBlKSB7Ci0gICAgICAgICAgICBpZiAoIURPTVVwZGF0ZS5fYWxsVHlwZXMpCi0gICAgICAg
ICAgICAgICAgRE9NVXBkYXRlLl9hbGxUeXBlcyA9IHsgQ2hpbGRMaXN0VXBkYXRlLCBDaGFyYWN0
ZXJEYXRhVXBkYXRlLCBBdHRyaWJ1dGVVcGRhdGUsIElucHV0RXZlbnRVcGRhdGUsIFNlbGVjdGlv
blVwZGF0ZSB9OwotICAgICAgICAgICAgcmV0dXJuIERPTVVwZGF0ZS5fYWxsVHlwZXNbdHlwZV07
Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgZnJvbVJlY29yZHMocmVjb3Jkcywgbm9kZU1h
cCkgewotICAgICAgICAgICAgbGV0IHVwZGF0ZXMgPSBbXQotICAgICAgICAgICAgICAgICwgY2hh
cmFjdGVyRGF0YVVwZGF0ZXMgPSBbXQotICAgICAgICAgICAgICAgICwgYXR0cmlidXRlVXBkYXRl
cyA9IFtdOwotCi0gICAgICAgICAgICBmb3IgKGxldCByZWNvcmQgb2YgcmVjb3JkcykgewotICAg
ICAgICAgICAgICAgIGxldCB0YXJnZXQgPSByZWNvcmQudGFyZ2V0OwotICAgICAgICAgICAgICAg
IHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlICJjaGFyYWN0ZXJE
YXRhIjoKLSAgICAgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IG5ldyBDaGFyYWN0ZXJEYXRh
VXBkYXRlKG5vZGVNYXAsIG5vZGVNYXAuZ3VpZEZvck5vZGUodGFyZ2V0KSwgcmVjb3JkLm9sZFZh
bHVlLCB0YXJnZXQuZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckRhdGFVcGRhdGVzLnB1c2godXBkYXRl
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAiY2hp
bGRMaXN0IjoKLSAgICAgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IG5ldyBDaGlsZExpc3RV
cGRhdGUobm9kZU1hcCwgbm9kZU1hcC5ndWlkRm9yTm9kZSh0YXJnZXQpLCBub2RlTWFwLmd1aWRz
Rm9yTm9kZXMocmVjb3JkLmFkZGVkTm9kZXMpLCBub2RlTWFwLmd1aWRzRm9yTm9kZXMocmVjb3Jk
LnJlbW92ZWROb2RlcyksIG5vZGVNYXAuZ3VpZEZvck5vZGUocmVjb3JkLm5leHRTaWJsaW5nKSkK
LSAgICAgICAgICAgICAgICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgImF0dHJpYnV0ZXMiOgotICAgICAg
ICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gbmV3IEF0dHJpYnV0ZVVwZGF0ZShub2RlTWFwLCBu
b2RlTWFwLmd1aWRGb3JOb2RlKHRhcmdldCksIHJlY29yZC5hdHRyaWJ1dGVOYW1lLCByZWNvcmQu
b2xkVmFsdWUsIHRhcmdldC5nZXRBdHRyaWJ1dGUocmVjb3JkLmF0dHJpYnV0ZU5hbWUpKQotICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVzLnB1c2godXBkYXRlKTsKLSAgICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlVXBkYXRlcy5wdXNoKHVwZGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
QWRqdXN0IGFsbCBjaGFyYWN0ZXIgZGF0YSB1cGRhdGVzIGZvciB0aGUgc2FtZSB0YXJnZXQuCi0g
ICAgICAgICAgICBjaGFyYWN0ZXJEYXRhVXBkYXRlcy5mb3JFYWNoKChjdXJyZW50VXBkYXRlLCBp
bmRleCkgPT4gewotICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGFyYWN0ZXJEYXRhVXBk
YXRlcy5sZW5ndGggLSAxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgICAgICBmb3IgKGxldCBuZXh0VXBkYXRlSW5kZXggPSBpbmRleCArIDE7IG5leHRVcGRhdGVJ
bmRleCA8IGNoYXJhY3RlckRhdGFVcGRhdGVzLmxlbmd0aDsgbmV4dFVwZGF0ZUluZGV4KyspIHsK
LSAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRVcGRhdGUgPSBjaGFyYWN0ZXJEYXRhVXBkYXRl
c1tuZXh0VXBkYXRlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVwZGF0
ZS50YXJnZXRHVUlEID09PSBuZXh0VXBkYXRlLnRhcmdldEdVSUQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRVcGRhdGUubmV3RGF0YSA9IG5leHRVcGRhdGUub2xkRGF0YTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIC8vIEFkanVzdCBh
bGwgYXR0cmlidXRlIHVwZGF0ZXMgZm9yIHRoZSBzYW1lIHRhcmdldCBhbmQgYXR0cmlidXRlIG5h
bWUuCi0gICAgICAgICAgICBhdHRyaWJ1dGVVcGRhdGVzLmZvckVhY2goKGN1cnJlbnRVcGRhdGUs
IGluZGV4KSA9PiB7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IGF0dHJpYnV0ZVVwZGF0
ZXMubGVuZ3RoIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAg
ICAgICAgZm9yIChsZXQgbmV4dFVwZGF0ZUluZGV4ID0gaW5kZXggKyAxOyBuZXh0VXBkYXRlSW5k
ZXggPCBhdHRyaWJ1dGVVcGRhdGVzLmxlbmd0aDsgbmV4dFVwZGF0ZUluZGV4KyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgbGV0IG5leHRVcGRhdGUgPSBhdHRyaWJ1dGVVcGRhdGVzW25leHRVcGRh
dGVJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VXBkYXRlLnRhcmdldEdV
SUQgPT09IG5leHRVcGRhdGUudGFyZ2V0R1VJRCAmJiBjdXJyZW50VXBkYXRlLmF0dHJpYnV0ZSA9
PT0gbmV4dFVwZGF0ZS5hdHRyaWJ1dGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRVcGRhdGUubmV3RGF0YSA9IG5leHRVcGRhdGUub2xkRGF0YTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIHJldHVybiB1cGRhdGVzOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgY2xhc3MgQ2hpbGRMaXN0VXBkYXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsK
LSAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgdGFyZ2V0R1VJRCwgYWRkZWRHVUlEcywgcmVt
b3ZlZEdVSURzLCBuZXh0U2libGluZ0dVSUQpIHsKLSAgICAgICAgICAgIHN1cGVyKG5vZGVNYXAp
OwotICAgICAgICAgICAgdGhpcy50YXJnZXRHVUlEID0gdGFyZ2V0R1VJRDsKLSAgICAgICAgICAg
IHRoaXMuYWRkZWQgPSBhZGRlZEdVSURzOwotICAgICAgICAgICAgdGhpcy5yZW1vdmVkID0gcmVt
b3ZlZEdVSURzOwotICAgICAgICAgICAgdGhpcy5uZXh0U2libGluZ0dVSUQgPSBuZXh0U2libGlu
Z0dVSUQgPT0gdW5kZWZpbmVkID8gbnVsbCA6IG5leHRTaWJsaW5nR1VJRDsKLSAgICAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KG5vZGVNYXAubm9kZUZvckdVSUQodGFyZ2V0R1VJRCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgYXBwbHkoKSB7Ci0gICAgICAgICAgICBmb3IgKGxldCByZW1vdmVkTm9k
ZSBvZiB0aGlzLl9yZW1vdmVkTm9kZXMoKSkKLSAgICAgICAgICAgICAgICByZW1vdmVkTm9kZS5y
ZW1vdmUoKTsKLQotICAgICAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMudGFyZ2V0Tm9kZSgpOwot
ICAgICAgICAgICAgZm9yIChsZXQgYWRkZWROb2RlIG9mIHRoaXMuX2FkZGVkTm9kZXMoKSkKLSAg
ICAgICAgICAgICAgICB0YXJnZXQuaW5zZXJ0QmVmb3JlKGFkZGVkTm9kZSwgdGhpcy5fbmV4dFNp
YmxpbmcoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bmFwcGx5KCkgewotICAgICAgICAgICAg
Zm9yIChsZXQgYWRkZWROb2RlIG9mIHRoaXMuX2FkZGVkTm9kZXMoKSkKLSAgICAgICAgICAgICAg
ICBhZGRlZE5vZGUucmVtb3ZlKCk7Ci0KLSAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLnRh
cmdldE5vZGUoKTsKLSAgICAgICAgICAgIGZvciAobGV0IHJlbW92ZWROb2RlIG9mIHRoaXMuX3Jl
bW92ZWROb2RlcygpKQotICAgICAgICAgICAgICAgIHRhcmdldC5pbnNlcnRCZWZvcmUocmVtb3Zl
ZE5vZGUsIHRoaXMuX25leHRTaWJsaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgX25leHRT
aWJsaW5nKCkgewotICAgICAgICAgICAgaWYgKHRoaXMubmV4dFNpYmxpbmdHVUlEID09IG51bGwp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5u
b2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMubmV4dFNpYmxpbmdHVUlEKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIF9yZW1vdmVkTm9kZXMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlTWFw
Lm5vZGVzRm9yR1VJRHModGhpcy5yZW1vdmVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9hZGRl
ZE5vZGVzKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZU1hcC5ub2Rlc0ZvckdVSURz
KHRoaXMuYWRkZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdG9PYmplY3QoKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6ICJDaGlsZExpc3RVcGRhdGUiLAot
ICAgICAgICAgICAgICAgIHRhcmdldEdVSUQ6IHRoaXMudGFyZ2V0R1VJRCwKLSAgICAgICAgICAg
ICAgICBhZGRlZEdVSURzOiB0aGlzLmFkZGVkLAotICAgICAgICAgICAgICAgIHJlbW92ZWRHVUlE
czogdGhpcy5yZW1vdmVkLAotICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nR1VJRDogdGhpcy5u
ZXh0U2libGluZ0dVSUQKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBkZXRh
aWxzRWxlbWVudCgpIHsKLSAgICAgICAgICAgIGxldCBuZXh0U2libGluZyA9IHRoaXMuX25leHRT
aWJsaW5nKCk7Ci0gICAgICAgICAgICBsZXQgaHRtbCA9Ci0gICAgICAgICAgICBgPGRldGFpbHM+
Ci0gICAgICAgICAgICAgICAgPHN1bW1hcnk+Y2hpbGQgbGlzdCBjaGFuZ2VkPC9zdW1tYXJ5Pgot
ICAgICAgICAgICAgICAgIDx1bD4KLSAgICAgICAgICAgICAgICAgICAgPGxpPnBhcmVudDogJHt0
aGlzLm5vZGVNYXAuZGVzY3JpcHRpb25IVE1MRm9yR1VJRCh0aGlzLnRhcmdldEdVSUQpfTwvbGk+
Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5hZGRlZDogWyAke1t0aGlzLl9hZGRlZE5vZGVzKCku
bWFwKG5vZGUgPT4gdGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvck5vZGUobm9kZSkpXX0g
XTwvbGk+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5yZW1vdmVkOiBbICR7W3RoaXMuX3JlbW92
ZWROb2RlcygpLm1hcChub2RlID0+IHRoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JOb2Rl
KG5vZGUpKV19IF08L2xpPgotICAgICAgICAgICAgICAgICAgICA8bGk+YmVmb3JlIHNpYmxpbmc6
ICR7bmV4dFNpYmxpbmcgPyB0aGlzLm5vZGVNYXAuZGVzY3JpcHRpb25IVE1MRm9yTm9kZShuZXh0
U2libGluZykgOiAiKG51bGwpIn08L2xpPgotICAgICAgICAgICAgICAgIDwvdWw+Ci0gICAgICAg
ICAgICA8L2RldGFpbHM+YDsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50RnJvbU1hcmtkb3du
KGh0bWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9k
ZU1hcCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGlsZExpc3RVcGRhdGUobm9kZU1hcCwg
anNvbi50YXJnZXRHVUlELCBqc29uLmFkZGVkR1VJRHMsIGpzb24ucmVtb3ZlZEdVSURzLCBqc29u
Lm5leHRTaWJsaW5nR1VJRCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBDaGFyYWN0
ZXJEYXRhVXBkYXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsKLSAgICAgICAgY29uc3RydWN0b3Iobm9k
ZU1hcCwgdGFyZ2V0R1VJRCwgb2xkRGF0YSwgbmV3RGF0YSkgewotICAgICAgICAgICAgc3VwZXIo
bm9kZU1hcCk7Ci0gICAgICAgICAgICB0aGlzLnRhcmdldEdVSUQgPSB0YXJnZXRHVUlEOwotICAg
ICAgICAgICAgdGhpcy5vbGREYXRhID0gb2xkRGF0YTsKLSAgICAgICAgICAgIHRoaXMubmV3RGF0
YSA9IG5ld0RhdGE7Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwLm5vZGVGb3JH
VUlEKHRhcmdldEdVSUQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFwcGx5KCkgewotICAgICAg
ICAgICAgdGhpcy50YXJnZXROb2RlKCkuZGF0YSA9IHRoaXMubmV3RGF0YTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHVuYXBwbHkoKSB7Ci0gICAgICAgICAgICB0aGlzLnRhcmdldE5vZGUoKS5kYXRh
ID0gdGhpcy5vbGREYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7
Ci0gICAgICAgICAgICBsZXQgaHRtbCA9Ci0gICAgICAgICAgICBgPGRldGFpbHM+Ci0gICAgICAg
ICAgICAgICAgPHN1bW1hcnk+Y2hhcmFjdGVyIGRhdGEgY2hhbmdlZDwvc3VtbWFyeT4KLSAgICAg
ICAgICAgICAgICA8dWw+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5vbGQ6ICR7dGhpcy5vbGRE
YXRhICE9IG51bGwgPyAiJyIgKyB0aGlzLm9sZERhdGEgKyAiJyIgOiAiKG51bGwpIn08L2xpPgot
ICAgICAgICAgICAgICAgICAgICA8bGk+bmV3OiAke3RoaXMubmV3RGF0YSAhPSBudWxsID8gIici
ICsgdGhpcy5uZXdEYXRhICsgIiciIDogIihudWxsKSJ9PC9saT4KLSAgICAgICAgICAgICAgICA8
L3VsPgotICAgICAgICAgICAgPC9kZXRhaWxzPmA7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVu
dEZyb21NYXJrZG93bihodG1sKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRvT2JqZWN0KCkgewot
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiAiQ2hhcmFjdGVyRGF0
YVVwZGF0ZSIsCi0gICAgICAgICAgICAgICAgdGFyZ2V0R1VJRDogdGhpcy50YXJnZXRHVUlELAot
ICAgICAgICAgICAgICAgIG9sZERhdGE6IE9iZnVzY2F0b3Iuc2hhcmVkKCkuYXBwbHlUb1RleHQo
dGhpcy5vbGREYXRhKSwKLSAgICAgICAgICAgICAgICBuZXdEYXRhOiBPYmZ1c2NhdG9yLnNoYXJl
ZCgpLmFwcGx5VG9UZXh0KHRoaXMubmV3RGF0YSkKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0K
LQotICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IENoYXJhY3RlckRhdGFVcGRhdGUobm9kZU1hcCwganNvbi50YXJnZXRHVUlE
LCBqc29uLm9sZERhdGEsIGpzb24ubmV3RGF0YSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBj
bGFzcyBBdHRyaWJ1dGVVcGRhdGUgZXh0ZW5kcyBET01VcGRhdGUgewotICAgICAgICBjb25zdHJ1
Y3Rvcihub2RlTWFwLCB0YXJnZXRHVUlELCBhdHRyaWJ1dGUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkg
ewotICAgICAgICAgICAgc3VwZXIobm9kZU1hcCk7Ci0gICAgICAgICAgICB0aGlzLnRhcmdldEdV
SUQgPSB0YXJnZXRHVUlEOwotICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7
Ci0gICAgICAgICAgICB0aGlzLm9sZFZhbHVlID0gb2xkVmFsdWU7Ci0gICAgICAgICAgICB0aGlz
Lm5ld1ZhbHVlID0gbmV3VmFsdWU7Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFw
Lm5vZGVGb3JHVUlEKHRhcmdldEdVSUQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFwcGx5KCkg
ewotICAgICAgICAgICAgaWYgKHRoaXMubmV3VmFsdWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAg
ICB0aGlzLnRhcmdldE5vZGUoKS5yZW1vdmVBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0Tm9kZSgpLnNldEF0dHJp
YnV0ZSh0aGlzLmF0dHJpYnV0ZSwgdGhpcy5uZXdWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB1bmFwcGx5KCkgewotICAgICAgICAgICAgaWYgKHRoaXMub2xkVmFsdWUgPT0gbnVsbCkKLSAg
ICAgICAgICAgICAgICB0aGlzLnRhcmdldE5vZGUoKS5yZW1vdmVBdHRyaWJ1dGUodGhpcy5hdHRy
aWJ1dGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0Tm9k
ZSgpLnNldEF0dHJpYnV0ZSh0aGlzLmF0dHJpYnV0ZSwgdGhpcy5vbGRWYWx1ZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBkZXRhaWxzRWxlbWVudCgpIHsKLSAgICAgICAgICAgIGxldCBodG1sID0K
LSAgICAgICAgICAgIGA8ZGV0YWlscz4KLSAgICAgICAgICAgICAgICA8c3VtbWFyeT5hdHRyaWJ1
dGUgY2hhbmdlZDwvc3VtbWFyeT4KLSAgICAgICAgICAgICAgICA8dWw+Ci0gICAgICAgICAgICAg
ICAgICAgIDxsaT50YXJnZXQ6ICR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQo
dGhpcy50YXJnZXRHVUlEKX08L2xpPgotICAgICAgICAgICAgICAgICAgICA8bGk+YXR0cmlidXRl
OiAke3RoaXMuYXR0cmlidXRlfTwvbGk+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5vbGQ6ICR7
dGhpcy5vbGRWYWx1ZSAhPSBudWxsID8gIiciICsgdGhpcy5vbGRWYWx1ZSArICInIiA6ICIobnVs
bCkifTwvbGk+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5uZXc6ICR7dGhpcy5uZXdWYWx1ZSAh
PSBudWxsID8gIiciICsgdGhpcy5uZXdWYWx1ZSArICInIiA6ICIobnVsbCkifTwvbGk+Ci0gICAg
ICAgICAgICAgICAgPC91bD4KLSAgICAgICAgICAgIDwvZGV0YWlscz5gOwotICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnRGcm9tTWFya2Rvd24oaHRtbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0
b09iamVjdCgpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTog
IkF0dHJpYnV0ZVVwZGF0ZSIsCi0gICAgICAgICAgICAgICAgdGFyZ2V0R1VJRDogdGhpcy50YXJn
ZXRHVUlELAotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUsCi0gICAg
ICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMub2xkVmFsdWUsCi0gICAgICAgICAgICAgICAgbmV3
VmFsdWU6IHRoaXMubmV3VmFsdWUKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAg
ICBzdGF0aWMgZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IEF0dHJpYnV0ZVVwZGF0ZShub2RlTWFwLCBqc29uLnRhcmdldEdVSUQsIGpzb24uYXR0cmli
dXRlLCBqc29uLm9sZFZhbHVlLCBqc29uLm5ld1ZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGNsYXNzIFNlbGVjdGlvblVwZGF0ZSBleHRlbmRzIERPTVVwZGF0ZSB7Ci0gICAgICAgIGNv
bnN0cnVjdG9yKG5vZGVNYXAsIHN0YXRlKSB7Ci0gICAgICAgICAgICBzdXBlcihub2RlTWFwKTsK
LSAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IFNlbGVjdGlvblVwZGF0ZXMgYXJlIG5vdCBhcHBsaWVkL3VuYXBwbGllZCBieSB0aGUgbm9ybWFs
IG1lYW5zLiBUaGUgc2VsZWN0aW9uIGlzIGFwcGxpZWQgdmlhCi0gICAgICAgIC8vIERPTVVwZGF0
ZUhpc3RvcnlDb250ZXh0LmFwcGx5Q3VycmVudFNlbGVjdGlvblN0YXRlIGluc3RlYWQsIHdoaWNo
IGNvbnNpZGVycyB0aGUgdXBkYXRlcyBiZWZvcmUgYW5kIGFmdGVyIHRoZQotICAgICAgICAvLyBj
dXJyZW50IHVwZGF0ZSBpbmRleC4KLSAgICAgICAgYXBwbHkoKSB7IH0KLSAgICAgICAgdW5hcHBs
eSgpIHsgfQotCi0gICAgICAgIHRvT2JqZWN0KCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgICAgICB0eXBlOiAiU2VsZWN0aW9uVXBkYXRlIiwKLSAgICAgICAgICAgICAgICBz
dGF0ZTogdGhpcy5zdGF0ZSA/IHRoaXMuc3RhdGUudG9PYmplY3QoKSA6IG51bGwKLSAgICAgICAg
ICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChqc29uLCBub2Rl
TWFwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblVwZGF0ZShub2RlTWFwLCBT
ZWxlY3Rpb25TdGF0ZS5mcm9tT2JqZWN0KGpzb24uc3RhdGUsIG5vZGVNYXApKTsKLSAgICAgICAg
fQotCi0gICAgICAgIF9yYW5nZURlc2NyaXB0aW9uSFRNTCgpIHsKLSAgICAgICAgICAgIHJldHVy
biBgKCR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQodGhpcy5zdGF0ZS5zdGFy
dEdVSUQpfToke3RoaXMuc3RhdGUuc3RhcnRPZmZzZXR9LAotICAgICAgICAgICAgICAgICR7dGhp
cy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQodGhpcy5zdGF0ZS5lbmRHVUlEKX06JHt0
aGlzLnN0YXRlLmVuZE9mZnNldH0pYDsKLSAgICAgICAgfQotCi0gICAgICAgIF9hbmNob3JEZXNj
cmlwdGlvbkhUTUwoKSB7Ci0gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5ub2RlTWFwLmRlc2Ny
aXB0aW9uSFRNTEZvckdVSUQodGhpcy5zdGF0ZS5hbmNob3JHVUlEKX06JHt0aGlzLnN0YXRlLmFu
Y2hvck9mZnNldH1gOwotICAgICAgICB9Ci0KLSAgICAgICAgX2ZvY3VzRGVzY3JpcHRpb25IVE1M
KCkgewotICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxG
b3JHVUlEKHRoaXMuc3RhdGUuZm9jdXNHVUlEKX06JHt0aGlzLnN0YXRlLmZvY3VzT2Zmc2V0fWA7
Ci0gICAgICAgIH0KLQotICAgICAgICBkZXRhaWxzRWxlbWVudCgpIHsKLSAgICAgICAgICAgIGxl
dCBodG1sID0KLSAgICAgICAgICAgIGA8ZGV0YWlscz4KLSAgICAgICAgICAgICAgICA8c3VtbWFy
eT5TZWxlY3Rpb24gY2hhbmdlZDwvc3VtbWFyeT4KLSAgICAgICAgICAgICAgICA8dWw+Ci0gICAg
ICAgICAgICAgICAgICAgIDxsaT5yYW5nZTogJHt0aGlzLl9yYW5nZURlc2NyaXB0aW9uSFRNTCgp
fTwvbGk+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5hbmNob3I6ICR7dGhpcy5fYW5jaG9yRGVz
Y3JpcHRpb25IVE1MKCl9PC9saT4KLSAgICAgICAgICAgICAgICAgICAgPGxpPmZvY3VzOiAke3Ro
aXMuX2ZvY3VzRGVzY3JpcHRpb25IVE1MKCl9PC9saT4KLSAgICAgICAgICAgICAgICA8L3VsPgot
ICAgICAgICAgICAgPC9kZXRhaWxzPmA7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudEZyb21N
YXJrZG93bihodG1sKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIElucHV0RXZlbnRV
cGRhdGUgZXh0ZW5kcyBET01VcGRhdGUgewotICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCB1
cGRhdGVzLCBpbnB1dFR5cGUsIGRhdGEsIHRpbWVTdGFtcCkgewotICAgICAgICAgICAgc3VwZXIo
bm9kZU1hcCk7Ci0gICAgICAgICAgICB0aGlzLnVwZGF0ZXMgPSB1cGRhdGVzOwotICAgICAgICAg
ICAgdGhpcy5pbnB1dFR5cGUgPSBpbnB1dFR5cGU7Ci0gICAgICAgICAgICB0aGlzLmRhdGEgPSBk
YXRhOwotICAgICAgICAgICAgdGhpcy50aW1lU3RhbXAgPSB0aW1lU3RhbXA7Ci0gICAgICAgIH0K
LQotICAgICAgICBfb2JmdXNjYXRlZERhdGEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5p
bnB1dFR5cGUuaW5kZXhPZigiaW5zZXJ0IikgPT0gMCA/IE9iZnVzY2F0b3Iuc2hhcmVkKCkuYXBw
bHlUb1RleHQodGhpcy5kYXRhKSA6IHRoaXMuZGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIGFw
cGx5KCkgewotICAgICAgICAgICAgZm9yIChsZXQgdXBkYXRlIG9mIHRoaXMudXBkYXRlcykKLSAg
ICAgICAgICAgICAgICB1cGRhdGUuYXBwbHkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHVuYXBw
bHkoKSB7Ci0gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHRoaXMudXBkYXRlcy5sZW5ndGgg
LSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKQotICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlc1tp
bmRleF0udW5hcHBseSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdG9PYmplY3QoKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6ICJJbnB1dEV2ZW50VXBkYXRl
IiwKLSAgICAgICAgICAgICAgICBpbnB1dFR5cGU6IHRoaXMuaW5wdXRUeXBlLAotICAgICAgICAg
ICAgICAgIGRhdGE6IHRoaXMuX29iZnVzY2F0ZWREYXRhKCksCi0gICAgICAgICAgICAgICAgdGlt
ZVN0YW1wOiB0aGlzLnRpbWVTdGFtcCwKLSAgICAgICAgICAgICAgICB1cGRhdGVzOiB0aGlzLnVw
ZGF0ZXMubWFwKHVwZGF0ZSA9PiB1cGRhdGUudG9PYmplY3QoKSkKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7Ci0g
ICAgICAgICAgICBsZXQgdXBkYXRlcyA9IGpzb24udXBkYXRlcy5tYXAodXBkYXRlID0+IERPTVVw
ZGF0ZS5vZlR5cGUodXBkYXRlLnR5cGUpLmZyb21PYmplY3QodXBkYXRlLCBub2RlTWFwKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IElucHV0RXZlbnRVcGRhdGUobm9kZU1hcCwgdXBkYXRlcywg
anNvbi5pbnB1dFR5cGUsIGpzb24uZGF0YSwganNvbi50aW1lU3RhbXApOwotICAgICAgICB9Ci0K
LSAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7Ci0gICAgICAgICAgICBsZXQgaHRtbCA9Ci0gICAg
ICAgICAgICBgPGRldGFpbHM+Ci0gICAgICAgICAgICAgICAgPHN1bW1hcnk+SW5wdXQgKCR7dGhp
cy5pbnB1dFR5cGV9KTwvc3VtbWFyeT4KLSAgICAgICAgICAgICAgICA8dWw+Ci0gICAgICAgICAg
ICAgICAgICAgIDxsaT50aW1lOiAke3RoaXMudGltZVN0YW1wfTwvbGk+Ci0gICAgICAgICAgICAg
ICAgICAgIDxsaT5kYXRhOiAkeyF0aGlzLmRhdGEgPyAiKG51bGwpIiA6ICInIiArIHRoaXMuZGF0
YSArICInIn08L2xpPgotICAgICAgICAgICAgICAgIDwvdWw+Ci0gICAgICAgICAgICA8L2RldGFp
bHM+YDsKLSAgICAgICAgICAgIGxldCB0b3BMZXZlbERldGFpbHMgPSBlbGVtZW50RnJvbU1hcmtk
b3duKGh0bWwpOwotICAgICAgICAgICAgZm9yIChsZXQgdXBkYXRlIG9mIHRoaXMudXBkYXRlcykK
LSAgICAgICAgICAgICAgICB0b3BMZXZlbERldGFpbHMuY2hpbGRyZW5bdG9wTGV2ZWxEZXRhaWxz
LmNoaWxkRWxlbWVudENvdW50IC0gMV0uYXBwZW5kQ2hpbGQodXBkYXRlLmRldGFpbHNFbGVtZW50
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRvcExldmVsRGV0YWlsczsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHdpbmRvdy5FZGl0aW5nSGlzdG9yeSA9IHsKLSAgICAgICAgR2xvYmFsTm9kZU1h
cCwKLSAgICAgICAgU2VsZWN0aW9uU3RhdGUsCi0gICAgICAgIERPTVVwZGF0ZSwKLSAgICAgICAg
Q2hpbGRMaXN0VXBkYXRlLAotICAgICAgICBDaGFyYWN0ZXJEYXRhVXBkYXRlLAotICAgICAgICBB
dHRyaWJ1dGVVcGRhdGUsCi0gICAgICAgIFNlbGVjdGlvblVwZGF0ZSwKLSAgICAgICAgSW5wdXRF
dmVudFVwZGF0ZSwKLSAgICAgICAgT2JmdXNjYXRvcgotICAgIH07Ci19KSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvU2NyaXB0cy9EdW1wRWRpdGluZ0hpc3RvcnkuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9TY3JpcHRzL0R1bXBFZGl0aW5nSGlzdG9yeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZWRjNWVj
MTM2NDhjYjRlMmU3MmU5YjliNTM5NTliNTVkMDFkZTgwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvU2NyaXB0cy9EdW1wRWRpdGluZ0hpc3RvcnkuanMKQEAgLTAsMCArMSw5MyBA
QAorKCgpID0+IHsKKyAgICBsZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBsZXQgZ2xvYmFs
Tm9kZU1hcCA9IG5ldyBFZGl0aW5nSGlzdG9yeS5HbG9iYWxOb2RlTWFwKCk7CisgICAgbGV0IHRv
cExldmVsVXBkYXRlcyA9IFtdOworICAgIGxldCBjdXJyZW50Q2hpbGRVcGRhdGVzID0gW107Cisg
ICAgbGV0IGlzUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlID0gZmFsc2U7CisgICAgbGV0IGxhc3RL
bm93blNlbGVjdGlvblN0YXRlID0gbnVsbDsKKyAgICBsZXQgbXV0YXRpb25PYnNlcnZlciA9IG5l
dyBNdXRhdGlvbk9ic2VydmVyKHJlY29yZHMgPT4gYXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNvcmRz
KHJlY29yZHMpKTsKKworICAgIGZ1bmN0aW9uIGJlZ2luUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRl
KCkgeworICAgICAgICBpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSA9IHRydWU7CisgICAgfQor
CisgICAgZnVuY3Rpb24gZW5kUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKHRvcExldmVsVXBkYXRl
KSB7CisgICAgICAgIHRvcExldmVsVXBkYXRlcy5wdXNoKHRvcExldmVsVXBkYXRlKTsKKyAgICAg
ICAgY3VycmVudENoaWxkVXBkYXRlcyA9IFtdOworICAgICAgICBpc1Byb2Nlc3NpbmdUb3BMZXZl
bFVwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFwcGVuZERPTVVwZGF0ZXNG
cm9tUmVjb3JkcyhyZWNvcmRzKSB7CisgICAgICAgIGlmICghcmVjb3Jkcy5sZW5ndGgpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IG5ld1VwZGF0ZXMgPSBFZGl0aW5nSGlzdG9y
eS5ET01VcGRhdGUuZnJvbVJlY29yZHMocmVjb3JkcywgZ2xvYmFsTm9kZU1hcCk7CisgICAgICAg
IGlmIChpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSkKKyAgICAgICAgICAgIGN1cnJlbnRDaGls
ZFVwZGF0ZXMgPSBjdXJyZW50Q2hpbGRVcGRhdGVzLmNvbmNhdChuZXdVcGRhdGVzKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdG9wTGV2ZWxVcGRhdGVzID0gdG9wTGV2ZWxVcGRhdGVzLmNv
bmNhdChuZXdVcGRhdGVzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhcHBlbmRTZWxlY3Rpb25V
cGRhdGVJZk5lY2Vzc2FyeSgpIHsKKyAgICAgICAgbGV0IG5ld1NlbGVjdGlvblN0YXRlID0gRWRp
dGluZ0hpc3RvcnkuU2VsZWN0aW9uU3RhdGUuZnJvbVNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSwg
Z2xvYmFsTm9kZU1hcCk7CisgICAgICAgIGlmIChuZXdTZWxlY3Rpb25TdGF0ZS5pc0VxdWFsKGxh
c3RLbm93blNlbGVjdGlvblN0YXRlKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBs
ZXQgdXBkYXRlID0gbmV3IEVkaXRpbmdIaXN0b3J5LlNlbGVjdGlvblVwZGF0ZShnbG9iYWxOb2Rl
TWFwLCBuZXdTZWxlY3Rpb25TdGF0ZSk7CisgICAgICAgIGlmIChpc1Byb2Nlc3NpbmdUb3BMZXZl
bFVwZGF0ZSkKKyAgICAgICAgICAgIGN1cnJlbnRDaGlsZFVwZGF0ZXMucHVzaCh1cGRhdGUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0b3BMZXZlbFVwZGF0ZXMucHVzaCh1cGRhdGUpOwor
ICAgICAgICBsYXN0S25vd25TZWxlY3Rpb25TdGF0ZSA9IG5ld1NlbGVjdGlvblN0YXRlOworICAg
IH0KKworICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCB0
cnVlKTsKKyAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4g
eworICAgICAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgICAgIEVkaXRpbmdIaXN0b3J5LmdldEVkaXRp
bmdIaXN0b3J5QXNKU09OU3RyaW5nID0gKGZvcm1hdHRlZCkgPT4geworICAgICAgICAgICAgbGV0
IHJlY29yZCA9IHt9OworICAgICAgICAgICAgcmVjb3JkLnVwZGF0ZXMgPSB0b3BMZXZlbFVwZGF0
ZXMubWFwKHVwZGF0ZSA9PiB1cGRhdGUudG9PYmplY3QoKSk7CisgICAgICAgICAgICByZWNvcmQu
Z2xvYmFsTm9kZU1hcCA9IGdsb2JhbE5vZGVNYXAudG9PYmplY3QoKTsKKyAgICAgICAgICAgIHJl
dHVybiBmb3JtYXR0ZWQgPyBKU09OLnN0cmluZ2lmeShyZWNvcmQsIG51bGwsIDQpIDogSlNPTi5z
dHJpbmdpZnkocmVjb3JkKTsKKyAgICAgICAgfTsKKworICAgICAgICBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCAoKSA9PiB7CisgICAgICAgICAgICBhcHBlbmRT
ZWxlY3Rpb25VcGRhdGVJZk5lY2Vzc2FyeSgpOworICAgICAgICB9KTsKKyAgICAgICAgZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlaW5wdXQiLCBldmVudCA9PiB7CisgICAgICAgICAg
ICBhcHBlbmRET01VcGRhdGVzRnJvbVJlY29yZHMobXV0YXRpb25PYnNlcnZlci50YWtlUmVjb3Jk
cygpKTsKKyAgICAgICAgICAgIGJlZ2luUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKCk7CisgICAg
ICAgIH0pOworCisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZXZl
bnQgPT4geworICAgICAgICAgICAgYXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNvcmRzKG11dGF0aW9u
T2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk7CisgICAgICAgICAgICBsZXQgZXZlbnREYXRhID0gZXZl
bnQuZGF0YVRyYW5zZmVyID8gZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoInRleHQvaHRtbCIp
IDogZXZlbnQuZGF0YTsKKyAgICAgICAgICAgIGxhc3RLbm93blNlbGVjdGlvblN0YXRlID0gbnVs
bDsKKyAgICAgICAgICAgIGVuZFByb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZShuZXcgRWRpdGluZ0hp
c3RvcnkuSW5wdXRFdmVudFVwZGF0ZShnbG9iYWxOb2RlTWFwLCBjdXJyZW50Q2hpbGRVcGRhdGVz
LCBldmVudC5pbnB1dFR5cGUsIGV2ZW50RGF0YSwgZXZlbnQudGltZVN0YW1wKSk7CisgICAgICAg
IH0pOworCisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBldmVu
dCA9PiB7CisgICAgICAgICAgICBpZiAoZXZlbnQua2V5ICE9PSAicyIgfHwgIWV2ZW50Lm1ldGFL
ZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBsZXQgZmFrZUxpbmsg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CisgICAgICAgICAgICBmYWtlTGluay5zZXRB
dHRyaWJ1dGUoImhyZWYiLCAiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsIiArIGVuY29k
ZVVSSUNvbXBvbmVudChFZGl0aW5nSGlzdG9yeS5nZXRFZGl0aW5nSGlzdG9yeUFzSlNPTlN0cmlu
ZygpKSk7CisgICAgICAgICAgICBmYWtlTGluay5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIiwgInJl
Y29yZC5qc29uIik7CisgICAgICAgICAgICBmYWtlTGluay5jbGljaygpOworICAgICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgbXV0YXRpb25P
YnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7CisgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUs
CisgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLAorICAgICAgICAgICAgY2hhcmFjdGVyRGF0
YTogdHJ1ZSwKKyAgICAgICAgICAgIHN1YnRyZWU6IHRydWUsCisgICAgICAgICAgICBhdHRyaWJ1
dGVPbGRWYWx1ZTogdHJ1ZSwKKyAgICAgICAgICAgIGNoYXJhY3RlckRhdGFPbGRWYWx1ZTogdHJ1
ZSwKKyAgICAgICAgfSk7CisgICAgfSk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU2NyaXB0cy9FZGl0aW5nSGlzdG9yeVV0aWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9TY3JpcHRz
L0VkaXRpbmdIaXN0b3J5VXRpbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDU4NzBiM2QwYTliMjA2NWJkYWVk
YTlhYzkyYzk0NmY3M2Y1OTYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvU2Ny
aXB0cy9FZGl0aW5nSGlzdG9yeVV0aWwuanMKQEAgLTAsMCArMSw2OTMgQEAKKygoKSA9PiB7Cisg
ICAgY2xhc3MgT2JmdXNjYXRvciB7CisgICAgICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgICAg
ICAgdGhpcy5fc2NyYW1ibGVkTG93ZXJjYXNlTGV0dGVycyA9IHRoaXMuX3NjcmFtYmxlKEFycmF5
KDI2KS5maWxsKCkubWFwKChfLCBpKSA9PiA5NyArIGkpKTsKKyAgICAgICAgICAgIHRoaXMuX3Nj
cmFtYmxlZFVwcGVyY2FzZUxldHRlcnMgPSB0aGlzLl9zY3JhbWJsZShBcnJheSgyNikuZmlsbCgp
Lm1hcCgoXywgaSkgPT4gNjUgKyBpKSk7CisgICAgICAgICAgICB0aGlzLl9zY3JhbWJsZWROdW1i
ZXJzID0gdGhpcy5fc2NyYW1ibGUoQXJyYXkoMTApLmZpbGwoKS5tYXAoKF8sIGkpID0+IDQ4ICsg
aSkpOworICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICBfc2NyYW1ibGUoYXJyYXkpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSBhcnJheS5s
ZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgbGV0IGogPSBNYXRoLmZs
b29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTsKKyAgICAgICAgICAgICAgICBsZXQgdGVtcCA9
IGFycmF5W2ldOworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07CisgICAgICAg
ICAgICAgICAgYXJyYXlbal0gPSB0ZW1wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIGFycmF5OworICAgICAgICB9CisKKyAgICAgICAgYXBwbHlUb1RleHQodGV4dCkgeworICAg
ICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRleHQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRleHQ7CisKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSAiIjsKKyAgICAgICAgICAgIGZv
ciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0ZXh0Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgICAgIGxldCBjb2RlID0gdGV4dC5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBsZXQgbnVtYmVySW5kZXggPSB0aGlzLl9zY3JhbWJlZE51bWJlckluZGV4Rm9yQ29kZShj
b2RlKTsKKyAgICAgICAgICAgICAgICBsZXQgbG93ZXJjYXNlSW5kZXggPSB0aGlzLl9zY3JhbWJl
ZExvd2VyY2FzZUluZGV4Rm9yQ29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICBsZXQgdXBwZXJj
YXNlSW5kZXggPSB0aGlzLl9zY3JhbWJlZFVwcGVyY2FzZUluZGV4Rm9yQ29kZShjb2RlKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChudW1iZXJJbmRleCAhPSBudWxsKQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9zY3JhbWJsZWROdW1iZXJz
W251bWJlckluZGV4XSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobG93ZXJjYXNlSW5kZXgg
IT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNv
ZGUodGhpcy5fc2NyYW1ibGVkTG93ZXJjYXNlTGV0dGVyc1tsb3dlcmNhc2VJbmRleF0pOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHVwcGVyY2FzZUluZGV4ICE9IG51bGwpCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX3NjcmFtYmxlZFVw
cGVyY2FzZUxldHRlcnNbdXBwZXJjYXNlSW5kZXhdKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB0ZXh0LmNoYXJBdChpbmRleCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAg
YXBwbHlUb0ZpbGVuYW1lKGZpbGVuYW1lKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxl
ZCB8fCAhZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lOworCisgICAg
ICAgICAgICBsZXQgY29tcG9uZW50cyA9IGZpbGVuYW1lLnNwbGl0KCIuIik7CisgICAgICAgICAg
ICByZXR1cm4gY29tcG9uZW50cy5tYXAoKGNvbXBvbmVudCwgaW5kZXgpID0+IHsKKyAgICAgICAg
ICAgICAgICBpZiAoaW5kZXggPT0gY29tcG9uZW50cy5sZW5ndGggLSAxKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY29tcG9uZW50OworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
YXBwbHlUb1RleHQoY29tcG9uZW50KTsKKyAgICAgICAgICAgIH0pLmpvaW4oIi4iKTsKKyAgICAg
ICAgfQorCisgICAgICAgIF9zY3JhbWJlZE51bWJlckluZGV4Rm9yQ29kZShjb2RlKSB7CisgICAg
ICAgICAgICByZXR1cm4gNDggPD0gY29kZSAmJiBjb2RlIDw9IDU3ID8gY29kZSAtIDQ4IDogbnVs
bDsKKyAgICAgICAgfQorCisgICAgICAgIF9zY3JhbWJlZExvd2VyY2FzZUluZGV4Rm9yQ29kZShj
b2RlKSB7CisgICAgICAgICAgICByZXR1cm4gOTcgPD0gY29kZSAmJiBjb2RlIDw9IDEyMiA/IGNv
ZGUgLSA5NyA6IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBfc2NyYW1iZWRVcHBlcmNhc2VJ
bmRleEZvckNvZGUoY29kZSkgeworICAgICAgICAgICAgcmV0dXJuIDY1IDw9IGNvZGUgJiYgY29k
ZSA8PSA5MCA/IGNvZGUgLSA2NSA6IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
c2hhcmVkKCkgeworICAgICAgICAgICAgaWYgKCFPYmZ1c2NhdG9yLl9zaGFyZWRJbnN0YW5jZSkK
KyAgICAgICAgICAgICAgICBPYmZ1c2NhdG9yLl9zaGFyZWRJbnN0YW5jZSA9IG5ldyBPYmZ1c2Nh
dG9yKCk7CisgICAgICAgICAgICByZXR1cm4gT2JmdXNjYXRvci5fc2hhcmVkSW5zdGFuY2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwp
IHsKKyAgICAgICAgbGV0IHRlbXBvcmFyeURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgICAgICB0ZW1wb3JhcnlEaXYuaW5uZXJIVE1MID0gaHRtbDsKKyAgICAgICAgcmV0
dXJuIHRlbXBvcmFyeURpdi5jaGlsZHJlblswXTsKKyAgICB9CisKKyAgICBjbGFzcyBHbG9iYWxO
b2RlTWFwIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZXNCeUdVSUQpIHsKKyAgICAgICAgICAg
IHRoaXMuX25vZGVzQnlHVUlEID0gbm9kZXNCeUdVSUQgPyBub2Rlc0J5R1VJRCA6IG5ldyBNYXAo
KTsKKyAgICAgICAgICAgIHRoaXMuX2d1aWRzQnlOb2RlID0gbmV3IE1hcCgpOworICAgICAgICAg
ICAgdGhpcy5fY3VycmVudEdVSUQgPSAwOworICAgICAgICAgICAgZm9yIChsZXQgW2d1aWQsIG5v
ZGVdIG9mIHRoaXMuX25vZGVzQnlHVUlEKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZ3VpZHNC
eU5vZGUuc2V0KG5vZGUsIGd1aWQpOworICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRHVUlE
ID0gTWF0aC5tYXgodGhpcy5fY3VycmVudEdVSUQsIGd1aWQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhpcy5fY3VycmVudEdVSUQrKzsKKyAgICAgICAgfQorCisgICAgICAgIG5vZGVz
Rm9yR1VJRHMoZ3VpZHMpIHsKKyAgICAgICAgICAgIGlmICghZ3VpZHMubWFwKQorICAgICAgICAg
ICAgICAgIGd1aWRzID0gQXJyYXkuZnJvbShndWlkcyk7CisgICAgICAgICAgICByZXR1cm4gZ3Vp
ZHMubWFwKGd1aWQgPT4gdGhpcy5ub2RlRm9yR1VJRChndWlkKSk7CisgICAgICAgIH0KKworICAg
ICAgICBndWlkc0Zvck5vZGVzKG5vZGVzKSB7CisgICAgICAgICAgICBpZiAoIW5vZGVzLm1hcCkK
KyAgICAgICAgICAgICAgICBub2RlcyA9IEFycmF5LmZyb20obm9kZXMpOworICAgICAgICAgICAg
cmV0dXJuIG5vZGVzLm1hcChub2RlID0+IHRoaXMuZ3VpZEZvck5vZGUobm9kZSkpOworICAgICAg
ICB9CisKKyAgICAgICAgbm9kZUZvckdVSUQoZ3VpZCkgeworICAgICAgICAgICAgaWYgKCFndWlk
KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fbm9kZXNCeUdVSUQuZ2V0KGd1aWQpOworICAgICAgICB9CisKKyAgICAgICAgZ3VpZEZvck5v
ZGUobm9kZSkgeworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOworCisgICAgICAgICAgICBpZiAodGhpcy5oYXNHVUlERm9yTm9kZShub2RlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZ3VpZHNCeU5vZGUuZ2V0KG5vZGUpOworCisgICAgICAg
ICAgICBjb25zdCBndWlkID0gdGhpcy5fY3VycmVudEdVSUQ7CisgICAgICAgICAgICB0aGlzLl9n
dWlkc0J5Tm9kZS5zZXQobm9kZSwgZ3VpZCk7CisgICAgICAgICAgICB0aGlzLl9ub2Rlc0J5R1VJ
RC5zZXQoZ3VpZCwgbm9kZSk7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50R1VJRCsrOworICAg
ICAgICAgICAgcmV0dXJuIGd1aWQ7CisgICAgICAgIH0KKworICAgICAgICBoYXNHVUlERm9yTm9k
ZShub2RlKSB7CisgICAgICAgICAgICByZXR1cm4gISF0aGlzLl9ndWlkc0J5Tm9kZS5nZXQobm9k
ZSk7CisgICAgICAgIH0KKworICAgICAgICBub2RlcygpIHsKKyAgICAgICAgICAgIHJldHVybiBB
cnJheS5mcm9tKHRoaXMuX25vZGVzQnlHVUlELnZhbHVlcygpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRvT2JqZWN0KCkgeworICAgICAgICAgICAgbGV0IG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3Mg
PSBbXSwgZ3VpZHNUb1Byb2Nlc3MgPSBuZXcgU2V0KCk7CisgICAgICAgICAgICBsZXQgZ3VpZHNC
eU5vZGVJdGVyYXRvciA9IHRoaXMuX2d1aWRzQnlOb2RlLmVudHJpZXMoKTsKKyAgICAgICAgICAg
IGZvciAobGV0IGVudHJ5ID0gZ3VpZHNCeU5vZGVJdGVyYXRvci5uZXh0KCk7ICFlbnRyeS5kb25l
OyBlbnRyeSA9IGd1aWRzQnlOb2RlSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgICAgICAgICAg
bm9kZXNBbmRHVUlEc1RvUHJvY2Vzcy5wdXNoKGVudHJ5LnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBndWlkc1RvUHJvY2Vzcy5hZGQoZW50cnkudmFsdWVbMV0pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBsZXQgaXRlcmF0b3IgPSBkb2N1bWVudC5jcmVhdGVOb2RlSXRlcmF0b3IoZG9j
dW1lbnQuYm9keSwgTm9kZUZpbHRlci5TSE9XX0FMTCk7CisgICAgICAgICAgICBmb3IgKGxldCBu
b2RlID0gaXRlcmF0b3IubmV4dE5vZGUoKTsgbm9kZTsgbm9kZSA9IGl0ZXJhdG9yLm5leHROb2Rl
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNHVUlERm9yTm9kZShub2RlKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBsZXQgbmV3R1VJ
RCA9IHRoaXMuZ3VpZEZvck5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZXNBbmRHVUlE
c1RvUHJvY2Vzcy5wdXNoKFtub2RlLCBuZXdHVUlEXSk7CisgICAgICAgICAgICAgICAgZ3VpZHNU
b1Byb2Nlc3MuYWRkKG5ld0dVSUQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZXQg
bm9kZUluZm9BcnJheSA9IFtdOworICAgICAgICAgICAgd2hpbGUgKG5vZGVzQW5kR1VJRHNUb1By
b2Nlc3MubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgbGV0IFtub2RlLCBndWlkXSA9IG5vZGVz
QW5kR1VJRHNUb1Byb2Nlc3MucG9wKCk7CisgICAgICAgICAgICAgICAgbGV0IGluZm8gPSB7fTsK
KyAgICAgICAgICAgICAgICBpbmZvLmd1aWQgPSBndWlkOworICAgICAgICAgICAgICAgIGluZm8u
dGFnTmFtZSA9IG5vZGUudGFnTmFtZTsKKyAgICAgICAgICAgICAgICBpbmZvLmF0dHJpYnV0ZXMg
PSBHbG9iYWxOb2RlTWFwLm5vZGVBdHRyaWJ1dGVzVG9PYmplY3Qobm9kZSk7CisgICAgICAgICAg
ICAgICAgaW5mby50eXBlID0gbm9kZS5ub2RlVHlwZTsKKyAgICAgICAgICAgICAgICBpbmZvLmRh
dGEgPSBHbG9iYWxOb2RlTWFwLmRhdGFGb3JOb2RlKG5vZGUpOworICAgICAgICAgICAgICAgIGlm
IChub2RlLmhhc0NoaWxkTm9kZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBpbmZvLmNoaWxk
R1VJRHMgPSB0aGlzLmd1aWRzRm9yTm9kZXMobm9kZS5jaGlsZE5vZGVzKTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChsZXQgY2hpbGRHVUlEIG9mIGluZm8uY2hpbGRHVUlEcykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFndWlkc1RvUHJvY2Vzcy5oYXMoY2hpbGRHVUlEKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc0FuZEdVSURzVG9Qcm9jZXNzLnB1c2goW3Ro
aXMubm9kZUZvckdVSUQoY2hpbGRHVUlEKSwgY2hpbGRHVUlEXSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZUluZm9BcnJheS5w
dXNoKGluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbm9kZUluZm9B
cnJheTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KG5vZGVJbmZvQXJy
YXkpIHsKKyAgICAgICAgICAgIGxldCBub2Rlc0J5R1VJRCA9IG5ldyBNYXAoKTsKKyAgICAgICAg
ICAgIGZvciAobGV0IGluZm8gb2Ygbm9kZUluZm9BcnJheSkgeworICAgICAgICAgICAgICAgIGxl
dCBub2RlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50eXBlID09IE5vZGUuRUxF
TUVOVF9OT0RFKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gR2xvYmFsTm9kZU1hcC5lbGVt
ZW50RnJvbVRhZ05hbWUoaW5mby50YWdOYW1lLCBpbmZvLmF0dHJpYnV0ZXMsIGluZm8uZGF0YSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50eXBlID09IE5vZGUuVEVYVF9OT0RFKQorICAg
ICAgICAgICAgICAgICAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaW5mby5kYXRh
KTsKKworICAgICAgICAgICAgICAgIGlmIChpbmZvLnR5cGUgPT0gTm9kZS5ET0NVTUVOVF9OT0RF
KQorICAgICAgICAgICAgICAgICAgICBub2RlID0gZG9jdW1lbnQ7CisKKyAgICAgICAgICAgICAg
ICBjb25zb2xlLmFzc2VydChub2RlKTsKKyAgICAgICAgICAgICAgICBub2Rlc0J5R1VJRC5zZXQo
aW5mby5ndWlkLCBub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhlbiwg
c2V0IGNoaWxkIG5vZGVzIGZvciBhbGwgbm9kZXMgdGhhdCBkbyBub3QgYXBwZWFyIGluIHRoZSBE
T00uCisgICAgICAgICAgICBmb3IgKGxldCBpbmZvIG9mIG5vZGVJbmZvQXJyYXkuZmlsdGVyKGlu
Zm8gPT4gISFpbmZvLmNoaWxkR1VJRHMpKSB7CisgICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBu
b2Rlc0J5R1VJRC5nZXQoaW5mby5ndWlkKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGls
ZEdVSUQgb2YgaW5mby5jaGlsZEdVSURzKQorICAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHBl
bmRDaGlsZChub2Rlc0J5R1VJRC5nZXQoY2hpbGRHVUlEKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgR2xvYmFsTm9kZU1hcChub2Rlc0J5R1VJRCk7CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgZGF0YUZvck5vZGUobm9kZSkgeworICAgICAgICAgICAgaWYg
KG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQorICAgICAgICAgICAgICAgIHJldHVy
biBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9UZXh0KG5vZGUuZGF0YSk7CisKKyAgICAgICAg
ICAgIGlmIChub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJh
dHRhY2htZW50IikgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgIHR5cGU6IG5vZGUuZmlsZS50eXBlLAorICAgICAgICAgICAgICAgICAgICBuYW1lOiBPYmZ1
c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9GaWxlbmFtZShub2RlLmZpbGUubmFtZSksCisgICAgICAg
ICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogbmV3IERhdGUoKS5nZXRUaW1lKCkKKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBlbGVtZW50RnJvbVRhZ05hbWUodGFnTmFtZSwgYXR0
cmlidXRlcywgZGF0YSkgeworICAgICAgICAgICAgbGV0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KHRhZ05hbWUpOworICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlTmFtZSBpbiBh
dHRyaWJ1dGVzKQorICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5h
bWUsIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pOworCisgICAgICAgICAgICBpZiAodGFnTmFt
ZS50b0xvd2VyQ2FzZSgpID09ICJhdHRhY2htZW50IikgeworICAgICAgICAgICAgICAgIG5vZGUu
ZmlsZSA9IG5ldyBGaWxlKFtgRmlsZSBuYW1lZCAnJHtkYXRhLm5hbWV9J2BdLCBkYXRhLm5hbWUs
IHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogZGF0YS50eXBlLAorICAgICAgICAgICAgICAg
ICAgICBsYXN0TW9kaWZpZWQ6IGRhdGEubGFzdE1vZGlmaWVkCisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gUmV0dXJucyBhbiBPYmplY3QgY29udGFpbmluZyBhdHRyaWJ1dGUgbmFtZSA9
PiBhdHRyaWJ1dGUgdmFsdWUKKyAgICAgICAgc3RhdGljIG5vZGVBdHRyaWJ1dGVzVG9PYmplY3Qo
bm9kZSwgYXR0cmlidXRlc1RvRXhjbHVkZT1bXSkgeworICAgICAgICAgICAgY29uc3QgZXhjbHVk
ZUF0dHJpYnV0ZXNTZXQgPSBuZXcgU2V0KGF0dHJpYnV0ZXNUb0V4Y2x1ZGUpOworICAgICAgICAg
ICAgaWYgKCFub2RlLmF0dHJpYnV0ZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisK
KyAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVNYXAgPSB7fTsKKyAgICAgICAgICAgIGZvciAobGV0
IGluZGV4ID0gMDsgaW5kZXggPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpbmRleCsrKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbm9kZS5hdHRyaWJ1dGVzLml0ZW0oaW5k
ZXgpOworICAgICAgICAgICAgICAgIGNvbnN0IFtsb2NhbE5hbWUsIHZhbHVlXSA9IFthdHRyaWJ1
dGUubG9jYWxOYW1lLCBhdHRyaWJ1dGUudmFsdWVdOworICAgICAgICAgICAgICAgIGlmIChleGNs
dWRlQXR0cmlidXRlc1NldC5oYXMobG9jYWxOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVNYXBbbG9jYWxOYW1lXSA9IHZhbHVl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlTWFwOworICAg
ICAgICB9CisKKyAgICAgICAgZGVzY3JpcHRpb25IVE1MRm9yR1VJRChndWlkKSB7CisgICAgICAg
ICAgICByZXR1cm4gYDxzcGFuIGVoLWd1aWQ9JHtndWlkfSBjbGFzcz0iZWgtbm9kZSI+JHt0aGlz
Lm5vZGVGb3JHVUlEKGd1aWQpLm5vZGVOYW1lfTwvc3Bhbj5gOworICAgICAgICB9CisKKyAgICAg
ICAgZGVzY3JpcHRpb25IVE1MRm9yTm9kZShub2RlKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuICIobnVsbCkiOworICAgICAgICAgICAgcmV0dXJuIGA8
c3BhbiBlaC1ndWlkPSR7dGhpcy5ndWlkRm9yTm9kZShub2RlKX0gY2xhc3M9ImVoLW5vZGUiPiR7
bm9kZS5ub2RlTmFtZX08L3NwYW4+YDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFNl
bGVjdGlvblN0YXRlIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgc3RhcnROb2RlLCBz
dGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0LCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQs
IGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5v
ZGVNYXApOworICAgICAgICAgICAgdGhpcy5ub2RlTWFwID0gbm9kZU1hcDsKKyAgICAgICAgICAg
IHRoaXMuc3RhcnRHVUlEID0gbm9kZU1hcC5ndWlkRm9yTm9kZShzdGFydE5vZGUpOworICAgICAg
ICAgICAgdGhpcy5zdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgdGhpcy5l
bmRHVUlEID0gbm9kZU1hcC5ndWlkRm9yTm9kZShlbmROb2RlKTsKKyAgICAgICAgICAgIHRoaXMu
ZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OworICAgICAgICAgICAgdGhpcy5hbmNob3JHVUlEID0gbm9k
ZU1hcC5ndWlkRm9yTm9kZShhbmNob3JOb2RlKTsKKyAgICAgICAgICAgIHRoaXMuYW5jaG9yT2Zm
c2V0ID0gYW5jaG9yT2Zmc2V0OworICAgICAgICAgICAgdGhpcy5mb2N1c0dVSUQgPSBub2RlTWFw
Lmd1aWRGb3JOb2RlKGZvY3VzTm9kZSk7CisgICAgICAgICAgICB0aGlzLmZvY3VzT2Zmc2V0ID0g
Zm9jdXNPZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICBpc0VxdWFsKG90aGVyU2VsZWN0aW9u
U3RhdGUpIHsKKyAgICAgICAgICAgIHJldHVybiBvdGhlclNlbGVjdGlvblN0YXRlCisgICAgICAg
ICAgICAgICAgJiYgdGhpcy5zdGFydEdVSUQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuc3RhcnRH
VUlEICYmIHRoaXMuc3RhcnRPZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuc3RhcnRPZmZz
ZXQKKyAgICAgICAgICAgICAgICAmJiB0aGlzLmVuZEdVSUQgPT09IG90aGVyU2VsZWN0aW9uU3Rh
dGUuZW5kR1VJRCAmJiB0aGlzLmVuZE9mZnNldCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5lbmRP
ZmZzZXQKKyAgICAgICAgICAgICAgICAmJiB0aGlzLmFuY2hvckdVSUQgPT09IG90aGVyU2VsZWN0
aW9uU3RhdGUuYW5jaG9yR1VJRCAmJiB0aGlzLmFuY2hvck9mZnNldCA9PT0gb3RoZXJTZWxlY3Rp
b25TdGF0ZS5hbmNob3JPZmZzZXQKKyAgICAgICAgICAgICAgICAmJiB0aGlzLmZvY3VzR1VJRCA9
PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5mb2N1c0dVSUQgJiYgdGhpcy5mb2N1c09mZnNldCA9PT0g
b3RoZXJTZWxlY3Rpb25TdGF0ZS5mb2N1c09mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIGFw
cGx5VG9TZWxlY3Rpb24oc2VsZWN0aW9uKSB7CisgICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3Zl
QWxsUmFuZ2VzKCk7CisgICAgICAgICAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5n
ZSgpOworICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlE
KHRoaXMuc3RhcnRHVUlEKSwgdGhpcy5zdGFydE9mZnNldCk7CisgICAgICAgICAgICByYW5nZS5z
ZXRFbmQodGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMuZW5kR1VJRCksIHRoaXMuZW5kT2Zm
c2V0KTsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7CisgICAgICAgICAg
ICBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVudCh0aGlzLm5vZGVNYXAubm9kZUZvckdVSUQodGhp
cy5hbmNob3JHVUlEKSwgdGhpcy5hbmNob3JPZmZzZXQsIHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJ
RCh0aGlzLmZvY3VzR1VJRCksIHRoaXMuZm9jdXNPZmZzZXQpOworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdGljIGZyb21TZWxlY3Rpb24oc2VsZWN0aW9uLCBub2RlTWFwKSB7CisgICAgICAgICAg
ICBsZXQgW3N0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldF0gPSBbbnVs
bCwgMCwgbnVsbCwgMF07CisgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQpIHsK
KyAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0
KDApOworICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IHNlbGVjdGVkUmFuZ2Uuc3RhcnRDb250
YWluZXI7CisgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBzZWxlY3RlZFJhbmdlLnN0YXJ0
T2Zmc2V0OworICAgICAgICAgICAgICAgIGVuZE5vZGUgPSBzZWxlY3RlZFJhbmdlLmVuZENvbnRh
aW5lcjsKKyAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSBzZWxlY3RlZFJhbmdlLmVuZE9mZnNl
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uU3RhdGUo
CisgICAgICAgICAgICAgICAgbm9kZU1hcCwgc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9k
ZSwgZW5kT2Zmc2V0LAorICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLCBzZWxl
Y3Rpb24uYW5jaG9yT2Zmc2V0LCBzZWxlY3Rpb24uZm9jdXNOb2RlLCBzZWxlY3Rpb24uZm9jdXNP
ZmZzZXQKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICB0b09iamVjdCgpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgc3RhcnRHVUlEOiB0aGlzLnN0
YXJ0R1VJRCwgc3RhcnRPZmZzZXQ6IHRoaXMuc3RhcnRPZmZzZXQsIGVuZEdVSUQ6IHRoaXMuZW5k
R1VJRCwgZW5kT2Zmc2V0OiB0aGlzLmVuZE9mZnNldCwKKyAgICAgICAgICAgICAgICBhbmNob3JH
VUlEOiB0aGlzLmFuY2hvckdVSUQsIGFuY2hvck9mZnNldDogdGhpcy5hbmNob3JPZmZzZXQsIGZv
Y3VzR1VJRDogdGhpcy5mb2N1c0dVSUQsIGZvY3VzT2Zmc2V0OiB0aGlzLmZvY3VzT2Zmc2V0Cisg
ICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNv
biwgbm9kZU1hcCkgeworICAgICAgICAgICAgaWYgKCFqc29uKQorICAgICAgICAgICAgICAgIHJl
dHVybiBudWxsOworCisgICAgICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblN0YXRlKAorICAg
ICAgICAgICAgICAgIG5vZGVNYXAsIG5vZGVNYXAubm9kZUZvckdVSUQoanNvbi5zdGFydEdVSUQp
LCBqc29uLnN0YXJ0T2Zmc2V0LCBub2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uZW5kR1VJRCksIGpz
b24uZW5kT2Zmc2V0LAorICAgICAgICAgICAgICAgIG5vZGVNYXAubm9kZUZvckdVSUQoanNvbi5h
bmNob3JHVUlEKSwganNvbi5hbmNob3JPZmZzZXQsIG5vZGVNYXAubm9kZUZvckdVSUQoanNvbi5m
b2N1c0dVSUQpLCBqc29uLmZvY3VzT2Zmc2V0CisgICAgICAgICAgICApOworICAgICAgICB9Cisg
ICAgfQorCisgICAgY2xhc3MgRE9NVXBkYXRlIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1h
cCkgeworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZU1hcCk7CisgICAgICAgICAgICB0
aGlzLm5vZGVNYXAgPSBub2RlTWFwOworICAgICAgICB9CisKKyAgICAgICAgYXBwbHkoKSB7Cisg
ICAgICAgICAgICB0aHJvdyAiRXhwZWN0ZWQgc3ViY2xhc3MgaW1wbGVtZW50YXRpb24uIjsKKyAg
ICAgICAgfQorCisgICAgICAgIHVuYXBwbHkoKSB7CisgICAgICAgICAgICB0aHJvdyAiRXhwZWN0
ZWQgc3ViY2xhc3MgaW1wbGVtZW50YXRpb24uIjsKKyAgICAgICAgfQorCisgICAgICAgIHRhcmdl
dE5vZGUoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRo
aXMudGFyZ2V0R1VJRCk7CisgICAgICAgIH0KKworICAgICAgICBkZXRhaWxzRWxlbWVudCgpIHsK
KyAgICAgICAgICAgIHRocm93ICJFeHBlY3RlZCBzdWJjbGFzcyBpbXBsZW1lbnRhdGlvbi4iOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIG9mVHlwZSh0eXBlKSB7CisgICAgICAgICAgICBp
ZiAoIURPTVVwZGF0ZS5fYWxsVHlwZXMpCisgICAgICAgICAgICAgICAgRE9NVXBkYXRlLl9hbGxU
eXBlcyA9IHsgQ2hpbGRMaXN0VXBkYXRlLCBDaGFyYWN0ZXJEYXRhVXBkYXRlLCBBdHRyaWJ1dGVV
cGRhdGUsIElucHV0RXZlbnRVcGRhdGUsIFNlbGVjdGlvblVwZGF0ZSB9OworICAgICAgICAgICAg
cmV0dXJuIERPTVVwZGF0ZS5fYWxsVHlwZXNbdHlwZV07CisgICAgICAgIH0KKworICAgICAgICBz
dGF0aWMgZnJvbVJlY29yZHMocmVjb3Jkcywgbm9kZU1hcCkgeworICAgICAgICAgICAgbGV0IHVw
ZGF0ZXMgPSBbXQorICAgICAgICAgICAgICAgICwgY2hhcmFjdGVyRGF0YVVwZGF0ZXMgPSBbXQor
ICAgICAgICAgICAgICAgICwgYXR0cmlidXRlVXBkYXRlcyA9IFtdOworCisgICAgICAgICAgICBm
b3IgKGxldCByZWNvcmQgb2YgcmVjb3JkcykgeworICAgICAgICAgICAgICAgIGxldCB0YXJnZXQg
PSByZWNvcmQudGFyZ2V0OworICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsK
KyAgICAgICAgICAgICAgICBjYXNlICJjaGFyYWN0ZXJEYXRhIjoKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHVwZGF0ZSA9IG5ldyBDaGFyYWN0ZXJEYXRhVXBkYXRlKG5vZGVNYXAsIG5vZGVNYXAu
Z3VpZEZvck5vZGUodGFyZ2V0KSwgcmVjb3JkLm9sZFZhbHVlLCB0YXJnZXQuZGF0YSkKKyAgICAg
ICAgICAgICAgICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAg
IGNoYXJhY3RlckRhdGFVcGRhdGVzLnB1c2godXBkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAiY2hpbGRMaXN0IjoKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHVwZGF0ZSA9IG5ldyBDaGlsZExpc3RVcGRhdGUobm9kZU1hcCwgbm9kZU1hcC5n
dWlkRm9yTm9kZSh0YXJnZXQpLCBub2RlTWFwLmd1aWRzRm9yTm9kZXMocmVjb3JkLmFkZGVkTm9k
ZXMpLCBub2RlTWFwLmd1aWRzRm9yTm9kZXMocmVjb3JkLnJlbW92ZWROb2RlcyksIG5vZGVNYXAu
Z3VpZEZvck5vZGUocmVjb3JkLm5leHRTaWJsaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgdXBk
YXRlcy5wdXNoKHVwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgImF0dHJpYnV0ZXMiOgorICAgICAgICAgICAgICAgICAgICB2YXIgdXBkYXRl
ID0gbmV3IEF0dHJpYnV0ZVVwZGF0ZShub2RlTWFwLCBub2RlTWFwLmd1aWRGb3JOb2RlKHRhcmdl
dCksIHJlY29yZC5hdHRyaWJ1dGVOYW1lLCByZWNvcmQub2xkVmFsdWUsIHRhcmdldC5nZXRBdHRy
aWJ1dGUocmVjb3JkLmF0dHJpYnV0ZU5hbWUpKQorICAgICAgICAgICAgICAgICAgICB1cGRhdGVz
LnB1c2godXBkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVXBkYXRlcy5wdXNo
KHVwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRqdXN0IGFsbCBjaGFyYWN0ZXIgZGF0
YSB1cGRhdGVzIGZvciB0aGUgc2FtZSB0YXJnZXQuCisgICAgICAgICAgICBjaGFyYWN0ZXJEYXRh
VXBkYXRlcy5mb3JFYWNoKChjdXJyZW50VXBkYXRlLCBpbmRleCkgPT4geworICAgICAgICAgICAg
ICAgIGlmIChpbmRleCA9PSBjaGFyYWN0ZXJEYXRhVXBkYXRlcy5sZW5ndGggLSAxKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBuZXh0VXBk
YXRlSW5kZXggPSBpbmRleCArIDE7IG5leHRVcGRhdGVJbmRleCA8IGNoYXJhY3RlckRhdGFVcGRh
dGVzLmxlbmd0aDsgbmV4dFVwZGF0ZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0
IG5leHRVcGRhdGUgPSBjaGFyYWN0ZXJEYXRhVXBkYXRlc1tuZXh0VXBkYXRlSW5kZXhdOworICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVwZGF0ZS50YXJnZXRHVUlEID09PSBuZXh0VXBk
YXRlLnRhcmdldEdVSUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRVcGRhdGUu
bmV3RGF0YSA9IG5leHRVcGRhdGUub2xkRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgIC8vIEFkanVzdCBhbGwgYXR0cmlidXRlIHVwZGF0ZXMgZm9y
IHRoZSBzYW1lIHRhcmdldCBhbmQgYXR0cmlidXRlIG5hbWUuCisgICAgICAgICAgICBhdHRyaWJ1
dGVVcGRhdGVzLmZvckVhY2goKGN1cnJlbnRVcGRhdGUsIGluZGV4KSA9PiB7CisgICAgICAgICAg
ICAgICAgaWYgKGluZGV4ID09IGF0dHJpYnV0ZVVwZGF0ZXMubGVuZ3RoIC0gMSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgZm9yIChsZXQgbmV4dFVwZGF0
ZUluZGV4ID0gaW5kZXggKyAxOyBuZXh0VXBkYXRlSW5kZXggPCBhdHRyaWJ1dGVVcGRhdGVzLmxl
bmd0aDsgbmV4dFVwZGF0ZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRV
cGRhdGUgPSBhdHRyaWJ1dGVVcGRhdGVzW25leHRVcGRhdGVJbmRleF07CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjdXJyZW50VXBkYXRlLnRhcmdldEdVSUQgPT09IG5leHRVcGRhdGUudGFyZ2V0
R1VJRCAmJiBjdXJyZW50VXBkYXRlLmF0dHJpYnV0ZSA9PT0gbmV4dFVwZGF0ZS5hdHRyaWJ1dGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRVcGRhdGUubmV3RGF0YSA9IG5leHRV
cGRhdGUub2xkRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgIHJldHVybiB1cGRhdGVzOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgQ2hp
bGRMaXN0VXBkYXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9k
ZU1hcCwgdGFyZ2V0R1VJRCwgYWRkZWRHVUlEcywgcmVtb3ZlZEdVSURzLCBuZXh0U2libGluZ0dV
SUQpIHsKKyAgICAgICAgICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy50YXJn
ZXRHVUlEID0gdGFyZ2V0R1VJRDsKKyAgICAgICAgICAgIHRoaXMuYWRkZWQgPSBhZGRlZEdVSURz
OworICAgICAgICAgICAgdGhpcy5yZW1vdmVkID0gcmVtb3ZlZEdVSURzOworICAgICAgICAgICAg
dGhpcy5uZXh0U2libGluZ0dVSUQgPSBuZXh0U2libGluZ0dVSUQgPT0gdW5kZWZpbmVkID8gbnVs
bCA6IG5leHRTaWJsaW5nR1VJRDsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5vZGVNYXAu
bm9kZUZvckdVSUQodGFyZ2V0R1VJRCkpOworICAgICAgICB9CisKKyAgICAgICAgYXBwbHkoKSB7
CisgICAgICAgICAgICBmb3IgKGxldCByZW1vdmVkTm9kZSBvZiB0aGlzLl9yZW1vdmVkTm9kZXMo
KSkKKyAgICAgICAgICAgICAgICByZW1vdmVkTm9kZS5yZW1vdmUoKTsKKworICAgICAgICAgICAg
bGV0IHRhcmdldCA9IHRoaXMudGFyZ2V0Tm9kZSgpOworICAgICAgICAgICAgZm9yIChsZXQgYWRk
ZWROb2RlIG9mIHRoaXMuX2FkZGVkTm9kZXMoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXQuaW5z
ZXJ0QmVmb3JlKGFkZGVkTm9kZSwgdGhpcy5fbmV4dFNpYmxpbmcoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB1bmFwcGx5KCkgeworICAgICAgICAgICAgZm9yIChsZXQgYWRkZWROb2RlIG9mIHRo
aXMuX2FkZGVkTm9kZXMoKSkKKyAgICAgICAgICAgICAgICBhZGRlZE5vZGUucmVtb3ZlKCk7CisK
KyAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLnRhcmdldE5vZGUoKTsKKyAgICAgICAgICAg
IGZvciAobGV0IHJlbW92ZWROb2RlIG9mIHRoaXMuX3JlbW92ZWROb2RlcygpKQorICAgICAgICAg
ICAgICAgIHRhcmdldC5pbnNlcnRCZWZvcmUocmVtb3ZlZE5vZGUsIHRoaXMuX25leHRTaWJsaW5n
KCkpOworICAgICAgICB9CisKKyAgICAgICAgX25leHRTaWJsaW5nKCkgeworICAgICAgICAgICAg
aWYgKHRoaXMubmV4dFNpYmxpbmdHVUlEID09IG51bGwpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMu
bmV4dFNpYmxpbmdHVUlEKTsKKyAgICAgICAgfQorCisgICAgICAgIF9yZW1vdmVkTm9kZXMoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlTWFwLm5vZGVzRm9yR1VJRHModGhpcy5yZW1v
dmVkKTsKKyAgICAgICAgfQorCisgICAgICAgIF9hZGRlZE5vZGVzKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMubm9kZU1hcC5ub2Rlc0ZvckdVSURzKHRoaXMuYWRkZWQpOworICAgICAgICB9
CisKKyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6ICJDaGlsZExpc3RVcGRhdGUiLAorICAgICAgICAgICAgICAgIHRhcmdldEdV
SUQ6IHRoaXMudGFyZ2V0R1VJRCwKKyAgICAgICAgICAgICAgICBhZGRlZEdVSURzOiB0aGlzLmFk
ZGVkLAorICAgICAgICAgICAgICAgIHJlbW92ZWRHVUlEczogdGhpcy5yZW1vdmVkLAorICAgICAg
ICAgICAgICAgIG5leHRTaWJsaW5nR1VJRDogdGhpcy5uZXh0U2libGluZ0dVSUQKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKworICAgICAgICBkZXRhaWxzRWxlbWVudCgpIHsKKyAgICAgICAg
ICAgIGxldCBuZXh0U2libGluZyA9IHRoaXMuX25leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBs
ZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAgICAgICAgICAgPHN1bW1h
cnk+Y2hpbGQgbGlzdCBjaGFuZ2VkPC9zdW1tYXJ5PgorICAgICAgICAgICAgICAgIDx1bD4KKyAg
ICAgICAgICAgICAgICAgICAgPGxpPnBhcmVudDogJHt0aGlzLm5vZGVNYXAuZGVzY3JpcHRpb25I
VE1MRm9yR1VJRCh0aGlzLnRhcmdldEdVSUQpfTwvbGk+CisgICAgICAgICAgICAgICAgICAgIDxs
aT5hZGRlZDogWyAke1t0aGlzLl9hZGRlZE5vZGVzKCkubWFwKG5vZGUgPT4gdGhpcy5ub2RlTWFw
LmRlc2NyaXB0aW9uSFRNTEZvck5vZGUobm9kZSkpXX0gXTwvbGk+CisgICAgICAgICAgICAgICAg
ICAgIDxsaT5yZW1vdmVkOiBbICR7W3RoaXMuX3JlbW92ZWROb2RlcygpLm1hcChub2RlID0+IHRo
aXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JOb2RlKG5vZGUpKV19IF08L2xpPgorICAgICAg
ICAgICAgICAgICAgICA8bGk+YmVmb3JlIHNpYmxpbmc6ICR7bmV4dFNpYmxpbmcgPyB0aGlzLm5v
ZGVNYXAuZGVzY3JpcHRpb25IVE1MRm9yTm9kZShuZXh0U2libGluZykgOiAiKG51bGwpIn08L2xp
PgorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RldGFpbHM+YDsKKyAgICAg
ICAgICAgIHJldHVybiBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwpOworICAgICAgICB9CisKKyAg
ICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1hcCkgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyBDaGlsZExpc3RVcGRhdGUobm9kZU1hcCwganNvbi50YXJnZXRHVUlELCBqc29uLmFk
ZGVkR1VJRHMsIGpzb24ucmVtb3ZlZEdVSURzLCBqc29uLm5leHRTaWJsaW5nR1VJRCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBDaGFyYWN0ZXJEYXRhVXBkYXRlIGV4dGVuZHMgRE9N
VXBkYXRlIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgdGFyZ2V0R1VJRCwgb2xkRGF0
YSwgbmV3RGF0YSkgeworICAgICAgICAgICAgc3VwZXIobm9kZU1hcCk7CisgICAgICAgICAgICB0
aGlzLnRhcmdldEdVSUQgPSB0YXJnZXRHVUlEOworICAgICAgICAgICAgdGhpcy5vbGREYXRhID0g
b2xkRGF0YTsKKyAgICAgICAgICAgIHRoaXMubmV3RGF0YSA9IG5ld0RhdGE7CisgICAgICAgICAg
ICBjb25zb2xlLmFzc2VydChub2RlTWFwLm5vZGVGb3JHVUlEKHRhcmdldEdVSUQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgdGhpcy50YXJnZXROb2RlKCku
ZGF0YSA9IHRoaXMubmV3RGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIHVuYXBwbHkoKSB7Cisg
ICAgICAgICAgICB0aGlzLnRhcmdldE5vZGUoKS5kYXRhID0gdGhpcy5vbGREYXRhOworICAgICAg
ICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAgICAgICBsZXQgaHRtbCA9
CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAgICAgICAgICAgPHN1bW1hcnk+Y2hhcmFj
dGVyIGRhdGEgY2hhbmdlZDwvc3VtbWFyeT4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAg
ICAgICAgICAgICAgIDxsaT5vbGQ6ICR7dGhpcy5vbGREYXRhICE9IG51bGwgPyAiJyIgKyB0aGlz
Lm9sZERhdGEgKyAiJyIgOiAiKG51bGwpIn08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+
bmV3OiAke3RoaXMubmV3RGF0YSAhPSBudWxsID8gIiciICsgdGhpcy5uZXdEYXRhICsgIiciIDog
IihudWxsKSJ9PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kZXRh
aWxzPmA7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudEZyb21NYXJrZG93bihodG1sKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHRvT2JqZWN0KCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiAiQ2hhcmFjdGVyRGF0YVVwZGF0ZSIsCisgICAgICAgICAgICAg
ICAgdGFyZ2V0R1VJRDogdGhpcy50YXJnZXRHVUlELAorICAgICAgICAgICAgICAgIG9sZERhdGE6
IE9iZnVzY2F0b3Iuc2hhcmVkKCkuYXBwbHlUb1RleHQodGhpcy5vbGREYXRhKSwKKyAgICAgICAg
ICAgICAgICBuZXdEYXRhOiBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9UZXh0KHRoaXMubmV3
RGF0YSkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgZnJvbU9i
amVjdChqc29uLCBub2RlTWFwKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IENoYXJhY3RlckRh
dGFVcGRhdGUobm9kZU1hcCwganNvbi50YXJnZXRHVUlELCBqc29uLm9sZERhdGEsIGpzb24ubmV3
RGF0YSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBBdHRyaWJ1dGVVcGRhdGUgZXh0
ZW5kcyBET01VcGRhdGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCB0YXJnZXRHVUlE
LCBhdHRyaWJ1dGUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkgeworICAgICAgICAgICAgc3VwZXIobm9k
ZU1hcCk7CisgICAgICAgICAgICB0aGlzLnRhcmdldEdVSUQgPSB0YXJnZXRHVUlEOworICAgICAg
ICAgICAgdGhpcy5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7CisgICAgICAgICAgICB0aGlzLm9sZFZh
bHVlID0gb2xkVmFsdWU7CisgICAgICAgICAgICB0aGlzLm5ld1ZhbHVlID0gbmV3VmFsdWU7Cisg
ICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwLm5vZGVGb3JHVUlEKHRhcmdldEdVSUQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgaWYgKHRoaXMu
bmV3VmFsdWUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE5vZGUoKS5yZW1v
dmVBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHRoaXMudGFyZ2V0Tm9kZSgpLnNldEF0dHJpYnV0ZSh0aGlzLmF0dHJpYnV0ZSwgdGhp
cy5uZXdWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICB1bmFwcGx5KCkgeworICAgICAgICAg
ICAgaWYgKHRoaXMub2xkVmFsdWUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0aGlzLnRhcmdl
dE5vZGUoKS5yZW1vdmVBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0Tm9kZSgpLnNldEF0dHJpYnV0ZSh0aGlzLmF0
dHJpYnV0ZSwgdGhpcy5vbGRWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBkZXRhaWxzRWxl
bWVudCgpIHsKKyAgICAgICAgICAgIGxldCBodG1sID0KKyAgICAgICAgICAgIGA8ZGV0YWlscz4K
KyAgICAgICAgICAgICAgICA8c3VtbWFyeT5hdHRyaWJ1dGUgY2hhbmdlZDwvc3VtbWFyeT4KKyAg
ICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgIDxsaT50YXJnZXQ6ICR7dGhp
cy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQodGhpcy50YXJnZXRHVUlEKX08L2xpPgor
ICAgICAgICAgICAgICAgICAgICA8bGk+YXR0cmlidXRlOiAke3RoaXMuYXR0cmlidXRlfTwvbGk+
CisgICAgICAgICAgICAgICAgICAgIDxsaT5vbGQ6ICR7dGhpcy5vbGRWYWx1ZSAhPSBudWxsID8g
IiciICsgdGhpcy5vbGRWYWx1ZSArICInIiA6ICIobnVsbCkifTwvbGk+CisgICAgICAgICAgICAg
ICAgICAgIDxsaT5uZXc6ICR7dGhpcy5uZXdWYWx1ZSAhPSBudWxsID8gIiciICsgdGhpcy5uZXdW
YWx1ZSArICInIiA6ICIobnVsbCkifTwvbGk+CisgICAgICAgICAgICAgICAgPC91bD4KKyAgICAg
ICAgICAgIDwvZGV0YWlscz5gOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRGcm9tTWFya2Rv
d24oaHRtbCk7CisgICAgICAgIH0KKworICAgICAgICB0b09iamVjdCgpIHsKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogIkF0dHJpYnV0ZVVwZGF0ZSIsCisgICAg
ICAgICAgICAgICAgdGFyZ2V0R1VJRDogdGhpcy50YXJnZXRHVUlELAorICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgb2xkVmFsdWU6IHRo
aXMub2xkVmFsdWUsCisgICAgICAgICAgICAgICAgbmV3VmFsdWU6IHRoaXMubmV3VmFsdWUKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChqc29u
LCBub2RlTWFwKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZVVwZGF0ZShub2Rl
TWFwLCBqc29uLnRhcmdldEdVSUQsIGpzb24uYXR0cmlidXRlLCBqc29uLm9sZFZhbHVlLCBqc29u
Lm5ld1ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFNlbGVjdGlvblVwZGF0
ZSBleHRlbmRzIERPTVVwZGF0ZSB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5vZGVNYXAsIHN0YXRl
KSB7CisgICAgICAgICAgICBzdXBlcihub2RlTWFwKTsKKyAgICAgICAgICAgIHRoaXMuc3RhdGUg
PSBzdGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlbGVjdGlvblVwZGF0ZXMgYXJlIG5v
dCBhcHBsaWVkL3VuYXBwbGllZCBieSB0aGUgbm9ybWFsIG1lYW5zLiBUaGUgc2VsZWN0aW9uIGlz
IGFwcGxpZWQgdmlhCisgICAgICAgIC8vIERPTVVwZGF0ZUhpc3RvcnlDb250ZXh0LmFwcGx5Q3Vy
cmVudFNlbGVjdGlvblN0YXRlIGluc3RlYWQsIHdoaWNoIGNvbnNpZGVycyB0aGUgdXBkYXRlcyBi
ZWZvcmUgYW5kIGFmdGVyIHRoZQorICAgICAgICAvLyBjdXJyZW50IHVwZGF0ZSBpbmRleC4KKyAg
ICAgICAgYXBwbHkoKSB7IH0KKyAgICAgICAgdW5hcHBseSgpIHsgfQorCisgICAgICAgIHRvT2Jq
ZWN0KCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiAiU2Vs
ZWN0aW9uVXBkYXRlIiwKKyAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSA/IHRoaXMu
c3RhdGUudG9PYmplY3QoKSA6IG51bGwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAg
ICAgICBzdGF0aWMgZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IFNlbGVjdGlvblVwZGF0ZShub2RlTWFwLCBTZWxlY3Rpb25TdGF0ZS5mcm9tT2JqZWN0
KGpzb24uc3RhdGUsIG5vZGVNYXApKTsKKyAgICAgICAgfQorCisgICAgICAgIF9yYW5nZURlc2Ny
aXB0aW9uSFRNTCgpIHsKKyAgICAgICAgICAgIHJldHVybiBgKCR7dGhpcy5ub2RlTWFwLmRlc2Ny
aXB0aW9uSFRNTEZvckdVSUQodGhpcy5zdGF0ZS5zdGFydEdVSUQpfToke3RoaXMuc3RhdGUuc3Rh
cnRPZmZzZXR9LAorICAgICAgICAgICAgICAgICR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRN
TEZvckdVSUQodGhpcy5zdGF0ZS5lbmRHVUlEKX06JHt0aGlzLnN0YXRlLmVuZE9mZnNldH0pYDsK
KyAgICAgICAgfQorCisgICAgICAgIF9hbmNob3JEZXNjcmlwdGlvbkhUTUwoKSB7CisgICAgICAg
ICAgICByZXR1cm4gYCR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQodGhpcy5z
dGF0ZS5hbmNob3JHVUlEKX06JHt0aGlzLnN0YXRlLmFuY2hvck9mZnNldH1gOworICAgICAgICB9
CisKKyAgICAgICAgX2ZvY3VzRGVzY3JpcHRpb25IVE1MKCkgeworICAgICAgICAgICAgcmV0dXJu
IGAke3RoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlEKHRoaXMuc3RhdGUuZm9jdXNH
VUlEKX06JHt0aGlzLnN0YXRlLmZvY3VzT2Zmc2V0fWA7CisgICAgICAgIH0KKworICAgICAgICBk
ZXRhaWxzRWxlbWVudCgpIHsKKyAgICAgICAgICAgIGxldCBodG1sID0KKyAgICAgICAgICAgIGA8
ZGV0YWlscz4KKyAgICAgICAgICAgICAgICA8c3VtbWFyeT5TZWxlY3Rpb24gY2hhbmdlZDwvc3Vt
bWFyeT4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgIDxsaT5yYW5n
ZTogJHt0aGlzLl9yYW5nZURlc2NyaXB0aW9uSFRNTCgpfTwvbGk+CisgICAgICAgICAgICAgICAg
ICAgIDxsaT5hbmNob3I6ICR7dGhpcy5fYW5jaG9yRGVzY3JpcHRpb25IVE1MKCl9PC9saT4KKyAg
ICAgICAgICAgICAgICAgICAgPGxpPmZvY3VzOiAke3RoaXMuX2ZvY3VzRGVzY3JpcHRpb25IVE1M
KCl9PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kZXRhaWxzPmA7
CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudEZyb21NYXJrZG93bihodG1sKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGNsYXNzIElucHV0RXZlbnRVcGRhdGUgZXh0ZW5kcyBET01VcGRhdGUg
eworICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCB1cGRhdGVzLCBpbnB1dFR5cGUsIGRhdGEs
IHRpbWVTdGFtcCkgeworICAgICAgICAgICAgc3VwZXIobm9kZU1hcCk7CisgICAgICAgICAgICB0
aGlzLnVwZGF0ZXMgPSB1cGRhdGVzOworICAgICAgICAgICAgdGhpcy5pbnB1dFR5cGUgPSBpbnB1
dFR5cGU7CisgICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworICAgICAgICAgICAgdGhpcy50
aW1lU3RhbXAgPSB0aW1lU3RhbXA7CisgICAgICAgIH0KKworICAgICAgICBfb2JmdXNjYXRlZERh
dGEoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFR5cGUuaW5kZXhPZigiaW5zZXJ0
IikgPT0gMCA/IE9iZnVzY2F0b3Iuc2hhcmVkKCkuYXBwbHlUb1RleHQodGhpcy5kYXRhKSA6IHRo
aXMuZGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgZm9y
IChsZXQgdXBkYXRlIG9mIHRoaXMudXBkYXRlcykKKyAgICAgICAgICAgICAgICB1cGRhdGUuYXBw
bHkoKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuYXBwbHkoKSB7CisgICAgICAgICAgICBmb3Ig
KGxldCBpbmRleCA9IHRoaXMudXBkYXRlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0t
KQorICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlc1tpbmRleF0udW5hcHBseSgpOworICAgICAg
ICB9CisKKyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6ICJJbnB1dEV2ZW50VXBkYXRlIiwKKyAgICAgICAgICAgICAgICBpbnB1
dFR5cGU6IHRoaXMuaW5wdXRUeXBlLAorICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuX29iZnVz
Y2F0ZWREYXRhKCksCisgICAgICAgICAgICAgICAgdGltZVN0YW1wOiB0aGlzLnRpbWVTdGFtcCwK
KyAgICAgICAgICAgICAgICB1cGRhdGVzOiB0aGlzLnVwZGF0ZXMubWFwKHVwZGF0ZSA9PiB1cGRh
dGUudG9PYmplY3QoKSkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBzdGF0
aWMgZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7CisgICAgICAgICAgICBsZXQgdXBkYXRlcyA9
IGpzb24udXBkYXRlcy5tYXAodXBkYXRlID0+IERPTVVwZGF0ZS5vZlR5cGUodXBkYXRlLnR5cGUp
LmZyb21PYmplY3QodXBkYXRlLCBub2RlTWFwKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IElu
cHV0RXZlbnRVcGRhdGUobm9kZU1hcCwgdXBkYXRlcywganNvbi5pbnB1dFR5cGUsIGpzb24uZGF0
YSwganNvbi50aW1lU3RhbXApOworICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQo
KSB7CisgICAgICAgICAgICBsZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAg
ICAgICAgICAgICAgPHN1bW1hcnk+SW5wdXQgKCR7dGhpcy5pbnB1dFR5cGV9KTwvc3VtbWFyeT4K
KyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgIDxsaT50aW1lOiAke3Ro
aXMudGltZVN0YW1wfTwvbGk+CisgICAgICAgICAgICAgICAgICAgIDxsaT5kYXRhOiAkeyF0aGlz
LmRhdGEgPyAiKG51bGwpIiA6ICInIiArIHRoaXMuZGF0YSArICInIn08L2xpPgorICAgICAgICAg
ICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RldGFpbHM+YDsKKyAgICAgICAgICAgIGxldCB0
b3BMZXZlbERldGFpbHMgPSBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwpOworICAgICAgICAgICAg
Zm9yIChsZXQgdXBkYXRlIG9mIHRoaXMudXBkYXRlcykKKyAgICAgICAgICAgICAgICB0b3BMZXZl
bERldGFpbHMuY2hpbGRyZW5bdG9wTGV2ZWxEZXRhaWxzLmNoaWxkRWxlbWVudENvdW50IC0gMV0u
YXBwZW5kQ2hpbGQodXBkYXRlLmRldGFpbHNFbGVtZW50KCkpOworICAgICAgICAgICAgcmV0dXJu
IHRvcExldmVsRGV0YWlsczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdpbmRvdy5FZGl0aW5n
SGlzdG9yeSA9IHsKKyAgICAgICAgR2xvYmFsTm9kZU1hcCwKKyAgICAgICAgU2VsZWN0aW9uU3Rh
dGUsCisgICAgICAgIERPTVVwZGF0ZSwKKyAgICAgICAgQ2hpbGRMaXN0VXBkYXRlLAorICAgICAg
ICBDaGFyYWN0ZXJEYXRhVXBkYXRlLAorICAgICAgICBBdHRyaWJ1dGVVcGRhdGUsCisgICAgICAg
IFNlbGVjdGlvblVwZGF0ZSwKKyAgICAgICAgSW5wdXRFdmVudFVwZGF0ZSwKKyAgICAgICAgT2Jm
dXNjYXRvcgorICAgIH07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNiNTY5OWY0YjhlNTBkNTBmYTIxOTY0OGQwYmJi
ZmVkMDVhYmE3NTYuLmYzNDBlNjE5MDFhZjExYzAxZmUxNTkwMGI0ZWJmNWVlOTY4MjVkNDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTIyMTgsOCArMjIxOCw2IEBACiAJCTUxQzgxQjhBMEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBE
aXJlY3RvcnlQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxQzgxQjg4MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuaCAq
LzsgfTsKIAkJNTFDQkZDOTkwRDEwRTQ4MzAwMkRCRjUxIC8qIENhY2hlZEZyYW1lUGxhdGZvcm1E
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUNC
RkM5ODBEMTBFNDgzMDAyREJGNTEgLyogQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUQwQzUxNjBEQUE5
MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDBDNTE1MERBQTkwQjcwMDNCMzgzMSAvKiBKU1N0
b3JhZ2VDdXN0b20uY3BwICovOyB9OwotCQk1MUQzOTQ3ODFERjI0OTIyMDBBQkU4NzUgLyogRHVt
cEVkaXRpbmdIaXN0b3J5LmpzIGluIENvcHkgSW50ZXJuYWwgU2NyaXB0cyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQzOTQ3NDFERjI0NTQwMDBBQkU4NzUgLyogRHVtcEVk
aXRpbmdIaXN0b3J5LmpzICovOyB9OwotCQk1MUQzOTQ3OTFERjI0OTIyMDBBQkU4NzUgLyogRWRp
dGluZ0hpc3RvcnlVdGlsLmpzIGluIENvcHkgSW50ZXJuYWwgU2NyaXB0cyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQzOTQ3NTFERjI0NTQwMDBBQkU4NzUgLyogRWRpdGlu
Z0hpc3RvcnlVdGlsLmpzICovOyB9OwogCQk1MUQ3MjM2QzFCQjYxNzQ5MDA0NzhDQTMgLyogSURC
UmVzdWx0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUQ3MjM2QTFCQjYwQkZFMDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5jcHAgKi87IH07
CiAJCTUxRDcyMzZEMUJCNjE3NDkwMDQ3OENBMyAvKiBJREJSZXN1bHREYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MjM2QjFCQjYwQkZFMDA0
NzhDQTMgLyogSURCUmVzdWx0RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxRDdFRkVBMUJERThGOEMwMEU5M0UxMCAvKiBUaHJlYWRTYWZl
RGF0YUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTExRkFFQTkxQkRDOTg5QTAwQjRBRkU0IC8qIFRocmVhZFNhZmVEYXRhQnVmZmVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTY0OTIsNiAr
NjQ5MCw4IEBACiAJCUY0Nzg3NTU1MTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0Nzg3NTUzMTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbSAq
LzsgfTsKIAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVF
M0IxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0N0E1RTNGMTk1QjhFNDgw
MDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVFM0ExOTVCOEM4QTAwNDgzMTAwIC8qIFN0
eWxlU2Nyb2xsU25hcFBvaW50cy5jcHAgKi87IH07CisJCUY0QkZCOTg1MUUxRERGOUIwMDg2MkMy
NCAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgaW4gQ29weSBTY3JpcHRzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0ODM4OTgzMUUxRERGMkIwMDc2QjdFQSAvKiBEdW1wRWRp
dGluZ0hpc3RvcnkuanMgKi87IH07CisJCUY0QkZCOTg2MUUxRERGOUIwMDg2MkMyNCAvKiBFZGl0
aW5nSGlzdG9yeVV0aWwuanMgaW4gQ29weSBTY3JpcHRzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0ODM4OTg0MUUxRERGMkIwMDc2QjdFQSAvKiBFZGl0aW5nSGlzdG9yeVV0
aWwuanMgKi87IH07CiAJCUY1MDY2NEY3MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTA2
NjRGNTE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuY3BwICovOyB9OwogCQlGNTA2
NjRGODE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MDY2NEY2MTU3RjUyREMwMEFDMjI2RiAv
KiBGb3JtQ29udHJvbGxlci5oICovOyB9OwogCQlGNTEzQTNFQTE1RkY0ODQxMDAxNTI2REIgLyog
VmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MTNBM0U5MTVGRjQ4NDEwMDE1MjZEQiAvKiBWYWxpZGF0aW9uTWVz
c2FnZUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC02OTUxLDI0ICs2OTUxLDE0IEBACiAJCQlkc3RQYXRoID0gUHJpdmF0ZUhlYWRlcnMv
U2NyaXB0czsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSAxOwogCQkJZmlsZXMgPSAoCisJCQkJRjRC
RkI5ODUxRTFEREY5QjAwODYyQzI0IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyBpbiBDb3B5IFNj
cmlwdHMgKi8sCisJCQkJRjRCRkI5ODYxRTFEREY5QjAwODYyQzI0IC8qIEVkaXRpbmdIaXN0b3J5
VXRpbC5qcyBpbiBDb3B5IFNjcmlwdHMgKi8sCiAJCQkJMzcxN0Q3RTgxN0VDQzU5MTAwM0MyNzZE
IC8qIGV4dHJhY3QtbG9jYWxpemFibGUtc3RyaW5ncy5wbCBpbiBDb3B5IFNjcmlwdHMgKi8sCiAJ
CQkJMzdENDU2RkQxQTlBNTBEODAwMzMzMEExIC8qIExvY2FsaXphYmxlU3RyaW5ncy5wbSBpbiBD
b3B5IFNjcmlwdHMgKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJDb3B5IFNjcmlwdHMiOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Ci0JCTUxRDM5NDc3MURG
MjQ4NjcwMEFCRTg3NSAvKiBDb3B5IEludGVybmFsIFNjcmlwdHMgKi8gPSB7Ci0JCQlpc2EgPSBQ
QlhDb3B5RmlsZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gODsKLQkJCWRzdFBh
dGggPSAiJChBUFBMRV9JTlRFUk5BTF9MSUJSQVJZX0RJUikvV2ViS2l0L0ludGVybmFsU2NyaXB0
cyI7Ci0JCQlkc3RTdWJmb2xkZXJTcGVjID0gMDsKLQkJCWZpbGVzID0gKAotCQkJCTUxRDM5NDc4
MURGMjQ5MjIwMEFCRTg3NSAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgaW4gQ29weSBJbnRlcm5h
bCBTY3JpcHRzICovLAotCQkJCTUxRDM5NDc5MURGMjQ5MjIwMEFCRTg3NSAvKiBFZGl0aW5nSGlz
dG9yeVV0aWwuanMgaW4gQ29weSBJbnRlcm5hbCBTY3JpcHRzICovLAotCQkJKTsKLQkJCW5hbWUg
PSAiQ29weSBJbnRlcm5hbCBTY3JpcHRzIjsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAxOwotCQl9OwogCQlDRDBEQkYwMDE0MjI3NjU3MDAyODAyNjMgLyogQ29weSBB
dWRpbyBSZXNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTk0MzIsOCArOTQyMiw2IEBACiAJ
CTUxQzgxQjg4MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZUUERpcmVjdG9yeVBhcnNlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUNCRkM5ODBEMTBFNDgzMDAyREJGNTEgLyogQ2FjaGVk
RnJhbWVQbGF0Zm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2Fj
aGVkRnJhbWVQbGF0Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFE
MEM1MTUwREFBOTBCNzAwM0IzODMxIC8qIEpTU3RvcmFnZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0b3JhZ2VDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1MUQzOTQ3NDFERjI0NTQwMDBBQkU4NzUgLyogRHVtcEVkaXRp
bmdIaXN0b3J5LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gRHVt
cEVkaXRpbmdIaXN0b3J5LmpzOyBwYXRoID0gSW50ZXJuYWxTY3JpcHRzL0R1bXBFZGl0aW5nSGlz
dG9yeS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFEMzk0NzUxREYyNDU0MDAw
QUJFODc1IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgbmFtZSA9IEVkaXRpbmdIaXN0b3J5VXRpbC5qczsgcGF0aCA9IEludGVybmFsU2Ny
aXB0cy9FZGl0aW5nSGlzdG9yeVV0aWwuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxRDcxOTZDMTgxMTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NV2luZG93SW5kZXhlZERh
dGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5NkQxODExMDZE
RjAwMTZEQzUxIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5NkUxODExMDZERjAwMTZEQzUxIC8qIERPTVdpbmRvd0lu
ZGV4ZWREYXRhYmFzZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRE9NV2luZG93SW5kZXhl
ZERhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTIxLDYgKzE0
NTA5LDggQEAKIAkJRjQ3ODc1NTMxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRv
clN0YXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xs
U25hcEFuaW1hdG9yU3RhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0E1
RTNBMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3QTVFM0IxOTVCOEM4QTAwNDgzMTAwIC8q
IFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RjQ4Mzg5ODMxRTFEREYyQjAwNzZCN0VBIC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IER1bXBFZGl0aW5nSGlzdG9yeS5qczsg
cGF0aCA9IFNjcmlwdHMvRHVtcEVkaXRpbmdIaXN0b3J5LmpzOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGNDgzODk4NDFFMURERjJCMDA3NkI3RUEgLyogRWRpdGluZ0hpc3RvcnlVdGls
LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gRWRpdGluZ0hpc3Rv
cnlVdGlsLmpzOyBwYXRoID0gU2NyaXB0cy9FZGl0aW5nSGlzdG9yeVV0aWwuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MDY2NEY1MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29u
dHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtQ29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MDY2NEY2MTU3RjUy
REMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGb3JtQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NTEzQTNFOTE1RkY0ODQxMDAxNTI2REIgLyogVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDI2LDcgKzE1NDE2LDYgQEAKIAkJCQky
RTQzNDYzMTBGNTQ2QTY4MDBCMEYxQkEgLyogd29ya2VycyAqLywKIAkJCQlFMUYwNDI0MzA5ODM5
Mzg5MDA2Njk0RUEgLyogeG1sICovLAogCQkJCTY1NjU4MEVDMDlEMTJCMjAwMDBFNjFENyAvKiBE
ZXJpdmVkIFNvdXJjZXMgKi8sCi0JCQkJNTFEMzk0NzMxREYyNDRCQTAwQUJFODc1IC8qIEludGVy
bmFsU2NyaXB0cyAqLywKIAkJCQkwODlDMTY2NUZFODQxMTU4QzAyQUFDMDcgLyogUmVzb3VyY2Vz
ICovLAogCQkJCTM3MTdEN0U0MTdFQ0MzNkMwMDNDMjc2RCAvKiBTY3JpcHRzICovLAogCQkJCTA4
NjdENjlBRkU4NDAyOEZDMDJBQUMwNyAvKiBGcmFtZXdvcmtzICovLApAQCAtMTY1MTMsNiArMTY1
MDIsNyBAQAogCQkzNzE3RDdFNDE3RUNDMzZDMDAzQzI3NkQgLyogU2NyaXB0cyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRjQ4Mzg5NzkxRTFERDIzQTAw
NzZCN0VBIC8qIEVkaXRpbmdIaXN0b3J5ICovLAogCQkJCTM3MTdEN0U1MTdFQ0MzQTYwMDNDMjc2
RCAvKiBleHRyYWN0LWxvY2FsaXphYmxlLXN0cmluZ3MucGwgKi8sCiAJCQkJMzdENDU2RkIxQTlB
NTBCNjAwMzMzMEExIC8qIExvY2FsaXphYmxlU3RyaW5ncy5wbSAqLywKIAkJCSk7CkBAIC0xNzM1
OSwxNSArMTczNDksNiBAQAogCQkJcGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CiAJCX07Ci0JCTUxRDM5NDczMURGMjQ0QkEwMEFCRTg3NSAvKiBJbnRlcm5hbFNjcmlwdHMg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTUxRDM5NDc0
MURGMjQ1NDAwMEFCRTg3NSAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgKi8sCi0JCQkJNTFEMzk0
NzUxREYyNDU0MDAwQUJFODc1IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyAqLywKLQkJCSk7Ci0J
CQluYW1lID0gSW50ZXJuYWxTY3JpcHRzOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJ
fTsKIAkJNTlCNTk3NzExMTA4NjU1NjAwNzE1OUU4IC8qIGpzYyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMzM0Nyw2ICsyMzMyOCwxNSBAQAogCQkJcGF0
aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUY0ODM4OTc5MUUx
REQyM0EwMDc2QjdFQSAvKiBFZGl0aW5nSGlzdG9yeSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3Vw
OworCQkJY2hpbGRyZW4gPSAoCisJCQkJRjQ4Mzg5ODMxRTFEREYyQjAwNzZCN0VBIC8qIER1bXBF
ZGl0aW5nSGlzdG9yeS5qcyAqLywKKwkJCQlGNDgzODk4NDFFMURERjJCMDA3NkI3RUEgLyogRWRp
dGluZ0hpc3RvcnlVdGlsLmpzICovLAorCQkJKTsKKwkJCW5hbWUgPSBFZGl0aW5nSGlzdG9yeTsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUY1MjNEMTg0MDJERTQyRTgwMTg2
MzVDQSAvKiBjc3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtMjg0NTcsNyArMjg0NDcsNiBAQAogCQkJCTM3QTFFQUEzMTQyNjk5QkMwMDg3RjQyNSAvKiBD
aGVjayBGb3IgSW5hcHByb3ByaWF0ZSBPYmplY3RpdmUtQyBDbGFzcyBOYW1lcyAqLywKIAkJCQk1
REY1MDg4NzExNkYzMDc3MDA1MjAyQUIgLyogQ2hlY2sgRm9yIEluYXBwcm9wcmlhdGUgRmlsZXMg
SW4gRnJhbWV3b3JrICovLAogCQkJCTcxRDZBQTM4MURBNEU2OTQwMEIyMzk2OSAvKiBDb3B5IG1v
ZGVybiBtZWRpYSBjb250cm9scyBjb2RlIGFuZCBhc3NldHMgKi8sCi0JCQkJNTFEMzk0NzcxREYy
NDg2NzAwQUJFODc1IC8qIENvcHkgSW50ZXJuYWwgU2NyaXB0cyAqLywKIAkJCSk7CiAJCQlidWls
ZFJ1bGVzID0gKAogCQkJKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBiYWVjNmJlZjhmYTE4NDA5YjFhMjYyYTg2OTYyMWU1MmU4MjE0Yzg0Li5m
NWVhY2I3MDIwOWMyZGRjYWY3NmNiZjQ4MjhjMGY5MzFmZmQ4Mzc4IDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTct
MDEtMDQgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBlZGl0aW5nIGhpc3Rvcnkgc2NyaXB0cyB0byBXZWJDb3JlIFByaXZhdGVIZWFkZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY3MDkKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5ODc2NjEyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSByZWZlcmVuY2VzIHRvIGVkaXRpbmcgc2Ny
aXB0IGZpbGVzIGluIFdlYkNvcmUgdGhhdCB3ZXJlIG1vdmVkLgorCisgICAgICAgICogRWRpdGlu
Z0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAx
Ni0xMi0yMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJB
c3NlbWJseTogU2lsZW5jZSB0aGUgb3V0cHV0IG9mIHRoZSBzcGVjLXRlc3RzCmRpZmYgLS1naXQg
YS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBkMjM0YmI4MzE5YThmYTNiMWNjMDllYmU0MThhMjgzZDJhYmU3
ZTY2Li40OTk2NWVmMjAxMzI4OTg2MGYxOTBiYTkzNWFmOTBlOTllYzJhMzUyIDEwMDY0NAotLS0g
YS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEyLDExICsxMiwxMSBAQAogCQk1MTZBREJFNjFERTE1NkJC
MDBFMkI5OEQgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE2QURCQjExREUxNTVCRDAwRTJCOThEIC8qIG1haW4ubSAqLzsgfTsKIAkJNTE2
QURCRjMxREUxNTdBRDAwRTJCOThEIC8qIFJld2luZEFuZFBsYXliYWNrVGVzdHMubSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkFEQkYyMURFMTU3QUQw
MEUyQjk4RCAvKiBSZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm0gKi87IH07CiAJCTUxN0ZEOTNDMURF
MThEQzkwMEE3MzY3MyAvKiBET01UZXN0aW5nVXRpbC5qcyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3RkQ5M0IxREUxOERDOTAwQTczNjczIC8qIERP
TVRlc3RpbmdVdGlsLmpzICovOyB9OwotCQk1MUQzOTQ4MDFERjI1NDFEMDBBQkU4NzUgLyogRHVt
cEVkaXRpbmdIaXN0b3J5LmpzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUQzOTQ3RTFERjI1NDFEMDBBQkU4NzUgLyogRHVtcEVkaXRpbmdIaXN0b3J5
LmpzICovOyB9OwotCQk1MUQzOTQ4MTFERjI1NDFEMDBBQkU4NzUgLyogRWRpdGluZ0hpc3RvcnlV
dGlsLmpzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUQzOTQ3RjFERjI1NDFEMDBBQkU4NzUgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzICovOyB9Owog
CQk1MUVDQzNFNzFERUUzM0NFMDBDQjI2N0UgLyogVGVzdFV0aWwubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkFEQkI1MURFMTU1QkQwMEUyQjk4RCAv
KiBUZXN0VXRpbC5tICovOyB9OwogCQk1MUVDQzNFOTFERUUzM0QyMDBDQjI2N0UgLyogV0tXZWJW
aWV3QWRkaXRpb25zLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTZBREJCNzFERTE1NUJEMDBFMkI5OEQgLyogV0tXZWJWaWV3QWRkaXRpb25zLm0gKi87
IH07CiAJCTUxRUNDM0VBMURFRTMzREQwMENCMjY3RSAvKiBUZXN0UnVubmVyLm0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBREJCMzFERTE1NUJEMDBF
MkI5OEQgLyogVGVzdFJ1bm5lci5tICovOyB9OworCQlGNEJGQjk4OTFFMURFODJEMDA4NjJDMjQg
LyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNEJGQjk4NzFFMURFODJEMDA4NjJDMjQgLyogRHVtcEVkaXRpbmdI
aXN0b3J5LmpzICovOyB9OworCQlGNEJGQjk4QTFFMURFODJEMDA4NjJDMjQgLyogRWRpdGluZ0hp
c3RvcnlVdGlsLmpzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNEJGQjk4ODFFMURFODJEMDA4NjJDMjQgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzICov
OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRh
aW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC00Nyw2ICs0Nyw4IEBACiAJCTUxN0ZEOTNCMURF
MThEQzkwMEE3MzY3MyAvKiBET01UZXN0aW5nVXRpbC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgbmFtZSA9IERPTVRlc3RpbmdVdGlsLmpzOyBwYXRoID0gRWRpdGluZ0hpc3Rv
cnkvUmVzb3VyY2VzL0RPTVRlc3RpbmdVdGlsLmpzOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7
IH07CiAJCTUxRDM5NDdFMURGMjU0MUQwMEFCRTg3NSAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBEdW1wRWRpdGluZ0hpc3Rv
cnkuanM7IHBhdGggPSAuLi8uLi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRHVtcEVk
aXRpbmdIaXN0b3J5LmpzOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTUxRDM5NDdG
MURGMjU0MUQwMEFCRTg3NSAvKiBFZGl0aW5nSGlzdG9yeVV0aWwuanMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBFZGl0aW5nSGlzdG9yeVV0aWwuanM7IHBhdGggPSAu
Li8uLi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGlsLmpz
OyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUY0QkZCOTg3MUUxREU4MkQwMDg2MkMy
NCAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBEdW1wRWRp
dGluZ0hpc3RvcnkuanM7IHBhdGggPSAuLi8uLi9Tb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0R1bXBF
ZGl0aW5nSGlzdG9yeS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRCRkI5ODgx
RTFERTgyRDAwODYyQzI0IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsg
bmFtZSA9IEVkaXRpbmdIaXN0b3J5VXRpbC5qczsgcGF0aCA9IC4uLy4uL1NvdXJjZS9XZWJDb3Jl
L1NjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGlsLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFt
ZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC03MCw2ICs3Miw4IEBACiAJCTUxMkQ3QThB
MURFMEZCRUYwMDI4RjBFNiA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJRjRCRkI5ODcxRTFERTgyRDAwODYyQzI0IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyAq
LywKKwkJCQlGNEJGQjk4ODFFMURFODJEMDA4NjJDMjQgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpz
ICovLAogCQkJCTUxMkQ3QTk1MURFMEZCRUYwMDI4RjBFNiAvKiBFZGl0aW5nSGlzdG9yeSAqLywK
IAkJCQk1MTZBREJGMTFERTE1N0FEMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnlUZXN0cyAqLywK
IAkJCQk1MTJEN0E5NDFERTBGQkVGMDAyOEYwRTYgLyogUHJvZHVjdHMgKi8sCkBAIC0yMDQsMTEg
KzIwOCwxMSBAQAogCQkJaXNhID0gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKLQkJCQk1MUQzOTQ4MDFERjI1NDFE
MDBBQkU4NzUgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzIGluIFJlc291cmNlcyAqLywKKwkJCQlG
NEJGQjk4OTFFMURFODJEMDA4NjJDMjQgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzIGluIFJlc291
cmNlcyAqLywKKwkJCQlGNEJGQjk4QTFFMURFODJEMDA4NjJDMjQgLyogRWRpdGluZ0hpc3RvcnlV
dGlsLmpzIGluIFJlc291cmNlcyAqLywKIAkJCQk1MTZBREJFMjFERTE1NkE5MDBFMkI5OEQgLyog
Q2FwdHVyZUhhcm5lc3MuaHRtbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJNTE3RkQ5M0MxREUxOERD
OTAwQTczNjczIC8qIERPTVRlc3RpbmdVdGlsLmpzIGluIFJlc291cmNlcyAqLywKIAkJCQk1MTZB
REJFNTFERTE1NkE5MDBFMkI5OEQgLyogUGxheWJhY2tIYXJuZXNzLmh0bWwgaW4gUmVzb3VyY2Vz
ICovLAotCQkJCTUxRDM5NDgxMURGMjU0MUQwMEFCRTg3NSAvKiBFZGl0aW5nSGlzdG9yeVV0aWwu
anMgaW4gUmVzb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>